ETH Price: $3,146.31 (-1.27%)

Contract

0xA167D071B26B6b9c333fdbfdF500Bb63E56A24de
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Pay055126238652021-06-13 3:57:511247 days ago1623556671IN
0xA167D071...3E56A24de
0 ETH0.000929296
Pay05584703702019-09-02 10:55:401896 days ago1567421740IN
0xA167D071...3E56A24de
0 ETH0.000730155
Pay05584702942019-09-02 10:39:011896 days ago1567420741IN
0xA167D071...3E56A24de
0 ETH0.001021767
Pay05584702672019-09-02 10:31:251896 days ago1567420285IN
0xA167D071...3E56A24de
0 ETH0.001168248
Pay05581284432019-07-11 6:49:361950 days ago1562827776IN
0xA167D071...3E56A24de
0 ETH0.000642534.4
Pay05581238812019-07-10 13:53:211950 days ago1562766801IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05579898062019-06-19 16:33:491971 days ago1560962029IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05579765292019-06-17 14:47:331973 days ago1560782853IN
0xA167D071...3E56A24de
0 ETH0.000584124
Pay05579764942019-06-17 14:41:461973 days ago1560782506IN
0xA167D071...3E56A24de
0 ETH0.000730155
Pay05579764632019-06-17 14:33:471973 days ago1560782027IN
0xA167D071...3E56A24de
0 ETH0.000934596.4
Pay05578787232019-06-02 7:11:431989 days ago1559459503IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05578471332019-05-28 9:06:561993 days ago1559034416IN
0xA167D071...3E56A24de
0 ETH0.001255868.6
Pay05577791122019-05-17 17:43:342004 days ago1558115014IN
0xA167D071...3E56A24de
0 ETH0.001314279
Pay05577671522019-05-15 20:45:262006 days ago1557953126IN
0xA167D071...3E56A24de
0 ETH0.00049653.4
Pay05577312362019-05-10 6:43:462012 days ago1557470626IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05576934702019-05-04 8:38:502018 days ago1556959130IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05576675812019-04-30 8:01:472022 days ago1556611307IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05575980932019-04-19 12:12:172032 days ago1555675937IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05575980072019-04-19 11:53:302032 days ago1555674810IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05575933252019-04-18 18:36:432033 days ago1555612603IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05575773322019-04-16 6:35:242036 days ago1555396524IN
0xA167D071...3E56A24de
0 ETH0.000730155
Pay05575702162019-04-15 3:58:152037 days ago1555300695IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05575645482019-04-14 6:45:392038 days ago1555224339IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05575599622019-04-13 13:47:272038 days ago1555163247IN
0xA167D071...3E56A24de
0 ETH0.000438093
Pay05575272662019-04-08 11:45:512043 days ago1554723951IN
0xA167D071...3E56A24de
0 ETH0.000438093
View all transactions

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Redenom

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.21;
// Redenom 2.9.0023
// The GNU General Public License v3
// © Musqogees Tech 2018, Redenom ™

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

// ----------------------------------------------------------------------------
// Basic ERC20 functions
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public view returns (uint);
    function balanceOf(address tokenOwner) public view returns (uint balance);
    function allowance(address tokenOwner, address spender) public view returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

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

// ----------------------------------------------------------------------------
// Owned contract manages Owner and Admin rights.
// Owner is Admin by default and can set other Admin
// ----------------------------------------------------------------------------
contract Owned {
    address public owner;
    address public newOwner;
    address internal admin;

    // modifier for Owner functions
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
    // modifier for Admin functions
    modifier onlyAdmin {
        require(msg.sender == admin || msg.sender == owner);
        _;
    }

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

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

    function setAdmin(address newAdmin) public onlyOwner{
        emit AdminChanged(admin, newAdmin);
        admin = newAdmin;
    }

    function showAdmin() public view onlyAdmin returns(address _admin){
        _admin = admin;
        return _admin;
    }

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

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

// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
// Borrowed from MiniMeToken
// ----------------------------------------------------------------------------
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}


