ETH Price: $1,984.22 (+6.48%)
 

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Refund My Ico In...229195122025-07-14 19:30:11229 days ago1752521411IN
hongcoin
0 ETH0.101552568.05973541
0x68747470224208442025-05-05 23:35:23299 days ago1746488123IN
hongcoin
0 ETH0.000030.75
0x68747470224205322025-05-05 22:32:47299 days ago1746484367IN
hongcoin
0 ETH0.000030.75
0x68747470224202192025-05-05 21:29:23299 days ago1746480563IN
hongcoin
0 ETH0.000030.75
0x68747470224199312025-05-05 20:31:11299 days ago1746477071IN
hongcoin
0 ETH0.000030.75
0x68747470224196422025-05-05 19:32:35299 days ago1746473555IN
hongcoin
0 ETH0.000030.75
0x68747470224193512025-05-05 18:33:59299 days ago1746470039IN
hongcoin
0 ETH0.000030.75
0x68747470224190632025-05-05 17:35:59299 days ago1746466559IN
hongcoin
0 ETH0.000030.75
0x68747470224179142025-05-05 13:43:35299 days ago1746452615IN
hongcoin
0 ETH0.000030.75
0x68747470224176222025-05-05 12:44:35299 days ago1746449075IN
hongcoin
0 ETH0.000030.75
0x68747470224173352025-05-05 11:46:59300 days ago1746445619IN
hongcoin
0 ETH0.000030.75
0x68747470224170542025-05-05 10:49:59300 days ago1746442199IN
hongcoin
0 ETH0.000030.75
0x68747470224167712025-05-05 9:52:59300 days ago1746438779IN
hongcoin
0 ETH0.000030.75
0x68747470224164882025-05-05 8:56:11300 days ago1746435371IN
hongcoin
0 ETH0.000030.75
0x68747470224162022025-05-05 7:58:59300 days ago1746431939IN
hongcoin
0 ETH0.000030.75
0x68747470224159182025-05-05 7:02:11300 days ago1746428531IN
hongcoin
0 ETH0.000030.75
0x68747470224156352025-05-05 6:05:23300 days ago1746425123IN
hongcoin
0 ETH0.000030.75
0x68747470224153492025-05-05 5:07:59300 days ago1746421679IN
hongcoin
0 ETH0.000030.75
0x68747470224150662025-05-05 4:10:47300 days ago1746418247IN
hongcoin
0 ETH0.000030.75
Refund My Ico In...180891972023-09-08 4:03:47905 days ago1694145827IN
hongcoin
0 ETH0.270375739.48686792
Refund My Ico In...58248222018-06-20 21:58:372810 days ago1529531917IN
hongcoin
0 ETH0.0035312621.59224465
Refund My Ico In...58248162018-06-20 21:56:512810 days ago1529531811IN
hongcoin
0 ETH0.000109065
0x51fa7efd55148012018-04-27 12:28:312864 days ago1524832111IN
hongcoin
0 ETH0.000062
Transfer55148012018-04-27 12:28:312864 days ago1524832111IN
hongcoin
0 ETH0.000534371.78125
Refund My Ico In...47541272017-12-18 11:31:552995 days ago1513596715IN
hongcoin
0 ETH0.001240
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer54303722018-04-13 1:18:492879 days ago1523582329
hongcoin
0 ETH
Transfer26686222016-11-21 14:49:233386 days ago1479739763
hongcoin
3 ETH
Transfer24405302016-10-14 19:49:423424 days ago1476474582
hongcoin
0 ETH
Transfer24405272016-10-14 19:49:163424 days ago1476474556
hongcoin
0 ETH
Transfer24396002016-10-14 16:14:243424 days ago1476461664
hongcoin
0 ETH
Transfer24395942016-10-14 16:13:533424 days ago1476461633
hongcoin
0 ETH
Transfer24395922016-10-14 16:13:123424 days ago1476461592
hongcoin
0 ETH
Transfer24391492016-10-14 14:29:043424 days ago1476455344
hongcoin
0 ETH
Transfer24390742016-10-14 14:07:273424 days ago1476454047
hongcoin
0 ETH
Transfer24389482016-10-14 13:30:493424 days ago1476451849
hongcoin
0 ETH
Transfer24389362016-10-14 13:27:503424 days ago1476451670
hongcoin
0 ETH
Transfer24388632016-10-14 13:10:533424 days ago1476450653
hongcoin
0 ETH
Transfer24387242016-10-14 12:32:193424 days ago1476448339
hongcoin
0 ETH
Transfer24385172016-10-14 11:39:213425 days ago1476445161
hongcoin
0 ETH
Transfer24385072016-10-14 11:35:483425 days ago1476444948
hongcoin
0 ETH
Transfer24384652016-10-14 11:24:343425 days ago1476444274
hongcoin
0 ETH
Transfer24384592016-10-14 11:22:493425 days ago1476444169
hongcoin
0 ETH
Transfer24384382016-10-14 11:18:023425 days ago1476443882
hongcoin
0 ETH
Transfer24384352016-10-14 11:17:303425 days ago1476443850
hongcoin
0 ETH
Transfer24384332016-10-14 11:17:033425 days ago1476443823
hongcoin
0 ETH
Transfer24383882016-10-14 11:07:593425 days ago1476443279
hongcoin
0 ETH
Transfer24383832016-10-14 11:06:363425 days ago1476443196
hongcoin
0 ETH
Transfer24383322016-10-14 10:55:593425 days ago1476442559
hongcoin
0 ETH
Transfer24383212016-10-14 10:53:393425 days ago1476442419
hongcoin
0 ETH
Transfer24382872016-10-14 10:44:333425 days ago1476441873
hongcoin
0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
HONG

Compiler Version
v0.3.5+commit.5f97274

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-06-13
*/

/* Verified by 3esmit
 
- Bytecode Verification performed was compared on second iteration -

This file is part of the HONG.

The HONG is free software: you can redistribute it and/or modify
it under the terms of the GNU lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

The HONG is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU lesser General Public License for more details.

You should have received a copy of the GNU lesser General Public License
along with the HONG.  If not, see <http://www.gnu.org/licenses/>.
*/

/*
 * Parent contract that contains all of the configurable parameters of the main contract.
 */
contract HongConfiguration {
    uint public closingTime;
    uint public weiPerInitialHONG = 10**16;
    string public name = "HONG";
    string public symbol = "Ħ";
    uint8 public decimals = 0;
    uint public maxBountyTokens = 2 * (10**6);
    uint public closingTimeExtensionPeriod = 30 days;
    uint public minTokensToCreate = 100 * (10**6);
    uint public maxTokensToCreate = 250 * (10**6);
    uint public tokensPerTier = 50 * (10**6);
    uint public lastKickoffDateBuffer = 304 days;

    uint public mgmtRewardPercentage = 20;
    uint public mgmtFeePercentage = 8;

    uint public harvestQuorumPercent = 20;
    uint public freezeQuorumPercent = 50;
    uint public kickoffQuorumPercent = 20;
}

contract ErrorHandler {
    bool public isInTestMode = false;
    event evRecord(address msg_sender, uint msg_value, string message);
    function doThrow(string message) internal {
        evRecord(msg.sender, msg.value, message);
        if(!isInTestMode){
            throw;
        }
    }
}

contract TokenInterface is ErrorHandler {
    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
    uint256 public tokensCreated;

    function balanceOf(address _owner) constant returns (uint256 balance);
    function transfer(address _to, uint256 _amount) returns (bool success);

    event evTransfer(address msg_sender, uint msg_value, address indexed _from, address indexed _to, uint256 _amount);

    // Modifier that allows only token holders to trigger
    modifier onlyTokenHolders {
        if (balanceOf(msg.sender) == 0) doThrow("onlyTokenHolders"); else {_}
    }
}

contract Token is TokenInterface {
    // Protects users by preventing the execution of method calls that
    // inadvertently also transferred ether
    modifier noEther() {if (msg.value > 0) doThrow("noEther"); else{_}}
    modifier hasEther() {if (msg.value <= 0) doThrow("hasEther"); else{_}}

    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balances[_owner];
    }

    function transfer(address _to, uint256 _amount) noEther returns (bool success) {
        if (_amount <= 0) return false;
        if (balances[msg.sender] < _amount) return false;
        if (balances[_to] + _amount < balances[_to]) return false;

        balances[msg.sender] -= _amount;
        balances[_to] += _amount;

        evTransfer(msg.sender, msg.value, msg.sender, _to, _amount);

        return true;
    }
}


contract OwnedAccount is ErrorHandler {
    address public owner;
    bool acceptDeposits = true;

    event evPayOut(address msg_sender, uint msg_value, address indexed _recipient, uint _amount);

    modifier onlyOwner() {
        if (msg.sender != owner) doThrow("onlyOwner");
        else {_}
    }

    modifier noEther() {
        if (msg.value > 0) doThrow("noEther");
        else {_}
    }

    function OwnedAccount(address _owner) {
        owner = _owner;
    }

    function payOutPercentage(address _recipient, uint _percent) internal onlyOwner noEther {
        payOutAmount(_recipient, (this.balance * _percent) / 100);
    }

    function payOutAmount(address _recipient, uint _amount) internal onlyOwner noEther {
        // send does not forward enough gas to see that this is a managed account call
        if (!_recipient.call.value(_amount)())
            doThrow("payOut:sendFailed");
        else
            evPayOut(msg.sender, msg.value, _recipient, _amount);
    }

    function () returns (bool success) {
        if (!acceptDeposits) throw;
        return true;
    }
}

contract ReturnWallet is OwnedAccount {
    address public mgmtBodyWalletAddress;

    bool public inDistributionMode;
    uint public amountToDistribute;
    uint public totalTokens;
    uint public weiPerToken;

    function ReturnWallet(address _mgmtBodyWalletAddress) OwnedAccount(msg.sender) {
        mgmtBodyWalletAddress = _mgmtBodyWalletAddress;
    }

    function payManagementBodyPercent(uint _percent) {
        payOutPercentage(mgmtBodyWalletAddress, _percent);
    }

    function switchToDistributionMode(uint _totalTokens) onlyOwner {
        inDistributionMode = true;
        acceptDeposits = false;
        totalTokens = _totalTokens;
        amountToDistribute = this.balance;
        weiPerToken = amountToDistribute / totalTokens;
    }

    function payTokenHolderBasedOnTokenCount(address _tokenHolderAddress, uint _tokens) onlyOwner {
        payOutAmount(_tokenHolderAddress, weiPerToken * _tokens);
    }
}

