More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 259 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Bulk Whitelist I... | 8219057 | 1986 days ago | IN | 0 ETH | 0.00036518 | ||||
Buy Tokens | 8218592 | 1986 days ago | IN | 0.01 ETH | 0.00221932 | ||||
Buy Tokens | 8218590 | 1986 days ago | IN | 0.01 ETH | 0.00236932 | ||||
Claim Tokens | 8214904 | 1987 days ago | IN | 0 ETH | 0.00131456 | ||||
Buy Tokens | 8214820 | 1987 days ago | IN | 2 ETH | 0.00593864 | ||||
Bulk Whitelist I... | 8207663 | 1988 days ago | IN | 0 ETH | 0.00009732 | ||||
Bulk Whitelist I... | 8204180 | 1989 days ago | IN | 0 ETH | 0.00007297 | ||||
Buy Tokens | 8182180 | 1992 days ago | IN | 0.02513307 ETH | 0.00053435 | ||||
Transfer | 8182153 | 1992 days ago | IN | 0.02561713 ETH | 0.00048405 | ||||
Bulk Whitelist I... | 8181905 | 1992 days ago | IN | 0 ETH | 0.00874368 | ||||
Bulk Whitelist I... | 8181881 | 1992 days ago | IN | 0 ETH | 0.008 | ||||
Bulk Whitelist I... | 8178778 | 1993 days ago | IN | 0 ETH | 0.0004 | ||||
Bulk Whitelist I... | 8178745 | 1993 days ago | IN | 0 ETH | 0.0004 | ||||
Change Token Rat... | 8178745 | 1993 days ago | IN | 0 ETH | 0.00003105 | ||||
Set Crowdsale St... | 8178696 | 1993 days ago | IN | 0 ETH | 0.00003117 | ||||
Set End Date | 8178696 | 1993 days ago | IN | 0 ETH | 0.000031 | ||||
Set Min Purchase... | 8178696 | 1993 days ago | IN | 0 ETH | 0.00003161 | ||||
Buy Tokens | 7974566 | 2024 days ago | IN | 0.05 ETH | 0.00193148 | ||||
Set End Date | 7973851 | 2025 days ago | IN | 0 ETH | 0.000062 | ||||
Buy Tokens | 7820129 | 2049 days ago | IN | 0.001 ETH | 0.00333407 | ||||
Whitelist Invest... | 7815012 | 2049 days ago | IN | 0 ETH | 0.0005395 | ||||
Change Token Rat... | 7807583 | 2051 days ago | IN | 0 ETH | 0.00031056 | ||||
Set Min Purchase... | 7807573 | 2051 days ago | IN | 0 ETH | 0.00031679 | ||||
Set End Date | 7807496 | 2051 days ago | IN | 0 ETH | 0.00031003 | ||||
Claim Tokens | 7792605 | 2053 days ago | IN | 0 ETH | 0.00008072 |
Latest 22 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
8218592 | 1986 days ago | 0.01 ETH | ||||
8218590 | 1986 days ago | 0.01 ETH | ||||
8214820 | 1987 days ago | 2 ETH | ||||
7974566 | 2024 days ago | 0.05 ETH | ||||
7820129 | 2049 days ago | 0.001 ETH | ||||
6931319 | 2201 days ago | 3.414 ETH | ||||
6929686 | 2202 days ago | 2 ETH | ||||
6921264 | 2203 days ago | 8 ETH | ||||
6903359 | 2206 days ago | 2 ETH | ||||
6899080 | 2207 days ago | 2 ETH | ||||
6843656 | 2216 days ago | 5.99 ETH | ||||
6841576 | 2216 days ago | 2.99 ETH | ||||
6811018 | 2222 days ago | 2.1 ETH | ||||
6784440 | 2226 days ago | 2 ETH | ||||
6780734 | 2227 days ago | 4 ETH | ||||
6757997 | 2230 days ago | 2 ETH | ||||
6734334 | 2234 days ago | 3 ETH | ||||
6714974 | 2237 days ago | 2 ETH | ||||
6709421 | 2238 days ago | 2 ETH | ||||
6610397 | 2254 days ago | 0.1 ETH | ||||
6610397 | 2254 days ago | 0.1 ETH | ||||
6487816 | 2274 days ago | 0.1 ETH |
Loading...
Loading
Contract Name:
Crowdsale
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-09-27 */ pragma solidity ^0.4.13; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract RBAC { using Roles for Roles.Role; mapping (string => Roles.Role) private roles; event RoleAdded(address addr, string roleName); event RoleRemoved(address addr, string roleName); /** * @dev reverts if addr does not have role * @param addr address * @param roleName the name of the role * // reverts */ function checkRole(address addr, string roleName) view public { roles[roleName].check(addr); } /** * @dev determine if addr has role * @param addr address * @param roleName the name of the role * @return bool */ function hasRole(address addr, string roleName) view public returns (bool) { return roles[roleName].has(addr); } /** * @dev add a role to an address * @param addr address * @param roleName the name of the role */ function addRole(address addr, string roleName) internal { roles[roleName].add(addr); emit RoleAdded(addr, roleName); } /** * @dev remove a role from an address * @param addr address * @param roleName the name of the role */ function removeRole(address addr, string roleName) internal { roles[roleName].remove(addr); emit RoleRemoved(addr, roleName); } /** * @dev modifier to scope access to a single role (uses msg.sender as addr) * @param roleName the name of the role * // reverts */ modifier onlyRole(string roleName) { checkRole(msg.sender, roleName); _; } /** * @dev modifier to scope access to a set of roles (uses msg.sender as addr) * @param roleNames the names of the roles to scope access to * // reverts * * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this * see: https://github.com/ethereum/solidity/issues/2467 */ // modifier onlyRoles(string[] roleNames) { // bool hasAnyRole = false; // for (uint8 i = 0; i < roleNames.length; i++) { // if (hasRole(msg.sender, roleNames[i])) { // hasAnyRole = true; // break; // } // } // require(hasAnyRole); // _; // } } library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an address access to this role */ function add(Role storage role, address addr) internal { role.bearer[addr] = true; } /** * @dev remove an address' access to this role */ function remove(Role storage role, address addr) internal { role.bearer[addr] = false; } /** * @dev check if an address has this role * // reverts */ function check(Role storage role, address addr) view internal { require(has(role, addr)); } /** * @dev check if an address has this role * @return bool */ function has(Role storage role, address addr) view internal returns (bool) { return role.bearer[addr]; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } contract Staff is Ownable, RBAC { string public constant ROLE_STAFF = "staff"; function addStaff(address _staff) public onlyOwner { addRole(_staff, ROLE_STAFF); } function removeStaff(address _staff) public onlyOwner { removeRole(_staff, ROLE_STAFF); } function isStaff(address _staff) view public returns (bool) { return hasRole(_staff, ROLE_STAFF); } } contract StaffUtil { Staff public staffContract; constructor (Staff _staffContract) public { require(msg.sender == _staffContract.owner()); staffContract = _staffContract; } modifier onlyOwner() { require(msg.sender == staffContract.owner()); _; } modifier onlyOwnerOrStaff() { require(msg.sender == staffContract.owner() || staffContract.isStaff(msg.sender)); _; } } contract Crowdsale is StaffUtil { using SafeMath for uint256; Token tokenContract; PromoCodes promoCodesContract; DiscountPhases discountPhasesContract; DiscountStructs discountStructsContract; address ethFundsWallet; uint256 referralBonusPercent; uint256 startDate; uint256 crowdsaleStartDate; uint256 endDate; uint256 tokenDecimals; uint256 tokenRate; uint256 tokensForSaleCap; uint256 minPurchaseInWei; uint256 maxInvestorContributionInWei; bool paused; bool finalized; uint256 weiRaised; uint256 soldTokens; uint256 bonusTokens; uint256 sentTokens; uint256 claimedSoldTokens; uint256 claimedBonusTokens; uint256 claimedSentTokens; uint256 purchasedTokensClaimDate; uint256 bonusTokensClaimDate; mapping(address => Investor) public investors; enum InvestorStatus {UNDEFINED, WHITELISTED, BLOCKED} struct Investor { InvestorStatus status; uint256 contributionInWei; uint256 purchasedTokens; uint256 bonusTokens; uint256 referralTokens; uint256 receivedTokens; TokensPurchase[] tokensPurchases; bool isBlockpass; } struct TokensPurchase { uint256 value; uint256 amount; uint256 bonus; address referrer; uint256 referrerSentAmount; } event InvestorWhitelisted(address indexed investor, uint timestamp, address byStaff); event InvestorBlocked(address indexed investor, uint timestamp, address byStaff); event TokensPurchased( address indexed investor, uint indexed purchaseId, uint256 value, uint256 purchasedAmount, uint256 promoCodeAmount, uint256 discountPhaseAmount, uint256 discountStructAmount, address indexed referrer, uint256 referrerSentAmount, uint timestamp ); event TokensPurchaseRefunded( address indexed investor, uint indexed purchaseId, uint256 value, uint256 amount, uint256 bonus, uint timestamp, address byStaff ); event Paused(uint timestamp, address byStaff); event Resumed(uint timestamp, address byStaff); event Finalized(uint timestamp, address byStaff); event TokensSent(address indexed investor, uint256 amount, uint timestamp, address byStaff); event PurchasedTokensClaimLocked(uint date, uint timestamp, address byStaff); event PurchasedTokensClaimUnlocked(uint timestamp, address byStaff); event BonusTokensClaimLocked(uint date, uint timestamp, address byStaff); event BonusTokensClaimUnlocked(uint timestamp, address byStaff); event CrowdsaleStartDateUpdated(uint date, uint timestamp, address byStaff); event EndDateUpdated(uint date, uint timestamp, address byStaff); event MinPurchaseChanged(uint256 minPurchaseInWei, uint timestamp, address byStaff); event MaxInvestorContributionChanged(uint256 maxInvestorContributionInWei, uint timestamp, address byStaff); event TokenRateChanged(uint newRate, uint timestamp, address byStaff); event TokensClaimed( address indexed investor, uint256 purchased, uint256 bonus, uint256 referral, uint256 received, uint timestamp, address byStaff ); event TokensBurned(uint256 amount, uint timestamp, address byStaff); constructor ( uint256[11] uint256Args, address[5] addressArgs ) StaffUtil(Staff(addressArgs[4])) public { // uint256 args startDate = uint256Args[0]; crowdsaleStartDate = uint256Args[1]; endDate = uint256Args[2]; tokenDecimals = uint256Args[3]; tokenRate = uint256Args[4]; tokensForSaleCap = uint256Args[5]; minPurchaseInWei = uint256Args[6]; maxInvestorContributionInWei = uint256Args[7]; purchasedTokensClaimDate = uint256Args[8]; bonusTokensClaimDate = uint256Args[9]; referralBonusPercent = uint256Args[10]; // address args ethFundsWallet = addressArgs[0]; promoCodesContract = PromoCodes(addressArgs[1]); discountPhasesContract = DiscountPhases(addressArgs[2]); discountStructsContract = DiscountStructs(addressArgs[3]); require(startDate < crowdsaleStartDate); require(crowdsaleStartDate < endDate); require(tokenDecimals > 0); require(tokenRate > 0); require(tokensForSaleCap > 0); require(minPurchaseInWei <= maxInvestorContributionInWei); require(ethFundsWallet != address(0)); } function getState() external view returns (bool[2] boolArgs, uint256[18] uint256Args, address[6] addressArgs) { boolArgs[0] = paused; boolArgs[1] = finalized; uint256Args[0] = weiRaised; uint256Args[1] = soldTokens; uint256Args[2] = bonusTokens; uint256Args[3] = sentTokens; uint256Args[4] = claimedSoldTokens; uint256Args[5] = claimedBonusTokens; uint256Args[6] = claimedSentTokens; uint256Args[7] = purchasedTokensClaimDate; uint256Args[8] = bonusTokensClaimDate; uint256Args[9] = startDate; uint256Args[10] = crowdsaleStartDate; uint256Args[11] = endDate; uint256Args[12] = tokenRate; uint256Args[13] = tokenDecimals; uint256Args[14] = minPurchaseInWei; uint256Args[15] = maxInvestorContributionInWei; uint256Args[16] = referralBonusPercent; uint256Args[17] = getTokensForSaleCap(); addressArgs[0] = staffContract; addressArgs[1] = ethFundsWallet; addressArgs[2] = promoCodesContract; addressArgs[3] = discountPhasesContract; addressArgs[4] = discountStructsContract; addressArgs[5] = tokenContract; } function fitsTokensForSaleCap(uint256 _amount) public view returns (bool) { return getDistributedTokens().add(_amount) <= getTokensForSaleCap(); } function getTokensForSaleCap() public view returns (uint256) { if (tokenContract != address(0)) { return tokenContract.balanceOf(this); } return tokensForSaleCap; } function getDistributedTokens() public view returns (uint256) { return soldTokens.sub(claimedSoldTokens).add(bonusTokens.sub(claimedBonusTokens)).add(sentTokens.sub(claimedSentTokens)); } function setTokenContract(Token token) external onlyOwner { require(token.balanceOf(this) >= 0); require(tokenContract == address(0)); require(token != address(0)); tokenContract = token; } function getInvestorClaimedTokens(address _investor) external view returns (uint256) { if (tokenContract != address(0)) { return tokenContract.balanceOf(_investor); } return 0; } function isBlockpassInvestor(address _investor) external constant returns (bool) { return investors[_investor].status == InvestorStatus.WHITELISTED && investors[_investor].isBlockpass; } function whitelistInvestor(address _investor, bool _isBlockpass) external onlyOwnerOrStaff { require(_investor != address(0)); require(investors[_investor].status != InvestorStatus.WHITELISTED); investors[_investor].status = InvestorStatus.WHITELISTED; investors[_investor].isBlockpass = _isBlockpass; emit InvestorWhitelisted(_investor, now, msg.sender); } function bulkWhitelistInvestor(address[] _investors) external onlyOwnerOrStaff { for (uint256 i = 0; i < _investors.length; i++) { if (_investors[i] != address(0) && investors[_investors[i]].status != InvestorStatus.WHITELISTED) { investors[_investors[i]].status = InvestorStatus.WHITELISTED; emit InvestorWhitelisted(_investors[i], now, msg.sender); } } } function blockInvestor(address _investor) external onlyOwnerOrStaff { require(_investor != address(0)); require(investors[_investor].status != InvestorStatus.BLOCKED); investors[_investor].status = InvestorStatus.BLOCKED; emit InvestorBlocked(_investor, now, msg.sender); } function lockPurchasedTokensClaim(uint256 _date) external onlyOwner { require(_date > now); purchasedTokensClaimDate = _date; emit PurchasedTokensClaimLocked(_date, now, msg.sender); } function unlockPurchasedTokensClaim() external onlyOwner { purchasedTokensClaimDate = now; emit PurchasedTokensClaimUnlocked(now, msg.sender); } function lockBonusTokensClaim(uint256 _date) external onlyOwner { require(_date > now); bonusTokensClaimDate = _date; emit BonusTokensClaimLocked(_date, now, msg.sender); } function unlockBonusTokensClaim() external onlyOwner { bonusTokensClaimDate = now; emit BonusTokensClaimUnlocked(now, msg.sender); } function setCrowdsaleStartDate(uint256 _date) external onlyOwner { crowdsaleStartDate = _date; emit CrowdsaleStartDateUpdated(_date, now, msg.sender); } function setEndDate(uint256 _date) external onlyOwner { endDate = _date; emit EndDateUpdated(_date, now, msg.sender); } function setMinPurchaseInWei(uint256 _minPurchaseInWei) external onlyOwner { minPurchaseInWei = _minPurchaseInWei; emit MinPurchaseChanged(_minPurchaseInWei, now, msg.sender); } function setMaxInvestorContributionInWei(uint256 _maxInvestorContributionInWei) external onlyOwner { require(minPurchaseInWei <= _maxInvestorContributionInWei); maxInvestorContributionInWei = _maxInvestorContributionInWei; emit MaxInvestorContributionChanged(_maxInvestorContributionInWei, now, msg.sender); } function changeTokenRate(uint256 _tokenRate) external onlyOwner { require(_tokenRate > 0); tokenRate = _tokenRate; emit TokenRateChanged(_tokenRate, now, msg.sender); } function buyTokens(bytes32 _promoCode, address _referrer) external payable { require(!finalized); require(!paused); require(startDate < now); require(investors[msg.sender].status == InvestorStatus.WHITELISTED); require(msg.value > 0); require(msg.value >= minPurchaseInWei); require(investors[msg.sender].contributionInWei.add(msg.value) <= maxInvestorContributionInWei); // calculate purchased amount uint256 purchasedAmount; if (tokenDecimals > 18) { purchasedAmount = msg.value.mul(tokenRate).mul(10 ** (tokenDecimals - 18)); } else if (tokenDecimals < 18) { purchasedAmount = msg.value.mul(tokenRate).div(10 ** (18 - tokenDecimals)); } else { purchasedAmount = msg.value.mul(tokenRate); } // calculate total amount, this includes promo code amount or discount phase amount uint256 promoCodeBonusAmount = promoCodesContract.applyBonusAmount(msg.sender, purchasedAmount, _promoCode); uint256 discountPhaseBonusAmount = discountPhasesContract.calculateBonusAmount(purchasedAmount); uint256 discountStructBonusAmount = discountStructsContract.getBonus(msg.sender, purchasedAmount, msg.value); uint256 bonusAmount = promoCodeBonusAmount.add(discountPhaseBonusAmount).add(discountStructBonusAmount); // update referrer's referral tokens uint256 referrerBonusAmount; address referrerAddr; if ( _referrer != address(0) && msg.sender != _referrer && investors[_referrer].status == InvestorStatus.WHITELISTED ) { referrerBonusAmount = purchasedAmount * referralBonusPercent / 100; referrerAddr = _referrer; } // check that calculated tokens will not exceed tokens for sale cap require(fitsTokensForSaleCap(purchasedAmount.add(bonusAmount).add(referrerBonusAmount))); // update crowdsale total amount of capital raised weiRaised = weiRaised.add(msg.value); soldTokens = soldTokens.add(purchasedAmount); bonusTokens = bonusTokens.add(bonusAmount).add(referrerBonusAmount); // update referrer's bonus tokens investors[referrerAddr].referralTokens = investors[referrerAddr].referralTokens.add(referrerBonusAmount); // update investor's purchased tokens investors[msg.sender].purchasedTokens = investors[msg.sender].purchasedTokens.add(purchasedAmount); // update investor's bonus tokens investors[msg.sender].bonusTokens = investors[msg.sender].bonusTokens.add(bonusAmount); // update investor's tokens eth value investors[msg.sender].contributionInWei = investors[msg.sender].contributionInWei.add(msg.value); // update investor's tokens purchases uint tokensPurchasesLength = investors[msg.sender].tokensPurchases.push(TokensPurchase({ value : msg.value, amount : purchasedAmount, bonus : bonusAmount, referrer : referrerAddr, referrerSentAmount : referrerBonusAmount }) ); // log investor's tokens purchase emit TokensPurchased( msg.sender, tokensPurchasesLength - 1, msg.value, purchasedAmount, promoCodeBonusAmount, discountPhaseBonusAmount, discountStructBonusAmount, referrerAddr, referrerBonusAmount, now ); // forward eth to funds wallet require(ethFundsWallet.call.gas(300000).value(msg.value)()); } function sendTokens(address _investor, uint256 _amount) external onlyOwner { require(investors[_investor].status == InvestorStatus.WHITELISTED); require(_amount > 0); require(fitsTokensForSaleCap(_amount)); // update crowdsale total amount of capital raised sentTokens = sentTokens.add(_amount); // update investor's received tokens balance investors[_investor].receivedTokens = investors[_investor].receivedTokens.add(_amount); // log tokens sent action emit TokensSent( _investor, _amount, now, msg.sender ); } function burnUnsoldTokens() external onlyOwner { require(tokenContract != address(0)); require(finalized); uint256 tokensToBurn = tokenContract.balanceOf(this).sub(getDistributedTokens()); require(tokensToBurn > 0); tokenContract.burn(tokensToBurn); // log tokens burned action emit TokensBurned(tokensToBurn, now, msg.sender); } function claimTokens() external { require(tokenContract != address(0)); require(!paused); require(investors[msg.sender].status == InvestorStatus.WHITELISTED); uint256 clPurchasedTokens; uint256 clReceivedTokens; uint256 clBonusTokens_; uint256 clRefTokens; require(purchasedTokensClaimDate < now || bonusTokensClaimDate < now); { uint256 purchasedTokens = investors[msg.sender].purchasedTokens; uint256 receivedTokens = investors[msg.sender].receivedTokens; if (purchasedTokensClaimDate < now && (purchasedTokens > 0 || receivedTokens > 0)) { investors[msg.sender].contributionInWei = 0; investors[msg.sender].purchasedTokens = 0; investors[msg.sender].receivedTokens = 0; claimedSoldTokens = claimedSoldTokens.add(purchasedTokens); claimedSentTokens = claimedSentTokens.add(receivedTokens); // free up storage used by transaction delete (investors[msg.sender].tokensPurchases); clPurchasedTokens = purchasedTokens; clReceivedTokens = receivedTokens; tokenContract.transfer(msg.sender, purchasedTokens.add(receivedTokens)); } } { uint256 bonusTokens_ = investors[msg.sender].bonusTokens; uint256 refTokens = investors[msg.sender].referralTokens; if (bonusTokensClaimDate < now && (bonusTokens_ > 0 || refTokens > 0)) { investors[msg.sender].bonusTokens = 0; investors[msg.sender].referralTokens = 0; claimedBonusTokens = claimedBonusTokens.add(bonusTokens_).add(refTokens); clBonusTokens_ = bonusTokens_; clRefTokens = refTokens; tokenContract.transfer(msg.sender, bonusTokens_.add(refTokens)); } } require(clPurchasedTokens > 0 || clBonusTokens_ > 0 || clRefTokens > 0 || clReceivedTokens > 0); emit TokensClaimed(msg.sender, clPurchasedTokens, clBonusTokens_, clRefTokens, clReceivedTokens, now, msg.sender); } function refundTokensPurchase(address _investor, uint _purchaseId) external payable onlyOwner { require(msg.value > 0); require(investors[_investor].tokensPurchases[_purchaseId].value == msg.value); _refundTokensPurchase(_investor, _purchaseId); // forward eth to investor's wallet address _investor.transfer(msg.value); } function refundAllInvestorTokensPurchases(address _investor) external payable onlyOwner { require(msg.value > 0); require(investors[_investor].contributionInWei == msg.value); for (uint i = 0; i < investors[_investor].tokensPurchases.length; i++) { if (investors[_investor].tokensPurchases[i].value == 0) { continue; } _refundTokensPurchase(_investor, i); } // forward eth to investor's wallet address _investor.transfer(msg.value); } function _refundTokensPurchase(address _investor, uint _purchaseId) private { // update referrer's referral tokens address referrer = investors[_investor].tokensPurchases[_purchaseId].referrer; if (referrer != address(0)) { uint256 sentAmount = investors[_investor].tokensPurchases[_purchaseId].referrerSentAmount; investors[referrer].referralTokens = investors[referrer].referralTokens.sub(sentAmount); bonusTokens = bonusTokens.sub(sentAmount); } // update investor's eth amount uint256 purchaseValue = investors[_investor].tokensPurchases[_purchaseId].value; investors[_investor].contributionInWei = investors[_investor].contributionInWei.sub(purchaseValue); // update investor's purchased tokens uint256 purchaseAmount = investors[_investor].tokensPurchases[_purchaseId].amount; investors[_investor].purchasedTokens = investors[_investor].purchasedTokens.sub(purchaseAmount); // update investor's bonus tokens uint256 bonusAmount = investors[_investor].tokensPurchases[_purchaseId].bonus; investors[_investor].bonusTokens = investors[_investor].bonusTokens.sub(bonusAmount); // update crowdsale total amount of capital raised weiRaised = weiRaised.sub(purchaseValue); soldTokens = soldTokens.sub(purchaseAmount); bonusTokens = bonusTokens.sub(bonusAmount); // free up storage used by transaction delete (investors[_investor].tokensPurchases[_purchaseId]); // log investor's tokens purchase refund emit TokensPurchaseRefunded(_investor, _purchaseId, purchaseValue, purchaseAmount, bonusAmount, now, msg.sender); } function getInvestorTokensPurchasesLength(address _investor) public constant returns (uint) { return investors[_investor].tokensPurchases.length; } function getInvestorTokensPurchase( address _investor, uint _purchaseId ) external constant returns ( uint256 value, uint256 amount, uint256 bonus, address referrer, uint256 referrerSentAmount ) { value = investors[_investor].tokensPurchases[_purchaseId].value; amount = investors[_investor].tokensPurchases[_purchaseId].amount; bonus = investors[_investor].tokensPurchases[_purchaseId].bonus; referrer = investors[_investor].tokensPurchases[_purchaseId].referrer; referrerSentAmount = investors[_investor].tokensPurchases[_purchaseId].referrerSentAmount; } function pause() external onlyOwner { require(!paused); paused = true; emit Paused(now, msg.sender); } function resume() external onlyOwner { require(paused); paused = false; emit Resumed(now, msg.sender); } function finalize() external onlyOwner { require(!finalized); finalized = true; emit Finalized(now, msg.sender); } } contract DiscountPhases is StaffUtil { using SafeMath for uint256; event DiscountPhaseAdded(uint index, string name, uint8 percent, uint fromDate, uint toDate, uint timestamp, address byStaff); event DiscountPhaseRemoved(uint index, uint timestamp, address byStaff); struct DiscountPhase { uint8 percent; uint fromDate; uint toDate; } DiscountPhase[] public discountPhases; constructor(Staff _staffContract) StaffUtil(_staffContract) public { } function calculateBonusAmount(uint256 _purchasedAmount) public constant returns (uint256) { for (uint i = 0; i < discountPhases.length; i++) { if (now >= discountPhases[i].fromDate && now <= discountPhases[i].toDate) { return _purchasedAmount.mul(discountPhases[i].percent).div(100); } } } function addDiscountPhase(string _name, uint8 _percent, uint _fromDate, uint _toDate) public onlyOwnerOrStaff { require(bytes(_name).length > 0); require(_percent > 0 && _percent <= 100); if (now > _fromDate) { _fromDate = now; } require(_fromDate < _toDate); for (uint i = 0; i < discountPhases.length; i++) { require(_fromDate > discountPhases[i].toDate || _toDate < discountPhases[i].fromDate); } uint index = discountPhases.push(DiscountPhase({percent : _percent, fromDate : _fromDate, toDate : _toDate})) - 1; emit DiscountPhaseAdded(index, _name, _percent, _fromDate, _toDate, now, msg.sender); } function removeDiscountPhase(uint _index) public onlyOwnerOrStaff { require(now < discountPhases[_index].toDate); delete discountPhases[_index]; emit DiscountPhaseRemoved(_index, now, msg.sender); } } contract DiscountStructs is StaffUtil { using SafeMath for uint256; address public crowdsale; event DiscountStructAdded( uint index, bytes32 name, uint256 tokens, uint[2] dates, uint256[] fromWei, uint256[] toWei, uint256[] percent, uint timestamp, address byStaff ); event DiscountStructRemoved( uint index, uint timestamp, address byStaff ); event DiscountStructUsed( uint index, uint step, address investor, uint256 tokens, uint timestamp ); struct DiscountStruct { uint256 availableTokens; uint256 distributedTokens; uint fromDate; uint toDate; } struct DiscountStep { uint256 fromWei; uint256 toWei; uint256 percent; } DiscountStruct[] public discountStructs; mapping(uint => DiscountStep[]) public discountSteps; constructor(Staff _staffContract) StaffUtil(_staffContract) public { } modifier onlyCrowdsale() { require(msg.sender == crowdsale); _; } function setCrowdsale(Crowdsale _crowdsale) external onlyOwner { require(crowdsale == address(0)); require(_crowdsale.staffContract() == staffContract); crowdsale = _crowdsale; } function getBonus(address _investor, uint256 _purchasedAmount, uint256 _purchasedValue) public onlyCrowdsale returns (uint256) { for (uint i = 0; i < discountStructs.length; i++) { if (now >= discountStructs[i].fromDate && now <= discountStructs[i].toDate) { if (discountStructs[i].distributedTokens >= discountStructs[i].availableTokens) { return; } for (uint j = 0; j < discountSteps[i].length; j++) { if (_purchasedValue >= discountSteps[i][j].fromWei && (_purchasedValue < discountSteps[i][j].toWei || discountSteps[i][j].toWei == 0)) { uint256 bonus = _purchasedAmount.mul(discountSteps[i][j].percent).div(100); if (discountStructs[i].distributedTokens.add(bonus) > discountStructs[i].availableTokens) { return; } discountStructs[i].distributedTokens = discountStructs[i].distributedTokens.add(bonus); emit DiscountStructUsed(i, j, _investor, bonus, now); return bonus; } } return; } } } function calculateBonus(uint256 _purchasedAmount, uint256 _purchasedValue) public constant returns (uint256) { for (uint i = 0; i < discountStructs.length; i++) { if (now >= discountStructs[i].fromDate && now <= discountStructs[i].toDate) { if (discountStructs[i].distributedTokens >= discountStructs[i].availableTokens) { return; } for (uint j = 0; j < discountSteps[i].length; j++) { if (_purchasedValue >= discountSteps[i][j].fromWei && (_purchasedValue < discountSteps[i][j].toWei || discountSteps[i][j].toWei == 0)) { uint256 bonus = _purchasedAmount.mul(discountSteps[i][j].percent).div(100); if (discountStructs[i].distributedTokens.add(bonus) > discountStructs[i].availableTokens) { return; } return bonus; } } return; } } } function addDiscountStruct(bytes32 _name, uint256 _tokens, uint[2] _dates, uint256[] _fromWei, uint256[] _toWei, uint256[] _percent) external onlyOwnerOrStaff { require(_name.length > 0); require(_tokens > 0); require(_dates[0] < _dates[1]); require(_fromWei.length > 0 && _fromWei.length == _toWei.length && _fromWei.length == _percent.length); for (uint j = 0; j < discountStructs.length; j++) { require(_dates[0] > discountStructs[j].fromDate || _dates[1] < discountStructs[j].toDate); } DiscountStruct memory ds = DiscountStruct(_tokens, 0, _dates[0], _dates[1]); uint index = discountStructs.push(ds) - 1; for (uint i = 0; i < _fromWei.length; i++) { require(_fromWei[i] > 0 || _toWei[i] > 0); if (_fromWei[i] > 0 && _toWei[i] > 0) { require(_fromWei[i] < _toWei[i]); } require(_percent[i] > 0 && _percent[i] <= 100); discountSteps[index].push(DiscountStep(_fromWei[i], _toWei[i], _percent[i])); } emit DiscountStructAdded(index, _name, _tokens, _dates, _fromWei, _toWei, _percent, now, msg.sender); } function removeDiscountStruct(uint _index) public onlyOwnerOrStaff { require(now < discountStructs[_index].toDate); delete discountStructs[_index]; delete discountSteps[_index]; emit DiscountStructRemoved(_index, now, msg.sender); } } contract PromoCodes is StaffUtil { using SafeMath for uint256; address public crowdsale; event PromoCodeAdded(bytes32 indexed code, string name, uint8 percent, uint256 maxUses, uint timestamp, address byStaff); event PromoCodeRemoved(bytes32 indexed code, uint timestamp, address byStaff); event PromoCodeUsed(bytes32 indexed code, address investor, uint timestamp); struct PromoCode { uint8 percent; uint256 uses; uint256 maxUses; mapping(address => bool) investors; } mapping(bytes32 => PromoCode) public promoCodes; constructor(Staff _staffContract) StaffUtil(_staffContract) public { } modifier onlyCrowdsale() { require(msg.sender == crowdsale); _; } function setCrowdsale(Crowdsale _crowdsale) external onlyOwner { require(crowdsale == address(0)); require(_crowdsale.staffContract() == staffContract); crowdsale = _crowdsale; } function applyBonusAmount(address _investor, uint256 _purchasedAmount, bytes32 _promoCode) public onlyCrowdsale returns (uint256) { if (promoCodes[_promoCode].percent == 0 || promoCodes[_promoCode].investors[_investor] || promoCodes[_promoCode].uses == promoCodes[_promoCode].maxUses) { return 0; } promoCodes[_promoCode].investors[_investor] = true; promoCodes[_promoCode].uses = promoCodes[_promoCode].uses + 1; emit PromoCodeUsed(_promoCode, _investor, now); return _purchasedAmount.mul(promoCodes[_promoCode].percent).div(100); } function calculateBonusAmount(address _investor, uint256 _purchasedAmount, bytes32 _promoCode) public constant returns (uint256) { if (promoCodes[_promoCode].percent == 0 || promoCodes[_promoCode].investors[_investor] || promoCodes[_promoCode].uses == promoCodes[_promoCode].maxUses) { return 0; } return _purchasedAmount.mul(promoCodes[_promoCode].percent).div(100); } function addPromoCode(string _name, bytes32 _code, uint256 _maxUses, uint8 _percent) public onlyOwnerOrStaff { require(bytes(_name).length > 0); require(_code[0] != 0); require(_percent > 0 && _percent <= 100); require(_maxUses > 0); require(promoCodes[_code].percent == 0); promoCodes[_code].percent = _percent; promoCodes[_code].maxUses = _maxUses; emit PromoCodeAdded(_code, _name, _percent, _maxUses, now, msg.sender); } function removePromoCode(bytes32 _code) public onlyOwnerOrStaff { delete promoCodes[_code]; emit PromoCodeRemoved(_code, now, msg.sender); } } contract Token is BurnableToken { }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"resume","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_investor","type":"address"},{"name":"_amount","type":"uint256"}],"name":"sendTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getState","outputs":[{"name":"boolArgs","type":"bool[2]"},{"name":"uint256Args","type":"uint256[18]"},{"name":"addressArgs","type":"address[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_investors","type":"address[]"}],"name":"bulkWhitelistInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getInvestorTokensPurchasesLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_investor","type":"address"},{"name":"_purchaseId","type":"uint256"}],"name":"refundTokensPurchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_date","type":"uint256"}],"name":"setEndDate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unlockBonusTokensClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenRate","type":"uint256"}],"name":"changeTokenRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_date","type":"uint256"}],"name":"setCrowdsaleStartDate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_promoCode","type":"bytes32"},{"name":"_referrer","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"investors","outputs":[{"name":"status","type":"uint8"},{"name":"contributionInWei","type":"uint256"},{"name":"purchasedTokens","type":"uint256"},{"name":"bonusTokens","type":"uint256"},{"name":"referralTokens","type":"uint256"},{"name":"receivedTokens","type":"uint256"},{"name":"isBlockpass","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"isBlockpassInvestor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_date","type":"uint256"}],"name":"lockPurchasedTokensClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"burnUnsoldTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_date","type":"uint256"}],"name":"lockBonusTokensClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_investor","type":"address"}],"name":"refundAllInvestorTokensPurchases","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_maxInvestorContributionInWei","type":"uint256"}],"name":"setMaxInvestorContributionInWei","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"setTokenContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_investor","type":"address"}],"name":"blockInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unlockPurchasedTokensClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokensForSaleCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"fitsTokensForSaleCap","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_investor","type":"address"},{"name":"_isBlockpass","type":"bool"}],"name":"whitelistInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDistributedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minPurchaseInWei","type":"uint256"}],"name":"setMinPurchaseInWei","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"},{"name":"_purchaseId","type":"uint256"}],"name":"getInvestorTokensPurchase","outputs":[{"name":"value","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"bonus","type":"uint256"},{"name":"referrer","type":"address"},{"name":"referrerSentAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_investor","type":"address"}],"name":"getInvestorClaimedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"staffContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"uint256Args","type":"uint256[11]"},{"name":"addressArgs","type":"address[5]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"InvestorWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"InvestorBlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":true,"name":"purchaseId","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"purchasedAmount","type":"uint256"},{"indexed":false,"name":"promoCodeAmount","type":"uint256"},{"indexed":false,"name":"discountPhaseAmount","type":"uint256"},{"indexed":false,"name":"discountStructAmount","type":"uint256"},{"indexed":true,"name":"referrer","type":"address"},{"indexed":false,"name":"referrerSentAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":true,"name":"purchaseId","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"bonus","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"TokensPurchaseRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"Resumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"TokensSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"PurchasedTokensClaimLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"PurchasedTokensClaimUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"BonusTokensClaimLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"BonusTokensClaimUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"CrowdsaleStartDateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"date","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"EndDateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minPurchaseInWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"MinPurchaseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"maxInvestorContributionInWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"MaxInvestorContributionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRate","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"TokenRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"purchased","type":"uint256"},{"indexed":false,"name":"bonus","type":"uint256"},{"indexed":false,"name":"referral","type":"uint256"},{"indexed":false,"name":"received","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"byStaff","type":"address"}],"name":"TokensBurned","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051610200806200606b83398101806040528101908091908261016001919050508060046005811015156200004457fe5b60200201518073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620000ae57600080fd5b505af1158015620000c3573d6000803e3d6000fd5b505050506040513d6020811015620000da57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200012557600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050816000600b811015156200017657fe5b6020020151600781905550816001600b811015156200019157fe5b6020020151600881905550816002600b81101515620001ac57fe5b6020020151600981905550816003600b81101515620001c757fe5b6020020151600a81905550816004600b81101515620001e257fe5b6020020151600b81905550816005600b81101515620001fd57fe5b6020020151600c81905550816006600b811015156200021857fe5b6020020151600d81905550816007600b811015156200023357fe5b6020020151600e81905550816008600b811015156200024e57fe5b6020020151601781905550816009600b811015156200026957fe5b602002015160188190555081600a600b811015156200028457fe5b60200201516006819055508060006005811015156200029f57fe5b6020020151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001600581101515620002f457fe5b6020020151600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060026005811015156200034957fe5b6020020151600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060036005811015156200039e57fe5b6020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600754101515620003f657600080fd5b6009546008541015156200040957600080fd5b6000600a541115156200041b57600080fd5b6000600b541115156200042d57600080fd5b6000600c541115156200043f57600080fd5b600e54600d54111515156200045357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515620004b257600080fd5b5050615ba780620004c46000396000f300608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063046f7da21461019b57806305ab421d146101b25780631865c57d146101ff57806319774b86146102b05780631b8689b6146102eb5780632405d03e146103425780633784f00014610382578063402c569c146103af57806348c54b9d146103c65780634bb278f3146103dd5780634fbe30d4146103f457806358892f631461042157806362d176cb1461044e5780636f7bc9be146104925780638456cb5914610525578063849ae5ea1461053c57806388a6cc5314610597578063940bb344146105c45780639c5c53b3146105db5780639f1aa40414610608578063b1afe96b1461063e578063bbcd5bbe1461066b578063bf947852146106ae578063c10b30c0146106f1578063d8788e6814610708578063da1a13ce14610733578063e6dff3b414610778578063f145ff23146107c7578063f77a490d146107f2578063f7b6302e1461081f578063fba52ff1146108c8578063fc28bc8f1461091f575b600080fd5b3480156101a757600080fd5b506101b0610976565b005b3480156101be57600080fd5b506101fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b12565b005b34801561020b57600080fd5b50610214610de6565b6040518084600260200280838360005b8381101561023f578082015181840152602081019050610224565b5050505090500183601260200280838360005b8381101561026d578082015181840152602081019050610252565b5050505090500182600660200280838360005b8381101561029b578082015181840152602081019050610280565b50505050905001935050505060405180910390f35b3480156102bc57600080fd5b506102e96004803603810190808035906020019082018035906020019190919293919293905050506112bf565b005b3480156102f757600080fd5b5061032c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611711565b6040518082815260200191505060405180910390f35b610380600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611760565b005b34801561038e57600080fd5b506103ad6004803603810190808035906020019092919050505061192b565b005b3480156103bb57600080fd5b506103c4611aa1565b005b3480156103d257600080fd5b506103db611c0e565b005b3480156103e957600080fd5b506103f26123a3565b005b34801561040057600080fd5b5061041f60048036038101908080359060200190929190505050612540565b005b34801561042d57600080fd5b5061044c600480360381019080803590602001909291905050506126c5565b005b6104906004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061283b565b005b34801561049e57600080fd5b506104d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613352565b604051808860028111156104e357fe5b60ff1681526020018781526020018681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390f35b34801561053157600080fd5b5061053a6133ae565b005b34801561054857600080fd5b5061057d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061354b565b604051808215151515815260200191505060405180910390f35b3480156105a357600080fd5b506105c260048036038101908080359060200190929190505050613615565b005b3480156105d057600080fd5b506105d9613799565b005b3480156105e757600080fd5b5061060660048036038101908080359060200190929190505050613b4e565b005b61063c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613cd2565b005b34801561064a57600080fd5b5061066960048036038101908080359060200190929190505050613f4f565b005b34801561067757600080fd5b506106ac600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506140d6565b005b3480156106ba57600080fd5b506106ef600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614391565b005b3480156106fd57600080fd5b50610706614721565b005b34801561071457600080fd5b5061071d61488e565b6040518082815260200191505060405180910390f35b34801561073f57600080fd5b5061075e600480360381019080803590602001909291905050506149ef565b604051808215151515815260200191505060405180910390f35b34801561078457600080fd5b506107c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050614a1c565b005b3480156107d357600080fd5b506107dc614e08565b6040518082815260200191505060405180910390f35b3480156107fe57600080fd5b5061081d60048036038101908080359060200190929190505050614e76565b005b34801561082b57600080fd5b5061086a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614fec565b604051808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390f35b3480156108d457600080fd5b50610909600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061520d565b6040518082815260200191505060405180910390f35b34801561092b57600080fd5b5061093461536f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156109fb57600080fd5b505af1158015610a0f573d6000803e3d6000fd5b505050506040513d6020811015610a2557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a6f57600080fd5b600f60009054906101000a900460ff161515610a8a57600080fd5b6000600f60006101000a81548160ff0219169083151502179055507f490ab76e218d505b9e8a136d5a870256b54ab04501417ab228038e5bad7b9d7f4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b505050506040513d6020811015610bc157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c0b57600080fd5b60016002811115610c1857fe5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115610c7357fe5b141515610c7f57600080fd5b600081111515610c8e57600080fd5b610c97816149ef565b1515610ca257600080fd5b610cb78160135461539490919063ffffffff16565b601381905550610d1281601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461539490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055508173ffffffffffffffffffffffffffffffffffffffff167fd3c40054bd326e5fd2b4b12581c795337e5bd017d02ba0ee8d465a1908192f29824233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a25050565b610dee615a88565b610df6615aaa565b610dfe615ace565b600f60009054906101000a900460ff16836000600281101515610e1d57fe5b602002019015159081151581525050600f60019054906101000a900460ff16836001600281101515610e4b57fe5b602002019015159081151581525050601054826000601281101515610e6c57fe5b602002018181525050601154826001601281101515610e8757fe5b602002018181525050601254826002601281101515610ea257fe5b602002018181525050601354826003601281101515610ebd57fe5b602002018181525050601454826004601281101515610ed857fe5b602002018181525050601554826005601281101515610ef357fe5b602002018181525050601654826006601281101515610f0e57fe5b602002018181525050601754826007601281101515610f2957fe5b602002018181525050601854826008601281101515610f4457fe5b602002018181525050600754826009601281101515610f5f57fe5b60200201818152505060085482600a601281101515610f7a57fe5b60200201818152505060095482600b601281101515610f9557fe5b602002018181525050600b5482600c601281101515610fb057fe5b602002018181525050600a5482600d601281101515610fcb57fe5b602002018181525050600d5482600e601281101515610fe657fe5b602002018181525050600e5482600f60128110151561100157fe5b60200201818152505060065482601060128110151561101c57fe5b60200201818152505061102d61488e565b82601160128110151561103c57fe5b6020020181815250506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600060068110151561107657fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160016006811015156110df57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600260068110151561114857fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160036006811015156111b157fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600460068110151561121a57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600560068110151561128357fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050909192565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561134657600080fd5b505af115801561135a573d6000803e3d6000fd5b505050506040513d602081101561137057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114ad57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb510e97336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b505050506040513d602081101561149b57600080fd5b81019080805190602001909291905050505b15156114b857600080fd5b600090505b8282905081101561170c57600073ffffffffffffffffffffffffffffffffffffffff1683838381811015156114ee57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156115bf57506001600281111561153757fe5b60196000858585818110151561154957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660028111156115bc57fe5b14155b156116ff5760016019600085858581811015156115d857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083600281111561164d57fe5b0217905550828282818110151561166057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3509177794e00c65265df4c5b6a0c5cf142d9e3021a0a397a5620a73414e2f7a4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a25b80806001019150506114bd565b505050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601805490509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156117e557600080fd5b505af11580156117f9573d6000803e3d6000fd5b505050506040513d602081101561180f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561185957600080fd5b60003411151561186857600080fd5b34601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601828154811015156118b857fe5b9060005260206000209060050201600001541415156118d657600080fd5b6118e082826153b0565b8173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611926573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050506040513d60208110156119da57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a2457600080fd5b806009819055507fe28cfe2e1b94373136608c61f70b8e8203e14619c7a19792a5fe49da626e1fe2814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611b2657600080fd5b505af1158015611b3a573d6000803e3d6000fd5b505050506040513d6020811015611b5057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b9a57600080fd5b426018819055507f3d89cb8147c619804a6060c308dbd3435963a2f6380e97e07924b08686ee045b4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b600080600080600080600080600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611c7857600080fd5b600f60009054906101000a900460ff16151515611c9457600080fd5b60016002811115611ca157fe5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115611cfc57fe5b141515611d0857600080fd5b426017541080611d19575042601854105b1515611d2457600080fd5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549350601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154925042601754108015611dca57506000841180611dc95750600083115b5b15612045576000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550611ebc8460145461539490919063ffffffff16565b601481905550611ed78360165461539490919063ffffffff16565b601681905550601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006016000611f2b9190615af1565b839750829650600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611f83868861539490919063ffffffff16565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561200857600080fd5b505af115801561201c573d6000803e3d6000fd5b505050506040513d602081101561203257600080fd5b8101908080519060200190929190505050505b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549150601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050426018541080156120eb575060008211806120ea5750600081115b5b156122c7576000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506121a7816121998460155461539490919063ffffffff16565b61539490919063ffffffff16565b601581905550819550809450600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33612205848661539490919063ffffffff16565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561228a57600080fd5b505af115801561229e573d6000803e3d6000fd5b505050506040513d60208110156122b457600080fd5b8101908080519060200190929190505050505b60008811806122d65750600086115b806122e15750600085115b806122ec5750600087115b15156122f757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f672f8e810c868df9db1220f2ddbce74c6f083daaf154571adf351b96c7f39f1c8988888b4233604051808781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390a25050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b505050506040513d602081101561245257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561249c57600080fd5b600f60019054906101000a900460ff161515156124b857600080fd5b6001600f60016101000a81548160ff0219169083151502179055507f7b1990f6546bb8c366883c6dbadda7cbb52114d60570d3f7ab226e6a59f35bf24233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156125c557600080fd5b505af11580156125d9573d6000803e3d6000fd5b505050506040513d60208110156125ef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561263957600080fd5b60008111151561264857600080fd5b80600b819055507f4af0eec0abbd1182ad9447250b6ee4cf8c99a957f0633f741d3404b12445e793814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561274a57600080fd5b505af115801561275e573d6000803e3d6000fd5b505050506040513d602081101561277457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127be57600080fd5b806008819055507fbe1ecb35a50c219fe6a31c598812ef3aa097498ab1139d73f926eed4485ed74e814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b600080600080600080600080600f60019054906101000a900460ff1615151561286357600080fd5b600f60009054906101000a900460ff1615151561287f57600080fd5b4260075410151561288f57600080fd5b6001600281111561289c57fe5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660028111156128f757fe5b14151561290357600080fd5b60003411151561291257600080fd5b600d54341015151561292357600080fd5b600e5461297b34601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461539490919063ffffffff16565b1115151561298857600080fd5b6012600a5411156129c9576129c26012600a5403600a0a6129b4600b5434615a2190919063ffffffff16565b615a2190919063ffffffff16565b9750612a23565b6012600a541015612a0a57612a03600a54601203600a0a6129f5600b5434615a2190919063ffffffff16565b615a5990919063ffffffff16565b9750612a22565b612a1f600b5434615a2190919063ffffffff16565b97505b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f60bb7c338a8d6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182600019166000191681526020019350505050602060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050506040513d6020811015612b2257600080fd5b81019080805190602001909291905050509650600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166381807a07896040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612bc657600080fd5b505af1158015612bda573d6000803e3d6000fd5b505050506040513d6020811015612bf057600080fd5b81019080805190602001909291905050509550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379544754338a346040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b158015612cd057600080fd5b505af1158015612ce4573d6000803e3d6000fd5b505050506040513d6020811015612cfa57600080fd5b81019080805190602001909291905050509450612d3285612d24888a61539490919063ffffffff16565b61539490919063ffffffff16565b9350600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614158015612d9d57508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b8015612e0e575060016002811115612db157fe5b601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115612e0c57fe5b145b15612e2a5760646006548902811515612e2357fe5b0492508891505b612e57612e5284612e44878c61539490919063ffffffff16565b61539490919063ffffffff16565b6149ef565b1515612e6257600080fd5b612e773460105461539490919063ffffffff16565b601081905550612e928860115461539490919063ffffffff16565b601181905550612ebf83612eb18660125461539490919063ffffffff16565b61539490919063ffffffff16565b601281905550612f1a83601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461539490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550612fb588601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461539490919063ffffffff16565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061305084601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461539490919063ffffffff16565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506130eb34601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461539490919063ffffffff16565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160a0604051908101604052803481526020018a81526020018681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001858152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040155505090508173ffffffffffffffffffffffffffffffffffffffff16600182033373ffffffffffffffffffffffffffffffffffffffff167fef3d6d6d0ea8ba9300747aa0f361a2992894dc03d65ac83213c717e72e27a1ef348c8c8c8c8b426040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a4600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620493e034604051600060405180830381858888f19350505050151561334657600080fd5b50505050505050505050565b60196020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050154908060070160009054906101000a900460ff16905087565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561343357600080fd5b505af1158015613447573d6000803e3d6000fd5b505050506040513d602081101561345d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134a757600080fd5b600f60009054906101000a900460ff161515156134c357600080fd5b6001600f60006101000a81548160ff0219169083151502179055507fabdb1c9133626eb4f8c5f2ec7e3c60a969a2fb148a0c341a3cf6597242c8f8f54233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b60006001600281111561355a57fe5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660028111156135b557fe5b14801561360e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070160009054906101000a900460ff165b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561369a57600080fd5b505af11580156136ae573d6000803e3d6000fd5b505050506040513d60208110156136c457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561370e57600080fd5b428111151561371c57600080fd5b806017819055507f7648ba44639b7ab89cdbb62e628e221704d6aa3ff587a7deab59c9498416e8b8814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561382057600080fd5b505af1158015613834573d6000803e3d6000fd5b505050506040513d602081101561384a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561389457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156138f257600080fd5b600f60019054906101000a900460ff16151561390d57600080fd5b613a1e613918614e08565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d60208110156139ff57600080fd5b8101908080519060200190929190505050615a6f90919063ffffffff16565b9050600081111515613a2f57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015613ac057600080fd5b505af1158015613ad4573d6000803e3d6000fd5b505050507f8b70448d0d143d815676e1088155bf2ff4436b50d76b30ff3a1fe29290892702814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613bd357600080fd5b505af1158015613be7573d6000803e3d6000fd5b505050506040513d6020811015613bfd57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c4757600080fd5b4281111515613c5557600080fd5b806018819055507fa667cd41d8e409b2374eebb8f825d13697caa4a36ca428d4a7e90629264cc55d814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613d5957600080fd5b505af1158015613d6d573d6000803e3d6000fd5b505050506040513d6020811015613d8357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613dcd57600080fd5b600034111515613ddc57600080fd5b34601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154141515613e2c57600080fd5b600090505b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060180549050811015613f04576000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060182815481101515613ecf57fe5b9060005260206000209060050201600001541415613eec57613ef7565b613ef682826153b0565b5b8080600101915050613e31565b8173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015613f4a573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613fd457600080fd5b505af1158015613fe8573d6000803e3d6000fd5b505050506040513d6020811015613ffe57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561404857600080fd5b80600d541115151561405957600080fd5b80600e819055507ff3349592c7075475a7bfac0ff983fd3578ba58576163a6d9efbb076c8cdca5c3814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561415b57600080fd5b505af115801561416f573d6000803e3d6000fd5b505050506040513d602081101561418557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156141cf57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561426c57600080fd5b505af1158015614280573d6000803e3d6000fd5b505050506040513d602081101561429657600080fd5b8101908080519060200190929190505050101515156142b457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561431157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561434d57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561441657600080fd5b505af115801561442a573d6000803e3d6000fd5b505050506040513d602081101561444057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061457d57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb510e97336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561454157600080fd5b505af1158015614555573d6000803e3d6000fd5b505050506040513d602081101561456b57600080fd5b81019080805190602001909291905050505b151561458857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156145c457600080fd5b6002808111156145d057fe5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600281111561462b57fe5b1415151561463857600080fd5b6002601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083600281111561469757fe5b02179055508073ffffffffffffffffffffffffffffffffffffffff167f76e0fccc7f70bf85fadd5ab0f16d5abb18e41895621f9dd690f4b119972a549c4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a250565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156147a657600080fd5b505af11580156147ba573d6000803e3d6000fd5b505050506040513d60208110156147d057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561481a57600080fd5b426017819055507f482d291cc9bcc4fe712bd6259a0b4589012ac8ede2f1ad9bb06ecfcb81d453ed4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156149e657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156149a457600080fd5b505af11580156149b8573d6000803e3d6000fd5b505050506040513d60208110156149ce57600080fd5b810190808051906020019092919050505090506149ec565b600c5490505b90565b60006149f961488e565b614a1383614a05614e08565b61539490919063ffffffff16565b11159050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614aa157600080fd5b505af1158015614ab5573d6000803e3d6000fd5b505050506040513d6020811015614acb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480614c0857506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb510e97336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614bcc57600080fd5b505af1158015614be0573d6000803e3d6000fd5b505050506040513d6020811015614bf657600080fd5b81019080805190602001909291905050505b1515614c1357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515614c4f57600080fd5b60016002811115614c5c57fe5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115614cb757fe5b14151515614cc457600080fd5b6001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690836002811115614d2357fe5b021790555080601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070160006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3509177794e00c65265df4c5b6a0c5cf142d9e3021a0a397a5620a73414e2f7a4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a25050565b6000614e71614e24601654601354615a6f90919063ffffffff16565b614e63614e3e601554601254615a6f90919063ffffffff16565b614e55601454601154615a6f90919063ffffffff16565b61539490919063ffffffff16565b61539490919063ffffffff16565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614efb57600080fd5b505af1158015614f0f573d6000803e3d6000fd5b505050506040513d6020811015614f2557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614f6f57600080fd5b80600d819055507fa59af5a909ead6260a2d961d1c53f1895d9dceb6133740eedb4d7a3ea2e16f5d814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000806000806000601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561504357fe5b9060005260206000209060050201600001549450601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156150a657fe5b9060005260206000209060050201600101549350601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561510957fe5b9060005260206000209060050201600201549250601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561516c57fe5b906000526020600020906005020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156151ef57fe5b90600052602060002090600502016004015490509295509295909350565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561536557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561532357600080fd5b505af1158015615337573d6000803e3d6000fd5b505050506040513d602081101561534d57600080fd5b8101908080519060200190929190505050905061536a565b600090505b919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081830190508281101515156153a757fe5b80905092915050565b6000806000806000601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561540757fe5b906000526020600020906005020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151561558b57601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156154c057fe5b906000526020600020906005020160040154935061552984601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154615a6f90919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061558484601254615a6f90919063ffffffff16565b6012819055505b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156155da57fe5b906000526020600020906005020160000154925061564383601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154615a6f90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156156d857fe5b906000526020600020906005020160010154915061574182601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154615a6f90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156157d657fe5b906000526020600020906005020160020154905061583f81601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154615a6f90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061589a83601054615a6f90919063ffffffff16565b6010819055506158b582601154615a6f90919063ffffffff16565b6011819055506158d081601254615a6f90919063ffffffff16565b601281905550601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561592557fe5b9060005260206000209060050201600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090555050858773ffffffffffffffffffffffffffffffffffffffff167f522643e7c0d923fb5b41ba10ddd84d7c7e895d6dc89a4b62831989ff97edb1ab8585854233604051808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a350505050505050565b600080831415615a345760009050615a53565b8183029050818382811515615a4557fe5b04141515615a4f57fe5b8090505b92915050565b60008183811515615a6657fe5b04905092915050565b6000828211151515615a7d57fe5b818303905092915050565b6040805190810160405280600290602082028038833980820191505090505090565b61024060405190810160405280601290602082028038833980820191505090505090565b60c060405190810160405280600690602082028038833980820191505090505090565b5080546000825560050290600052602060002090810190615b129190615b15565b50565b615b7891905b80821115615b7457600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600482016000905550600501615b1b565b5090565b905600a165627a7a7230582067cea39879a7251a16ca0a7290955d7129c4c454a363ce6bb8a887737d32823c0029000000000000000000000000000000000000000000000000000000005bb1637f000000000000000000000000000000000000000000000000000000005bb16380000000000000000000000000000000000000000000000000000000005d929700000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000b4851a245d522b2562a0562162fc4a57f419a7e900000000000000000000000065732d6e88a83a38a4b803b0181b3a03a416537300000000000000000000000037cbd2e72c9ba7909ca198bb839c119917cba05c000000000000000000000000ae2148f680e14cfeffbd067fe574e9825a6ddb610000000000000000000000003525ac6cc8c673d74bcd94a4c005c9301fad135b
Deployed Bytecode
0x608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063046f7da21461019b57806305ab421d146101b25780631865c57d146101ff57806319774b86146102b05780631b8689b6146102eb5780632405d03e146103425780633784f00014610382578063402c569c146103af57806348c54b9d146103c65780634bb278f3146103dd5780634fbe30d4146103f457806358892f631461042157806362d176cb1461044e5780636f7bc9be146104925780638456cb5914610525578063849ae5ea1461053c57806388a6cc5314610597578063940bb344146105c45780639c5c53b3146105db5780639f1aa40414610608578063b1afe96b1461063e578063bbcd5bbe1461066b578063bf947852146106ae578063c10b30c0146106f1578063d8788e6814610708578063da1a13ce14610733578063e6dff3b414610778578063f145ff23146107c7578063f77a490d146107f2578063f7b6302e1461081f578063fba52ff1146108c8578063fc28bc8f1461091f575b600080fd5b3480156101a757600080fd5b506101b0610976565b005b3480156101be57600080fd5b506101fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b12565b005b34801561020b57600080fd5b50610214610de6565b6040518084600260200280838360005b8381101561023f578082015181840152602081019050610224565b5050505090500183601260200280838360005b8381101561026d578082015181840152602081019050610252565b5050505090500182600660200280838360005b8381101561029b578082015181840152602081019050610280565b50505050905001935050505060405180910390f35b3480156102bc57600080fd5b506102e96004803603810190808035906020019082018035906020019190919293919293905050506112bf565b005b3480156102f757600080fd5b5061032c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611711565b6040518082815260200191505060405180910390f35b610380600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611760565b005b34801561038e57600080fd5b506103ad6004803603810190808035906020019092919050505061192b565b005b3480156103bb57600080fd5b506103c4611aa1565b005b3480156103d257600080fd5b506103db611c0e565b005b3480156103e957600080fd5b506103f26123a3565b005b34801561040057600080fd5b5061041f60048036038101908080359060200190929190505050612540565b005b34801561042d57600080fd5b5061044c600480360381019080803590602001909291905050506126c5565b005b6104906004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061283b565b005b34801561049e57600080fd5b506104d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613352565b604051808860028111156104e357fe5b60ff1681526020018781526020018681526020018581526020018481526020018381526020018215151515815260200197505050505050505060405180910390f35b34801561053157600080fd5b5061053a6133ae565b005b34801561054857600080fd5b5061057d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061354b565b604051808215151515815260200191505060405180910390f35b3480156105a357600080fd5b506105c260048036038101908080359060200190929190505050613615565b005b3480156105d057600080fd5b506105d9613799565b005b3480156105e757600080fd5b5061060660048036038101908080359060200190929190505050613b4e565b005b61063c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613cd2565b005b34801561064a57600080fd5b5061066960048036038101908080359060200190929190505050613f4f565b005b34801561067757600080fd5b506106ac600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506140d6565b005b3480156106ba57600080fd5b506106ef600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614391565b005b3480156106fd57600080fd5b50610706614721565b005b34801561071457600080fd5b5061071d61488e565b6040518082815260200191505060405180910390f35b34801561073f57600080fd5b5061075e600480360381019080803590602001909291905050506149ef565b604051808215151515815260200191505060405180910390f35b34801561078457600080fd5b506107c5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050614a1c565b005b3480156107d357600080fd5b506107dc614e08565b6040518082815260200191505060405180910390f35b3480156107fe57600080fd5b5061081d60048036038101908080359060200190929190505050614e76565b005b34801561082b57600080fd5b5061086a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614fec565b604051808681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019550505050505060405180910390f35b3480156108d457600080fd5b50610909600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061520d565b6040518082815260200191505060405180910390f35b34801561092b57600080fd5b5061093461536f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156109fb57600080fd5b505af1158015610a0f573d6000803e3d6000fd5b505050506040513d6020811015610a2557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a6f57600080fd5b600f60009054906101000a900460ff161515610a8a57600080fd5b6000600f60006101000a81548160ff0219169083151502179055507f490ab76e218d505b9e8a136d5a870256b54ab04501417ab228038e5bad7b9d7f4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610b9757600080fd5b505af1158015610bab573d6000803e3d6000fd5b505050506040513d6020811015610bc157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c0b57600080fd5b60016002811115610c1857fe5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115610c7357fe5b141515610c7f57600080fd5b600081111515610c8e57600080fd5b610c97816149ef565b1515610ca257600080fd5b610cb78160135461539490919063ffffffff16565b601381905550610d1281601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005015461539490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055508173ffffffffffffffffffffffffffffffffffffffff167fd3c40054bd326e5fd2b4b12581c795337e5bd017d02ba0ee8d465a1908192f29824233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a25050565b610dee615a88565b610df6615aaa565b610dfe615ace565b600f60009054906101000a900460ff16836000600281101515610e1d57fe5b602002019015159081151581525050600f60019054906101000a900460ff16836001600281101515610e4b57fe5b602002019015159081151581525050601054826000601281101515610e6c57fe5b602002018181525050601154826001601281101515610e8757fe5b602002018181525050601254826002601281101515610ea257fe5b602002018181525050601354826003601281101515610ebd57fe5b602002018181525050601454826004601281101515610ed857fe5b602002018181525050601554826005601281101515610ef357fe5b602002018181525050601654826006601281101515610f0e57fe5b602002018181525050601754826007601281101515610f2957fe5b602002018181525050601854826008601281101515610f4457fe5b602002018181525050600754826009601281101515610f5f57fe5b60200201818152505060085482600a601281101515610f7a57fe5b60200201818152505060095482600b601281101515610f9557fe5b602002018181525050600b5482600c601281101515610fb057fe5b602002018181525050600a5482600d601281101515610fcb57fe5b602002018181525050600d5482600e601281101515610fe657fe5b602002018181525050600e5482600f60128110151561100157fe5b60200201818152505060065482601060128110151561101c57fe5b60200201818152505061102d61488e565b82601160128110151561103c57fe5b6020020181815250506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600060068110151561107657fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160016006811015156110df57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600260068110151561114857fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160036006811015156111b157fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600460068110151561121a57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600560068110151561128357fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050909192565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561134657600080fd5b505af115801561135a573d6000803e3d6000fd5b505050506040513d602081101561137057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114ad57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb510e97336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b505050506040513d602081101561149b57600080fd5b81019080805190602001909291905050505b15156114b857600080fd5b600090505b8282905081101561170c57600073ffffffffffffffffffffffffffffffffffffffff1683838381811015156114ee57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156115bf57506001600281111561153757fe5b60196000858585818110151561154957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660028111156115bc57fe5b14155b156116ff5760016019600085858581811015156115d857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083600281111561164d57fe5b0217905550828282818110151561166057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3509177794e00c65265df4c5b6a0c5cf142d9e3021a0a397a5620a73414e2f7a4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a25b80806001019150506114bd565b505050565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601805490509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156117e557600080fd5b505af11580156117f9573d6000803e3d6000fd5b505050506040513d602081101561180f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561185957600080fd5b60003411151561186857600080fd5b34601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601828154811015156118b857fe5b9060005260206000209060050201600001541415156118d657600080fd5b6118e082826153b0565b8173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611926573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050506040513d60208110156119da57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a2457600080fd5b806009819055507fe28cfe2e1b94373136608c61f70b8e8203e14619c7a19792a5fe49da626e1fe2814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611b2657600080fd5b505af1158015611b3a573d6000803e3d6000fd5b505050506040513d6020811015611b5057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b9a57600080fd5b426018819055507f3d89cb8147c619804a6060c308dbd3435963a2f6380e97e07924b08686ee045b4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b600080600080600080600080600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611c7857600080fd5b600f60009054906101000a900460ff16151515611c9457600080fd5b60016002811115611ca157fe5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115611cfc57fe5b141515611d0857600080fd5b426017541080611d19575042601854105b1515611d2457600080fd5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549350601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154925042601754108015611dca57506000841180611dc95750600083115b5b15612045576000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550611ebc8460145461539490919063ffffffff16565b601481905550611ed78360165461539490919063ffffffff16565b601681905550601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006016000611f2b9190615af1565b839750829650600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33611f83868861539490919063ffffffff16565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561200857600080fd5b505af115801561201c573d6000803e3d6000fd5b505050506040513d602081101561203257600080fd5b8101908080519060200190929190505050505b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549150601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050426018541080156120eb575060008211806120ea5750600081115b5b156122c7576000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055506121a7816121998460155461539490919063ffffffff16565b61539490919063ffffffff16565b601581905550819550809450600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33612205848661539490919063ffffffff16565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561228a57600080fd5b505af115801561229e573d6000803e3d6000fd5b505050506040513d60208110156122b457600080fd5b8101908080519060200190929190505050505b60008811806122d65750600086115b806122e15750600085115b806122ec5750600087115b15156122f757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f672f8e810c868df9db1220f2ddbce74c6f083daaf154571adf351b96c7f39f1c8988888b4233604051808781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390a25050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b505050506040513d602081101561245257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561249c57600080fd5b600f60019054906101000a900460ff161515156124b857600080fd5b6001600f60016101000a81548160ff0219169083151502179055507f7b1990f6546bb8c366883c6dbadda7cbb52114d60570d3f7ab226e6a59f35bf24233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156125c557600080fd5b505af11580156125d9573d6000803e3d6000fd5b505050506040513d60208110156125ef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561263957600080fd5b60008111151561264857600080fd5b80600b819055507f4af0eec0abbd1182ad9447250b6ee4cf8c99a957f0633f741d3404b12445e793814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561274a57600080fd5b505af115801561275e573d6000803e3d6000fd5b505050506040513d602081101561277457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127be57600080fd5b806008819055507fbe1ecb35a50c219fe6a31c598812ef3aa097498ab1139d73f926eed4485ed74e814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b600080600080600080600080600f60019054906101000a900460ff1615151561286357600080fd5b600f60009054906101000a900460ff1615151561287f57600080fd5b4260075410151561288f57600080fd5b6001600281111561289c57fe5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660028111156128f757fe5b14151561290357600080fd5b60003411151561291257600080fd5b600d54341015151561292357600080fd5b600e5461297b34601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461539490919063ffffffff16565b1115151561298857600080fd5b6012600a5411156129c9576129c26012600a5403600a0a6129b4600b5434615a2190919063ffffffff16565b615a2190919063ffffffff16565b9750612a23565b6012600a541015612a0a57612a03600a54601203600a0a6129f5600b5434615a2190919063ffffffff16565b615a5990919063ffffffff16565b9750612a22565b612a1f600b5434615a2190919063ffffffff16565b97505b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f60bb7c338a8d6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182600019166000191681526020019350505050602060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050506040513d6020811015612b2257600080fd5b81019080805190602001909291905050509650600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166381807a07896040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612bc657600080fd5b505af1158015612bda573d6000803e3d6000fd5b505050506040513d6020811015612bf057600080fd5b81019080805190602001909291905050509550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379544754338a346040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b158015612cd057600080fd5b505af1158015612ce4573d6000803e3d6000fd5b505050506040513d6020811015612cfa57600080fd5b81019080805190602001909291905050509450612d3285612d24888a61539490919063ffffffff16565b61539490919063ffffffff16565b9350600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614158015612d9d57508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b8015612e0e575060016002811115612db157fe5b601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115612e0c57fe5b145b15612e2a5760646006548902811515612e2357fe5b0492508891505b612e57612e5284612e44878c61539490919063ffffffff16565b61539490919063ffffffff16565b6149ef565b1515612e6257600080fd5b612e773460105461539490919063ffffffff16565b601081905550612e928860115461539490919063ffffffff16565b601181905550612ebf83612eb18660125461539490919063ffffffff16565b61539490919063ffffffff16565b601281905550612f1a83601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461539490919063ffffffff16565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550612fb588601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461539490919063ffffffff16565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061305084601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461539490919063ffffffff16565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506130eb34601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461539490919063ffffffff16565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160a0604051908101604052803481526020018a81526020018681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001858152509080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040155505090508173ffffffffffffffffffffffffffffffffffffffff16600182033373ffffffffffffffffffffffffffffffffffffffff167fef3d6d6d0ea8ba9300747aa0f361a2992894dc03d65ac83213c717e72e27a1ef348c8c8c8c8b426040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a4600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620493e034604051600060405180830381858888f19350505050151561334657600080fd5b50505050505050505050565b60196020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050154908060070160009054906101000a900460ff16905087565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561343357600080fd5b505af1158015613447573d6000803e3d6000fd5b505050506040513d602081101561345d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134a757600080fd5b600f60009054906101000a900460ff161515156134c357600080fd5b6001600f60006101000a81548160ff0219169083151502179055507fabdb1c9133626eb4f8c5f2ec7e3c60a969a2fb148a0c341a3cf6597242c8f8f54233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b60006001600281111561355a57fe5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660028111156135b557fe5b14801561360e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070160009054906101000a900460ff165b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561369a57600080fd5b505af11580156136ae573d6000803e3d6000fd5b505050506040513d60208110156136c457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561370e57600080fd5b428111151561371c57600080fd5b806017819055507f7648ba44639b7ab89cdbb62e628e221704d6aa3ff587a7deab59c9498416e8b8814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561382057600080fd5b505af1158015613834573d6000803e3d6000fd5b505050506040513d602081101561384a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561389457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156138f257600080fd5b600f60019054906101000a900460ff16151561390d57600080fd5b613a1e613918614e08565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d60208110156139ff57600080fd5b8101908080519060200190929190505050615a6f90919063ffffffff16565b9050600081111515613a2f57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015613ac057600080fd5b505af1158015613ad4573d6000803e3d6000fd5b505050507f8b70448d0d143d815676e1088155bf2ff4436b50d76b30ff3a1fe29290892702814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613bd357600080fd5b505af1158015613be7573d6000803e3d6000fd5b505050506040513d6020811015613bfd57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c4757600080fd5b4281111515613c5557600080fd5b806018819055507fa667cd41d8e409b2374eebb8f825d13697caa4a36ca428d4a7e90629264cc55d814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613d5957600080fd5b505af1158015613d6d573d6000803e3d6000fd5b505050506040513d6020811015613d8357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613dcd57600080fd5b600034111515613ddc57600080fd5b34601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154141515613e2c57600080fd5b600090505b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060180549050811015613f04576000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060182815481101515613ecf57fe5b9060005260206000209060050201600001541415613eec57613ef7565b613ef682826153b0565b5b8080600101915050613e31565b8173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015613f4a573d6000803e3d6000fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613fd457600080fd5b505af1158015613fe8573d6000803e3d6000fd5b505050506040513d6020811015613ffe57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561404857600080fd5b80600d541115151561405957600080fd5b80600e819055507ff3349592c7075475a7bfac0ff983fd3578ba58576163a6d9efbb076c8cdca5c3814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561415b57600080fd5b505af115801561416f573d6000803e3d6000fd5b505050506040513d602081101561418557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156141cf57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561426c57600080fd5b505af1158015614280573d6000803e3d6000fd5b505050506040513d602081101561429657600080fd5b8101908080519060200190929190505050101515156142b457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561431157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561434d57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561441657600080fd5b505af115801561442a573d6000803e3d6000fd5b505050506040513d602081101561444057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061457d57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb510e97336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561454157600080fd5b505af1158015614555573d6000803e3d6000fd5b505050506040513d602081101561456b57600080fd5b81019080805190602001909291905050505b151561458857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156145c457600080fd5b6002808111156145d057fe5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600281111561462b57fe5b1415151561463857600080fd5b6002601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083600281111561469757fe5b02179055508073ffffffffffffffffffffffffffffffffffffffff167f76e0fccc7f70bf85fadd5ab0f16d5abb18e41895621f9dd690f4b119972a549c4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a250565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156147a657600080fd5b505af11580156147ba573d6000803e3d6000fd5b505050506040513d60208110156147d057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561481a57600080fd5b426017819055507f482d291cc9bcc4fe712bd6259a0b4589012ac8ede2f1ad9bb06ecfcb81d453ed4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156149e657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156149a457600080fd5b505af11580156149b8573d6000803e3d6000fd5b505050506040513d60208110156149ce57600080fd5b810190808051906020019092919050505090506149ec565b600c5490505b90565b60006149f961488e565b614a1383614a05614e08565b61539490919063ffffffff16565b11159050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614aa157600080fd5b505af1158015614ab5573d6000803e3d6000fd5b505050506040513d6020811015614acb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480614c0857506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb510e97336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614bcc57600080fd5b505af1158015614be0573d6000803e3d6000fd5b505050506040513d6020811015614bf657600080fd5b81019080805190602001909291905050505b1515614c1357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515614c4f57600080fd5b60016002811115614c5c57fe5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166002811115614cb757fe5b14151515614cc457600080fd5b6001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff02191690836002811115614d2357fe5b021790555080601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070160006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3509177794e00c65265df4c5b6a0c5cf142d9e3021a0a397a5620a73414e2f7a4233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a25050565b6000614e71614e24601654601354615a6f90919063ffffffff16565b614e63614e3e601554601254615a6f90919063ffffffff16565b614e55601454601154615a6f90919063ffffffff16565b61539490919063ffffffff16565b61539490919063ffffffff16565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614efb57600080fd5b505af1158015614f0f573d6000803e3d6000fd5b505050506040513d6020811015614f2557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614f6f57600080fd5b80600d819055507fa59af5a909ead6260a2d961d1c53f1895d9dceb6133740eedb4d7a3ea2e16f5d814233604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150565b6000806000806000601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561504357fe5b9060005260206000209060050201600001549450601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156150a657fe5b9060005260206000209060050201600101549350601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561510957fe5b9060005260206000209060050201600201549250601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561516c57fe5b906000526020600020906005020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156151ef57fe5b90600052602060002090600502016004015490509295509295909350565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561536557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561532357600080fd5b505af1158015615337573d6000803e3d6000fd5b505050506040513d602081101561534d57600080fd5b8101908080519060200190929190505050905061536a565b600090505b919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081830190508281101515156153a757fe5b80905092915050565b6000806000806000601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561540757fe5b906000526020600020906005020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151561558b57601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156154c057fe5b906000526020600020906005020160040154935061552984601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154615a6f90919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061558484601254615a6f90919063ffffffff16565b6012819055505b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156155da57fe5b906000526020600020906005020160000154925061564383601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154615a6f90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156156d857fe5b906000526020600020906005020160010154915061574182601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154615a6f90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601868154811015156157d657fe5b906000526020600020906005020160020154905061583f81601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154615a6f90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061589a83601054615a6f90919063ffffffff16565b6010819055506158b582601154615a6f90919063ffffffff16565b6011819055506158d081601254615a6f90919063ffffffff16565b601281905550601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018681548110151561592557fe5b9060005260206000209060050201600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090555050858773ffffffffffffffffffffffffffffffffffffffff167f522643e7c0d923fb5b41ba10ddd84d7c7e895d6dc89a4b62831989ff97edb1ab8585854233604051808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a350505050505050565b600080831415615a345760009050615a53565b8183029050818382811515615a4557fe5b04141515615a4f57fe5b8090505b92915050565b60008183811515615a6657fe5b04905092915050565b6000828211151515615a7d57fe5b818303905092915050565b6040805190810160405280600290602082028038833980820191505090505090565b61024060405190810160405280601290602082028038833980820191505090505090565b60c060405190810160405280600690602082028038833980820191505090505090565b5080546000825560050290600052602060002090810190615b129190615b15565b50565b615b7891905b80821115615b7457600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600482016000905550600501615b1b565b5090565b905600a165627a7a7230582067cea39879a7251a16ca0a7290955d7129c4c454a363ce6bb8a887737d32823c0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000005bb1637f000000000000000000000000000000000000000000000000000000005bb16380000000000000000000000000000000000000000000000000000000005d929700000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000b4851a245d522b2562a0562162fc4a57f419a7e900000000000000000000000065732d6e88a83a38a4b803b0181b3a03a416537300000000000000000000000037cbd2e72c9ba7909ca198bb839c119917cba05c000000000000000000000000ae2148f680e14cfeffbd067fe574e9825a6ddb610000000000000000000000003525ac6cc8c673d74bcd94a4c005c9301fad135b
-----Decoded View---------------
Arg [0] : uint256Args (uint256[11]): 1538351999,1538352000,1569888000,18,10000,1000000000000000000000000000,100000000000000000,10000000000000000000,0,0,5
Arg [1] : addressArgs (address[5]): 0xB4851A245D522B2562a0562162fc4A57F419a7e9,0x65732D6E88A83a38A4b803B0181B3a03A4165373,0x37cbD2e72c9ba7909cA198BB839C119917Cba05c,0xae2148f680e14CfEFfBd067fe574E9825a6DDb61,0x3525Ac6cC8c673d74bCd94a4C005c9301Fad135B
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005bb1637f
Arg [1] : 000000000000000000000000000000000000000000000000000000005bb16380
Arg [2] : 000000000000000000000000000000000000000000000000000000005d929700
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [5] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [6] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [7] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [11] : 000000000000000000000000b4851a245d522b2562a0562162fc4a57f419a7e9
Arg [12] : 00000000000000000000000065732d6e88a83a38a4b803b0181b3a03a4165373
Arg [13] : 00000000000000000000000037cbd2e72c9ba7909ca198bb839c119917cba05c
Arg [14] : 000000000000000000000000ae2148f680e14cfeffbd067fe574e9825a6ddb61
Arg [15] : 0000000000000000000000003525ac6cc8c673d74bcd94a4c005c9301fad135b
Swarm Source
bzzr://67cea39879a7251a16ca0a7290955d7129c4c454a363ce6bb8a887737d32823c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.