contract Redenom is ERC20Interface, Owned{
    using SafeMath for uint;
    
    //ERC20 params
    string      public name; // ERC20 
    string      public symbol; // ERC20 
    uint        private _totalSupply; // ERC20
    uint        public decimals = 8; // ERC20 


    //Redenomination
    uint public round = 1; 
    uint public epoch = 1; 

    bool public frozen = false;

    //dec - sum of every exponent
    uint[8] private dec = [0,0,0,0,0,0,0,0];
    //mul - internal used array for splitting numbers according to round     
    uint[9] private mul = [1,10,100,1000,10000,100000,1000000,10000000,100000000];
    //weight - internal used array (weights of every digit)    
    uint[9] private weight = [uint(0),0,0,0,0,5,10,30,55];
    //current_toadd - After redenominate() it holds an amount to add on each digit.
    uint[9] private current_toadd = [uint(0),0,0,0,0,0,0,0,0];
   

    //Funds
    uint public total_fund; // All funds for 100 epochs 100 000 000 NOM
    uint public epoch_fund; // All funds for current epoch 100 000 NOM
    uint public team_fund; // Team Fund 10% of all funds paid
    uint public redenom_dao_fund; // DAO Fund 30% of all funds paid

    struct Account {
        uint balance;
        uint lastRound; // Last round dividens paid
        uint lastEpoch; // Last round dividens paid
        uint lastVotedBallotId; // Last ballot user voted
        uint bitmask;
            // 2 - got 0.55... for phone verif.
            // 4 - got 1 for KYC
            // 1024 - banned
            //
            // [2] [4] 8 16 32 64 128 256 512 [1024] ... - free to use
    }
    
    mapping(address=>Account) accounts; 
    mapping(address => mapping(address => uint)) allowed;

    //Redenom special events
    event Redenomination(uint indexed round);
    event Epoch(uint indexed epoch);
    event VotingOn(uint indexed _ballotId);
    event VotingOff(uint indexed winner, uint indexed ballot_id);
    event Vote(address indexed voter, uint indexed propId, uint voterBalance, uint indexed curentBallotId);

    function Redenom() public {
        symbol = "NOM";
        name = "Redenom";
        _totalSupply = 0; // total NOM's in the game 

        total_fund = 10000000 * 10**decimals; // 100 000 00.00000000, 1Mt
        epoch_fund = 100000 * 10**decimals; // 100 000.00000000, 100 Kt
        total_fund = total_fund.sub(epoch_fund); // Taking 100 Kt from total to epoch_fund

    }




    // New epoch can be started if:
    // - Current round is 9
    // - Curen epoch < 10
    function StartNewEpoch() public onlyAdmin returns(bool succ){
        require(frozen == false); 
        require(round == 9);
        require(epoch < 100);

        dec = [0,0,0,0,0,0,0,0];  
        round = 1;
        epoch++;

        epoch_fund = 100000 * 10**decimals; // 100 000.00000000, 100 Kt
        total_fund = total_fund.sub(epoch_fund); // Taking 100 Kt from total to epoch fund


        emit Epoch(epoch);
        return true;
    }




    ///////////////////////////////////////////B A L L O T////////////////////////////////////////////

    //Is voting active?
    bool public votingActive = false;
    uint public curentBallotId = 0;
    uint public curentWinner;

    // Voter requirements:
    modifier onlyVoter {
        require(votingActive == true);
        require(bitmask_check(msg.sender, 4) == true); //passed KYC
        require(bitmask_check(msg.sender, 1024) == false); // banned == false
        require((accounts[msg.sender].lastVotedBallotId < curentBallotId)); 
        _;
    }

    // This is a type for a single Project.
    struct Project {
        uint id;   // Project id
        uint votesWeight; // total weight
        bool active; //active status.
    }
    Project[] public projects;

    struct Winner {
        uint id;
        uint projId;
    }
    Winner[] public winners;


    function addWinner(uint projId) internal {
        winners.push(Winner({
            id: curentBallotId,
            projId: projId
        }));
    }
    function findWinner(uint _ballotId) public constant returns (uint winner){
        for (uint p = 0; p < winners.length; p++) {
            if (winners[p].id == _ballotId) {
                return winners[p].projId;
            }
        }
    }



    // Add prop. with id: _id
    function addProject(uint _id) public onlyAdmin {
        require(votingActive == true);
        projects.push(Project({
            id: _id,
            votesWeight: 0,
            active: true
        }));
    }

    // Turns project ON and OFF
    function swapProject(uint _id) public onlyAdmin {
        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id){
                if(projects[p].active == true){
                    projects[p].active = false;
                }else{
                    projects[p].active = true;
                }
            }
        }
    }

    // Returns proj. weight
    function projectWeight(uint _id) public constant returns(uint PW){
        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id){
                return projects[p].votesWeight;
            }
        }
    }

    // Returns proj. status
    function projectActive(uint _id) public constant returns(bool PA){
        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id){
                return projects[p].active;
            }
        }
    }

    // Vote for proj. using id: _id
    function vote(uint _id) public onlyVoter returns(bool success){

        updateAccount(msg.sender);
        require(frozen == false);

        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id && projects[p].active == true){
                projects[p].votesWeight += sqrt(accounts[msg.sender].balance);
                accounts[msg.sender].lastVotedBallotId = curentBallotId;
            }
        }
        assert(accounts[msg.sender].lastVotedBallotId == curentBallotId);
        emit Vote(msg.sender, _id, accounts[msg.sender].balance, curentBallotId);

        return true;
    }

    // Shows currently winning proj 
    function winningProject() public constant returns (uint _winningProject){
        uint winningVoteWeight = 0;
        for (uint p = 0; p < projects.length; p++) {
            if (projects[p].votesWeight > winningVoteWeight && projects[p].active == true) {
                winningVoteWeight = projects[p].votesWeight;
                _winningProject = projects[p].id;
            }
        }
    }

    // Activates voting
    // Clears projects
    function enableVoting() public onlyAdmin returns(uint ballotId){ 
        require(votingActive == false);
        require(frozen == false);

        curentBallotId++;
        votingActive = true;
        delete projects;


        emit VotingOn(curentBallotId);
        return curentBallotId;
    }

    // Deactivates voting
    function disableVoting() public onlyAdmin returns(uint winner){
        require(votingActive == true);
        require(frozen == false);
        votingActive = false;

        curentWinner = winningProject();
        addWinner(curentWinner);
        
        emit VotingOff(curentWinner, curentBallotId);
        return curentWinner;
    }


    // sqrt root func
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }

    ///////////////////////////////////////////B A L L O T////////////////////////////////////////////




    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    // NOM token emission functions
    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    // Pays 1.00000000 from epoch_fund to KYC-passed user
    // Uses payout(), bitmask_check(), bitmask_add()
    // adds 4 to bitmask
    function pay1(address to) public onlyAdmin returns(bool success){
        require(bitmask_check(to, 4) == false);
        uint new_amount = 100000000;
        payout(to,new_amount);
        bitmask_add(to, 4);
        return true;
    }

    // Pays .555666XX from epoch_fund to user approved phone;
    // Uses payout(), bitmask_check(), bitmask_add()
    // adds 2 to bitmask
    function pay055(address to) public onlyAdmin returns(bool success){
        require(bitmask_check(to, 2) == false);
        uint new_amount = 55566600 + (block.timestamp%100);       
        payout(to,new_amount);
        bitmask_add(to, 2);
        return true;
    }

    // Pays .555666XX from epoch_fund to KYC user in new epoch;
    // Uses payout(), bitmask_check(), bitmask_add()
    // adds 2 to bitmask
    function pay055loyal(address to) public onlyAdmin returns(bool success){
        require(epoch > 1);
        require(bitmask_check(to, 4) == true);
        uint new_amount = 55566600 + (block.timestamp%100);       
        payout(to,new_amount);
        return true;
    }

    // Pays random number from epoch_fund
    // Uses payout()
    function payCustom(address to, uint amount) public onlyOwner returns(bool success){
        payout(to,amount);
        return true;
    }

    // Pays [amount] of money to [to] account from epoch_fund
    // Counts amount +30% +10%
    // Updating _totalSupply
    // Pays to balance and 2 funds
    // Refreshes dec[]
    // Emits event
    function payout(address to, uint amount) private returns (bool success){
        require(to != address(0));
        require(amount>=current_mul());
        require(bitmask_check(to, 1024) == false); // banned == false
        require(frozen == false); 
        
        //Update account balance
        updateAccount(to);
        //fix amount
        uint fixedAmount = fix_amount(amount);

        renewDec( accounts[to].balance, accounts[to].balance.add(fixedAmount) );

        uint team_part = (fixedAmount/100)*16;
        uint dao_part = (fixedAmount/10)*6;
        uint total = fixedAmount.add(team_part).add(dao_part);

        epoch_fund = epoch_fund.sub(total);
        team_fund = team_fund.add(team_part);
        redenom_dao_fund = redenom_dao_fund.add(dao_part);
        accounts[to].balance = accounts[to].balance.add(fixedAmount);
        _totalSupply = _totalSupply.add(total);

        emit Transfer(address(0), to, fixedAmount);
        return true;
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////




    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    // Withdraw amount from team_fund to given address
    function withdraw_team_fund(address to, uint amount) public onlyOwner returns(bool success){
        require(amount <= team_fund);
        accounts[to].balance = accounts[to].balance.add(amount);
        team_fund = team_fund.sub(amount);
        return true;
    }
    // Withdraw amount from redenom_dao_fund to given address
    function withdraw_dao_fund(address to, uint amount) public onlyOwner returns(bool success){
        require(amount <= redenom_dao_fund);
        accounts[to].balance = accounts[to].balance.add(amount);
        redenom_dao_fund = redenom_dao_fund.sub(amount);
        return true;
    }

    function freeze_contract() public onlyOwner returns(bool success){
        require(frozen == false);
        frozen = true;
        return true;
    }
    function unfreeze_contract() public onlyOwner returns(bool success){
        require(frozen == true);
        frozen = false;
        return true;
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////


    // Run this on every change of user balance
    // Refreshes dec[] array
    // Takes initial and new ammount
    // while transaction must be called for each acc.
    function renewDec(uint initSum, uint newSum) internal returns(bool success){

        if(round < 9){
            uint tempInitSum = initSum; 
            uint tempNewSum = newSum; 
            uint cnt = 1;

            while( (tempNewSum > 0 || tempInitSum > 0) && cnt <= decimals ){

                uint lastInitSum = tempInitSum%10; // 0.0000000 (0)
                tempInitSum = tempInitSum/10; // (0.0000000) 0

                uint lastNewSum = tempNewSum%10; // 1.5556664 (5)
                tempNewSum = tempNewSum/10; // (1.5556664) 5

                if(cnt >= round){
                    if(lastNewSum >= lastInitSum){
                        // If new is bigger
                        dec[decimals-cnt] = dec[decimals-cnt].add(lastNewSum - lastInitSum);
                    }else{
                        // If new is smaller
                        dec[decimals-cnt] = dec[decimals-cnt].sub(lastInitSum - lastNewSum);
                    }
                }

                cnt = cnt+1;
            }
        }//if(round < 9){

        return true;
    }



    ////////////////////////////////////////// BITMASK /////////////////////////////////////////////////////
    // Adding bit to bitmask
    // checks if already set
    function bitmask_add(address user, uint _bit) internal returns(bool success){ //todo privat?
        require(bitmask_check(user, _bit) == false);
        accounts[user].bitmask = accounts[user].bitmask.add(_bit);
        return true;
    }
    // Removes bit from bitmask
    // checks if already set
    function bitmask_rm(address user, uint _bit) internal returns(bool success){
        require(bitmask_check(user, _bit) == true);
        accounts[user].bitmask = accounts[user].bitmask.sub(_bit);
        return true;
    }
    // Checks whether some bit is present in BM
    function bitmask_check(address user, uint _bit) public view returns (bool status){
        bool flag;
        accounts[user].bitmask & _bit == 0 ? flag = false : flag = true;
        return flag;
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    function ban_user(address user) public onlyAdmin returns(bool success){
        bitmask_add(user, 1024);
        return true;
    }
    function unban_user(address user) public onlyAdmin returns(bool success){
        bitmask_rm(user, 1024);
        return true;
    }
    function is_banned(address user) public view onlyAdmin returns (bool result){
        return bitmask_check(user, 1024);
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////



    //Redenominates 
    function redenominate() public onlyAdmin returns(uint current_round){
        require(frozen == false); 
        require(round<9); // Round must be < 9

        // Deleting funds rest from TS
        _totalSupply = _totalSupply.sub( team_fund%mul[round] ).sub( redenom_dao_fund%mul[round] ).sub( dec[8-round]*mul[round-1] );

        // Redenominating 3 vars: _totalSupply team_fund redenom_dao_fund
        _totalSupply = ( _totalSupply / mul[round] ) * mul[round];
        team_fund = ( team_fund / mul[round] ) * mul[round]; // Redenominates team_fund
        redenom_dao_fund = ( redenom_dao_fund / mul[round] ) * mul[round]; // Redenominates redenom_dao_fund

        if(round>1){
            // decimals burned in last round and not distributed
            uint superold = dec[(8-round)+1]; 

            // Returning them to epoch_fund
            epoch_fund = epoch_fund.add(superold * mul[round-2]);
            dec[(8-round)+1] = 0;
        }

        
        if(round<8){ // if round between 1 and 7 

            uint unclimed = dec[8-round]; // total sum of burned decimal
            //[23,32,43,34,34,54,34, ->46<- ]
            uint total_current = dec[8-1-round]; // total sum of last active decimal
            //[23,32,43,34,34,54, ->34<-, 46]

            // security check
            if(total_current==0){
                current_toadd = [0,0,0,0,0,0,0,0,0]; 
                round++;
                emit Redenomination(round);
                return round;
            }

            // Counting amounts to add on every digit
            uint[9] memory numbers  =[uint(1),2,3,4,5,6,7,8,9]; // 
            uint[9] memory ke9  =[uint(0),0,0,0,0,0,0,0,0]; // 
            uint[9] memory k2e9  =[uint(0),0,0,0,0,0,0,0,0]; // 

            uint k05summ = 0;

                for (uint k = 0; k < ke9.length; k++) {
                     
                    ke9[k] = numbers[k]*1e9/total_current;
                    if(k<5) k05summ += ke9[k];
                }             
                for (uint k2 = 5; k2 < k2e9.length; k2++) {
                    k2e9[k2] = uint(ke9[k2])+uint(k05summ)*uint(weight[k2])/uint(100);
                }
                for (uint n = 5; n < current_toadd.length; n++) {
                    current_toadd[n] = k2e9[n]*unclimed/10/1e9;
                }
                // current_toadd now contains all digits
                
        }else{
            if(round==8){
                // Returns last burned decimals to epoch_fund
                epoch_fund = epoch_fund.add(dec[0] * 10000000); //1e7
                dec[0] = 0;
            }
            
        }

        round++;
        emit Redenomination(round);
        return round;
    }


    function actual_balance(address user) public constant returns(uint _actual_balance){
        if(epoch > 1 && accounts[user].lastEpoch < epoch){
            return (accounts[user].balance/100000000)*100000000;
        }
        return (accounts[user].balance/current_mul())*current_mul();
    }
   
    // Refresh user acc
    // Pays dividends if any
    function updateAccount(address account) public returns(uint new_balance){
        require(frozen == false); 
        require(round<=9);
        require(bitmask_check(account, 1024) == false); // banned == false

        if(epoch > 1 && accounts[account].lastEpoch < epoch){
            uint entire = accounts[account].balance/100000000; //1.
            //uint diff_ = accounts[account].balance - entire*100000000;
            if((accounts[account].balance - entire*100000000) >0){
                emit Transfer(account, address(0), (accounts[account].balance - entire*100000000));
            }
            accounts[account].balance = entire*100000000;
            accounts[account].lastEpoch = epoch;
            accounts[account].lastRound = round;
            return accounts[account].balance;
        }

        if(round > accounts[account].lastRound){

            if(round >1 && round <=8){


                // Splits user bal by current multiplier
                uint tempDividedBalance = accounts[account].balance/current_mul();
                // [1.5556663] 4  (r2)
                uint newFixedBalance = tempDividedBalance*current_mul();
                // [1.55566630]  (r2)
                uint lastActiveDigit = tempDividedBalance%10;
                 // 1.555666 [3] 4  (r2)
                uint diff = accounts[account].balance - newFixedBalance;
                // 1.5556663 [4] (r2)

                if(diff > 0){
                    accounts[account].balance = newFixedBalance;
                    emit Transfer(account, address(0), diff);
                }

                uint toBalance = 0;
                if(lastActiveDigit>0 && current_toadd[lastActiveDigit-1]>0){
                    toBalance = current_toadd[lastActiveDigit-1] * current_mul();
                }


                if(toBalance > 0 && toBalance < dec[8-round+1]){ // Not enough

                    renewDec( accounts[account].balance, accounts[account].balance.add(toBalance) );
                    emit Transfer(address(0), account, toBalance);
                    // Refreshing dec arr
                    accounts[account].balance = accounts[account].balance.add(toBalance);
                    // Adding to ball
                    dec[8-round+1] = dec[8-round+1].sub(toBalance);
                    // Taking from burned decimal
                    _totalSupply = _totalSupply.add(toBalance);
                    // Add dividend to _totalSupply
                }

                accounts[account].lastRound = round;
                // Writting last round in wich user got dividends
                if(accounts[account].lastEpoch != epoch){
                    accounts[account].lastEpoch = epoch;
                }


                return accounts[account].balance;
                // returns new balance
            }else{
                if( round == 9){ //100000000 = 9 mul (mul8)

                    uint newBalance = fix_amount(accounts[account].balance);
                    uint _diff = accounts[account].balance.sub(newBalance);

                    if(_diff > 0){
                        renewDec( accounts[account].balance, newBalance );
                        accounts[account].balance = newBalance;
                        emit Transfer(account, address(0), _diff);
                    }

                    accounts[account].lastRound = round;
                    // Writting last round in wich user got dividends
                    if(accounts[account].lastEpoch != epoch){
                        accounts[account].lastEpoch = epoch;
                    }


                    return accounts[account].balance;
                    // returns new balance
                }
            }
        }
    }

    // Returns current multipl. based on round
    // Returns current multiplier based on round
    function current_mul() internal view returns(uint _current_mul){
        return mul[round-1];
    }
    // Removes burned values 123 -> 120  
    // Returns fixed
    function fix_amount(uint amount) public view returns(uint fixed_amount){
        return ( amount / current_mul() ) * current_mul();
    }
    // Returns rest
    function get_rest(uint amount) internal view returns(uint fixed_amount){
        return amount % current_mul();
    }



    // ------------------------------------------------------------------------
    // ERC20 totalSupply: 
    //-------------------------------------------------------------------------
    function totalSupply() public view returns (uint) {
        return _totalSupply;
    }
    // ------------------------------------------------------------------------
    // ERC20 balanceOf: Get the token balance for account `tokenOwner`
    // ------------------------------------------------------------------------
    function balanceOf(address tokenOwner) public constant returns (uint balance) {
        return accounts[tokenOwner].balance;
    }
    // ------------------------------------------------------------------------
    // ERC20 allowance:
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
        return allowed[tokenOwner][spender];
    }
    // ------------------------------------------------------------------------
    // ERC20 transfer:
    // Transfer the balance from token owner's account to `to` account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transfer(address to, uint tokens) public returns (bool success) {
        require(frozen == false); 
        require(to != address(0));
        require(bitmask_check(to, 1024) == false); // banned == false

        //Fixing amount, deleting burned decimals
        tokens = fix_amount(tokens);
        // Checking if greater then 0
        require(tokens>0);

        //Refreshing accs, payng dividends
        updateAccount(to);
        updateAccount(msg.sender);

        uint fromOldBal = accounts[msg.sender].balance;
        uint toOldBal = accounts[to].balance;

        accounts[msg.sender].balance = accounts[msg.sender].balance.sub(tokens);
        accounts[to].balance = accounts[to].balance.add(tokens);

        require(renewDec(fromOldBal, accounts[msg.sender].balance));
        require(renewDec(toOldBal, accounts[to].balance));

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


    // ------------------------------------------------------------------------
    // ERC20 approve:
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
    // recommends that there are no checks for the approval double-spend attack
    // as this should be implemented in user interfaces 
    // ------------------------------------------------------------------------
    function approve(address spender, uint tokens) public returns (bool success) {
        require(frozen == false); 
        require(bitmask_check(msg.sender, 1024) == false); // banned == false
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }
    // ------------------------------------------------------------------------
    // ERC20 transferFrom:
    // Transfer `tokens` from the `from` account to the `to` account
    // The calling account must already have sufficient tokens approve(...)-d
    // for spending from the `from` account and
    // - From account must have sufficient balance to transfer
    // - Spender must have sufficient allowance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transferFrom(address from, address to, uint tokens) public returns (bool success) {
        require(frozen == false); 
        require(bitmask_check(to, 1024) == false); // banned == false
        updateAccount(from);
        updateAccount(to);

        uint fromOldBal = accounts[from].balance;
        uint toOldBal = accounts[to].balance;

        accounts[from].balance = accounts[from].balance.sub(tokens);
        allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
        accounts[to].balance = accounts[to].balance.add(tokens);

        require(renewDec(fromOldBal, accounts[from].balance));
        require(renewDec(toOldBal, accounts[to].balance));

        emit Transfer(from, to, tokens);
        return true; 
    }

    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account. The `spender` contract function
    // `receiveApproval(...)` is then executed
    // ------------------------------------------------------------------------
    function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) {
        require(frozen == false); 
        require(bitmask_check(msg.sender, 1024) == false); // banned == false
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data);
        return true;
    }
    // ------------------------------------------------------------------------
    // Don't accept ETH https://github.com/ConsenSys/Ethereum-Development-Best-Practices/wiki/Fallback-functions-and-the-fundamental-limitations-of-using-send()-in-Ethereum-&-Solidity
    // ------------------------------------------------------------------------
    function () public payable {
        revert();
    } // OR function() payable { } to accept ETH 

    // ------------------------------------------------------------------------
    // Owner can transfer out any accidentally sent ERC20 tokens
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        require(frozen == false); 
        return ERC20Interface(tokenAddress).transfer(owner, tokens);
    }




} // © Musqogees Tech 2018, Redenom ™

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"vote","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableVoting","outputs":[{"name":"winner","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"frozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ballotId","type":"uint256"}],"name":"findWinner","outputs":[{"name":"winner","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"payCustom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"pay1","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"}],"name":"ban_user","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"projects","outputs":[{"name":"id","type":"uint256"},{"name":"votesWeight","type":"uint256"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"round","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epoch_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"pay055loyal","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"team_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"curentWinner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"updateAccount","outputs":[{"name":"new_balance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingActive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"freeze_contract","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"showAdmin","outputs":[{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"redenom_dao_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"addProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"StartNewEpoch","outputs":[{"name":"succ","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"pay055","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw_team_fund","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"}],"name":"fix_amount","outputs":[{"name":"fixed_amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epoch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winningProject","outputs":[{"name":"_winningProject","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"_bit","type":"uint256"}],"name":"bitmask_check","outputs":[{"name":"status","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw_dao_fund","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"winners","outputs":[{"name":"id","type":"uint256"},{"name":"projId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"}],"name":"unban_user","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"is_banned","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redenominate","outputs":[{"name":"current_round","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unfreeze_contract","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"projectActive","outputs":[{"name":"PA","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"actual_balance","outputs":[{"name":"_actual_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"swapProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"curentBallotId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableVoting","outputs":[{"name":"ballotId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"projectWeight","outputs":[{"name":"PW","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"round","type":"uint256"}],"name":"Redenomination","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"epoch","type":"uint256"}],"name":"Epoch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_ballotId","type":"uint256"}],"name":"VotingOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"winner","type":"uint256"},{"indexed":true,"name":"ballot_id","type":"uint256"}],"name":"VotingOff","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"voter","type":"address"},{"indexed":true,"name":"propId","type":"uint256"},{"indexed":false,"name":"voterBalance","type":"uint256"},{"indexed":true,"name":"curentBallotId","type":"uint256"}],"name":"Vote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

600860068190556001600781905581556009805460ff191690556101806040526000608081815260a082905260c082905260e0829052610100829052610120829052610140829052610160919091526200005d91600a9190620002a6565b50604080516101208101825260018152600a60208201526064918101919091526103e860608201526127106080820152620186a060a0820152620f424060c08201526298968060e08201526305f5e100610100820152620000c3906012906009620002ee565b5061012060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160058152602001600a8152602001601e81526020016037815250601b9060096200012092919062000327565b50610120604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525060249060096200017d92919062000327565b506033805460ff1916905560006034553480156200019a57600080fd5b506000805433600160a060020a031991821681179092556002805490911690911790556040805180820190915260038082527f4e4f4d00000000000000000000000000000000000000000000000000000000006020909201918252620002039160049162000358565b506040805180820190915260078082527f526564656e6f6d0000000000000000000000000000000000000000000000000060209092019182526200024a9160039162000358565b506000600555600654600a0a629896808102602d819055620186a0909102602e81905562000287919064010000000062000290810262002d251704565b602d55620003ea565b600082821115620002a057600080fd5b50900390565b8260088101928215620002dc579160200282015b82811115620002dc578251829060ff16905591602001919060010190620002ba565b50620002ea929150620003ca565b5090565b8260098101928215620002dc579160200282015b82811115620002dc578251829063ffffffff1690559160200191906001019062000302565b8260098101928215620002dc579160200282015b82811115620002dc5782518255916020019190600101906200033b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200039b57805160ff1916838001178555620002dc565b82800160010185558215620002dc5791820182811115620002dc5782518255916020019190600101906200033b565b620003e791905b80821115620002ea5760008155600101620003d1565b90565b612fd980620003fa6000396000f3006080604052600436106102925763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630121b93f811461029757806304cd1819146102c3578063054f7d9c146102ea57806305e49d1d146102ff57806306ec62721461031757806306fdde031461033b57806307ba217c146103c5578063095ea7b3146103e65780630fccf22e1461040a578063107046bd1461042b578063146ca5311461046357806318160ddd146104785780631a7b11f51461048d5780631d2af28b146104a257806323b872dd146104c3578063251b5f8e146104ed57806325a52d9d146105025780632ce3d44014610517578063313ce56714610538578063408e27271461054d57806341c41923146105625780634f0e86561461057757806351651003146105a857806357183698146105bd5780636584ceb0146105d7578063704b6c02146105ec57806370a082311461060d57806379ba50971461062e5780638c90b2ea146106435780638da5cb5b146106645780638f46b586146106795780638f87932c1461069d578063900cf0cf146106b5578063946bf4d7146106ca57806395d89b41146106df5780639cba60a7146106f4578063a17b229d14610718578063a24e20de1461072d578063a2fb117514610751578063a7e1b51614610782578063a9059cbb146107a3578063b3adc716146107c7578063c091e45a146107e8578063c450a25f146107fd578063cae9ca5114610812578063cf504d481461087b578063d4ee1d9014610893578063dc39d06d146108a8578063dd62ed3e146108cc578063de78ed85146108f3578063dfa0ca1414610914578063e4eacd701461092c578063eb4439fb14610941578063f2fde38b14610956578063f37e741e14610977575b600080fd5b3480156102a357600080fd5b506102af60043561098f565b604080519115158252519081900360200190f35b3480156102cf57600080fd5b506102d8610b49565b60408051918252519081900360200190f35b3480156102f657600080fd5b506102af610bf5565b34801561030b57600080fd5b506102d8600435610bfe565b34801561032357600080fd5b506102af600160a060020a0360043516602435610c63565b34801561034757600080fd5b50610350610c91565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038a578181015183820152602001610372565b50505050905090810190601f1680156103b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d157600080fd5b506102af600160a060020a0360043516610d1f565b3480156103f257600080fd5b506102af600160a060020a0360043516602435610d8d565b34801561041657600080fd5b506102af600160a060020a0360043516610e1d565b34801561043757600080fd5b50610443600435610e65565b604080519384526020840192909252151582820152519081900360600190f35b34801561046f57600080fd5b506102d8610e99565b34801561048457600080fd5b506102d8610e9f565b34801561049957600080fd5b506102d8610ea5565b3480156104ae57600080fd5b506102af600160a060020a0360043516610eab565b3480156104cf57600080fd5b506102af600160a060020a0360043581169060243516604435610f1b565b3480156104f957600080fd5b506102d86110c4565b34801561050e57600080fd5b506102d86110ca565b34801561052357600080fd5b506102d8600160a060020a03600435166110d0565b34801561054457600080fd5b506102d86115fa565b34801561055957600080fd5b506102af611600565b34801561056e57600080fd5b506102af611609565b34801561058357600080fd5b5061058c611645565b60408051600160a060020a039092168252519081900360200190f35b3480156105b457600080fd5b506102d8611686565b3480156105c957600080fd5b506105d560043561168c565b005b3480156105e357600080fd5b506102af611781565b3480156105f857600080fd5b506105d5600160a060020a0360043516611891565b34801561061957600080fd5b506102d8600160a060020a0360043516611911565b34801561063a57600080fd5b506105d561192c565b34801561064f57600080fd5b506102af600160a060020a03600435166119b4565b34801561067057600080fd5b5061058c611a1d565b34801561068557600080fd5b506102af600160a060020a0360043516602435611a2c565b3480156106a957600080fd5b506102d8600435611ab4565b3480156106c157600080fd5b506102d8611ad8565b3480156106d657600080fd5b506102d8611ade565b3480156106eb57600080fd5b50610350611b9a565b34801561070057600080fd5b506102af600160a060020a0360043516602435611bf5565b34801561072457600080fd5b506102d8611c30565b34801561073957600080fd5b506102af600160a060020a0360043516602435611c36565b34801561075d57600080fd5b50610769600435611cbe565b6040805192835260208301919091528051918290030190f35b34801561078e57600080fd5b506102af600160a060020a0360043516611cea565b3480156107af57600080fd5b506102af600160a060020a0360043516602435611d27565b3480156107d357600080fd5b506102af600160a060020a0360043516611e9f565b3480156107f457600080fd5b506102d8611edc565b34801561080957600080fd5b506102af61243e565b34801561081e57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102af948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061247a9650505050505050565b34801561088757600080fd5b506102af600435612605565b34801561089f57600080fd5b5061058c61266f565b3480156108b457600080fd5b506102af600160a060020a036004351660243561267e565b3480156108d857600080fd5b506102d8600160a060020a0360043581169060243516612749565b3480156108ff57600080fd5b506102d8600160a060020a0360043516612774565b34801561092057600080fd5b506105d5600435612808565b34801561093857600080fd5b506102d8612916565b34801561094d57600080fd5b506102d861291c565b34801561096257600080fd5b506105d5600160a060020a03600435166129c5565b34801561098357600080fd5b506102d8600435612a0b565b603354600090819060ff1615156001146109a857600080fd5b6109b3336004611bf5565b15156001146109c157600080fd5b6109cd33610400611bf5565b156109d757600080fd5b60345433600090815260316020526040902060030154106109f757600080fd5b610a00336110d0565b5060095460ff1615610a1157600080fd5b5060005b603654811015610ad75782603682815481101515610a2f57fe5b906000526020600020906003020160000154148015610a7457506036805482908110610a5757fe5b600091825260209091206002600390920201015460ff1615156001145b15610acf5733600090815260316020526040902054610a9290612a70565b6036805483908110610aa057fe5b600091825260208083206003928302016001018054949094019093556034543383526031909352604090912001555b600101610a15565b6034543360009081526031602052604090206003015414610af457fe5b6034543360008181526031602090815260409182902054825190815291518793927f6c7eb2743ec28489909706ea440d909129004996be657d36c6e9add778546abf92908290030190a4600191505b50919050565b600254600090600160a060020a0316331480610b6f5750600054600160a060020a031633145b1515610b7a57600080fd5b60335460ff161515600114610b8e57600080fd5b60095460ff1615610b9e57600080fd5b6033805460ff19169055610bb0611ade565b6035819055610bbe90612aa5565b6034546035546040517f857b4631e7ebad75ee4937e2bfb5ca31eb4a27140ec7aac09984ef81a326776b90600090a3506035545b90565b60095460ff1681565b6000805b603754811015610b435782603782815481101515610c1c57fe5b9060005260206000209060020201600001541415610c5b576037805482908110610c4257fe5b9060005260206000209060020201600101549150610b43565b600101610c02565b60008054600160a060020a03163314610c7b57600080fd5b610c858383612b20565b50600190505b92915050565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b505050505081565b6002546000908190600160a060020a0316331480610d475750600054600160a060020a031633145b1515610d5257600080fd5b610d5d836004611bf5565b15610d6757600080fd5b506305f5e100610d778382612b20565b50610d83836004612cbe565b5060019392505050565b60095460009060ff1615610da057600080fd5b610dac33610400611bf5565b15610db657600080fd5b336000818152603260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600254600090600160a060020a0316331480610e435750600054600160a060020a031633145b1515610e4e57600080fd5b610e5a82610400612cbe565b50600190505b919050565b6036805482908110610e7357fe5b600091825260209091206003909102018054600182015460029092015490925060ff1683565b60075481565b60055490565b602e5481565b6002546000908190600160a060020a0316331480610ed35750600054600160a060020a031633145b1515610ede57600080fd5b600854600110610eed57600080fd5b610ef8836004611bf5565b1515600114610f0657600080fd5b5063034fe1086064420601610d838382612b20565b6009546000908190819060ff1615610f3257600080fd5b610f3e85610400611bf5565b15610f4857600080fd5b610f51866110d0565b50610f5b856110d0565b505050600160a060020a03808516600081815260316020526040808220549387168252812054919052610f94828563ffffffff612d2516565b600160a060020a0387166000908152603160209081526040808320939093556032815282822033835290522054610fd1908563ffffffff612d2516565b600160a060020a038088166000908152603260209081526040808320338452825280832094909455918816815260319091522054611015908563ffffffff612d3a16565b600160a060020a038087166000908152603160205260408082209390935590881681522054611045908390612d4a565b151561105057600080fd5b600160a060020a038516600090815260316020526040902054611074908290612d4a565b151561107f57600080fd5b84600160a060020a031686600160a060020a0316600080516020612f8e833981519152866040518082815260200191505060405180910390a350600195945050505050565b602f5481565b60355481565b6009546000908190819081908190819081908190819060ff16156110f357600080fd5b6007546009101561110357600080fd5b61110f8a610400611bf5565b1561111957600080fd5b60016008541180156111475750600854600160a060020a038b16600090815260316020526040902060020154105b156111ff57600160a060020a038a166000908152603160205260408120546305f5e1008082049a508a02900311156111c257600160a060020a038a1660008181526031602090815260408083205481516305f5e1008e0290910381529051929392600080516020612f8e833981519152929181900390910190a35b600160a060020a038a1660009081526031602052604090206305f5e1008902808255600854600283015560075460019092019190915598506115ed565b600160a060020a038a1660009081526031602052604090206001015460075411156115ed5760016007541180156112395750600860075411155b156114cc57611246612e2b565b600160a060020a038b1660009081526031602052604090205481151561126857fe5b049650611273612e2b565b600160a060020a038b166000908152603160205260408120549189029750600a890696509087900394508411156112e657600160a060020a038a1660008181526031602090815260408083208a905580518881529051929392600080516020612f8e833981519152929181900390910190a35b6000925060008511801561130c57506000602460001987016009811061130857fe5b0154115b1561133057611319612e2b565b602460001987016009811061132a57fe5b01540292505b6000831180156113575750600a60075460080360010160088110151561135257fe5b015483105b1561145b57600160a060020a038a1660009081526031602052604090205461138e90611389818663ffffffff612d3a16565b612d4a565b50604080518481529051600160a060020a038c1691600091600080516020612f8e8339815191529181900360200190a3600160a060020a038a166000908152603160205260409020546113e7908463ffffffff612d3a16565b600160a060020a038b1660009081526031602052604090205560075461142b908490600a90600160089182030190811061141d57fe5b01549063ffffffff612d2516565b600a60075460080360010160088110151561144257fe5b0155600554611457908463ffffffff612d3a16565b6005555b600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b166000908152603160205260409020600201555b600160a060020a038a1660009081526031602052604090205498506115ed565b600754600914156115ed57600160a060020a038a166000908152603160205260409020546114f990611ab4565b600160a060020a038b16600090815260316020526040902054909250611525908363ffffffff612d2516565b9050600081111561145b57600160a060020a038a166000908152603160205260409020546115539083612d4a565b50600160a060020a038a16600081815260316020908152604080832086905580518581529051929392600080516020612f8e833981519152929181900390910190a3600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b16600090815260316020526040902060028101919091555498505b5050505050505050919050565b60065481565b60335460ff1681565b60008054600160a060020a0316331461162157600080fd5b60095460ff161561163157600080fd5b506009805460ff1916600190811790915590565b600254600090600160a060020a031633148061166b5750600054600160a060020a031633145b151561167657600080fd5b50600254600160a060020a031690565b60305481565b600254600160a060020a03163314806116af5750600054600160a060020a031633145b15156116ba57600080fd5b60335460ff1615156001146116ce57600080fd5b60408051606081018252918252600060208301818152600192840183815260368054948501815590925292517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b860039093029283015591517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b982015590517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81ba909101805460ff1916911515919091179055565b600254600090600160a060020a03163314806117a75750600054600160a060020a031633145b15156117b257600080fd5b60095460ff16156117c257600080fd5b6007546009146117d157600080fd5b6008546064116117e057600080fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915261182f90600a906008612e8e565b5060016007819055600880549091019055600654600a0a620186a002602e819055602d5461185c91612d25565b602d556008546040517fc1d4931e10652da8ab23604510531810d2eebfcd33a81ba4946d702ce8057b6490600090a250600190565b600054600160a060020a031633146118a857600080fd5b600254604051600160a060020a038084169216907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526031602052604090205490565b600154600160a060020a0316331461194357600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6002546000908190600160a060020a03163314806119dc5750600054600160a060020a031633145b15156119e757600080fd5b6119f2836002611bf5565b156119fc57600080fd5b5063034fe1086064420601611a118382612b20565b50610d83836002612cbe565b600054600160a060020a031681565b60008054600160a060020a03163314611a4457600080fd5b602f54821115611a5357600080fd5b600160a060020a038316600090815260316020526040902054611a7c908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055602f54611aa8908363ffffffff612d2516565b602f5550600192915050565b6000611abe612e2b565b611ac6612e2b565b83811515611ad057fe5b040292915050565b60085481565b600080805b603654811015611b955781603682815481101515611afd57fe5b906000526020600020906003020160010154118015611b4257506036805482908110611b2557fe5b600091825260209091206002600390920201015460ff1615156001145b15611b8d576036805482908110611b5557fe5b9060005260206000209060030201600101549150603681815481101515611b7857fe5b90600052602060002090600302016000015492505b600101611ae3565b505090565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b600160a060020a0382166000908152603160205260408120600401548190831615611c235750600180611c28565b506000805b509392505050565b602d5481565b60008054600160a060020a03163314611c4e57600080fd5b603054821115611c5d57600080fd5b600160a060020a038316600090815260316020526040902054611c86908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055603054611cb2908363ffffffff612d2516565b60305550600192915050565b6037805482908110611ccc57fe5b60009182526020909120600290910201805460019091015490915082565b600254600090600160a060020a0316331480611d105750600054600160a060020a031633145b1515611d1b57600080fd5b610e5a82610400612e48565b6009546000908190819060ff1615611d3e57600080fd5b600160a060020a0385161515611d5357600080fd5b611d5f85610400611bf5565b15611d6957600080fd5b611d7284611ab4565b935060008411611d8157600080fd5b611d8a856110d0565b50611d94336110d0565b50503360008181526031602052604080822054600160a060020a038816835290822054929091529150611dcd828563ffffffff612d2516565b3360009081526031602052604080822092909255600160a060020a03871681522054611dff908563ffffffff612d3a16565b600160a060020a038616600090815260316020526040808220929092553381522054611e2c908390612d4a565b1515611e3757600080fd5b600160a060020a038516600090815260316020526040902054611e5b908290612d4a565b1515611e6657600080fd5b604080518581529051600160a060020a038716913391600080516020612f8e8339815191529181900360200190a3506001949350505050565b600254600090600160a060020a0316331480611ec55750600054600160a060020a031633145b1515611ed057600080fd5b610c8b82610400611bf5565b600080600080611eea612ed1565b611ef2612ed1565b611efa612ed1565b600254600090819081908190600160a060020a0316331480611f265750600054600160a060020a031633145b1515611f3157600080fd5b60095460ff1615611f4157600080fd5b600754600911611f5057600080fd5b611fe26012600160075403600981101515611f6757fe5b0154600a600754600803600881101515611f7d57fe5b015402611fd66012600754600981101515611f9457fe5b0154603054811515611fa257fe5b06611fd66012600754600981101515611fb757fe5b0154602f54811515611fc557fe5b60055491900663ffffffff612d2516565b9063ffffffff612d2516565b60055560075460129060098110611ff557fe5b01546007546012906009811061200757fe5b015460055481151561201557fe5b04026005556007546012906009811061202a57fe5b01546007546012906009811061203c57fe5b0154602f5481151561204a57fe5b0402602f556007546012906009811061205f57fe5b01546007546012906009811061207157fe5b015460305481151561207f57fe5b0402603055600754600110156120f457600a6007546008036001016008811015156120a657fe5b015499506120d460126002600754036009811015156120c157fe5b0154602e54908c0263ffffffff612d3a16565b602e55600754600090600a9060016008918203019081106120f157fe5b01555b600860075410156123cf57600a60075460080360088110151561211357fe5b01549850600a60075460070360088110151561212b57fe5b015497508715156121cc576040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915261218d906024906009612ef1565b5060078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a50612431565b61012060405190810160405280600181526020016002815260200160038152602001600481526020016005815260200160068152602001600781526020016008815260200160098152509650610120604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525095506101206040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250945060009350600092505b600983101561231f57878784600981106122cf57fe5b6020020151633b9aca00028115156122e357fe5b048684600981106122f057fe5b602002015260058310156123145785836009811061230a57fe5b6020020151840193505b6001909201916122b9565b600591505b6009821015612378576064601b836009811061233c57fe5b0154850281151561234957fe5b0486836009811061235657fe5b60200201510185836009811061236857fe5b6020020152600190910190612324565b5060055b60098110156123ca57633b9aca00600a8a87846009811061239957fe5b6020020151028115156123a857fe5b048115156123b257fe5b04602482600981106123c057fe5b015560010161237c565b6123f7565b600754600814156123f757600a54602e546123ee916298968002612d3a565b602e556000600a555b60078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a505b5050505050505050505090565b60008054600160a060020a0316331461245657600080fd5b60095460ff16151560011461246a57600080fd5b506009805460ff19169055600190565b60095460009060ff161561248d57600080fd5b61249933610400611bf5565b156124a357600080fd5b336000818152603260209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a36040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561259457818101518382015260200161257c565b50505050905090810190601f1680156125c15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b506001979650505050505050565b6000805b603654811015610b43578260368281548110151561262357fe5b906000526020600020906003020160000154141561266757603680548290811061264957fe5b600091825260209091206002600390920201015460ff169150610b43565b600101612609565b600154600160a060020a031681565b60008054600160a060020a0316331461269657600080fd5b60095460ff16156126a657600080fd5b60008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b15801561271657600080fd5b505af115801561272a573d6000803e3d6000fd5b505050506040513d602081101561274057600080fd5b50519392505050565b600160a060020a03918216600090815260326020908152604080832093909416825291909152205490565b600060016008541180156127a45750600854600160a060020a038316600090815260316020526040902060020154105b156127d657600160a060020a0382166000908152603160205260409020546305f5e10090046305f5e100029050610e60565b6127de612e2b565b6127e6612e2b565b600160a060020a038416600090815260316020526040902054811515611ad057fe5b600254600090600160a060020a031633148061282e5750600054600160a060020a031633145b151561283957600080fd5b5060005b603654811015612912578160368281548110151561285757fe5b906000526020600020906003020160000154141561290a57603680548290811061287d57fe5b600091825260209091206002600390920201015460ff161515600114156128d65760006036828154811015156128af57fe5b60009182526020909120600390910201600201805460ff191691151591909117905561290a565b60016036828154811015156128e757fe5b60009182526020909120600390910201600201805460ff19169115159190911790555b60010161283d565b5050565b60345481565b600254600090600160a060020a03163314806129425750600054600160a060020a031633145b151561294d57600080fd5b60335460ff161561295d57600080fd5b60095460ff161561296d57600080fd5b6034805460019081019091556033805460ff1916909117905561299260366000612f23565b6034546040517f3e5d02a8c38e7fed83b839f2339ef5d1a13c79b9cb4142f9216e27a0f32bc39990600090a25060345490565b600054600160a060020a031633146129dc57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805b603654811015610b435782603682815481101515612a2957fe5b9060005260206000209060030201600001541415612a68576036805482908110612a4f57fe5b9060005260206000209060030201600101549150610b43565b600101612a0f565b80600260018201045b81811015610b43578091506002818285811515612a9257fe5b0401811515612a9d57fe5b049050612a79565b604080518082019091526034548152602081019182526037805460018101825560009190915290517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae60029092029182015590517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31af90910155565b600080808080600160a060020a0387161515612b3b57600080fd5b612b43612e2b565b861015612b4f57600080fd5b612b5b87610400611bf5565b15612b6557600080fd5b60095460ff1615612b7557600080fd5b612b7e876110d0565b50612b8886611ab4565b600160a060020a038816600090815260316020526040902054909450612bb890611389818763ffffffff612d3a16565b50606484046010029250600a84046006029150612be582612bd98686612d3a565b9063ffffffff612d3a16565b602e54909150612bfb908263ffffffff612d2516565b602e55602f54612c11908463ffffffff612d3a16565b602f55603054612c27908363ffffffff612d3a16565b603055600160a060020a038716600090815260316020526040902054612c53908563ffffffff612d3a16565b600160a060020a038816600090815260316020526040902055600554612c7f908263ffffffff612d3a16565b600555604080518581529051600160a060020a03891691600091600080516020612f8e8339815191529181900360200190a35060019695505050505050565b6000612cca8383611bf5565b15612cd457600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d3a16565b600160a060020a03841660009081526031602052604090206004015550600192915050565b600082821115612d3457600080fd5b50900390565b81810182811015610c8b57600080fd5b600080600080600080600960075410156125f757879450869350600192505b6000841180612d785750600085115b8015612d8657506006548311155b156125f7575050600754600a80850494818504949082900692919006908310612e2057818110612df157612dd7828203600a8560065403600881101515612dc957fe5b01549063ffffffff612d3a16565b600a8460065403600881101515612dea57fe5b0155612e20565b612e0a818303600a856006540360088110151561141d57fe5b600a8460065403600881101515612e1d57fe5b01555b826001019250612d69565b60006012600160075403600981101515612e4157fe5b0154905090565b6000612e548383611bf5565b1515600114612e6257600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d2516565b8260088101928215612ec1579160200282015b82811115612ec1578251829060ff16905591602001919060010190612ea1565b50612ecd929150612f47565b5090565b610120604051908101604052806009906020820280388339509192915050565b8260098101928215612ec15791602002820182811115612ec1578251829060ff16905591602001919060010190612ea1565b5080546000825560030290600052602060002090810190612f449190612f61565b50565b610bf291905b80821115612ecd5760008155600101612f4d565b610bf291905b80821115612ecd576000808255600182015560028101805460ff19169055600301612f675600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820970f285f47a7ec334ce0db67908f35b10c08d1a6b90ab675f5bbae3c63b6151e0029

Deployed Bytecode

0x6080604052600436106102925763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630121b93f811461029757806304cd1819146102c3578063054f7d9c146102ea57806305e49d1d146102ff57806306ec62721461031757806306fdde031461033b57806307ba217c146103c5578063095ea7b3146103e65780630fccf22e1461040a578063107046bd1461042b578063146ca5311461046357806318160ddd146104785780631a7b11f51461048d5780631d2af28b146104a257806323b872dd146104c3578063251b5f8e146104ed57806325a52d9d146105025780632ce3d44014610517578063313ce56714610538578063408e27271461054d57806341c41923146105625780634f0e86561461057757806351651003146105a857806357183698146105bd5780636584ceb0146105d7578063704b6c02146105ec57806370a082311461060d57806379ba50971461062e5780638c90b2ea146106435780638da5cb5b146106645780638f46b586146106795780638f87932c1461069d578063900cf0cf146106b5578063946bf4d7146106ca57806395d89b41146106df5780639cba60a7146106f4578063a17b229d14610718578063a24e20de1461072d578063a2fb117514610751578063a7e1b51614610782578063a9059cbb146107a3578063b3adc716146107c7578063c091e45a146107e8578063c450a25f146107fd578063cae9ca5114610812578063cf504d481461087b578063d4ee1d9014610893578063dc39d06d146108a8578063dd62ed3e146108cc578063de78ed85146108f3578063dfa0ca1414610914578063e4eacd701461092c578063eb4439fb14610941578063f2fde38b14610956578063f37e741e14610977575b600080fd5b3480156102a357600080fd5b506102af60043561098f565b604080519115158252519081900360200190f35b3480156102cf57600080fd5b506102d8610b49565b60408051918252519081900360200190f35b3480156102f657600080fd5b506102af610bf5565b34801561030b57600080fd5b506102d8600435610bfe565b34801561032357600080fd5b506102af600160a060020a0360043516602435610c63565b34801561034757600080fd5b50610350610c91565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038a578181015183820152602001610372565b50505050905090810190601f1680156103b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d157600080fd5b506102af600160a060020a0360043516610d1f565b3480156103f257600080fd5b506102af600160a060020a0360043516602435610d8d565b34801561041657600080fd5b506102af600160a060020a0360043516610e1d565b34801561043757600080fd5b50610443600435610e65565b604080519384526020840192909252151582820152519081900360600190f35b34801561046f57600080fd5b506102d8610e99565b34801561048457600080fd5b506102d8610e9f565b34801561049957600080fd5b506102d8610ea5565b3480156104ae57600080fd5b506102af600160a060020a0360043516610eab565b3480156104cf57600080fd5b506102af600160a060020a0360043581169060243516604435610f1b565b3480156104f957600080fd5b506102d86110c4565b34801561050e57600080fd5b506102d86110ca565b34801561052357600080fd5b506102d8600160a060020a03600435166110d0565b34801561054457600080fd5b506102d86115fa565b34801561055957600080fd5b506102af611600565b34801561056e57600080fd5b506102af611609565b34801561058357600080fd5b5061058c611645565b60408051600160a060020a039092168252519081900360200190f35b3480156105b457600080fd5b506102d8611686565b3480156105c957600080fd5b506105d560043561168c565b005b3480156105e357600080fd5b506102af611781565b3480156105f857600080fd5b506105d5600160a060020a0360043516611891565b34801561061957600080fd5b506102d8600160a060020a0360043516611911565b34801561063a57600080fd5b506105d561192c565b34801561064f57600080fd5b506102af600160a060020a03600435166119b4565b34801561067057600080fd5b5061058c611a1d565b34801561068557600080fd5b506102af600160a060020a0360043516602435611a2c565b3480156106a957600080fd5b506102d8600435611ab4565b3480156106c157600080fd5b506102d8611ad8565b3480156106d657600080fd5b506102d8611ade565b3480156106eb57600080fd5b50610350611b9a565b34801561070057600080fd5b506102af600160a060020a0360043516602435611bf5565b34801561072457600080fd5b506102d8611c30565b34801561073957600080fd5b506102af600160a060020a0360043516602435611c36565b34801561075d57600080fd5b50610769600435611cbe565b6040805192835260208301919091528051918290030190f35b34801561078e57600080fd5b506102af600160a060020a0360043516611cea565b3480156107af57600080fd5b506102af600160a060020a0360043516602435611d27565b3480156107d357600080fd5b506102af600160a060020a0360043516611e9f565b3480156107f457600080fd5b506102d8611edc565b34801561080957600080fd5b506102af61243e565b34801561081e57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102af948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061247a9650505050505050565b34801561088757600080fd5b506102af600435612605565b34801561089f57600080fd5b5061058c61266f565b3480156108b457600080fd5b506102af600160a060020a036004351660243561267e565b3480156108d857600080fd5b506102d8600160a060020a0360043581169060243516612749565b3480156108ff57600080fd5b506102d8600160a060020a0360043516612774565b34801561092057600080fd5b506105d5600435612808565b34801561093857600080fd5b506102d8612916565b34801561094d57600080fd5b506102d861291c565b34801561096257600080fd5b506105d5600160a060020a03600435166129c5565b34801561098357600080fd5b506102d8600435612a0b565b603354600090819060ff1615156001146109a857600080fd5b6109b3336004611bf5565b15156001146109c157600080fd5b6109cd33610400611bf5565b156109d757600080fd5b60345433600090815260316020526040902060030154106109f757600080fd5b610a00336110d0565b5060095460ff1615610a1157600080fd5b5060005b603654811015610ad75782603682815481101515610a2f57fe5b906000526020600020906003020160000154148015610a7457506036805482908110610a5757fe5b600091825260209091206002600390920201015460ff1615156001145b15610acf5733600090815260316020526040902054610a9290612a70565b6036805483908110610aa057fe5b600091825260208083206003928302016001018054949094019093556034543383526031909352604090912001555b600101610a15565b6034543360009081526031602052604090206003015414610af457fe5b6034543360008181526031602090815260409182902054825190815291518793927f6c7eb2743ec28489909706ea440d909129004996be657d36c6e9add778546abf92908290030190a4600191505b50919050565b600254600090600160a060020a0316331480610b6f5750600054600160a060020a031633145b1515610b7a57600080fd5b60335460ff161515600114610b8e57600080fd5b60095460ff1615610b9e57600080fd5b6033805460ff19169055610bb0611ade565b6035819055610bbe90612aa5565b6034546035546040517f857b4631e7ebad75ee4937e2bfb5ca31eb4a27140ec7aac09984ef81a326776b90600090a3506035545b90565b60095460ff1681565b6000805b603754811015610b435782603782815481101515610c1c57fe5b9060005260206000209060020201600001541415610c5b576037805482908110610c4257fe5b9060005260206000209060020201600101549150610b43565b600101610c02565b60008054600160a060020a03163314610c7b57600080fd5b610c858383612b20565b50600190505b92915050565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b505050505081565b6002546000908190600160a060020a0316331480610d475750600054600160a060020a031633145b1515610d5257600080fd5b610d5d836004611bf5565b15610d6757600080fd5b506305f5e100610d778382612b20565b50610d83836004612cbe565b5060019392505050565b60095460009060ff1615610da057600080fd5b610dac33610400611bf5565b15610db657600080fd5b336000818152603260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600254600090600160a060020a0316331480610e435750600054600160a060020a031633145b1515610e4e57600080fd5b610e5a82610400612cbe565b50600190505b919050565b6036805482908110610e7357fe5b600091825260209091206003909102018054600182015460029092015490925060ff1683565b60075481565b60055490565b602e5481565b6002546000908190600160a060020a0316331480610ed35750600054600160a060020a031633145b1515610ede57600080fd5b600854600110610eed57600080fd5b610ef8836004611bf5565b1515600114610f0657600080fd5b5063034fe1086064420601610d838382612b20565b6009546000908190819060ff1615610f3257600080fd5b610f3e85610400611bf5565b15610f4857600080fd5b610f51866110d0565b50610f5b856110d0565b505050600160a060020a03808516600081815260316020526040808220549387168252812054919052610f94828563ffffffff612d2516565b600160a060020a0387166000908152603160209081526040808320939093556032815282822033835290522054610fd1908563ffffffff612d2516565b600160a060020a038088166000908152603260209081526040808320338452825280832094909455918816815260319091522054611015908563ffffffff612d3a16565b600160a060020a038087166000908152603160205260408082209390935590881681522054611045908390612d4a565b151561105057600080fd5b600160a060020a038516600090815260316020526040902054611074908290612d4a565b151561107f57600080fd5b84600160a060020a031686600160a060020a0316600080516020612f8e833981519152866040518082815260200191505060405180910390a350600195945050505050565b602f5481565b60355481565b6009546000908190819081908190819081908190819060ff16156110f357600080fd5b6007546009101561110357600080fd5b61110f8a610400611bf5565b1561111957600080fd5b60016008541180156111475750600854600160a060020a038b16600090815260316020526040902060020154105b156111ff57600160a060020a038a166000908152603160205260408120546305f5e1008082049a508a02900311156111c257600160a060020a038a1660008181526031602090815260408083205481516305f5e1008e0290910381529051929392600080516020612f8e833981519152929181900390910190a35b600160a060020a038a1660009081526031602052604090206305f5e1008902808255600854600283015560075460019092019190915598506115ed565b600160a060020a038a1660009081526031602052604090206001015460075411156115ed5760016007541180156112395750600860075411155b156114cc57611246612e2b565b600160a060020a038b1660009081526031602052604090205481151561126857fe5b049650611273612e2b565b600160a060020a038b166000908152603160205260408120549189029750600a890696509087900394508411156112e657600160a060020a038a1660008181526031602090815260408083208a905580518881529051929392600080516020612f8e833981519152929181900390910190a35b6000925060008511801561130c57506000602460001987016009811061130857fe5b0154115b1561133057611319612e2b565b602460001987016009811061132a57fe5b01540292505b6000831180156113575750600a60075460080360010160088110151561135257fe5b015483105b1561145b57600160a060020a038a1660009081526031602052604090205461138e90611389818663ffffffff612d3a16565b612d4a565b50604080518481529051600160a060020a038c1691600091600080516020612f8e8339815191529181900360200190a3600160a060020a038a166000908152603160205260409020546113e7908463ffffffff612d3a16565b600160a060020a038b1660009081526031602052604090205560075461142b908490600a90600160089182030190811061141d57fe5b01549063ffffffff612d2516565b600a60075460080360010160088110151561144257fe5b0155600554611457908463ffffffff612d3a16565b6005555b600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b166000908152603160205260409020600201555b600160a060020a038a1660009081526031602052604090205498506115ed565b600754600914156115ed57600160a060020a038a166000908152603160205260409020546114f990611ab4565b600160a060020a038b16600090815260316020526040902054909250611525908363ffffffff612d2516565b9050600081111561145b57600160a060020a038a166000908152603160205260409020546115539083612d4a565b50600160a060020a038a16600081815260316020908152604080832086905580518581529051929392600080516020612f8e833981519152929181900390910190a3600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b16600090815260316020526040902060028101919091555498505b5050505050505050919050565b60065481565b60335460ff1681565b60008054600160a060020a0316331461162157600080fd5b60095460ff161561163157600080fd5b506009805460ff1916600190811790915590565b600254600090600160a060020a031633148061166b5750600054600160a060020a031633145b151561167657600080fd5b50600254600160a060020a031690565b60305481565b600254600160a060020a03163314806116af5750600054600160a060020a031633145b15156116ba57600080fd5b60335460ff1615156001146116ce57600080fd5b60408051606081018252918252600060208301818152600192840183815260368054948501815590925292517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b860039093029283015591517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b982015590517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81ba909101805460ff1916911515919091179055565b600254600090600160a060020a03163314806117a75750600054600160a060020a031633145b15156117b257600080fd5b60095460ff16156117c257600080fd5b6007546009146117d157600080fd5b6008546064116117e057600080fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915261182f90600a906008612e8e565b5060016007819055600880549091019055600654600a0a620186a002602e819055602d5461185c91612d25565b602d556008546040517fc1d4931e10652da8ab23604510531810d2eebfcd33a81ba4946d702ce8057b6490600090a250600190565b600054600160a060020a031633146118a857600080fd5b600254604051600160a060020a038084169216907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526031602052604090205490565b600154600160a060020a0316331461194357600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6002546000908190600160a060020a03163314806119dc5750600054600160a060020a031633145b15156119e757600080fd5b6119f2836002611bf5565b156119fc57600080fd5b5063034fe1086064420601611a118382612b20565b50610d83836002612cbe565b600054600160a060020a031681565b60008054600160a060020a03163314611a4457600080fd5b602f54821115611a5357600080fd5b600160a060020a038316600090815260316020526040902054611a7c908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055602f54611aa8908363ffffffff612d2516565b602f5550600192915050565b6000611abe612e2b565b611ac6612e2b565b83811515611ad057fe5b040292915050565b60085481565b600080805b603654811015611b955781603682815481101515611afd57fe5b906000526020600020906003020160010154118015611b4257506036805482908110611b2557fe5b600091825260209091206002600390920201015460ff1615156001145b15611b8d576036805482908110611b5557fe5b9060005260206000209060030201600101549150603681815481101515611b7857fe5b90600052602060002090600302016000015492505b600101611ae3565b505090565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b600160a060020a0382166000908152603160205260408120600401548190831615611c235750600180611c28565b506000805b509392505050565b602d5481565b60008054600160a060020a03163314611c4e57600080fd5b603054821115611c5d57600080fd5b600160a060020a038316600090815260316020526040902054611c86908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055603054611cb2908363ffffffff612d2516565b60305550600192915050565b6037805482908110611ccc57fe5b60009182526020909120600290910201805460019091015490915082565b600254600090600160a060020a0316331480611d105750600054600160a060020a031633145b1515611d1b57600080fd5b610e5a82610400612e48565b6009546000908190819060ff1615611d3e57600080fd5b600160a060020a0385161515611d5357600080fd5b611d5f85610400611bf5565b15611d6957600080fd5b611d7284611ab4565b935060008411611d8157600080fd5b611d8a856110d0565b50611d94336110d0565b50503360008181526031602052604080822054600160a060020a038816835290822054929091529150611dcd828563ffffffff612d2516565b3360009081526031602052604080822092909255600160a060020a03871681522054611dff908563ffffffff612d3a16565b600160a060020a038616600090815260316020526040808220929092553381522054611e2c908390612d4a565b1515611e3757600080fd5b600160a060020a038516600090815260316020526040902054611e5b908290612d4a565b1515611e6657600080fd5b604080518581529051600160a060020a038716913391600080516020612f8e8339815191529181900360200190a3506001949350505050565b600254600090600160a060020a0316331480611ec55750600054600160a060020a031633145b1515611ed057600080fd5b610c8b82610400611bf5565b600080600080611eea612ed1565b611ef2612ed1565b611efa612ed1565b600254600090819081908190600160a060020a0316331480611f265750600054600160a060020a031633145b1515611f3157600080fd5b60095460ff1615611f4157600080fd5b600754600911611f5057600080fd5b611fe26012600160075403600981101515611f6757fe5b0154600a600754600803600881101515611f7d57fe5b015402611fd66012600754600981101515611f9457fe5b0154603054811515611fa257fe5b06611fd66012600754600981101515611fb757fe5b0154602f54811515611fc557fe5b60055491900663ffffffff612d2516565b9063ffffffff612d2516565b60055560075460129060098110611ff557fe5b01546007546012906009811061200757fe5b015460055481151561201557fe5b04026005556007546012906009811061202a57fe5b01546007546012906009811061203c57fe5b0154602f5481151561204a57fe5b0402602f556007546012906009811061205f57fe5b01546007546012906009811061207157fe5b015460305481151561207f57fe5b0402603055600754600110156120f457600a6007546008036001016008811015156120a657fe5b015499506120d460126002600754036009811015156120c157fe5b0154602e54908c0263ffffffff612d3a16565b602e55600754600090600a9060016008918203019081106120f157fe5b01555b600860075410156123cf57600a60075460080360088110151561211357fe5b01549850600a60075460070360088110151561212b57fe5b015497508715156121cc576040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915261218d906024906009612ef1565b5060078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a50612431565b61012060405190810160405280600181526020016002815260200160038152602001600481526020016005815260200160068152602001600781526020016008815260200160098152509650610120604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525095506101206040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250945060009350600092505b600983101561231f57878784600981106122cf57fe5b6020020151633b9aca00028115156122e357fe5b048684600981106122f057fe5b602002015260058310156123145785836009811061230a57fe5b6020020151840193505b6001909201916122b9565b600591505b6009821015612378576064601b836009811061233c57fe5b0154850281151561234957fe5b0486836009811061235657fe5b60200201510185836009811061236857fe5b6020020152600190910190612324565b5060055b60098110156123ca57633b9aca00600a8a87846009811061239957fe5b6020020151028115156123a857fe5b048115156123b257fe5b04602482600981106123c057fe5b015560010161237c565b6123f7565b600754600814156123f757600a54602e546123ee916298968002612d3a565b602e556000600a555b60078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a505b5050505050505050505090565b60008054600160a060020a0316331461245657600080fd5b60095460ff16151560011461246a57600080fd5b506009805460ff19169055600190565b60095460009060ff161561248d57600080fd5b61249933610400611bf5565b156124a357600080fd5b336000818152603260209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a36040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561259457818101518382015260200161257c565b50505050905090810190601f1680156125c15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b506001979650505050505050565b6000805b603654811015610b43578260368281548110151561262357fe5b906000526020600020906003020160000154141561266757603680548290811061264957fe5b600091825260209091206002600390920201015460ff169150610b43565b600101612609565b600154600160a060020a031681565b60008054600160a060020a0316331461269657600080fd5b60095460ff16156126a657600080fd5b60008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b15801561271657600080fd5b505af115801561272a573d6000803e3d6000fd5b505050506040513d602081101561274057600080fd5b50519392505050565b600160a060020a03918216600090815260326020908152604080832093909416825291909152205490565b600060016008541180156127a45750600854600160a060020a038316600090815260316020526040902060020154105b156127d657600160a060020a0382166000908152603160205260409020546305f5e10090046305f5e100029050610e60565b6127de612e2b565b6127e6612e2b565b600160a060020a038416600090815260316020526040902054811515611ad057fe5b600254600090600160a060020a031633148061282e5750600054600160a060020a031633145b151561283957600080fd5b5060005b603654811015612912578160368281548110151561285757fe5b906000526020600020906003020160000154141561290a57603680548290811061287d57fe5b600091825260209091206002600390920201015460ff161515600114156128d65760006036828154811015156128af57fe5b60009182526020909120600390910201600201805460ff191691151591909117905561290a565b60016036828154811015156128e757fe5b60009182526020909120600390910201600201805460ff19169115159190911790555b60010161283d565b5050565b60345481565b600254600090600160a060020a03163314806129425750600054600160a060020a031633145b151561294d57600080fd5b60335460ff161561295d57600080fd5b60095460ff161561296d57600080fd5b6034805460019081019091556033805460ff1916909117905561299260366000612f23565b6034546040517f3e5d02a8c38e7fed83b839f2339ef5d1a13c79b9cb4142f9216e27a0f32bc39990600090a25060345490565b600054600160a060020a031633146129dc57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805b603654811015610b435782603682815481101515612a2957fe5b9060005260206000209060030201600001541415612a68576036805482908110612a4f57fe5b9060005260206000209060030201600101549150610b43565b600101612a0f565b80600260018201045b81811015610b43578091506002818285811515612a9257fe5b0401811515612a9d57fe5b049050612a79565b604080518082019091526034548152602081019182526037805460018101825560009190915290517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae60029092029182015590517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31af90910155565b600080808080600160a060020a0387161515612b3b57600080fd5b612b43612e2b565b861015612b4f57600080fd5b612b5b87610400611bf5565b15612b6557600080fd5b60095460ff1615612b7557600080fd5b612b7e876110d0565b50612b8886611ab4565b600160a060020a038816600090815260316020526040902054909450612bb890611389818763ffffffff612d3a16565b50606484046010029250600a84046006029150612be582612bd98686612d3a565b9063ffffffff612d3a16565b602e54909150612bfb908263ffffffff612d2516565b602e55602f54612c11908463ffffffff612d3a16565b602f55603054612c27908363ffffffff612d3a16565b603055600160a060020a038716600090815260316020526040902054612c53908563ffffffff612d3a16565b600160a060020a038816600090815260316020526040902055600554612c7f908263ffffffff612d3a16565b600555604080518581529051600160a060020a03891691600091600080516020612f8e8339815191529181900360200190a35060019695505050505050565b6000612cca8383611bf5565b15612cd457600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d3a16565b600160a060020a03841660009081526031602052604090206004015550600192915050565b600082821115612d3457600080fd5b50900390565b81810182811015610c8b57600080fd5b600080600080600080600960075410156125f757879450869350600192505b6000841180612d785750600085115b8015612d8657506006548311155b156125f7575050600754600a80850494818504949082900692919006908310612e2057818110612df157612dd7828203600a8560065403600881101515612dc957fe5b01549063ffffffff612d3a16565b600a8460065403600881101515612dea57fe5b0155612e20565b612e0a818303600a856006540360088110151561141d57fe5b600a8460065403600881101515612e1d57fe5b01555b826001019250612d69565b60006012600160075403600981101515612e4157fe5b0154905090565b6000612e548383611bf5565b1515600114612e6257600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d2516565b8260088101928215612ec1579160200282015b82811115612ec1578251829060ff16905591602001919060010190612ea1565b50612ecd929150612f47565b5090565b610120604051908101604052806009906020820280388339509192915050565b8260098101928215612ec15791602002820182811115612ec1578251829060ff16905591602001919060010190612ea1565b5080546000825560030290600052602060002090810190612f449190612f61565b50565b610bf291905b80821115612ecd5760008155600101612f4d565b610bf291905b80821115612ecd576000808255600182015560028101805460ff19169055600301612f675600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820970f285f47a7ec334ce0db67908f35b10c08d1a6b90ab675f5bbae3c63b6151e0029

Swarm Source

bzzr://970f285f47a7ec334ce0db67908f35b10c08d1a6b90ab675f5bbae3c63b6151e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.