contract ExtraBalanceWallet is OwnedAccount {
    address returnWalletAddress;
    function ExtraBalanceWallet(address _returnWalletAddress) OwnedAccount(msg.sender) {
        returnWalletAddress = _returnWalletAddress;
    }

    function returnBalanceToMainAccount() {
        acceptDeposits = false;
        payOutAmount(owner, this.balance);
    }

    function returnAmountToMainAccount(uint _amount) {
        payOutAmount(owner, _amount);
    }

    function payBalanceToReturnWallet() {
        acceptDeposits = false;
        payOutAmount(returnWalletAddress, this.balance);
    }

}

contract RewardWallet is OwnedAccount {
    address public returnWalletAddress;
    function RewardWallet(address _returnWalletAddress) OwnedAccount(msg.sender) {
        returnWalletAddress = _returnWalletAddress;
    }

    function payBalanceToReturnWallet() {
        acceptDeposits = false;
        payOutAmount(returnWalletAddress, this.balance);
    }
}

contract ManagementFeeWallet is OwnedAccount {
    address public mgmtBodyAddress;
    address public returnWalletAddress;
    function ManagementFeeWallet(address _mgmtBodyAddress, address _returnWalletAddress) OwnedAccount(msg.sender) {
        mgmtBodyAddress = _mgmtBodyAddress;
        returnWalletAddress  = _returnWalletAddress;
    }

    function payManagementBodyAmount(uint _amount) {
        payOutAmount(mgmtBodyAddress, _amount);
    }

    function payBalanceToReturnWallet() {
        acceptDeposits = false;
        payOutAmount(returnWalletAddress, this.balance);
    }
}

/*
 * Token Creation contract, similar to other organization,for issuing tokens and initialize
 * its ether fund.
*/
contract TokenCreationInterface is HongConfiguration {

    address public managementBodyAddress;

    ExtraBalanceWallet public extraBalanceWallet;
    mapping (address => uint256) weiGiven;
    mapping (address => uint256) public taxPaid;

    function createTokenProxy(address _tokenHolder) internal returns (bool success);
    function refundMyIcoInvestment();
    function divisor() constant returns (uint divisor);

    event evMinTokensReached(address msg_sender, uint msg_value, uint value);
    event evCreatedToken(address msg_sender, uint msg_value, address indexed to, uint amount);
    event evRefund(address msg_sender, uint msg_value, address indexed to, uint value, bool result);
}

contract GovernanceInterface is ErrorHandler, HongConfiguration {

    // The variable indicating whether the fund has achieved the inital goal or not.
    // This value is automatically set, and CANNOT be reversed.
    bool public isFundLocked;
    bool public isFundReleased;

    modifier notLocked() {if (isFundLocked) doThrow("notLocked"); else {_}}
    modifier onlyLocked() {if (!isFundLocked) doThrow("onlyLocked"); else {_}}
    modifier notReleased() {if (isFundReleased) doThrow("notReleased"); else {_}}
    modifier onlyHarvestEnabled() {if (!isHarvestEnabled) doThrow("onlyHarvestEnabled"); else {_}}
    modifier onlyDistributionNotInProgress() {if (isDistributionInProgress) doThrow("onlyDistributionNotInProgress"); else {_}}
    modifier onlyDistributionNotReady() {if (isDistributionReady) doThrow("onlyDistributionNotReady"); else {_}}
    modifier onlyDistributionReady() {if (!isDistributionReady) doThrow("onlyDistributionReady"); else {_}}
    modifier onlyCanIssueBountyToken(uint _amount) {
        if (bountyTokensCreated + _amount > maxBountyTokens){
            doThrow("hitMaxBounty");
        }
        else {_}
    }
    modifier onlyFinalFiscalYear() {
        // Only call harvest() in the final fiscal year
        if (currentFiscalYear < 4) doThrow("currentFiscalYear<4"); else {_}
    }
    modifier notFinalFiscalYear() {
        // Token holders cannot freeze fund at the 4th Fiscal Year after passing `kickoff(4)` voting
        if (currentFiscalYear >= 4) doThrow("currentFiscalYear>=4"); else {_}
    }
    modifier onlyNotFrozen() {
        if (isFreezeEnabled) doThrow("onlyNotFrozen"); else {_}
    }

    bool public isDayThirtyChecked;
    bool public isDaySixtyChecked;

    uint256 public bountyTokensCreated;
    uint public currentFiscalYear;
    uint public lastKickoffDate;
    mapping (uint => bool) public isKickoffEnabled;
    bool public isFreezeEnabled;
    bool public isHarvestEnabled;
    bool public isDistributionInProgress;
    bool public isDistributionReady;

    ReturnWallet public returnWallet;
    RewardWallet public rewardWallet;
    ManagementFeeWallet public managementFeeWallet;

    // define the governance of this organization and critical functions
    function mgmtIssueBountyToken(address _recipientAddress, uint _amount) returns (bool);
    function mgmtDistribute();

    function mgmtInvestProject(
        address _projectWallet,
        uint _amount
    ) returns (bool);

    event evIssueManagementFee(address msg_sender, uint msg_value, uint _amount, bool _success);
    event evMgmtIssueBountyToken(address msg_sender, uint msg_value, address _recipientAddress, uint _amount, bool _success);
    event evMgmtDistributed(address msg_sender, uint msg_value, uint256 _amount, bool _success);
    event evMgmtInvestProject(address msg_sender, uint msg_value, address _projectWallet, uint _amount, bool result);
    event evLockFund(address msg_sender, uint msg_value);
    event evReleaseFund(address msg_sender, uint msg_value);
}


contract TokenCreation is TokenCreationInterface, Token, GovernanceInterface {
    modifier onlyManagementBody {
        if(msg.sender != address(managementBodyAddress)) {doThrow("onlyManagementBody");} else {_}
    }

    function TokenCreation(
        address _managementBodyAddress,
        uint _closingTime) {

        managementBodyAddress = _managementBodyAddress;
        closingTime = _closingTime;
    }

    function createTokenProxy(address _tokenHolder) internal notLocked notReleased hasEther returns (bool success) {

        // Business logic (but no state changes)
        // setup transaction details
        uint tokensSupplied = 0;
        uint weiAccepted = 0;
        bool wasMinTokensReached = isMinTokensReached();

        var weiPerLatestHONG = weiPerInitialHONG * divisor() / 100;
        uint remainingWei = msg.value;
        uint tokensAvailable = tokensAvailableAtCurrentTier();
        if (tokensAvailable == 0) {
            doThrow("noTokensToSell");
            return false;
        }

        // Sell tokens in batches based on the current price.
        while (remainingWei >= weiPerLatestHONG) {
            uint tokensRequested = remainingWei / weiPerLatestHONG;
            uint tokensToSellInBatch = min(tokensAvailable, tokensRequested);

            // special case.  Allow the last purchase to go over the max
            if (tokensAvailable == 0 && tokensCreated == maxTokensToCreate) {
                tokensToSellInBatch = tokensRequested;
            }

            uint priceForBatch = tokensToSellInBatch * weiPerLatestHONG;

            // track to total wei accepted and total tokens supplied
            weiAccepted += priceForBatch;
            tokensSupplied += tokensToSellInBatch;

            // update state
            balances[_tokenHolder] += tokensToSellInBatch;
            tokensCreated += tokensToSellInBatch;
            weiGiven[_tokenHolder] += priceForBatch;

            // update dependent values (state has changed)
            weiPerLatestHONG = weiPerInitialHONG * divisor() / 100;
            remainingWei = msg.value - weiAccepted;
            tokensAvailable = tokensAvailableAtCurrentTier();
        }

        // the caller will still pay this amount, even though it didn't buy any tokens.
        weiGiven[_tokenHolder] += remainingWei;

        // when the caller is paying more than 10**16 wei (0.01 Ether) per token, the extra is basically a tax.
        uint256 totalTaxLevied = weiAccepted - tokensSupplied * weiPerInitialHONG;
        taxPaid[_tokenHolder] += totalTaxLevied;

        // State Changes (no external calls)
        tryToLockFund();

        // External calls
        if (totalTaxLevied > 0) {
            if (!extraBalanceWallet.send(totalTaxLevied)){
                doThrow("extraBalance:sendFail");
                return;
            }
        }

        // Events.  Safe to publish these now that we know it all worked
        evCreatedToken(msg.sender, msg.value, _tokenHolder, tokensSupplied);
        if (!wasMinTokensReached && isMinTokensReached()) evMinTokensReached(msg.sender, msg.value, tokensCreated);
        if (isFundLocked) evLockFund(msg.sender, msg.value);
        if (isFundReleased) evReleaseFund(msg.sender, msg.value);
        return true;
    }

    function refundMyIcoInvestment() noEther notLocked onlyTokenHolders {
        // 1: Preconditions
        if (weiGiven[msg.sender] == 0) {
            doThrow("noWeiGiven");
            return;
        }
        if (balances[msg.sender] > tokensCreated) {
            doThrow("invalidTokenCount");
            return;
         }

        // 2: Business logic
        bool wasMinTokensReached = isMinTokensReached();
        var tmpWeiGiven = weiGiven[msg.sender];
        var tmpTaxPaidBySender = taxPaid[msg.sender];
        var tmpSenderBalance = balances[msg.sender];

        var amountToRefund = tmpWeiGiven;

        // 3: state changes.
        balances[msg.sender] = 0;
        weiGiven[msg.sender] = 0;
        taxPaid[msg.sender] = 0;
        tokensCreated -= tmpSenderBalance;

        // 4: external calls
        // Pull taxes paid back into this contract (they would have been paid into the extraBalance account)
        extraBalanceWallet.returnAmountToMainAccount(tmpTaxPaidBySender);

        // If that works, then do a refund
        if (!msg.sender.send(amountToRefund)) {
            evRefund(msg.sender, msg.value, msg.sender, amountToRefund, false);
            doThrow("refund:SendFailed");
            return;
        }

        evRefund(msg.sender, msg.value, msg.sender, amountToRefund, true);
        if (!wasMinTokensReached && isMinTokensReached()) evMinTokensReached(msg.sender, msg.value, tokensCreated);
    }

    // Using a function rather than a state variable, as it reduces the risk of inconsistent state
    function isMinTokensReached() constant returns (bool) {
        return tokensCreated >= minTokensToCreate;
    }

    function isMaxTokensReached() constant returns (bool) {
        return tokensCreated >= maxTokensToCreate;
    }

    function mgmtIssueBountyToken(
        address _recipientAddress,
        uint _amount
    ) noEther onlyManagementBody onlyCanIssueBountyToken(_amount) returns (bool){
        // send token to the specified address
        balances[_recipientAddress] += _amount;
        bountyTokensCreated += _amount;

        // event
        evMgmtIssueBountyToken(msg.sender, msg.value, _recipientAddress, _amount, true);

    }

    function mgmtDistribute() onlyManagementBody hasEther onlyHarvestEnabled onlyDistributionNotReady {
        distributeDownstream(mgmtRewardPercentage);
    }

    function distributeDownstream(uint _mgmtPercentage) internal onlyDistributionNotInProgress {

        // transfer all balance from the following accounts
        // (1) HONG main account,
        // (2) managementFeeWallet,
        // (3) rewardWallet
        // (4) extraBalanceWallet
        // to returnWallet

        // And allocate _mgmtPercentage of the fund to ManagementBody

        // State changes first (even though it feels backwards)
        isDistributionInProgress = true;
        isDistributionReady = true;

        payBalanceToReturnWallet();
        managementFeeWallet.payBalanceToReturnWallet();
        rewardWallet.payBalanceToReturnWallet();
        extraBalanceWallet.payBalanceToReturnWallet();

        // transfer _mgmtPercentage of returns to mgmt Wallet
        if (_mgmtPercentage > 0) returnWallet.payManagementBodyPercent(_mgmtPercentage);
        returnWallet.switchToDistributionMode(tokensCreated + bountyTokensCreated);

        // Token holder can claim the remaining fund (the total amount harvested/ to be distributed) starting from here
        evMgmtDistributed(msg.sender, msg.value, returnWallet.balance, true);
        isDistributionInProgress = false;
    }

    function payBalanceToReturnWallet() internal {
        if (!returnWallet.send(this.balance))
            doThrow("payBalanceToReturnWallet:sendFailed");
            return;
    }

    function min(uint a, uint b) constant internal returns (uint) {
        return (a < b) ? a : b;
    }

    function tryToLockFund() internal {
        // ICO Diagram: https://github.com/hongcoin/DO/wiki/ICO-Period-and-Target

        if (isFundReleased) {
            // Do not change the state anymore
            return;
        }

        // Case A
        isFundLocked = isMaxTokensReached();

        // if we've reached the 30 day mark, try to lock the fund
        if (!isFundLocked && !isDayThirtyChecked && (now >= closingTime)) {
            if (isMinTokensReached()) {
                // Case B
                isFundLocked = true;
            }
            isDayThirtyChecked = true;
        }

        // if we've reached the 60 day mark, try to lock the fund
        if (!isFundLocked && !isDaySixtyChecked && (now >= (closingTime + closingTimeExtensionPeriod))) {
            if (isMinTokensReached()) {
                // Case C
                isFundLocked = true;
            }
            isDaySixtyChecked = true;
        }

        if (isDaySixtyChecked && !isMinTokensReached()) {
            // Case D
            // Mark the release state. No fund should be accepted anymore
            isFundReleased = true;
        }
    }

    function tokensAvailableAtTierInternal(uint8 _currentTier, uint _tokensPerTier, uint _tokensCreated) constant returns (uint) {
        uint tierThreshold = (_currentTier+1) * _tokensPerTier;

        // never go above maxTokensToCreate, which could happen if the max is not a multiple of _tokensPerTier
        if (tierThreshold > maxTokensToCreate) {
            tierThreshold = maxTokensToCreate;
        }

        // this can happen on the final purchase in the last tier
        if (_tokensCreated > tierThreshold) {
            return 0;
        }

        return tierThreshold - _tokensCreated;
    }

    function tokensAvailableAtCurrentTier() constant returns (uint) {
        return tokensAvailableAtTierInternal(getCurrentTier(), tokensPerTier, tokensCreated);
    }

    function getCurrentTier() constant returns (uint8) {
        uint8 tier = (uint8) (tokensCreated / tokensPerTier);
        return (tier > 4) ? 4 : tier;
    }

    function pricePerTokenAtCurrentTier() constant returns (uint) {
        return weiPerInitialHONG * divisor() / 100;
    }

    function divisor() constant returns (uint divisor) {

        // Quantity divisor model: based on total quantity of coins issued
        // Price ranged from 1.0 to 1.20 Ether for all HONG Tokens with a 0.05 ETH increase for each tier

        // The number of (base unit) tokens per wei is calculated
        // as `msg.value` * 100 / `divisor`

        return 100 + getCurrentTier() * 5;
    }
}


contract HONGInterface is ErrorHandler, HongConfiguration {

    // we do not have grace period. Once the goal is reached, the fund is secured

    address public managementBodyAddress;

    // 3 most important votings in blockchain
    mapping (uint => mapping (address => uint)) public votedKickoff;
    mapping (address => uint) public votedFreeze;
    mapping (address => uint) public votedHarvest;
    mapping (uint => uint256) public supportKickoffQuorum;
    uint256 public supportFreezeQuorum;
    uint256 public supportHarvestQuorum;
    uint public totalInitialBalance;
    uint public annualManagementFee;

    function voteToKickoffNewFiscalYear();
    function voteToFreezeFund();
    function recallVoteToFreezeFund();
    function voteToHarvestFund();

    function collectMyReturn();

    // Trigger the following events when the voting result is available
    event evKickoff(address msg_sender, uint msg_value, uint _fiscal);
    event evFreeze(address msg_sender, uint msg_value);
    event evHarvest(address msg_sender, uint msg_value);
}



// The HONG contract itself
contract HONG is HONGInterface, Token, TokenCreation {

    function HONG(
        address _managementBodyAddress,
        uint _closingTime,
        uint _closingTimeExtensionPeriod,
        uint _lastKickoffDateBuffer,
        uint _minTokensToCreate,
        uint _maxTokensToCreate,
        uint _tokensPerTier,
        bool _isInTestMode
    ) TokenCreation(_managementBodyAddress, _closingTime) {

        managementBodyAddress = _managementBodyAddress;
        closingTimeExtensionPeriod = _closingTimeExtensionPeriod;
        lastKickoffDateBuffer = _lastKickoffDateBuffer;

        minTokensToCreate = _minTokensToCreate;
        maxTokensToCreate = _maxTokensToCreate;
        tokensPerTier = _tokensPerTier;
        isInTestMode = _isInTestMode;

        returnWallet = new ReturnWallet(managementBodyAddress);
        rewardWallet = new RewardWallet(address(returnWallet));
        managementFeeWallet = new ManagementFeeWallet(managementBodyAddress, address(returnWallet));
        extraBalanceWallet = new ExtraBalanceWallet(address(returnWallet));

        if (address(extraBalanceWallet) == 0)
            doThrow("extraBalanceWallet:0");
        if (address(returnWallet) == 0)
            doThrow("returnWallet:0");
        if (address(rewardWallet) == 0)
            doThrow("rewardWallet:0");
        if (address(managementFeeWallet) == 0)
            doThrow("managementFeeWallet:0");
    }

    function () returns (bool success) {
        if (!isFromManagedAccount()) {
            // We do not accept donation here. Any extra amount sent to us after fund locking process, will be refunded
            return createTokenProxy(msg.sender);
        }
        else {
            evRecord(msg.sender, msg.value, "Recevied ether from ManagedAccount");
            return true;
        }
    }

    function isFromManagedAccount() internal returns (bool) {
        return msg.sender == address(extraBalanceWallet)
            || msg.sender == address(returnWallet)
            || msg.sender == address(rewardWallet)
            || msg.sender == address(managementFeeWallet);
    }

    /*
     * Voting for some critical steps, on blockchain
     */
    function voteToKickoffNewFiscalYear() onlyTokenHolders noEther onlyLocked {
        // this is the only valid fiscal year parameter, so there's no point in letting the caller pass it in.
        // Best case is they get it wrong and we throw, worst case is the get it wrong and there's some exploit
        uint _fiscal = currentFiscalYear + 1;

        if(!isKickoffEnabled[1]){  // if the first fiscal year is not kicked off yet
            // accept voting

        }else if(currentFiscalYear <= 3){  // if there was any kickoff() enabled before already

            if(lastKickoffDate + lastKickoffDateBuffer < now){ // 2 months from the end of the fiscal year
                // accept voting
            }else{
                // we do not accept early kickoff
                doThrow("kickOff:tooEarly");
                return;
            }
        }else{
            // do not accept kickoff anymore after the 4th year
            doThrow("kickOff:4thYear");
            return;
        }


        supportKickoffQuorum[_fiscal] -= votedKickoff[_fiscal][msg.sender];
        supportKickoffQuorum[_fiscal] += balances[msg.sender];
        votedKickoff[_fiscal][msg.sender] = balances[msg.sender];


        uint threshold = (kickoffQuorumPercent*(tokensCreated + bountyTokensCreated)) / 100;
        if(supportKickoffQuorum[_fiscal] > threshold) {
            if(_fiscal == 1){
                // transfer fund in extraBalance to main account
                extraBalanceWallet.returnBalanceToMainAccount();

                // reserve mgmtFeePercentage of whole fund to ManagementFeePoolWallet
                totalInitialBalance = this.balance;
                uint fundToReserve = (totalInitialBalance * mgmtFeePercentage) / 100;
                annualManagementFee = fundToReserve / 4;
                if(!managementFeeWallet.send(fundToReserve)){
                    doThrow("kickoff:ManagementFeePoolWalletFail");
                    return;
                }

            }
            isKickoffEnabled[_fiscal] = true;
            currentFiscalYear = _fiscal;
            lastKickoffDate = now;

            // transfer annual management fee from reservedWallet to mgmtWallet (external)
            managementFeeWallet.payManagementBodyAmount(annualManagementFee);

            evKickoff(msg.sender, msg.value, _fiscal);
            evIssueManagementFee(msg.sender, msg.value, annualManagementFee, true);
        }
    }

    function voteToFreezeFund() onlyTokenHolders noEther onlyLocked notFinalFiscalYear onlyDistributionNotInProgress {

        supportFreezeQuorum -= votedFreeze[msg.sender];
        supportFreezeQuorum += balances[msg.sender];
        votedFreeze[msg.sender] = balances[msg.sender];

        uint threshold = ((tokensCreated + bountyTokensCreated) * freezeQuorumPercent) / 100;
        if(supportFreezeQuorum > threshold){
            isFreezeEnabled = true;
            distributeDownstream(0);
            evFreeze(msg.sender, msg.value);
        }
    }

    function recallVoteToFreezeFund() onlyTokenHolders onlyNotFrozen noEther {
        supportFreezeQuorum -= votedFreeze[msg.sender];
        votedFreeze[msg.sender] = 0;
    }

    function voteToHarvestFund() onlyTokenHolders noEther onlyLocked onlyFinalFiscalYear {

        supportHarvestQuorum -= votedHarvest[msg.sender];
        supportHarvestQuorum += balances[msg.sender];
        votedHarvest[msg.sender] = balances[msg.sender];

        uint threshold = ((tokensCreated + bountyTokensCreated) * harvestQuorumPercent) / 100;
        if(supportHarvestQuorum > threshold) {
            isHarvestEnabled = true;
            evHarvest(msg.sender, msg.value);
        }
    }

    function collectMyReturn() onlyTokenHolders noEther onlyDistributionReady {
        uint tokens = balances[msg.sender];
        balances[msg.sender] = 0;
        returnWallet.payTokenHolderBasedOnTokenCount(msg.sender, tokens);
    }

    function mgmtInvestProject(
        address _projectWallet,
        uint _amount
    ) onlyManagementBody hasEther returns (bool _success) {

        if(!isKickoffEnabled[currentFiscalYear] || isFreezeEnabled || isHarvestEnabled){
            evMgmtInvestProject(msg.sender, msg.value, _projectWallet, _amount, false);
            return;
        }

        if(_amount >= this.balance){
            doThrow("failed:mgmtInvestProject: amount >= actualBalance");
            return;
        }

        // send the balance (_amount) to _projectWallet
        if (!_projectWallet.call.value(_amount)()) {
            doThrow("failed:mgmtInvestProject: cannot send to _projectWallet");
            return;
        }

        evMgmtInvestProject(msg.sender, msg.value, _projectWallet, _amount, true);
    }

    function transfer(address _to, uint256 _value) returns (bool success) {

        // Update kickoff voting record for the next fiscal year for an address, and the total quorum
        if(currentFiscalYear < 4){
            if(votedKickoff[currentFiscalYear+1][msg.sender] > _value){
                votedKickoff[currentFiscalYear+1][msg.sender] -= _value;
                supportKickoffQuorum[currentFiscalYear+1] -= _value;
            }else{
                supportKickoffQuorum[currentFiscalYear+1] -= votedKickoff[currentFiscalYear+1][msg.sender];
                votedKickoff[currentFiscalYear+1][msg.sender] = 0;
            }
        }

        // Update Freeze and Harvest voting records for an address, and the total quorum
        if(votedFreeze[msg.sender] > _value){
            votedFreeze[msg.sender] -= _value;
            supportFreezeQuorum -= _value;
        }else{
            supportFreezeQuorum -= votedFreeze[msg.sender];
            votedFreeze[msg.sender] = 0;
        }

        if(votedHarvest[msg.sender] > _value){
            votedHarvest[msg.sender] -= _value;
            supportHarvestQuorum -= _value;
        }else{
            supportHarvestQuorum -= votedHarvest[msg.sender];
            votedHarvest[msg.sender] = 0;
        }

        if (isFundLocked && super.transfer(_to, _value)) {
            return true;
        } else {
            if(!isFundLocked){
                doThrow("failed:transfer: isFundLocked is false");
            }else{
                doThrow("failed:transfer: cannot send send to _projectWallet");
            }
            return;
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"isFundReleased","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"mgmtDistribute","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"weiPerInitialHONG","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votedHarvest","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minTokensToCreate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"supportHarvestQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"extraBalanceWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalInitialBalance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"divisor","outputs":[{"name":"divisor","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToHarvestFund","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"pricePerTokenAtCurrentTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"mgmtFeePercentage","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensCreated","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDistributionReady","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"closingTimeExtensionPeriod","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"votedKickoff","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"lastKickoffDateBuffer","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDayThirtyChecked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isFreezeEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"collectMyReturn","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"isMinTokensReached","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDistributionInProgress","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"lastKickoffDate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"managementFeeWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"supportFreezeQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensAvailableAtCurrentTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTier","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"isFundLocked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votedFreeze","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"returnWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"kickoffQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isMaxTokensReached","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"freezeQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxTokensToCreate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_projectWallet","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mgmtInvestProject","outputs":[{"name":"_success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isHarvestEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"taxPaid","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxBountyTokens","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToKickoffNewFiscalYear","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"supportKickoffQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isInTestMode","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"managementBodyAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"harvestQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"isKickoffEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"mgmtRewardPercentage","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"recallVoteToFreezeFund","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"bountyTokensCreated","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"annualManagementFee","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_currentTier","type":"uint8"},{"name":"_tokensPerTier","type":"uint256"},{"name":"_tokensCreated","type":"uint256"}],"name":"tokensAvailableAtTierInternal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDaySixtyChecked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToFreezeFund","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"refundMyIcoInvestment","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"rewardWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_recipientAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mgmtIssueBountyToken","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"currentFiscalYear","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_managementBodyAddress","type":"address"},{"name":"_closingTime","type":"uint256"},{"name":"_closingTimeExtensionPeriod","type":"uint256"},{"name":"_lastKickoffDateBuffer","type":"uint256"},{"name":"_minTokensToCreate","type":"uint256"},{"name":"_maxTokensToCreate","type":"uint256"},{"name":"_tokensPerTier","type":"uint256"},{"name":"_isInTestMode","type":"bool"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evIssueManagementFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_recipientAddress","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evMgmtIssueBountyToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evMgmtDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_projectWallet","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"result","type":"bool"}],"name":"evMgmtInvestProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evLockFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evReleaseFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"evTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"evMinTokensReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"evCreatedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"result","type":"bool"}],"name":"evRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_fiscal","type":"uint256"}],"name":"evKickoff","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"message","type":"string"}],"name":"evRecord","type":"event"}]

6000805460ff19168155662386f26fc10000600290815560a060405260046060527f484f4e470000000000000000000000000000000000000000000000000000000060805260038054928190527f484f4e47000000000000000000000000000000000000000000000000000000088155916100ca917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60206101006001851615026000190190931691909104601f01919091048101905b8082111561015a57600081556001016100b6565b50506040805180820190915260028082527fc4a60000000000000000000000000000000000000000000000000000000000006020928301908152600480546000829052915160ff1916811781559261015e927f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6001841615610100026000190190931604601f01048101906100b6565b5090565b50506005805460ff19169055621e848060065562278d006007556305f5e1006008908155630ee6b2806009556302faf080600a55630190c800600b556014600c819055600d91909155600e8190556032600f5560105560405161010080614023833981016040528080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919050508787601a8054600160a060020a0319168317905560018190555050601a8054600160a060020a0319168917908190556007879055600b86905560088590556009849055600a8390556000805460ff191683179055604051600160a060020a0391909116906105938061060a8339018082600160a060020a03168152602001915050604051809103906000f0602660046101000a815481600160a060020a0302191690830217905550602660049054906101000a9004600160a060020a031660405161038680610b9d8339018082600160a060020a03168152602001915050604051809103906000f0602760006101000a815481600160a060020a0302191690830217905550601a60009054906101000a9004600160a060020a0316602660049054906101000a9004600160a060020a031660405161041a80610f238339018083600160a060020a0316815260200182600160a060020a0316815260200192505050604051809103906000f0602860006101000a815481600160a060020a0302191690830217905550602660049054906101000a9004600160a060020a03166040516104138061133d8339018082600160a060020a03168152602001915050604051809103906000f0601b8054600160a060020a0319169190911790819055600160a060020a0316600014156104f6576104f6604060405190810160405280601481526020017f657874726142616c616e636557616c6c65743a300000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156104d65780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561060757610002565b6026546401000000009004600160a060020a03166000141561054f5760408051808201909152600e81527f72657475726e57616c6c65743a30000000000000000000000000000000000000602082015261054f9061043d565b602754600160a060020a0316600014156105a05760408051808201909152600e81527f72657761726457616c6c65743a3000000000000000000000000000000000000060208201526105a09061043d565b602854600160a060020a0316600014156105f15760408051808201909152601581527f6d616e6167656d656e7446656557616c6c65743a30000000000000000000000060208201526105f19061043d565b50505050505050506128d3806117506000396000f35b5056606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806105938339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506105068061008d6000396000f3606060405236156100825760e060020a60003504632033d9ae81146100b1578063283a6e88146101b4578063345591ec146101c65780637e1c0c09146101d95780638da5cb5b146101e25780639f3ef430146101f9578063b656e9f41461024a578063b8b2776514610256578063dab8263a146102b4578063ed4460ef146102bd575b6102c66000805460ff75010000000000000000000000000000000000000000009091041615156102da57610002565b6102e06004356000546101009004600160a060020a03908116339091161461031157604080518082019091526009815260b960020a6837b7363ca7bbb732b9026020820152610373905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561037057610002565b6102e2600154600160a060020a031681565b6102c660015460a060020a900460ff1681565b6102ff60035481565b6102e26000546101009004600160a060020a031681565b6102e06004356024356000546101009004600160a060020a03908116339091161461037857604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b6102c660005460ff1681565b6102e060043560015461037090600160a060020a03168260005433600160a060020a0390811661010090920416146104ba57604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b6102ff60045481565b6102ff60025481565b604080519115158252519081900360200190f35b50600190565b005b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b6001805474ff0000000000000000000000000000000000000000191660a060020a1790556000805475ff00000000000000000000000000000000000000000019169055600381905530600160a060020a03163160028190558190046004555b50565b610370565b6103cd8282600460005054025b6000546101009004600160a060020a0390811633909116146103d157604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b5050565b600034111561040457604080518082019091526007815260c960020a663737a2ba3432b90260208201526103cd906100fb565b604051600160a060020a038316908290600081818185876185025a03f19250505015156104685760408051808201909152601181527f7061794f75743a73656e644661696c656400000000000000000000000000000060208201526103cd906100fb565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25050565b60003411156104ed57604080518082019091526007815260c960020a663737a2ba3432b90260208201526103cd906100fb565b6103cd8260648330600160a060020a031631020461038556606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806103868339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506102f98061008d6000396000f3606060405236156100405760e060020a60003504635b2cdda3811461006f5780638da5cb5b14610081578063b656e9f414610098578063fc44fd28146100a4575b6101de6000805460ff75010000000000000000000000000000000000000000009091041615156101ea57610002565b6101f0600154600160a060020a031681565b6101f06000546101009004600160a060020a031681565b6101de60005460ff1681565b6000805475ff0000000000000000000000000000000000000000001916908190556001546102039161020591600160a060020a0390811691308216319133811661010090920416146102075760a0604052600960609081527f6f6e6c794f776e65720000000000000000000000000000000000000000000000608052610249905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101be5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156102f657610002565b15156060908152602090f35b50600190565b600160a060020a03166060908152602090f35b005b565b600034111561024e5760a0604052600760609081527f6e6f45746865720000000000000000000000000000000000000000000000000060805261024990610125565b6102f2565b81816060600081818185876185025a03f19250505015156102a65760408051808201909152601181527f7061794f75743a73656e644661696c6564000000000000000000000000000000602082015261024990610125565b6040805133600160a060020a03168152346020820152808201839052905183917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb718605919081900360600190a25b5050565b5056606060408181526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790558061041a833960a09052516080513380600060016101000a815481600160a060020a03021916908302179055505081600160006101000a815481600160a060020a030219169083021790555080600260006101000a815481600160a060020a0302191690830217905550505061036f806100ab6000396000f3606060405236156100565760e060020a60003504635b2cdda381146100855780638da5cb5b14610097578063a8bcbf3c146100ae578063b656e9f4146101d4578063bb582db6146101e0578063fc44fd28146101f2575b61022f6000805460ff750100000000000000000000000000000000000000000090910416151561024357610002565b610249600254600160a060020a031681565b6102496000546101009004600160a060020a031681565b61026660043560015461026890600160a060020a0316825b6000546101009004600160a060020a0390811633909116146102c05760408051808201909152600981527f6f6e6c794f776e657200000000000000000000000000000000000000000000006020820152610306905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101b45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561026857610002565b61022f60005460ff1681565b610249600154600160a060020a031681565b6102666000805475ff0000000000000000000000000000000000000000001916905560025461026b90600160a060020a03908116903016316100c6565b604080519115158252519081900360200190f35b50600190565b60408051600160a060020a03929092168252519081900360200190f35b005b50565b565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25b5050565b600034111561030b5760408051808201909152600781527f6e6f45746865720000000000000000000000000000000000000000000000000060208201526103069061011b565b6102bc565b604051600160a060020a038316908290600081818185876185025a03f192505050151561026d5760408051808201909152601181527f7061794f75743a73656e644661696c656400000000000000000000000000000060208201526103069061011b56606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806104138339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506103868061008d6000396000f36060604052361561004b5760e060020a600035046351fa7efd811461007a5780638da5cb5b146101a5578063b1a8b25a146101bc578063b656e9f4146101fd578063fc44fd2814610209575b6102466000805460ff750100000000000000000000000000000000000000000090910416151561025a57610002565b61026060043560005461027f906101009004600160a060020a0316825b6000546101009004600160a060020a0390811633909116146102d75760408051808201909152600981527f6f6e6c794f776e65720000000000000000000000000000000000000000000000602082015261031d905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101855780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561027f57610002565b6102626000546101009004600160a060020a031681565b6102606000805475ff000000000000000000000000000000000000000000191690819055610282906101009004600160a060020a0390811690301631610097565b61024660005460ff1681565b6102606000805475ff0000000000000000000000000000000000000000001916905560015461028290600160a060020a0390811690301631610097565b604080519115158252519081900360200190f35b50600190565b005b60408051600160a060020a03929092168252519081900360200190f35b50565b565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25b5050565b60003411156103225760408051808201909152600781527f6e6f457468657200000000000000000000000000000000000000000000000000602082015261031d906100ec565b6102d3565b604051600160a060020a038316908290600081818185876185025a03f19250505015156102845760408051808201909152601181527f7061794f75743a73656e644661696c6564000000000000000000000000000000602082015261031d906100ec56606060405236156102be5760e060020a600035046302410cf68114610337578063044a5f971461034857806306fdde031461039f578063089aa819146103fd5780630c103837146104065780630c3b7b961461041e5780630d40e8d61461042757806314841164146104305780631d107603146104425780631f2dc5ef1461044b57806321d3523c14610459578063313ce56714610467578063342d91851461047357806335d37dbb14610482578063427500201461048b57806344440a59146104945780634845d3f8146104a7578063490fc399146104b05780634b6753bc146104d557806353bc147e146104de5780635474fbd3146104e7578063558305f9146104f957806356a3f4ef146105055780635b6aa3c21461051357806360d3e4c51461052457806367cf91c9146105365780636b9c1d221461053f57806370606cda1461055157806370a082311461055a57806373f5f8ee1461057c5780637412c2231461058d5780637895f853146105ad5780637c2b8d0a146105b95780637e4a1731146105d157806381dd70db146105eb5780638c32e774146105f45780639496df3f1461060657806395d89b411461060f5780639bd90aae1461066d5780639cb74ab6146106765780639e47214a146106d6578063a8d5652e146106e7578063a9059cbb146106f0578063a988e3711461075e578063ab71b8ac14610776578063adbda5a81461077f578063aea3ad8c14610791578063b656e9f4146107a9578063ba0bface146107b5578063bf53e3ba146107c7578063c86a9dea146107d0578063cdd8d4e8146107eb578063cfebb88b146107f4578063da228f9c14610800578063dc7049bf14610809578063df23481514610812578063e0e325041461084c578063e2649caf1461085f578063e84f70541461086d578063fb75b2c7146108ad578063fea5d7b1146108bf578063ffa309e4146108fd575b610906600061091a601b5460009033600160a060020a03908116911614806102fd57506026546401000000009004600160a060020a0390811633909116145b806103175750602754600160a060020a0390811633909116145b80610a1e5750602854600160a060020a0390811633909116149050610a1b565b610906602154610100900460ff1681565b610a25601a54600160a060020a039081163390911614610fc05760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f647900000000000000000000000000006020820152610d7290610ba0565b6040805160038054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560025481565b610a9560043560146020526000908152604090205481565b610a9560085481565b610a9560175481565b610aa7601b54600160a060020a031681565b610a9560185481565b610a955b6000611119610591565b610a25600061112933610561565b610ac460055460ff1681565b610a95600060646112cf61044f565b610a95600d5481565b610a9560205481565b6109066026546301000000900460ff1681565b610a9560075481565b601260209081526004356000908152604080822090925260243581522054610a959081565b610a9560015481565b610a95600b5481565b61090660215462010000900460ff1681565b61090660265460ff1681565b610a2560006112db33610561565b6109065b6008546020541015610a1b565b61090660265462010000900460ff1681565b610a9560245481565b610aa7602854600160a060020a031681565b610a9560165481565b610a956004355b600160a060020a03166000908152601e602052604090205490565b610a955b6000610a1e611420610591565b610ac45b600a546020546000919004600460ff82161161142c578061142f565b61090660215460ff1681565b610a9560043560136020526000908152604090205481565b610aa76026546401000000009004600160a060020a031681565b610a9560105481565b6109065b602054600954901015610a1b565b610a95600f5481565b6040805160048054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560095481565b610906600435602435601a54600090600160a060020a0390811633909116146114355760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b610906602654610100900460ff1681565b610a95600a5481565b6109066004356024356000600460236000505410156116c057602354600101815260126020908152604080832033600160a060020a031684529091528120548290111561166957604080822080548490039055602354600101825260156020528120805483900390556116c0565b610a95600435601d6020526000908152604090205481565b610a9560065481565b610a2560006000600061184a33610561565b610a9560043560156020526000908152604090205481565b61090660005460ff1681565b610aa7601a54600160a060020a031681565b610a95600e5481565b61090660043560256020526000908152604090205460ff1681565b610a95600c5481565b610a25611c6f33610561565b610a9560225481565b610a9560195481565b610a956004356024356044355b6009546000906001850160ff1684029081111561083b57506009545b80831115611d445760009150611d4a565b6109066021546301000000900460ff1681565b610a256000611d5233610561565b610a25600060006000600060006000341115611f4457604080518082019091526007815260c960020a663737a2ba3432b9026020820152611f7b90610ba0565b610aa7602754600160a060020a031681565b610906600435602435600060003411156122b257604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b610a9560235481565b604080519115158252519081900360200190f35b151561097b57610a1e3360006000600060006000600060006000600060006000602160009054906101000a900460ff1615610adb57604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152610b2d90610ba0565b6040805133600160a060020a0316815234602082015260608183018190526022908201527f52656365766965642065746865722066726f6d204d616e616765644163636f7560808201527f6e7400000000000000000000000000000000000000000000000000000000000060a082015290517fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9109181900360c00190a15060015b90565b9050610a1b565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610a875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b602154610100900460ff1615610c595760408051808201909152600b81527f6e6f7452656c65617365640000000000000000000000000000000000000000006020820152610b2d90610ba0565b60009a505b50505050505050505050919050565b611468606060405190810160405280603381526020017f6661696c65643a7472616e736665723a2063616e6e6f742073656e642073656e81526020017f6420746f205f70726f6a65637457616c6c6574000000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610c395780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156112cc57610002565b60003411610c8c57604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610b2d90610ba0565b6000995060009850610c9c610517565b97506064610ca861044f565b60025402049650349550610cba610580565b94508460001415610d055760408051808201909152600e81527f6e6f546f6b656e73546f53656c6c0000000000000000000000000000000000006020820152610b2890610ba0565b94505b868610610d25578686049350610d74858560008183106123d857816123da565b50600160a060020a038b166000908152601c60209081526040808320805489019055600254601d9092529091208054918b028a039182019055610df4602154610100900460ff16156123e1575b565b9250846000148015610d895750602054600954145b15610d92578392505b600160a060020a038c166000908152601e60209081526040808320805487019055815486018255601c90915290208054888502908101909155998301999889019891506064610ddf61044f565b60025402049650348990039550610d02610580565b6000811115610e6257604051601b54600160a060020a031690600090839082818181858883f193505050501515610e625760408051808201909152601581527f657874726142616c616e63653a73656e644661696c00000000000000000000006020820152610b2d90610ba0565b60408051600160a060020a0333811682523460208301528183018d90529151918e16917fe2cbb9b7dba3b339b259c4f199464ccf9c277a3ff556b2c0db2b0abacdbeedde9181900360600190a287158015610ec05750610ec0610517565b15610f1457602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b60215460ff1615610f63576040805133600160a060020a0316815234602082015281517fbb9b02a8573d9d68d38e541b0e14a32a2dfe031aade3a25dd3de928fbc3b309d929181900390910190a15b602154610100900460ff1615610fb7576040805133600160a060020a0316815234602082015281517f32f04209c78f4db9d444b9dc3182c73fc63bb6fdd517c19f36798ad870fb1cfe929181900390910190a15b60019a50610b2d565b60003411610ff357604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610d7290610ba0565b602654610100900460ff1615156110415760408051808201909152601281527f6f6e6c7948617276657374456e61626c656400000000000000000000000000006020820152610d7290610ba0565b6026546301000000900460ff16156110905760408051808201909152601881527f6f6e6c79446973747269627574696f6e4e6f74526561647900000000000000006020820152610d7290610ba0565b600c54610d72905b60265462010000900460ff16156124ec5760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b505050505081565b60050260640160ff169050610a1b565b6000141561115c5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561119457604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6112cc565b60215460ff1615156111cd5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010156112165760408051808201909152601381527f63757272656e7446697363616c596561723c3400000000000000000000000000602082015261118f90610ba0565b5033600160a060020a0316600090815260146020818152604080842080546017805491909103808255601e85529290952080549290920185559054928252919091556022549054600e549254606491909201929092029190910490819011156112cc576026805461ff0019166101001790556040805133600160a060020a0316815234602082015281517fe6a8fe04d793748334015ee5de6eb69ddb7c3b29df2251bc5b376305ae5cd800929181900390910190a15b50565b60025402049050610a1b565b6000141561130e5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561134157604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6026546301000000900460ff1615156113915760408051808201909152601581527f6f6e6c79446973747269627574696f6e52656164790000000000000000000000602082015261118f90610ba0565b50600160a060020a033381166000818152601e602052604080822080549083905560265482517f9f3ef4300000000000000000000000000000000000000000000000000000000081526004810195909552602485018290529151909464010000000090920490911692639f3ef430926044808301939192829003018183876161da5a03f1156100025750505050565b602054600a549061081f565b60045b91505090565b6000341161146d57604080518082019091526008815260c160020a673430b9a2ba3432b902602082015261146890610ba0565b61155b565b60235460009081526025602052604090205460ff161580611490575060265460ff165b806114a25750602654610100900460ff165b156115615760408051600160a060020a033381168252346020830152851681830152606081018490526000608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a161155b565b60408051600160a060020a033381168252346020830152851681830152606081018490526001608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a15b92915050565b30600160a060020a03163182106115da57611468606060405190810160405280603181526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a20616d6f756e7481526020017f203e3d2061637475616c42616c616e6365000000000000000000000000000000815260200150610ba0565b604051600160a060020a038416908390600081818185876185025a03f192505050151561150357611468606060405190810160405280603781526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a2063616e6e6f7481526020017f2073656e6420746f205f70726f6a65637457616c6c6574000000000000000000815260200150610ba0565b602380546001908101600081815260126020818152604080842033600160a060020a031680865290835281852054958552601583528185208054969096039095559554909401825283528381209181529152908120555b33600160a060020a0316600090815260136020526040902054829011156116fb57604060002080548390039055601680548390039055611721565b33600160a060020a03166000908152601360205260408120805460168054919091039055555b33600160a060020a03166000908152601460205260409020548290111561175c57604060002080548390039055601780548390039055611782565b33600160a060020a03166000908152601460205260408120805460178054919091039055555b60215460ff1680156117c957506117c98383600060003411156127d357604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b156117d65750600161155b565b60215460ff161515610b3c57611468606060405190810160405280602681526020017f6661696c65643a7472616e736665723a20697346756e644c6f636b656420697381526020017f2066616c73650000000000000000000000000000000000000000000000000000815260200150610ba0565b6000141561187d5760408051808201909152601081526000805160206128b383398151915260208201526118b090610ba0565b60003411156118b557604080518082019091526007815260c960020a663737a2ba3432b90260208201526118b090610ba0565b611c6a565b60215460ff1615156118ee5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad9590260208201526118b090610ba0565b6023546001600081905260256020527f20a3e2dd35f58e582c5288344c035e137cace924bb9daf3762b8ef5a58327e26549101935060ff1615156119315761194c565b60235460039011611ace57600b546024544291011015611b0b575b6000838152601260209081526040808320600160a060020a03331680855290835281842080548886526015808652848720805492909203808355938752601e86529386208054909301815591549055602254835460105495899052929093525460649190920190920291909104925082901115611c6a578260011415611b4857601b60009054906101000a9004600160a060020a0316600160a060020a031663b1a8b25a6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050505030600160a060020a03908116316018819055600d5460046064929091029190910490810460195560285460405191921690600090839082818181858883f193505050501515611b48576118b0606060405190810160405280602381526020017f6b69636b6f66663a4d616e6167656d656e74466565506f6f6c57616c6c65744681526020017f61696c0000000000000000000000000000000000000000000000000000000000815260200150610ba0565b60408051808201909152600f81527f6b69636b4f66663a34746859656172000000000000000000000000000000000060208201526118b090610ba0565b60408051808201909152601081527f6b69636b4f66663a746f6f4561726c790000000000000000000000000000000060208201526118b090610ba0565b600083815260256020526040808220805460ff19166001179055602385905542602490815581516028546019547fa8bcbf3c00000000000000000000000000000000000000000000000000000000835260048301529251600160a060020a03939093169363a8bcbf3c93838301939192909190829003018183876161da5a03f1156100025750506040805133600160a060020a0316815234602082015280820186905290517f43b50d8e46a4af80642a7d3903d182b8f5ab87b17e5bef9fd8ba4c3ba6ef9f0f92509081900360600190a16040805160195433600160a060020a03168252346020830152818301526001606082015290517f47fa1cbddad7488af88763b839f5f5436be7541a8bbfd7fa14d9c6c7581e8c1d9181900360800190a15b505050565b60001415611ca25760408051808201909152601081526000805160206128b38339815191526020820152610d7290610ba0565b60265460ff1615611cea5760408051808201909152600d81527f6f6e6c794e6f7446726f7a656e000000000000000000000000000000000000006020820152610d7290610ba0565b6000341115611d1d57604080518082019091526007815260c960020a663737a2ba3432b9026020820152610d7290610ba0565b33600160a060020a0316600090815260136020526040812080546016805491909103905555565b82810391505b509392505050565b60001415611d855760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b6000341115611db857604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b60215460ff161515611df15760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010611e395760408051808201909152601481527f63757272656e7446697363616c596561723e3d34000000000000000000000000602082015261118f90610ba0565b60265462010000900460ff1615611e875760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b5033600160a060020a0316600090815260136020818152604080842080546016805491909103808255601e8552929095208054929092018555905492825291909155600f5460225491549254606493909201029190910490819011156112cc576026805460ff19166001179055611efe6000611098565b6040805133600160a060020a0316815234602082015281517fa3a0ee24545ff02dd0d20d670461167188c7adc4c2973fd0d1b294e1e576fc79929181900390910190a150565b60215460ff1615611f8057604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152611f7b90610ba0565b6122ab565b611f8933610561565b60001415611fbc5760408051808201909152601081526000805160206128b38339815191526020820152611f7b90610ba0565b33600160a060020a03166000908152601c602052604081205414156120185760408051808201909152600a81527f6e6f576569476976656e000000000000000000000000000000000000000000006020820152611f7b90610ba0565b6020805433600160a060020a03166000908152601e90925260409091205411156120795760408051808201909152601181527f696e76616c6964546f6b656e436f756e740000000000000000000000000000006020820152611f7b90610ba0565b612081610517565b600160a060020a033381166000908152601c602090815260408083208054601d8085528386208054601e87528588208054908990559488905591865286905584548390039094558251601b547f51fa7efd000000000000000000000000000000000000000000000000000000008252600482018690529351979c50909a509298509650889550909216926351fa7efd926024818101939291829003018183876161da5a03f11561000257505060405133600160a060020a03169150600090839082818181858883f1935050505015156121f65733600160a060020a03167fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b3533348460006040518085600160a060020a03168152602001848152602001838152602001821515815260200194505050505060405180910390a260408051808201909152601181527f726566756e643a53656e644661696c65640000000000000000000000000000006020820152611f7b90610ba0565b6040805133600160a060020a03168082523460208301528183018490526001606083015291517fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b359181900360800190a2841580156122575750612257610517565b156122ab57602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b5050505050565b601a54600160a060020a0390811633909116146123065760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b6022546006548391820111156123535760408051808201909152600c81527f6869744d6178426f756e7479000000000000000000000000000000000000000060208201526123d390610ba0565b600160a060020a038481166000818152601e6020908152604091829020805488019055602280548801905581513390941684523490840152828101919091526060820185905260016080830152517fd169a02076bf076f24fa9c265d5ed41dc57e6553208e7a8e7190cd90c365f1849181900360a00190a15b5092915050565b6123cc565b825b905061155b565b6123e96105f8565b6021805460ff19169091179081905560ff161580156124155750602160029054906101000a900460ff16155b801561242357506001544210155b1561245557612430610517565b15612443576021805460ff191660011790555b6021805462ff00001916620100001790555b60215460ff1615801561247257506021546301000000900460ff16155b80156124845750600754600154014210155b156124b857612491610517565b156124a4576021805460ff191660011790555b6021805463ff000000191663010000001790555b6021546301000000900460ff1680156124d657506124d4610517565b155b15610d72576021805461ff001916610100179055565b6026805463ff0000001962ff00001990911662010000171663010000001790556125ac602654604051640100000000909104600160a060020a03908116916000913016319082818181858883f193505050501515610d7257610d72606060405190810160405280602381526020017f70617942616c616e6365546f52657475726e57616c6c65743a73656e6446616981526020017f6c65640000000000000000000000000000000000000000000000000000000000815260200150610ba0565b602860009054906101000a9004600160a060020a0316600160a060020a031663fc44fd286040518160e060020a0281526004018090506000604051808303816000876161da5a03f11561000257506040805160275460e360020a631f889fa50282529151600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750601b546040805160e360020a631f889fa50281529051600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750505060008111156126e457602660049054906101000a9004600160a060020a0316600160a060020a031663b8b27765826040518260e060020a028152600401808281526020019150506000604051808303816000876161da5a03f115610002575050505b602654602254602054604080517f2033d9ae0000000000000000000000000000000000000000000000000000000081529190920160048201529051640100000000909204600160a060020a031691632033d9ae91602480820192600092909190829003018183876161da5a03f11561000257505060265460408051600160a060020a033381168252346020830152640100000000909304909216318282015260016060830152517f6816fcd617af2edc3ccc34b8a63bab368d79f315e065779259bb6a13541eaea292509081900360800190a16000602660026101000a81548160ff0219169083021790555050565b600082116127e35750600061155b565b33600160a060020a03166000908152601e60205260409020548290101561280c5750600061155b565b600160a060020a0383166000908152601e602052604090205480830110156128365750600061155b565b600160a060020a033381166000818152601e60209081526040808320805488900390559387168083529184902080548701905583518381523491810191909152808401869052925190927fe921528ef8652e1a832f8063bcbca0186d6c5a28413c90acecaf074846c412db919081900360600190a350600161155b566f6e6c79546f6b656e486f6c6465727300000000000000000000000000000000000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d310000000000000000000000000000000000000000000000000000000057ebbed00000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000190c8000000000000000000000000000000000000000000000000000000000008f0d180000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x606060405236156102be5760e060020a600035046302410cf68114610337578063044a5f971461034857806306fdde031461039f578063089aa819146103fd5780630c103837146104065780630c3b7b961461041e5780630d40e8d61461042757806314841164146104305780631d107603146104425780631f2dc5ef1461044b57806321d3523c14610459578063313ce56714610467578063342d91851461047357806335d37dbb14610482578063427500201461048b57806344440a59146104945780634845d3f8146104a7578063490fc399146104b05780634b6753bc146104d557806353bc147e146104de5780635474fbd3146104e7578063558305f9146104f957806356a3f4ef146105055780635b6aa3c21461051357806360d3e4c51461052457806367cf91c9146105365780636b9c1d221461053f57806370606cda1461055157806370a082311461055a57806373f5f8ee1461057c5780637412c2231461058d5780637895f853146105ad5780637c2b8d0a146105b95780637e4a1731146105d157806381dd70db146105eb5780638c32e774146105f45780639496df3f1461060657806395d89b411461060f5780639bd90aae1461066d5780639cb74ab6146106765780639e47214a146106d6578063a8d5652e146106e7578063a9059cbb146106f0578063a988e3711461075e578063ab71b8ac14610776578063adbda5a81461077f578063aea3ad8c14610791578063b656e9f4146107a9578063ba0bface146107b5578063bf53e3ba146107c7578063c86a9dea146107d0578063cdd8d4e8146107eb578063cfebb88b146107f4578063da228f9c14610800578063dc7049bf14610809578063df23481514610812578063e0e325041461084c578063e2649caf1461085f578063e84f70541461086d578063fb75b2c7146108ad578063fea5d7b1146108bf578063ffa309e4146108fd575b610906600061091a601b5460009033600160a060020a03908116911614806102fd57506026546401000000009004600160a060020a0390811633909116145b806103175750602754600160a060020a0390811633909116145b80610a1e5750602854600160a060020a0390811633909116149050610a1b565b610906602154610100900460ff1681565b610a25601a54600160a060020a039081163390911614610fc05760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f647900000000000000000000000000006020820152610d7290610ba0565b6040805160038054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560025481565b610a9560043560146020526000908152604090205481565b610a9560085481565b610a9560175481565b610aa7601b54600160a060020a031681565b610a9560185481565b610a955b6000611119610591565b610a25600061112933610561565b610ac460055460ff1681565b610a95600060646112cf61044f565b610a95600d5481565b610a9560205481565b6109066026546301000000900460ff1681565b610a9560075481565b601260209081526004356000908152604080822090925260243581522054610a959081565b610a9560015481565b610a95600b5481565b61090660215462010000900460ff1681565b61090660265460ff1681565b610a2560006112db33610561565b6109065b6008546020541015610a1b565b61090660265462010000900460ff1681565b610a9560245481565b610aa7602854600160a060020a031681565b610a9560165481565b610a956004355b600160a060020a03166000908152601e602052604090205490565b610a955b6000610a1e611420610591565b610ac45b600a546020546000919004600460ff82161161142c578061142f565b61090660215460ff1681565b610a9560043560136020526000908152604090205481565b610aa76026546401000000009004600160a060020a031681565b610a9560105481565b6109065b602054600954901015610a1b565b610a95600f5481565b6040805160048054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560095481565b610906600435602435601a54600090600160a060020a0390811633909116146114355760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b610906602654610100900460ff1681565b610a95600a5481565b6109066004356024356000600460236000505410156116c057602354600101815260126020908152604080832033600160a060020a031684529091528120548290111561166957604080822080548490039055602354600101825260156020528120805483900390556116c0565b610a95600435601d6020526000908152604090205481565b610a9560065481565b610a2560006000600061184a33610561565b610a9560043560156020526000908152604090205481565b61090660005460ff1681565b610aa7601a54600160a060020a031681565b610a95600e5481565b61090660043560256020526000908152604090205460ff1681565b610a95600c5481565b610a25611c6f33610561565b610a9560225481565b610a9560195481565b610a956004356024356044355b6009546000906001850160ff1684029081111561083b57506009545b80831115611d445760009150611d4a565b6109066021546301000000900460ff1681565b610a256000611d5233610561565b610a25600060006000600060006000341115611f4457604080518082019091526007815260c960020a663737a2ba3432b9026020820152611f7b90610ba0565b610aa7602754600160a060020a031681565b610906600435602435600060003411156122b257604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b610a9560235481565b604080519115158252519081900360200190f35b151561097b57610a1e3360006000600060006000600060006000600060006000602160009054906101000a900460ff1615610adb57604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152610b2d90610ba0565b6040805133600160a060020a0316815234602082015260608183018190526022908201527f52656365766965642065746865722066726f6d204d616e616765644163636f7560808201527f6e7400000000000000000000000000000000000000000000000000000000000060a082015290517fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9109181900360c00190a15060015b90565b9050610a1b565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610a875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b602154610100900460ff1615610c595760408051808201909152600b81527f6e6f7452656c65617365640000000000000000000000000000000000000000006020820152610b2d90610ba0565b60009a505b50505050505050505050919050565b611468606060405190810160405280603381526020017f6661696c65643a7472616e736665723a2063616e6e6f742073656e642073656e81526020017f6420746f205f70726f6a65637457616c6c6574000000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610c395780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156112cc57610002565b60003411610c8c57604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610b2d90610ba0565b6000995060009850610c9c610517565b97506064610ca861044f565b60025402049650349550610cba610580565b94508460001415610d055760408051808201909152600e81527f6e6f546f6b656e73546f53656c6c0000000000000000000000000000000000006020820152610b2890610ba0565b94505b868610610d25578686049350610d74858560008183106123d857816123da565b50600160a060020a038b166000908152601c60209081526040808320805489019055600254601d9092529091208054918b028a039182019055610df4602154610100900460ff16156123e1575b565b9250846000148015610d895750602054600954145b15610d92578392505b600160a060020a038c166000908152601e60209081526040808320805487019055815486018255601c90915290208054888502908101909155998301999889019891506064610ddf61044f565b60025402049650348990039550610d02610580565b6000811115610e6257604051601b54600160a060020a031690600090839082818181858883f193505050501515610e625760408051808201909152601581527f657874726142616c616e63653a73656e644661696c00000000000000000000006020820152610b2d90610ba0565b60408051600160a060020a0333811682523460208301528183018d90529151918e16917fe2cbb9b7dba3b339b259c4f199464ccf9c277a3ff556b2c0db2b0abacdbeedde9181900360600190a287158015610ec05750610ec0610517565b15610f1457602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b60215460ff1615610f63576040805133600160a060020a0316815234602082015281517fbb9b02a8573d9d68d38e541b0e14a32a2dfe031aade3a25dd3de928fbc3b309d929181900390910190a15b602154610100900460ff1615610fb7576040805133600160a060020a0316815234602082015281517f32f04209c78f4db9d444b9dc3182c73fc63bb6fdd517c19f36798ad870fb1cfe929181900390910190a15b60019a50610b2d565b60003411610ff357604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610d7290610ba0565b602654610100900460ff1615156110415760408051808201909152601281527f6f6e6c7948617276657374456e61626c656400000000000000000000000000006020820152610d7290610ba0565b6026546301000000900460ff16156110905760408051808201909152601881527f6f6e6c79446973747269627574696f6e4e6f74526561647900000000000000006020820152610d7290610ba0565b600c54610d72905b60265462010000900460ff16156124ec5760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b505050505081565b60050260640160ff169050610a1b565b6000141561115c5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561119457604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6112cc565b60215460ff1615156111cd5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010156112165760408051808201909152601381527f63757272656e7446697363616c596561723c3400000000000000000000000000602082015261118f90610ba0565b5033600160a060020a0316600090815260146020818152604080842080546017805491909103808255601e85529290952080549290920185559054928252919091556022549054600e549254606491909201929092029190910490819011156112cc576026805461ff0019166101001790556040805133600160a060020a0316815234602082015281517fe6a8fe04d793748334015ee5de6eb69ddb7c3b29df2251bc5b376305ae5cd800929181900390910190a15b50565b60025402049050610a1b565b6000141561130e5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561134157604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6026546301000000900460ff1615156113915760408051808201909152601581527f6f6e6c79446973747269627574696f6e52656164790000000000000000000000602082015261118f90610ba0565b50600160a060020a033381166000818152601e602052604080822080549083905560265482517f9f3ef4300000000000000000000000000000000000000000000000000000000081526004810195909552602485018290529151909464010000000090920490911692639f3ef430926044808301939192829003018183876161da5a03f1156100025750505050565b602054600a549061081f565b60045b91505090565b6000341161146d57604080518082019091526008815260c160020a673430b9a2ba3432b902602082015261146890610ba0565b61155b565b60235460009081526025602052604090205460ff161580611490575060265460ff165b806114a25750602654610100900460ff165b156115615760408051600160a060020a033381168252346020830152851681830152606081018490526000608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a161155b565b60408051600160a060020a033381168252346020830152851681830152606081018490526001608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a15b92915050565b30600160a060020a03163182106115da57611468606060405190810160405280603181526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a20616d6f756e7481526020017f203e3d2061637475616c42616c616e6365000000000000000000000000000000815260200150610ba0565b604051600160a060020a038416908390600081818185876185025a03f192505050151561150357611468606060405190810160405280603781526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a2063616e6e6f7481526020017f2073656e6420746f205f70726f6a65637457616c6c6574000000000000000000815260200150610ba0565b602380546001908101600081815260126020818152604080842033600160a060020a031680865290835281852054958552601583528185208054969096039095559554909401825283528381209181529152908120555b33600160a060020a0316600090815260136020526040902054829011156116fb57604060002080548390039055601680548390039055611721565b33600160a060020a03166000908152601360205260408120805460168054919091039055555b33600160a060020a03166000908152601460205260409020548290111561175c57604060002080548390039055601780548390039055611782565b33600160a060020a03166000908152601460205260408120805460178054919091039055555b60215460ff1680156117c957506117c98383600060003411156127d357604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b156117d65750600161155b565b60215460ff161515610b3c57611468606060405190810160405280602681526020017f6661696c65643a7472616e736665723a20697346756e644c6f636b656420697381526020017f2066616c73650000000000000000000000000000000000000000000000000000815260200150610ba0565b6000141561187d5760408051808201909152601081526000805160206128b383398151915260208201526118b090610ba0565b60003411156118b557604080518082019091526007815260c960020a663737a2ba3432b90260208201526118b090610ba0565b611c6a565b60215460ff1615156118ee5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad9590260208201526118b090610ba0565b6023546001600081905260256020527f20a3e2dd35f58e582c5288344c035e137cace924bb9daf3762b8ef5a58327e26549101935060ff1615156119315761194c565b60235460039011611ace57600b546024544291011015611b0b575b6000838152601260209081526040808320600160a060020a03331680855290835281842080548886526015808652848720805492909203808355938752601e86529386208054909301815591549055602254835460105495899052929093525460649190920190920291909104925082901115611c6a578260011415611b4857601b60009054906101000a9004600160a060020a0316600160a060020a031663b1a8b25a6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050505030600160a060020a03908116316018819055600d5460046064929091029190910490810460195560285460405191921690600090839082818181858883f193505050501515611b48576118b0606060405190810160405280602381526020017f6b69636b6f66663a4d616e6167656d656e74466565506f6f6c57616c6c65744681526020017f61696c0000000000000000000000000000000000000000000000000000000000815260200150610ba0565b60408051808201909152600f81527f6b69636b4f66663a34746859656172000000000000000000000000000000000060208201526118b090610ba0565b60408051808201909152601081527f6b69636b4f66663a746f6f4561726c790000000000000000000000000000000060208201526118b090610ba0565b600083815260256020526040808220805460ff19166001179055602385905542602490815581516028546019547fa8bcbf3c00000000000000000000000000000000000000000000000000000000835260048301529251600160a060020a03939093169363a8bcbf3c93838301939192909190829003018183876161da5a03f1156100025750506040805133600160a060020a0316815234602082015280820186905290517f43b50d8e46a4af80642a7d3903d182b8f5ab87b17e5bef9fd8ba4c3ba6ef9f0f92509081900360600190a16040805160195433600160a060020a03168252346020830152818301526001606082015290517f47fa1cbddad7488af88763b839f5f5436be7541a8bbfd7fa14d9c6c7581e8c1d9181900360800190a15b505050565b60001415611ca25760408051808201909152601081526000805160206128b38339815191526020820152610d7290610ba0565b60265460ff1615611cea5760408051808201909152600d81527f6f6e6c794e6f7446726f7a656e000000000000000000000000000000000000006020820152610d7290610ba0565b6000341115611d1d57604080518082019091526007815260c960020a663737a2ba3432b9026020820152610d7290610ba0565b33600160a060020a0316600090815260136020526040812080546016805491909103905555565b82810391505b509392505050565b60001415611d855760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b6000341115611db857604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b60215460ff161515611df15760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010611e395760408051808201909152601481527f63757272656e7446697363616c596561723e3d34000000000000000000000000602082015261118f90610ba0565b60265462010000900460ff1615611e875760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b5033600160a060020a0316600090815260136020818152604080842080546016805491909103808255601e8552929095208054929092018555905492825291909155600f5460225491549254606493909201029190910490819011156112cc576026805460ff19166001179055611efe6000611098565b6040805133600160a060020a0316815234602082015281517fa3a0ee24545ff02dd0d20d670461167188c7adc4c2973fd0d1b294e1e576fc79929181900390910190a150565b60215460ff1615611f8057604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152611f7b90610ba0565b6122ab565b611f8933610561565b60001415611fbc5760408051808201909152601081526000805160206128b38339815191526020820152611f7b90610ba0565b33600160a060020a03166000908152601c602052604081205414156120185760408051808201909152600a81527f6e6f576569476976656e000000000000000000000000000000000000000000006020820152611f7b90610ba0565b6020805433600160a060020a03166000908152601e90925260409091205411156120795760408051808201909152601181527f696e76616c6964546f6b656e436f756e740000000000000000000000000000006020820152611f7b90610ba0565b612081610517565b600160a060020a033381166000908152601c602090815260408083208054601d8085528386208054601e87528588208054908990559488905591865286905584548390039094558251601b547f51fa7efd000000000000000000000000000000000000000000000000000000008252600482018690529351979c50909a509298509650889550909216926351fa7efd926024818101939291829003018183876161da5a03f11561000257505060405133600160a060020a03169150600090839082818181858883f1935050505015156121f65733600160a060020a03167fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b3533348460006040518085600160a060020a03168152602001848152602001838152602001821515815260200194505050505060405180910390a260408051808201909152601181527f726566756e643a53656e644661696c65640000000000000000000000000000006020820152611f7b90610ba0565b6040805133600160a060020a03168082523460208301528183018490526001606083015291517fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b359181900360800190a2841580156122575750612257610517565b156122ab57602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b5050505050565b601a54600160a060020a0390811633909116146123065760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b6022546006548391820111156123535760408051808201909152600c81527f6869744d6178426f756e7479000000000000000000000000000000000000000060208201526123d390610ba0565b600160a060020a038481166000818152601e6020908152604091829020805488019055602280548801905581513390941684523490840152828101919091526060820185905260016080830152517fd169a02076bf076f24fa9c265d5ed41dc57e6553208e7a8e7190cd90c365f1849181900360a00190a15b5092915050565b6123cc565b825b905061155b565b6123e96105f8565b6021805460ff19169091179081905560ff161580156124155750602160029054906101000a900460ff16155b801561242357506001544210155b1561245557612430610517565b15612443576021805460ff191660011790555b6021805462ff00001916620100001790555b60215460ff1615801561247257506021546301000000900460ff16155b80156124845750600754600154014210155b156124b857612491610517565b156124a4576021805460ff191660011790555b6021805463ff000000191663010000001790555b6021546301000000900460ff1680156124d657506124d4610517565b155b15610d72576021805461ff001916610100179055565b6026805463ff0000001962ff00001990911662010000171663010000001790556125ac602654604051640100000000909104600160a060020a03908116916000913016319082818181858883f193505050501515610d7257610d72606060405190810160405280602381526020017f70617942616c616e6365546f52657475726e57616c6c65743a73656e6446616981526020017f6c65640000000000000000000000000000000000000000000000000000000000815260200150610ba0565b602860009054906101000a9004600160a060020a0316600160a060020a031663fc44fd286040518160e060020a0281526004018090506000604051808303816000876161da5a03f11561000257506040805160275460e360020a631f889fa50282529151600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750601b546040805160e360020a631f889fa50281529051600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750505060008111156126e457602660049054906101000a9004600160a060020a0316600160a060020a031663b8b27765826040518260e060020a028152600401808281526020019150506000604051808303816000876161da5a03f115610002575050505b602654602254602054604080517f2033d9ae0000000000000000000000000000000000000000000000000000000081529190920160048201529051640100000000909204600160a060020a031691632033d9ae91602480820192600092909190829003018183876161da5a03f11561000257505060265460408051600160a060020a033381168252346020830152640100000000909304909216318282015260016060830152517f6816fcd617af2edc3ccc34b8a63bab368d79f315e065779259bb6a13541eaea292509081900360800190a16000602660026101000a81548160ff0219169083021790555050565b600082116127e35750600061155b565b33600160a060020a03166000908152601e60205260409020548290101561280c5750600061155b565b600160a060020a0383166000908152601e602052604090205480830110156128365750600061155b565b600160a060020a033381166000818152601e60209081526040808320805488900390559387168083529184902080548701905583518381523491810191909152808401869052925190927fe921528ef8652e1a832f8063bcbca0186d6c5a28413c90acecaf074846c412db919081900360600190a350600161155b566f6e6c79546f6b656e486f6c6465727300000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d310000000000000000000000000000000000000000000000000000000057ebbed00000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000190c8000000000000000000000000000000000000000000000000000000000008f0d180000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _managementBodyAddress (address): 0xb79Ab5993Cef2E0B714A66F3edA73b55DE812D31
Arg [1] : _closingTime (uint256): 1475067600
Arg [2] : _closingTimeExtensionPeriod (uint256): 2592000
Arg [3] : _lastKickoffDateBuffer (uint256): 26265600
Arg [4] : _minTokensToCreate (uint256): 150000000
Arg [5] : _maxTokensToCreate (uint256): 250000000
Arg [6] : _tokensPerTier (uint256): 50000000
Arg [7] : _isInTestMode (bool): False

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d31
Arg [1] : 0000000000000000000000000000000000000000000000000000000057ebbed0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000278d00
Arg [3] : 000000000000000000000000000000000000000000000000000000000190c800
Arg [4] : 0000000000000000000000000000000000000000000000000000000008f0d180
Arg [5] : 000000000000000000000000000000000000000000000000000000000ee6b280
Arg [6] : 0000000000000000000000000000000000000000000000000000000002faf080
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


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

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