ERC-20
Overview
Max Total Supply
1,675,315.261568681235182825 P4D
Holders
106
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
165,472.289789193410063876 P4DValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
P4D
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-11-25 */ pragma solidity 0.4.25; /*===========================================================================================* *************************************** https://p4d.io *************************************** *============================================================================================* * * ,-.----. ,--, * \ / \ ,--.'| ,---, * | : \ ,--, | : .' .' `\ * | | .\ :,---.'| : ',---.' \ * . : |: |; : | | ;| | .`\ | * | | \ :| | : _' |: : | ' | * | : . /: : |.' || ' ' ; : * ; | |`-' | ' ' ; :' | ; . | * | | ; \ \ .'. || | : | ' * : ' | `---`: | '' : | / ; * : : : ' ; || | '` ,/ * | | : | : ;; : .' * `---'.| ' ,/ | ,.' * `---` '--' '---' * _____ _ _ _ __ __ _ _ _ * |_ _| | | | | | / _|/ _(_) (_) | | * | | | |__ ___ | | | |_ __ ___ | |_| |_ _ ___ _ __ _| | * | | | '_ \ / _ \ | | | | '_ \ / _ \| _| _| |/ __| |/ _` | | * | | | | | | __/ | |_| | | | | (_) | | | | | | (__| | (_| | | * \_/ |_| |_|\___| \___/|_| |_|\___/|_| |_| |_|\___|_|\__,_|_| * * ______ ___________ _____ _ * | ___ \____ | _ \ | ___| (_) * | |_/ / / / | | | | |____ ___ __ __ _ _ __ ___ _ ___ _ __ * | __/ \ \ | | | | __\ \/ / '_ \ / _` | '_ \/ __| |/ _ \| '_ \ * | | .___/ / |/ / | |___> <| |_) | (_| | | | \__ \ | (_) | | | | * \_| \____/|___/ \____/_/\_\ .__/ \__,_|_| |_|___/_|\___/|_| |_| * | | * |_| * _L/L * _LT/l_L_ * _LLl/L_T_lL_ * _T/L _LT|L/_|__L_|_L_ * _Ll/l_L_ _TL|_T/_L_|__T__|_l_ * _TLl/T_l|_L_ _LL|_Tl/_|__l___L__L_|L_ * _LT_L/L_|_L_l_L_ _'|_|_|T/_L_l__T _ l__|__|L_ * _Tl_L|/_|__|_|__T _LlT_|_Ll/_l_ _|__[ ]__|__|_l_L_ * ..__ _LT_l_l/|__|__l_T _T_L|_|_|l/___|__ | _l__|_ |__|_T_L_ __ * _ ___ _ _ ___ * /_\ / __\___ _ __ | |_ _ __ __ _ ___| |_ / __\_ _ * //_\\ / / / _ \| '_ \| __| '__/ _` |/ __| __| /__\// | | | * / _ \ / /__| (_) | | | | |_| | | (_| | (__| |_ / \/ \ |_| | * \_/ \_/ \____/\___/|_| |_|\__|_| \__,_|\___|\__| \_____/\__, | * ╔═╗╔═╗╦ ╔╦╗╔═╗╦ ╦ |___/ * ╚═╗║ ║║ ║║║╣ ╚╗╔╝ * ╚═╝╚═╝╩═╝────═╩╝╚═╝ ╚╝ * 0x736f6c5f646576 * ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ * * -> What? * The original autonomous pyramid, improved (again!): * [x] Developer optimized to include utility functions: * -> approve(): allow others to transfer on your behalf * -> approveAndCall(): callback for contracts that want to use approve() * -> transferFrom(): use your approval allowance to transfer P4D on anothers behalf * -> transferAndCall(): callback for contracts that want to use transfer() * [x] Designed to be a bridge for P3D to make the token functional for use in external contracts * [x] Masternodes are also used in P4D as well as when it buys P3D: * -> If the referrer has more than 10,000 P4D tokens, they will get 1/3 of the 10% divs * -> If the referrer also has more than 100 P3D tokens, they will be used as the ref * on the buy order to P3D and receive 1/3 of the 10% P3D divs upon purchase * [x] As this contract holds P3D, it will receive ETH dividends proportional to it's * holdings, this ETH is then distributed to all P4D token holders proportionally * [x] On top of the ETH divs from P3D, you will also receive P3D divs from buys and sells * in the P4D exchange * [x] There's a 10% div tax for buys, a 5% div tax on sells and a 0% tax on transfers * [x] No auto-transfers for dividends or subdividends, they will all be stored until * either withdraw() or reinvest() are called, this makes it easier for external * contracts to calculate how much they received upon a withdraw/reinvest * [x] Partial withdraws and reinvests for both dividends and subdividends * [x] Global name registry for all external contracts to use: * -> Names cost 0.01 ETH to register * -> Names must be unique and not already owned * -> You can set an active name out of all the ones you own * -> You can change your name at any time but still be referred by an old name * -> All ETH from registrations will be distributed to all P4D holders proportionally * */ // P3D interface interface P3D { function buy(address) external payable returns(uint256); function transfer(address, uint256) external returns(bool); function myTokens() external view returns(uint256); function balanceOf(address) external view returns(uint256); function myDividends(bool) external view returns(uint256); function withdraw() external; function calculateTokensReceived(uint256) external view returns(uint256); function stakingRequirement() external view returns(uint256); } // ERC-677 style token transfer callback interface usingP4D { function tokenCallback(address _from, uint256 _value, bytes _data) external returns (bool); } // ERC-20 style approval callback interface controllingP4D { function approvalCallback(address _from, uint256 _value, bytes _data) external returns (bool); } contract P4D { /*================================= = MODIFIERS = =================================*/ // only people with tokens modifier onlyBagholders() { require(myTokens() > 0); _; } // administrators can: // -> change the name of the contract // -> change the name of the token // -> change the PoS difficulty (how many tokens it costs to hold a masternode, in case it gets crazy high later) // -> allow a contract to accept P4D tokens // they CANNOT: // -> take funds // -> disable withdrawals // -> kill the contract // -> change the price of tokens modifier onlyAdministrator() { require(administrators[msg.sender] || msg.sender == _dev); _; } // ensures that the first tokens in the contract will be equally distributed // meaning, no divine dump will be ever possible // result: healthy longevity. modifier purchaseFilter(address _sender, uint256 _amountETH) { require(!isContract(_sender) || canAcceptTokens_[_sender]); if (now >= ACTIVATION_TIME) { onlyAmbassadors = false; } // are we still in the vulnerable phase? // if so, enact anti early whale protocol if (onlyAmbassadors && ((totalAmbassadorQuotaSpent_ + _amountETH) <= ambassadorQuota_)) { require( // is the customer in the ambassador list? ambassadors_[_sender] == true && // does the customer purchase exceed the max ambassador quota? (ambassadorAccumulatedQuota_[_sender] + _amountETH) <= ambassadorMaxPurchase_ ); // updated the accumulated quota ambassadorAccumulatedQuota_[_sender] = SafeMath.add(ambassadorAccumulatedQuota_[_sender], _amountETH); totalAmbassadorQuotaSpent_ = SafeMath.add(totalAmbassadorQuotaSpent_, _amountETH); // execute _; } else { require(!onlyAmbassadors); _; } } /*============================== = EVENTS = ==============================*/ event onTokenPurchase( address indexed _customerAddress, uint256 _incomingP3D, uint256 _tokensMinted, address indexed _referredBy ); event onTokenSell( address indexed _customerAddress, uint256 _tokensBurned, uint256 _P3D_received ); event onReinvestment( address indexed _customerAddress, uint256 _P3D_reinvested, uint256 _tokensMinted ); event onSubdivsReinvestment( address indexed _customerAddress, uint256 _ETH_reinvested, uint256 _tokensMinted ); event onWithdraw( address indexed _customerAddress, uint256 _P3D_withdrawn ); event onSubdivsWithdraw( address indexed _customerAddress, uint256 _ETH_withdrawn ); event onNameRegistration( address indexed _customerAddress, string _registeredName ); // ERC-20 event Transfer( address indexed _from, address indexed _to, uint256 _tokens ); event Approval( address indexed _tokenOwner, address indexed _spender, uint256 _tokens ); /*===================================== = CONFIGURABLES = =====================================*/ string public name = "PoWH4D"; string public symbol = "P4D"; uint256 constant public decimals = 18; uint256 constant internal buyDividendFee_ = 10; // 10% dividend tax on each buy uint256 constant internal sellDividendFee_ = 5; // 5% dividend tax on each sell uint256 internal tokenPriceInitial_; // set in the constructor uint256 constant internal tokenPriceIncremental_ = 1e9; // 1/10th the incremental of P3D uint256 constant internal magnitude = 2**64; uint256 public stakingRequirement = 1e22; // 10,000 P4D uint256 constant internal initialBuyLimitPerTx_ = 1 ether; uint256 constant internal initialBuyLimitCap_ = 100 ether; uint256 internal totalInputETH_ = 0; // ambassador program mapping(address => bool) internal ambassadors_; uint256 constant internal ambassadorMaxPurchase_ = 1 ether; uint256 constant internal ambassadorQuota_ = 12 ether; uint256 internal totalAmbassadorQuotaSpent_ = 0; address internal _dev; uint256 public ACTIVATION_TIME; /*================================ = DATASETS = ================================*/ // amount of shares for each address (scaled number) mapping(address => uint256) internal tokenBalanceLedger_; mapping(address => uint256) internal referralBalance_; mapping(address => int256) internal payoutsTo_; mapping(address => uint256) internal dividendsStored_; mapping(address => uint256) internal ambassadorAccumulatedQuota_; uint256 internal tokenSupply_ = 0; uint256 internal profitPerShare_; // administrator list (see above on what they can do) mapping(address => bool) public administrators; // when this is set to true, only ambassadors can purchase tokens (this prevents a whale premine, it ensures a fairly distributed upper pyramid) bool public onlyAmbassadors = true; // contracts can interact with the exchange but only approved ones mapping(address => bool) public canAcceptTokens_; // ERC-20 standard mapping(address => mapping (address => uint256)) public allowed; // P3D contract reference P3D internal _P3D; // structure to handle the distribution of ETH divs paid out by the P3D contract struct P3D_dividends { uint256 balance; uint256 lastDividendPoints; } mapping(address => P3D_dividends) internal divsMap_; uint256 internal totalDividendPoints_; uint256 internal lastContractBalance_; // structure to handle the global unique name/vanity registration struct NameRegistry { uint256 activeIndex; bytes32[] registeredNames; } mapping(address => NameRegistry) internal customerNameMap_; mapping(bytes32 => address) internal globalNameMap_; uint256 constant internal nameRegistrationFee = 0.01 ether; /*======================================= = PUBLIC FUNCTIONS = =======================================*/ /* * -- APPLICATION ENTRY POINTS -- */ constructor(uint256 _activationTime, address _P3D_address) public { _dev = msg.sender; ACTIVATION_TIME = _activationTime; totalDividendPoints_ = 1; // non-zero value _P3D = P3D(_P3D_address); // virtualized purchase of the entire ambassador quota // calculateTokensReceived() for this contract will return how many tokens can be bought starting at 1e9 P3D per P4D // as the price increases by the incremental each time we can just multiply it out and scale it back to e18 // // this is used as the initial P3D-P4D price as it makes it fairer on other investors that aren't ambassadors uint256 _P4D_received; (, _P4D_received) = calculateTokensReceived(ambassadorQuota_); tokenPriceInitial_ = tokenPriceIncremental_ * _P4D_received / 1e18; // admins administrators[_dev] = true; // ambassadors ambassadors_[_dev] = true; } /** * Converts all incoming ethereum to tokens for the caller, and passes down the referral address */ function buy(address _referredBy) payable public returns(uint256) { return purchaseInternal(msg.sender, msg.value, _referredBy); } /** * Buy with a registered name as the referrer. * If the name is unregistered, address(0x0) will be the ref */ function buyWithNameRef(string memory _nameOfReferrer) payable public returns(uint256) { return purchaseInternal(msg.sender, msg.value, ownerOfName(_nameOfReferrer)); } /** * Fallback function to handle ethereum that was sent straight to the contract * Unfortunately we cannot use a referral address this way. */ function() payable public { if (msg.sender != address(_P3D)) { purchaseInternal(msg.sender, msg.value, address(0x0)); } // all other ETH is from the withdrawn dividends from // the P3D contract, this is distributed out via the // updateSubdivsFor() method // no more computation can be done inside this function // as when you call address.transfer(uint256), only // 2,300 gas is forwarded to this function so no variables // can be mutated with that limit // address(this).balance will represent the total amount // of ETH dividends from the P3D contract (minus the amount // that's already been withdrawn) } /** * Distribute any ETH sent to this method out to all token holders */ function donate() payable public { // nothing happens here in order to save gas // all of the ETH sent to this function will be distributed out // via the updateSubdivsFor() method // // this method is designed for external contracts that have // extra ETH that they want to evenly distribute to all // P4D token holders } /** * Allows a customer to pay for a global name on the P4D network * There's a 0.01 ETH registration fee per name * All ETH is distributed to P4D token holders via updateSubdivsFor() */ function registerName(string memory _name) payable public { address _customerAddress = msg.sender; require(!onlyAmbassadors || ambassadors_[_customerAddress]); require(bytes(_name).length > 0); require(msg.value >= nameRegistrationFee); uint256 excess = SafeMath.sub(msg.value, nameRegistrationFee); bytes32 bytesName = stringToBytes32(_name); require(globalNameMap_[bytesName] == address(0x0)); NameRegistry storage customerNamesInfo = customerNameMap_[_customerAddress]; customerNamesInfo.registeredNames.push(bytesName); customerNamesInfo.activeIndex = customerNamesInfo.registeredNames.length - 1; globalNameMap_[bytesName] = _customerAddress; if (excess > 0) { _customerAddress.transfer(excess); } // fire event emit onNameRegistration(_customerAddress, _name); // similar to the fallback and donate functions, the ETH cost of // the name registration fee (0.01 ETH) will be distributed out // to all P4D tokens holders via the updateSubdivsFor() method } /** * Change your active name to a name that you've already purchased */ function changeActiveNameTo(string memory _name) public { address _customerAddress = msg.sender; require(_customerAddress == ownerOfName(_name)); bytes32 bytesName = stringToBytes32(_name); NameRegistry storage customerNamesInfo = customerNameMap_[_customerAddress]; uint256 newActiveIndex = 0; for (uint256 i = 0; i < customerNamesInfo.registeredNames.length; i++) { if (bytesName == customerNamesInfo.registeredNames[i]) { newActiveIndex = i; break; } } customerNamesInfo.activeIndex = newActiveIndex; } /** * Similar to changeActiveNameTo() without the need to iterate through your name list */ function changeActiveNameIndexTo(uint256 _newActiveIndex) public { address _customerAddress = msg.sender; NameRegistry storage customerNamesInfo = customerNameMap_[_customerAddress]; require(_newActiveIndex < customerNamesInfo.registeredNames.length); customerNamesInfo.activeIndex = _newActiveIndex; } /** * Converts all of caller's dividends to tokens. * The argument is not used but it allows MetaMask to render * 'Reinvest' in your transactions list once the function sig * is registered to the contract at; * https://etherscan.io/address/0x44691B39d1a75dC4E0A0346CBB15E310e6ED1E86#writeContract */ function reinvest(bool) public { // setup data address _customerAddress = msg.sender; withdrawInternal(_customerAddress); uint256 reinvestableDividends = dividendsStored_[_customerAddress]; reinvestAmount(reinvestableDividends); } /** * Converts a portion of caller's dividends to tokens. */ function reinvestAmount(uint256 _amountOfP3D) public { // setup data address _customerAddress = msg.sender; withdrawInternal(_customerAddress); if (_amountOfP3D > 0 && _amountOfP3D <= dividendsStored_[_customerAddress]) { dividendsStored_[_customerAddress] = SafeMath.sub(dividendsStored_[_customerAddress], _amountOfP3D); // dispatch a buy order with the virtualized "withdrawn dividends" uint256 _tokens = purchaseTokens(_customerAddress, _amountOfP3D, address(0x0)); // fire event emit onReinvestment(_customerAddress, _amountOfP3D, _tokens); } } /** * Converts all of caller's subdividends to tokens. * The argument is not used but it allows MetaMask to render * 'Reinvest Subdivs' in your transactions list once the function sig * is registered to the contract at; * https://etherscan.io/address/0x44691B39d1a75dC4E0A0346CBB15E310e6ED1E86#writeContract */ function reinvestSubdivs(bool) public { // setup data address _customerAddress = msg.sender; updateSubdivsFor(_customerAddress); uint256 reinvestableSubdividends = divsMap_[_customerAddress].balance; reinvestSubdivsAmount(reinvestableSubdividends); } /** * Converts a portion of caller's subdividends to tokens. */ function reinvestSubdivsAmount(uint256 _amountOfETH) public { // setup data address _customerAddress = msg.sender; updateSubdivsFor(_customerAddress); if (_amountOfETH > 0 && _amountOfETH <= divsMap_[_customerAddress].balance) { divsMap_[_customerAddress].balance = SafeMath.sub(divsMap_[_customerAddress].balance, _amountOfETH); lastContractBalance_ = SafeMath.sub(lastContractBalance_, _amountOfETH); // purchase tokens with the ETH subdividends uint256 _tokens = purchaseInternal(_customerAddress, _amountOfETH, address(0x0)); // fire event emit onSubdivsReinvestment(_customerAddress, _amountOfETH, _tokens); } } /** * Alias of sell(), withdraw() and withdrawSubdivs(). * The argument is not used but it allows MetaMask to render * 'Exit' in your transactions list once the function sig * is registered to the contract at; * https://etherscan.io/address/0x44691B39d1a75dC4E0A0346CBB15E310e6ED1E86#writeContract */ function exit(bool) public { // get token count for caller & sell them all address _customerAddress = msg.sender; uint256 _tokens = tokenBalanceLedger_[_customerAddress]; if(_tokens > 0) sell(_tokens); // lambo delivery service withdraw(true); withdrawSubdivs(true); } /** * Withdraws all of the callers dividend earnings. * The argument is not used but it allows MetaMask to render * 'Withdraw' in your transactions list once the function sig * is registered to the contract at; * https://etherscan.io/address/0x44691B39d1a75dC4E0A0346CBB15E310e6ED1E86#writeContract */ function withdraw(bool) public { // setup data address _customerAddress = msg.sender; withdrawInternal(_customerAddress); uint256 withdrawableDividends = dividendsStored_[_customerAddress]; withdrawAmount(withdrawableDividends); } /** * Withdraws a portion of the callers dividend earnings. */ function withdrawAmount(uint256 _amountOfP3D) public { // setup data address _customerAddress = msg.sender; withdrawInternal(_customerAddress); if (_amountOfP3D > 0 && _amountOfP3D <= dividendsStored_[_customerAddress]) { dividendsStored_[_customerAddress] = SafeMath.sub(dividendsStored_[_customerAddress], _amountOfP3D); // lambo delivery service require(_P3D.transfer(_customerAddress, _amountOfP3D)); // NOTE! // P3D has a 10% transfer tax so even though this is sending your entire // dividend count to you, you will only actually receive 90%. // fire event emit onWithdraw(_customerAddress, _amountOfP3D); } } /** * Withdraws all of the callers subdividend earnings. * The argument is not used but it allows MetaMask to render * 'Withdraw Subdivs' in your transactions list once the function sig * is registered to the contract at; * https://etherscan.io/address/0x44691B39d1a75dC4E0A0346CBB15E310e6ED1E86#writeContract */ function withdrawSubdivs(bool) public { // setup data address _customerAddress = msg.sender; updateSubdivsFor(_customerAddress); uint256 withdrawableSubdividends = divsMap_[_customerAddress].balance; withdrawSubdivsAmount(withdrawableSubdividends); } /** * Withdraws a portion of the callers subdividend earnings. */ function withdrawSubdivsAmount(uint256 _amountOfETH) public { // setup data address _customerAddress = msg.sender; updateSubdivsFor(_customerAddress); if (_amountOfETH > 0 && _amountOfETH <= divsMap_[_customerAddress].balance) { divsMap_[_customerAddress].balance = SafeMath.sub(divsMap_[_customerAddress].balance, _amountOfETH); lastContractBalance_ = SafeMath.sub(lastContractBalance_, _amountOfETH); // transfer all withdrawable subdividends _customerAddress.transfer(_amountOfETH); // fire event emit onSubdivsWithdraw(_customerAddress, _amountOfETH); } } /** * Liquifies tokens to P3D. */ function sell(uint256 _amountOfTokens) onlyBagholders() public { // setup data address _customerAddress = msg.sender; updateSubdivsFor(_customerAddress); // russian hackers BTFO require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); uint256 _tokens = _amountOfTokens; uint256 _P3D_amount = tokensToP3D_(_tokens); uint256 _dividends = SafeMath.div(SafeMath.mul(_P3D_amount, sellDividendFee_), 100); uint256 _taxedP3D = SafeMath.sub(_P3D_amount, _dividends); // burn the sold tokens tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens); tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens); // update dividends tracker int256 _updatedPayouts = (int256)(profitPerShare_ * _tokens + (_taxedP3D * magnitude)); payoutsTo_[_customerAddress] -= _updatedPayouts; // dividing by zero is a bad idea if (tokenSupply_ > 0) { // update the amount of dividends per token profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_); } // fire events emit onTokenSell(_customerAddress, _tokens, _taxedP3D); emit Transfer(_customerAddress, address(0x0), _tokens); } /** * Transfer tokens from the caller to a new holder. * REMEMBER THIS IS 0% TRANSFER FEE */ function transfer(address _toAddress, uint256 _amountOfTokens) onlyBagholders() public returns(bool) { address _customerAddress = msg.sender; return transferInternal(_customerAddress, _toAddress, _amountOfTokens); } /** * Transfer token to a specified address and forward the data to recipient * ERC-677 standard * https://github.com/ethereum/EIPs/issues/677 * @param _to Receiver address. * @param _value Amount of tokens that will be transferred. * @param _data Transaction metadata. */ function transferAndCall(address _to, uint256 _value, bytes _data) external returns(bool) { require(canAcceptTokens_[_to]); // approved contracts only require(transfer(_to, _value)); // do a normal token transfer to the contract if (isContract(_to)) { usingP4D receiver = usingP4D(_to); require(receiver.tokenCallback(msg.sender, _value, _data)); } return true; } /** * ERC-20 token standard for transferring tokens on anothers behalf */ function transferFrom(address _from, address _to, uint256 _amountOfTokens) public returns(bool) { require(allowed[_from][msg.sender] >= _amountOfTokens); allowed[_from][msg.sender] = SafeMath.sub(allowed[_from][msg.sender], _amountOfTokens); return transferInternal(_from, _to, _amountOfTokens); } /** * ERC-20 token standard for allowing another address to transfer your tokens * on your behalf up to a certain limit */ function approve(address _spender, uint256 _tokens) public returns(bool) { allowed[msg.sender][_spender] = _tokens; emit Approval(msg.sender, _spender, _tokens); return true; } /** * ERC-20 token standard for approving and calling an external * contract with data */ function approveAndCall(address _to, uint256 _value, bytes _data) external returns(bool) { require(approve(_to, _value)); // do a normal approval if (isContract(_to)) { controllingP4D receiver = controllingP4D(_to); require(receiver.approvalCallback(msg.sender, _value, _data)); } return true; } /*---------- ADMINISTRATOR ONLY FUNCTIONS ----------*/ /** * In case one of us dies, we need to replace ourselves. */ function setAdministrator(address _identifier, bool _status) onlyAdministrator() public { administrators[_identifier] = _status; } /** * Add a new ambassador to the exchange */ function setAmbassador(address _identifier, bool _status) onlyAdministrator() public { ambassadors_[_identifier] = _status; } /** * Precautionary measures in case we need to adjust the masternode rate. */ function setStakingRequirement(uint256 _amountOfTokens) onlyAdministrator() public { stakingRequirement = _amountOfTokens; } /** * Add a sub-contract, which can accept P4D tokens */ function setCanAcceptTokens(address _address) onlyAdministrator() public { require(isContract(_address)); canAcceptTokens_[_address] = true; // one way switch } /** * If we want to rebrand, we can. */ function setName(string _name) onlyAdministrator() public { name = _name; } /** * If we want to rebrand, we can. */ function setSymbol(string _symbol) onlyAdministrator() public { symbol = _symbol; } /*---------- HELPERS AND CALCULATORS ----------*/ /** * Method to view the current P3D tokens stored in the contract */ function totalBalance() public view returns(uint256) { return _P3D.myTokens(); } /** * Retrieve the total token supply. */ function totalSupply() public view returns(uint256) { return tokenSupply_; } /** * Retrieve the tokens owned by the caller. */ function myTokens() public view returns(uint256) { address _customerAddress = msg.sender; return balanceOf(_customerAddress); } /** * Retrieve the dividends owned by the caller. * If `_includeReferralBonus` is set to true, the referral bonus will be included in the calculations. * The reason for this, is that in the frontend, we will want to get the total divs (global + ref) * But in the internal calculations, we want them separate. */ function myDividends(bool _includeReferralBonus) public view returns(uint256) { address _customerAddress = msg.sender; return (_includeReferralBonus ? dividendsOf(_customerAddress) + referralDividendsOf(_customerAddress) : dividendsOf(_customerAddress)); } /** * Retrieve the subdividend owned by the caller. */ function myStoredDividends() public view returns(uint256) { address _customerAddress = msg.sender; return storedDividendsOf(_customerAddress); } /** * Retrieve the subdividend owned by the caller. */ function mySubdividends() public view returns(uint256) { address _customerAddress = msg.sender; return subdividendsOf(_customerAddress); } /** * Retrieve the token balance of any single address. */ function balanceOf(address _customerAddress) public view returns(uint256) { return tokenBalanceLedger_[_customerAddress]; } /** * Retrieve the dividend balance of any single address. */ function dividendsOf(address _customerAddress) public view returns(uint256) { return (uint256)((int256)(profitPerShare_ * tokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude; } /** * Retrieve the referred dividend balance of any single address. */ function referralDividendsOf(address _customerAddress) public view returns(uint256) { return referralBalance_[_customerAddress]; } /** * Retrieve the stored dividend balance of any single address. */ function storedDividendsOf(address _customerAddress) public view returns(uint256) { return dividendsStored_[_customerAddress] + dividendsOf(_customerAddress) + referralDividendsOf(_customerAddress); } /** * Retrieve the subdividend balance owing of any single address. */ function subdividendsOwing(address _customerAddress) public view returns(uint256) { return (divsMap_[_customerAddress].lastDividendPoints == 0 ? 0 : (balanceOf(_customerAddress) * (totalDividendPoints_ - divsMap_[_customerAddress].lastDividendPoints)) / magnitude); } /** * Retrieve the subdividend balance of any single address. */ function subdividendsOf(address _customerAddress) public view returns(uint256) { return SafeMath.add(divsMap_[_customerAddress].balance, subdividendsOwing(_customerAddress)); } /** * Retrieve the allowance of an owner and spender. */ function allowance(address _tokenOwner, address _spender) public view returns(uint256) { return allowed[_tokenOwner][_spender]; } /** * Retrieve all name information about a customer */ function namesOf(address _customerAddress) public view returns(uint256 activeIndex, string activeName, bytes32[] customerNames) { NameRegistry memory customerNamesInfo = customerNameMap_[_customerAddress]; uint256 length = customerNamesInfo.registeredNames.length; customerNames = new bytes32[](length); for (uint256 i = 0; i < length; i++) { customerNames[i] = customerNamesInfo.registeredNames[i]; } activeIndex = customerNamesInfo.activeIndex; activeName = activeNameOf(_customerAddress); } /** * Retrieves the address of the owner from the name */ function ownerOfName(string memory _name) public view returns(address) { if (bytes(_name).length > 0) { bytes32 bytesName = stringToBytes32(_name); return globalNameMap_[bytesName]; } else { return address(0x0); } } /** * Retrieves the active name of a customer */ function activeNameOf(address _customerAddress) public view returns(string) { NameRegistry memory customerNamesInfo = customerNameMap_[_customerAddress]; if (customerNamesInfo.registeredNames.length > 0) { bytes32 activeBytesName = customerNamesInfo.registeredNames[customerNamesInfo.activeIndex]; return bytes32ToString(activeBytesName); } else { return ""; } } /** * Return the buy price of 1 individual token. */ function sellPrice() public view returns(uint256) { // our calculation relies on the token supply, so we need supply. Doh. if(tokenSupply_ == 0){ return tokenPriceInitial_ - tokenPriceIncremental_; } else { uint256 _P3D_received = tokensToP3D_(1e18); uint256 _dividends = SafeMath.div(SafeMath.mul(_P3D_received, sellDividendFee_), 100); uint256 _taxedP3D = SafeMath.sub(_P3D_received, _dividends); return _taxedP3D; } } /** * Return the sell price of 1 individual token. */ function buyPrice() public view returns(uint256) { // our calculation relies on the token supply, so we need supply. Doh. if(tokenSupply_ == 0){ return tokenPriceInitial_ + tokenPriceIncremental_; } else { uint256 _P3D_received = tokensToP3D_(1e18); uint256 _dividends = SafeMath.div(SafeMath.mul(_P3D_received, buyDividendFee_), 100); uint256 _taxedP3D = SafeMath.add(_P3D_received, _dividends); return _taxedP3D; } } /** * Function for the frontend to dynamically retrieve the price scaling of buy orders. */ function calculateTokensReceived(uint256 _amountOfETH) public view returns(uint256 _P3D_received, uint256 _P4D_received) { uint256 P3D_received = _P3D.calculateTokensReceived(_amountOfETH); uint256 _dividends = SafeMath.div(SafeMath.mul(P3D_received, buyDividendFee_), 100); uint256 _taxedP3D = SafeMath.sub(P3D_received, _dividends); uint256 _amountOfTokens = P3DtoTokens_(_taxedP3D); return (P3D_received, _amountOfTokens); } /** * Function for the frontend to dynamically retrieve the price scaling of sell orders. */ function calculateAmountReceived(uint256 _tokensToSell) public view returns(uint256) { require(_tokensToSell <= tokenSupply_); uint256 _P3D_received = tokensToP3D_(_tokensToSell); uint256 _dividends = SafeMath.div(SafeMath.mul(_P3D_received, sellDividendFee_), 100); uint256 _taxedP3D = SafeMath.sub(_P3D_received, _dividends); return _taxedP3D; } /** * Utility method to expose the P3D address for any child contracts to use */ function P3D_address() public view returns(address) { return address(_P3D); } /** * Utility method to return all of the data needed for the front end in 1 call */ function fetchAllDataForCustomer(address _customerAddress) public view returns(uint256 _totalSupply, uint256 _totalBalance, uint256 _buyPrice, uint256 _sellPrice, uint256 _activationTime, uint256 _customerTokens, uint256 _customerUnclaimedDividends, uint256 _customerStoredDividends, uint256 _customerSubdividends) { _totalSupply = totalSupply(); _totalBalance = totalBalance(); _buyPrice = buyPrice(); _sellPrice = sellPrice(); _activationTime = ACTIVATION_TIME; _customerTokens = balanceOf(_customerAddress); _customerUnclaimedDividends = dividendsOf(_customerAddress) + referralDividendsOf(_customerAddress); _customerStoredDividends = storedDividendsOf(_customerAddress); _customerSubdividends = subdividendsOf(_customerAddress); } /*========================================== = INTERNAL FUNCTIONS = ==========================================*/ // This function should always be called before a customers P4D balance changes. // It's responsible for withdrawing any outstanding ETH dividends from the P3D exchange // as well as distrubuting all of the additional ETH balance since the last update to // all of the P4D token holders proportionally. // After this it will move any owed subdividends into the customers withdrawable subdividend balance. function updateSubdivsFor(address _customerAddress) internal { // withdraw the P3D dividends first if (_P3D.myDividends(true) > 0) { _P3D.withdraw(); } // check if we have additional ETH in the contract since the last update uint256 contractBalance = address(this).balance; if (contractBalance > lastContractBalance_ && totalSupply() != 0) { uint256 additionalDivsFromP3D = SafeMath.sub(contractBalance, lastContractBalance_); totalDividendPoints_ = SafeMath.add(totalDividendPoints_, SafeMath.div(SafeMath.mul(additionalDivsFromP3D, magnitude), totalSupply())); lastContractBalance_ = contractBalance; } // if this is the very first time this is called for a customer, set their starting point if (divsMap_[_customerAddress].lastDividendPoints == 0) { divsMap_[_customerAddress].lastDividendPoints = totalDividendPoints_; } // move any owing subdividends into the customers subdividend balance uint256 owing = subdividendsOwing(_customerAddress); if (owing > 0) { divsMap_[_customerAddress].balance = SafeMath.add(divsMap_[_customerAddress].balance, owing); divsMap_[_customerAddress].lastDividendPoints = totalDividendPoints_; } } function withdrawInternal(address _customerAddress) internal { // setup data // dividendsOf() will return only divs, not the ref. bonus uint256 _dividends = dividendsOf(_customerAddress); // get ref. bonus later in the code // update dividend tracker payoutsTo_[_customerAddress] += (int256)(_dividends * magnitude); // add ref. bonus _dividends += referralBalance_[_customerAddress]; referralBalance_[_customerAddress] = 0; // store the divs dividendsStored_[_customerAddress] = SafeMath.add(dividendsStored_[_customerAddress], _dividends); } function transferInternal(address _customerAddress, address _toAddress, uint256 _amountOfTokens) internal returns(bool) { // make sure we have the requested tokens require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); updateSubdivsFor(_customerAddress); updateSubdivsFor(_toAddress); // withdraw and store all outstanding dividends first (if there is any) if ((dividendsOf(_customerAddress) + referralDividendsOf(_customerAddress)) > 0) withdrawInternal(_customerAddress); // exchange tokens tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens); tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _amountOfTokens); // update dividend trackers payoutsTo_[_customerAddress] -= (int256)(profitPerShare_ * _amountOfTokens); payoutsTo_[_toAddress] += (int256)(profitPerShare_ * _amountOfTokens); // fire event emit Transfer(_customerAddress, _toAddress, _amountOfTokens); // ERC20 return true; } function purchaseInternal(address _sender, uint256 _incomingEthereum, address _referredBy) purchaseFilter(_sender, _incomingEthereum) internal returns(uint256) { uint256 purchaseAmount = _incomingEthereum; uint256 excess = 0; if (totalInputETH_ <= initialBuyLimitCap_) { // check if the total input ETH is less than the cap if (purchaseAmount > initialBuyLimitPerTx_) { // if so check if the transaction is over the initial buy limit per transaction purchaseAmount = initialBuyLimitPerTx_; excess = SafeMath.sub(_incomingEthereum, purchaseAmount); } totalInputETH_ = SafeMath.add(totalInputETH_, purchaseAmount); } // return the excess if there is any if (excess > 0) { _sender.transfer(excess); } // buy P3D tokens with the entire purchase amount // even though _P3D.buy() returns uint256, it was never implemented properly inside the P3D contract // so in order to find out how much P3D was purchased, you need to check the balance first then compare // the balance after the purchase and the difference will be the amount purchased uint256 tmpBalanceBefore = _P3D.myTokens(); _P3D.buy.value(purchaseAmount)(_referredBy); uint256 purchasedP3D = SafeMath.sub(_P3D.myTokens(), tmpBalanceBefore); return purchaseTokens(_sender, purchasedP3D, _referredBy); } function purchaseTokens(address _sender, uint256 _incomingP3D, address _referredBy) internal returns(uint256) { updateSubdivsFor(_sender); // data setup uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingP3D, buyDividendFee_), 100); uint256 _referralBonus = SafeMath.div(_undividedDividends, 3); uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus); uint256 _taxedP3D = SafeMath.sub(_incomingP3D, _undividedDividends); uint256 _amountOfTokens = P3DtoTokens_(_taxedP3D); uint256 _fee = _dividends * magnitude; // no point in continuing execution if OP is a poorfag russian hacker // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world // (or hackers) // and yes we know that the safemath function automatically rules out the "greater then" equasion. require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_)); // is the user referred by a masternode? if ( // is this a referred purchase? _referredBy != address(0x0) && // no cheating! _referredBy != _sender && // does the referrer have at least X whole tokens? // i.e is the referrer a godly chad masternode tokenBalanceLedger_[_referredBy] >= stakingRequirement ) { // wealth redistribution referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus); } else { // no ref purchase // add the referral bonus back to the global dividends cake _dividends = SafeMath.add(_dividends, _referralBonus); _fee = _dividends * magnitude; } // we can't give people infinite P3D if(tokenSupply_ > 0){ // add tokens to the pool tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens); // take the amount of dividends gained through this transaction, and allocates them evenly to each shareholder profitPerShare_ += (_dividends * magnitude / (tokenSupply_)); // calculate the amount of tokens the customer receives over their purchase _fee = _fee - (_fee - (_amountOfTokens * (_dividends * magnitude / (tokenSupply_)))); } else { // add tokens to the pool tokenSupply_ = _amountOfTokens; } // update circulating supply & the ledger address for the customer tokenBalanceLedger_[_sender] = SafeMath.add(tokenBalanceLedger_[_sender], _amountOfTokens); // Tells the contract that the buyer doesn't deserve dividends for the tokens before they owned them; // really I know you think you do but you don't payoutsTo_[_sender] += (int256)((profitPerShare_ * _amountOfTokens) - _fee); // fire events emit onTokenPurchase(_sender, _incomingP3D, _amountOfTokens, _referredBy); emit Transfer(address(0x0), _sender, _amountOfTokens); return _amountOfTokens; } /** * Calculate token price based on an amount of incoming P3D * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation; * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code. */ function P3DtoTokens_(uint256 _P3D_received) internal view returns(uint256) { uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18; uint256 _tokensReceived = ( ( // underflow attempts BTFO SafeMath.sub( (sqrt ( (_tokenPriceInitial**2) + (2 * (tokenPriceIncremental_ * 1e18)*(_P3D_received * 1e18)) + (((tokenPriceIncremental_)**2) * (tokenSupply_**2)) + (2 * (tokenPriceIncremental_) * _tokenPriceInitial * tokenSupply_) ) ), _tokenPriceInitial ) ) / (tokenPriceIncremental_) ) - (tokenSupply_); return _tokensReceived; } /** * Calculate token sell value. * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation; * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code. */ function tokensToP3D_(uint256 _P4D_tokens) internal view returns(uint256) { uint256 tokens_ = (_P4D_tokens + 1e18); uint256 _tokenSupply = (tokenSupply_ + 1e18); uint256 _P3D_received = ( // underflow attempts BTFO SafeMath.sub( ( ( ( tokenPriceInitial_ + (tokenPriceIncremental_ * (_tokenSupply / 1e18)) ) - tokenPriceIncremental_ ) * (tokens_ - 1e18) ), (tokenPriceIncremental_ * ((tokens_**2 - tokens_) / 1e18)) / 2 ) / 1e18); return _P3D_received; } // This is where all your gas goes, sorry // Not sorry, you probably only paid 1 gwei function sqrt(uint x) internal pure returns (uint y) { uint z = (x + 1) / 2; y = x; while (z < y) { y = z; z = (x / z + z) / 2; } } /** * Additional check that the address we are sending tokens to is a contract * assemble the given address bytecode. If bytecode exists then the _addr is a contract. */ function isContract(address _addr) internal constant returns(bool) { // retrieve the size of the code on target address, this needs assembly uint length; assembly { length := extcodesize(_addr) } return length > 0; } /** * Utility method to help store the registered names */ function stringToBytes32(string memory _s) internal pure returns(bytes32 result) { bytes memory tmpEmptyStringTest = bytes(_s); if (tmpEmptyStringTest.length == 0) { return 0x0; } assembly { result := mload(add(_s, 32)) } } /** * Utility method to help read the registered names */ function bytes32ToString(bytes32 _b) internal pure returns(string) { bytes memory bytesString = new bytes(32); uint charCount = 0; for (uint256 i = 0; i < 32; i++) { byte char = byte(bytes32(uint(_b) * 2 ** (8 * i))); if (char != 0) { bytesString[charCount++] = char; } } bytes memory bytesStringTrimmed = new bytes(charCount); for (i = 0; i < charCount; i++) { bytesStringTrimmed[i] = bytesString[i]; } return string(bytesStringTrimmed); } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 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 c; } /** * @dev Substracts 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) { uint256 c = a + b; assert(c >= a); return c; } } // // pragma solidity ^0.4.25; // // interface P4D { // function buy(address) external payable returns(uint256); // function sell(uint256) external; // function transfer(address, uint256) external returns(bool); // function myTokens() external view returns(uint256); // function myStoredDividends() external view returns(uint256); // function mySubdividends() external view returns(uint256); // function reinvest(bool) external; // function reinvestSubdivs(bool) external; // function withdraw(bool) external; // function withdrawSubdivs(bool) external; // function exit(bool) external; // sell + withdraw + withdrawSubdivs // function P3D_address() external view returns(address); // } // // contract usingP4D { // // P4D public tokenContract; // // constructor(address _P4D_address) public { // tokenContract = P4D(_P4D_address); // } // // modifier onlyTokenContract { // require(msg.sender == address(tokenContract)); // _; // } // // function tokenCallback(address _from, uint256 _value, bytes _data) external returns (bool); // } // // contract YourDapp is usingP4D { // // constructor(address _P4D_address) // public // usingP4D(_P4D_address) // { // //... // } // // function tokenCallback(address _from, uint256 _value, bytes _data) // external // onlyTokenContract // returns (bool) // { // //... // return true; // } // // function() // payable // public // { // if (msg.sender != address(tokenContract)) { // //... // } // } // } // /*===========================================================================================* *************************************** https://p4d.io *************************************** *===========================================================================================*/
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"activeNameOf","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfP3D","type":"uint256"}],"name":"withdrawAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"registerName","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canAcceptTokens_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amountOfETH","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"_P3D_received","type":"uint256"},{"name":"_P4D_received","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myStoredDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"onlyAmbassadors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"storedDividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_identifier","type":"address"},{"name":"_status","type":"bool"}],"name":"setAmbassador","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"changeActiveNameTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"","type":"bool"}],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingRequirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newActiveIndex","type":"uint256"}],"name":"changeActiveNameIndexTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"bool"}],"name":"withdrawSubdivs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfP3D","type":"uint256"}],"name":"reinvestAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateAmountReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"administrators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"string"}],"name":"ownerOfName","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ACTIVATION_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"setStakingRequirement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"namesOf","outputs":[{"name":"activeIndex","type":"uint256"},{"name":"activeName","type":"string"},{"name":"customerNames","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"P3D_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_identifier","type":"address"},{"name":"_status","type":"bool"}],"name":"setAdministrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"bool"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfETH","type":"uint256"}],"name":"reinvestSubdivsAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mySubdividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameOfReferrer","type":"string"}],"name":"buyWithNameRef","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfETH","type":"uint256"}],"name":"withdrawSubdivsAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"","type":"bool"}],"name":"reinvestSubdivs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setCanAcceptTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"referralDividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenOwner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"subdividendsOwing","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"bool"}],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"fetchAllDataForCustomer","outputs":[{"name":"_totalSupply","type":"uint256"},{"name":"_totalBalance","type":"uint256"},{"name":"_buyPrice","type":"uint256"},{"name":"_sellPrice","type":"uint256"},{"name":"_activationTime","type":"uint256"},{"name":"_customerTokens","type":"uint256"},{"name":"_customerUnclaimedDividends","type":"uint256"},{"name":"_customerStoredDividends","type":"uint256"},{"name":"_customerSubdividends","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"subdividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_activationTime","type":"uint256"},{"name":"_P3D_address","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_customerAddress","type":"address"},{"indexed":false,"name":"_incomingP3D","type":"uint256"},{"indexed":false,"name":"_tokensMinted","type":"uint256"},{"indexed":true,"name":"_referredBy","type":"address"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_customerAddress","type":"address"},{"indexed":false,"name":"_tokensBurned","type":"uint256"},{"indexed":false,"name":"_P3D_received","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_customerAddress","type":"address"},{"indexed":false,"name":"_P3D_reinvested","type":"uint256"},{"indexed":false,"name":"_tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_customerAddress","type":"address"},{"indexed":false,"name":"_ETH_reinvested","type":"uint256"},{"indexed":false,"name":"_tokensMinted","type":"uint256"}],"name":"onSubdivsReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_customerAddress","type":"address"},{"indexed":false,"name":"_P3D_withdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_customerAddress","type":"address"},{"indexed":false,"name":"_ETH_withdrawn","type":"uint256"}],"name":"onSubdivsWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_customerAddress","type":"address"},{"indexed":false,"name":"_registeredName","type":"string"}],"name":"onNameRegistration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenOwner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60c0604052600660808190527f506f57483444000000000000000000000000000000000000000000000000000060a0908152620000409160009190620003f2565b506040805180820190915260038082527f503444000000000000000000000000000000000000000000000000000000000060209092019182526200008791600191620003f2565b5069021e19e0c9bab2400000600355600060048190556006819055600e556011805460ff19166001179055348015620000bf57600080fd5b50604051604080620037b08339810160405280516020909101516007805433600160a060020a0319918216179091556008839055600160165560148054909116600160a060020a03831617905560006200012a67a688906bd8b0000064010000000062000190810204565b9150670de0b6b3a76400009050633b9aca00820204600255505060078054600160a060020a0390811660009081526010602090815260408083208054600160ff199182168117909255955490941683526005909152902080549092161790555062000497565b600080600080600080601460009054906101000a9004600160a060020a0316600160a060020a03166310d0ffdd886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156200021157600080fd5b505af115801562000226573d6000803e3d6000fd5b505050506040513d60208110156200023d57600080fd5b50519350620002766200026085600a64010000000062002d89620002b682021704565b606464010000000062002db4620002f082021704565b9250620002928484640100000000620028aa6200030882021704565b9150620002a8826401000000006200031b810204565b939793965092945050505050565b600080831515620002cb5760009150620002e9565b50828202828482811515620002dc57fe5b0414620002e557fe5b8091505b5092915050565b6000808284811515620002ff57fe5b04949350505050565b6000828211156200031557fe5b50900390565b60028054600e54600092670de0b6b3a764000080840293859392633b9aca00926200039f926200038a9280890a7259aedfc10d7279c5eed14016454000000000008c020190870a909202919091019085026b06765c793fa10079d00000000201640100000000620003b3810204565b85640100000000620028aa6200030882021704565b811515620003a957fe5b0403949350505050565b80600260018201045b81811015620003ec578091506002818285811515620003d757fe5b0401811515620003e357fe5b049050620003bc565b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200043557805160ff191683800117855562000465565b8280016001018555821562000465579182015b828111156200046557825182559160200191906001019062000448565b506200047392915062000477565b5090565b6200049491905b808211156200047357600081556001016200047e565b90565b61330980620004a76000396000f3006080604052600436106102995763ffffffff60e060020a60003504166265318b81146102bb57806301ebccb9146102ee5780630562b9f71461038457806306fdde031461039c5780630830602b146103b1578063095ea7b3146103fd5780630f34dc161461043557806310d0ffdd1461045657806318160ddd1461048757806323b872dd1461049c57806324e34476146104c657806327defa1f146104db5780632b791d6e146104f05780632d0041c514610511578063313ce56714610537578063383bbab31461054c5780634000aea0146105a557806343a98caf146105d65780634b750334146105f057806356d399e8146106055780635c6581651461061a578063627045bf14610641578063688abbf714610659578063688eef87146106735780636e075e301461068d57806370a08231146106a5578063755d43d3146106c657806376be1585146106de5780637f873749146106ff57806381717607146107745780638328b6101461078957806384d2731c146107a15780638620410b1461088257806386aa6c091461089757806387c95058146108ac578063949e8acd146108d257806395d89b41146108e7578063a810a54c146108fc578063a9059cbb14610916578063ad7a672f1461093a578063b3f3dcf61461094f578063b84c824614610967578063b9d47fff146109c0578063bc4dd845146109d5578063c47f002714610a21578063ca03dab514610a7a578063cae9ca5114610a92578063cc7e74b314610ac3578063d3fb447c14610add578063d6349dd614610afe578063dd62ed3e14610b1f578063e4849b3214610b46578063e62d809d14610b5e578063e6c91a1514610b7f578063ed88c68e14610b99578063f088d54714610ba1578063f4c3f3f714610bb5578063f545118b14610c1d575b601454600160a060020a031633146102b9576102b733346000610c3e565b505b005b3480156102c757600080fd5b506102dc600160a060020a03600435166111e3565b60408051918252519081900360200190f35b3480156102fa57600080fd5b5061030f600160a060020a036004351661121e565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610349578181015183820152602001610331565b50505050905090810190601f1680156103765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039057600080fd5b506102b96004356112fd565b3480156103a857600080fd5b5061030f611455565b6040805160206004803580820135601f81018490048402850184019095528484526102b99436949293602493928401919081908401838280828437509497506114e39650505050505050565b34801561040957600080fd5b50610421600160a060020a03600435166024356116d1565b604080519115158252519081900360200190f35b34801561044157600080fd5b50610421600160a060020a0360043516611737565b34801561046257600080fd5b5061046e60043561174c565b6040805192835260208301919091528051918290030190f35b34801561049357600080fd5b506102dc61181b565b3480156104a857600080fd5b50610421600160a060020a0360043581169060243516604435611822565b3480156104d257600080fd5b506102dc6118b7565b3480156104e757600080fd5b506104216118ca565b3480156104fc57600080fd5b506102dc600160a060020a03600435166118d3565b34801561051d57600080fd5b506102b9600160a060020a03600435166024351515611909565b34801561054357600080fd5b506102dc611967565b34801561055857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b994369492936024939284019190819084018382808284375094975061196c9650505050505050565b3480156105b157600080fd5b5061042160048035600160a060020a0316906024803591604435918201910135611a06565b3480156105e257600080fd5b506102b96004351515611b27565b3480156105fc57600080fd5b506102dc611b5b565b34801561061157600080fd5b506102dc611bb5565b34801561062657600080fd5b506102dc600160a060020a0360043581169060243516611bbb565b34801561064d57600080fd5b506102b9600435611bd8565b34801561066557600080fd5b506102dc6004351515611bfe565b34801561067f57600080fd5b506102b96004351515611c31565b34801561069957600080fd5b506102b9600435611c60565b3480156106b157600080fd5b506102dc600160a060020a0360043516611d35565b3480156106d257600080fd5b506102dc600435611d50565b3480156106ea57600080fd5b50610421600160a060020a0360043516611d95565b34801561070b57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610758943694929360249392840191908190840183828082843750949750611daa9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b34801561078057600080fd5b506102dc611dea565b34801561079557600080fd5b506102b9600435611df0565b3480156107ad57600080fd5b506107c2600160a060020a0360043516611e28565b604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156108095781810151838201526020016107f1565b50505050905090810190601f1680156108365780820380516001836020036101000a031916815260200191505b508381038252845181528451602091820191808701910280838360005b8381101561086b578181015183820152602001610853565b505050509050019550505050505060405180910390f35b34801561088e57600080fd5b506102dc611f4d565b3480156108a357600080fd5b50610758611f9b565b3480156108b857600080fd5b506102b9600160a060020a03600435166024351515611faa565b3480156108de57600080fd5b506102dc612008565b3480156108f357600080fd5b5061030f612014565b34801561090857600080fd5b506102b9600435151561206e565b34801561092257600080fd5b50610421600160a060020a036004351660243561209d565b34801561094657600080fd5b506102dc6120cb565b34801561095b57600080fd5b506102b960043561215b565b34801561097357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b994369492936024939284019190819084018382808284375094975061223c9650505050505050565b3480156109cc57600080fd5b506102dc612282565b6040805160206004803580820135601f81018490048402850184019095528484526102dc94369492936024939284019190819084018382808284375094975061228e9650505050505050565b348015610a2d57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b99436949293602493928401919081908401838280828437509497506122a99650505050505050565b348015610a8657600080fd5b506102b96004356122ef565b348015610a9e57600080fd5b5061042160048035600160a060020a03169060248035916044359182019101356123ec565b348015610acf57600080fd5b506102b960043515156124a4565b348015610ae957600080fd5b506102b9600160a060020a03600435166124d3565b348015610b0a57600080fd5b506102dc600160a060020a036004351661253e565b348015610b2b57600080fd5b506102dc600160a060020a0360043581169060243516612559565b348015610b5257600080fd5b506102b9600435612584565b348015610b6a57600080fd5b506102dc600160a060020a0360043516612731565b348015610b8b57600080fd5b506102b9600435151561279f565b6102b96127d4565b6102dc600160a060020a03600435166127d6565b348015610bc157600080fd5b50610bd6600160a060020a03600435166127e3565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b348015610c2957600080fd5b506102dc600160a060020a0360043516612861565b60008060008060008787610c518261288c565b1580610c755750600160a060020a03821660009081526012602052604090205460ff165b1515610c8057600080fd5b6008544210610c94576011805460ff191690555b60115460ff168015610cb2575067a688906bd8b00000816006540111155b15610fad57600160a060020a03821660009081526005602052604090205460ff1615156001148015610d075750600160a060020a0382166000908152600d6020526040902054670de0b6b3a764000090820111155b1515610d1257600080fd5b600160a060020a0382166000908152600d6020526040902054610d359082612894565b600160a060020a0383166000908152600d6020526040902055600654610d5b9082612894565b6006556004548996506000955068056bc75e2d6310000010610daf57670de0b6b3a7640000861115610d9f57670de0b6b3a76400009550610d9c89876128aa565b94505b610dab60045487612894565b6004555b6000851115610df057604051600160a060020a038b169086156108fc029087906000818181858888f19350505050158015610dee573d6000803e3d6000fd5b505b601460009054906101000a9004600160a060020a0316600160a060020a031663949e8acd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610e4357600080fd5b505af1158015610e57573d6000803e3d6000fd5b505050506040513d6020811015610e6d57600080fd5b5051601454604080517ff088d547000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152915193975091169163f088d547918991602480830192602092919082900301818588803b158015610ed957600080fd5b505af1158015610eed573d6000803e3d6000fd5b50505050506040513d6020811015610f0457600080fd5b5050601454604080517f949e8acd0000000000000000000000000000000000000000000000000000000081529051610f9992600160a060020a03169163949e8acd9160048083019260209291908290030181600087803b158015610f6757600080fd5b505af1158015610f7b573d6000803e3d6000fd5b505050506040513d6020811015610f9157600080fd5b5051856128aa565b9250610fa68a848a6128bc565b96506111d6565b60115460ff1615610fbd57600080fd5b6004548996506000955068056bc75e2d631000001061100e57670de0b6b3a7640000861115610ffe57670de0b6b3a76400009550610ffb89876128aa565b94505b61100a60045487612894565b6004555b600085111561104f57604051600160a060020a038b169086156108fc029087906000818181858888f1935050505015801561104d573d6000803e3d6000fd5b505b601460009054906101000a9004600160a060020a0316600160a060020a031663949e8acd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506040513d60208110156110cc57600080fd5b5051601454604080517ff088d547000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152915193975091169163f088d547918991602480830192602092919082900301818588803b15801561113857600080fd5b505af115801561114c573d6000803e3d6000fd5b50505050506040513d602081101561116357600080fd5b5050601454604080517f949e8acd00000000000000000000000000000000000000000000000000000000815290516111c692600160a060020a03169163949e8acd9160048083019260209291908290030181600087803b158015610f6757600080fd5b92506111d38a848a6128bc565b96505b5050505050509392505050565b600160a060020a03166000908152600b6020908152604080832054600990925290912054600f54680100000000000000009102919091030490565b6060611228613237565b600160a060020a03831660009081526018602090815260408083208151808301835281548152600182018054845181870281018701909552808552919492938584019390929083018282801561129e57602002820191906000526020600020905b81548152600190910190602001808311611289575b5050505050815250509150600082602001515111156112e45760208201518251815181106112c857fe5b9060200190602002015190506112dd81612b42565b92506112f6565b60408051602081019091526000815292505b5050919050565b3361130781612cef565b60008211801561132f5750600160a060020a0381166000908152600c60205260409020548211155b1561145157600160a060020a0381166000908152600c602052604090205461135790836128aa565b600160a060020a038083166000818152600c602090815260408083209590955560145485517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810194909452602484018890529451949093169363a9059cbb936044808501949193918390030190829087803b1580156113da57600080fd5b505af11580156113ee573d6000803e3d6000fd5b505050506040513d602081101561140457600080fd5b5051151561141157600080fd5b604080518381529051600160a060020a038316917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25b5050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114db5780601f106114b0576101008083540402835291602001916114db565b820191906000526020600020905b8154815290600101906020018083116114be57829003601f168201915b505050505081565b60115433906000908190819060ff1615806115165750600160a060020a03841660009081526005602052604090205460ff165b151561152157600080fd5b845160001061152f57600080fd5b662386f26fc1000034101561154357600080fd5b61155434662386f26fc100006128aa565b925061155f85612d6a565b600081815260196020526040902054909250600160a060020a03161561158457600080fd5b50600160a060020a03831660008181526018602090815260408083206001808201805491820181558086528486209091018790555460001901815585845260199092528220805473ffffffffffffffffffffffffffffffffffffffff191690931790925583111561162757604051600160a060020a0385169084156108fc029085906000818181858888f19350505050158015611625573d6000803e3d6000fd5b505b83600160a060020a03167fc3e1d9d15ccfce2072b74368e985002385d0e710113e804dc0fa242a05feb414866040518080602001828103825283818151815260200191508051906020019080838360005b83811015611690578181015183820152602001611678565b50505050905090810190601f1680156116bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050505050565b336000818152601360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60126020526000908152604090205460ff1681565b600080600080600080601460009054906101000a9004600160a060020a0316600160a060020a03166310d0ffdd886040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050506040513d60208110156117dd57600080fd5b505193506117f66117ef85600a612d89565b6064612db4565b925061180284846128aa565b915061180d82612dcb565b939793965092945050505050565b600e545b90565b600160a060020a038316600090815260136020908152604080832033845290915281205482111561185257600080fd5b600160a060020a038416600090815260136020908152604080832033845290915290205461188090836128aa565b600160a060020a03851660009081526013602090815260408083203384529091529020556118af848484612e47565b949350505050565b6000336118c3816118d3565b91505b5090565b60115460ff1681565b60006118de8261253e565b6118e7836111e3565b600160a060020a0384166000908152600c602052604090205401019050919050565b3360009081526010602052604090205460ff16806119315750600754600160a060020a031633145b151561193c57600080fd5b600160a060020a03919091166000908152600560205260409020805460ff1916911515919091179055565b601281565b33600080808061197b86611daa565b600160a060020a0386811691161461199257600080fd5b61199b86612d6a565b600160a060020a038616600090815260186020526040812091955090935091508190505b60018301548110156119fe57600183018054829081106119db57fe5b6000918252602090912001548414156119f6578091506119fe565b6001016119bf565b509055505050565b600160a060020a038416600090815260126020526040812054819060ff161515611a2f57600080fd5b611a39868661209d565b1515611a4457600080fd5b611a4d8661288c565b15611b1b57506040517f6be32e73000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052606060448401908152606484018690528893600160a060020a03851693636be32e739390928a928a928a929091608401848480828437820191505095505050505050602060405180830381600087803b158015611ae457600080fd5b505af1158015611af8573d6000803e3d6000fd5b505050506040513d6020811015611b0e57600080fd5b50511515611b1b57600080fd5b50600195945050505050565b336000611b3382612cef565b50600160a060020a0381166000908152600c6020526040902054611b5681611c60565b505050565b600080600080600e5460001415611b7c57633b9aca00600254039350611baf565b611b8d670de0b6b3a7640000612f81565b9250611b9d6117ef846005612d89565b9150611ba983836128aa565b90508093505b50505090565b60035481565b601360209081526000928352604080842090915290825290205481565b33600081815260186020526040902060018101548310611bf757600080fd5b9190915550565b60003382611c1457611c0f816111e3565b611c28565b611c1d8161253e565b611c26826111e3565b015b91505b50919050565b336000611c3d82612ff4565b50600160a060020a038116600090815260156020526040902054611b56816122ef565b336000611c6c82612cef565b600083118015611c945750600160a060020a0382166000908152600c60205260409020548311155b15611b5657600160a060020a0382166000908152600c6020526040902054611cbc90846128aa565b600160a060020a0383166000908152600c6020526040812091909155611ce590839085906128bc565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600160a060020a031660009081526009602052604090205490565b600080600080600e548511151515611d6757600080fd5b611d7085612f81565b9250611d806117ef846005612d89565b9150611d8c83836128aa565b95945050505050565b60106020526000908152604090205460ff1681565b600080600083511115611de157611dc083612d6a565b600081815260196020526040902054600160a060020a031692509050611c2b565b60009150611c2b565b60085481565b3360009081526010602052604090205460ff1680611e185750600754600160a060020a031633145b1515611e2357600080fd5b600355565b6000606080611e35613237565b600160a060020a03851660009081526018602090815260408083208151808301835281548152600182018054845181870281018701909552808552869592948584019390929190830182828015611eac57602002820191906000526020600020905b81548152600190910190602001808311611e97575b5050505050815250509250826020015151915081604051908082528060200260200182016040528015611ee9578160200160208202803883390190505b509350600090505b81811015611f34576020830151805182908110611f0a57fe5b906020019060200201518482815181101515611f2257fe5b60209081029091010152600101611ef1565b82519550611f418761121e565b94505050509193909250565b600080600080600e5460001415611f6e57633b9aca00600254019350611baf565b611f7f670de0b6b3a7640000612f81565b9250611f8f6117ef84600a612d89565b9150611ba98383612894565b601454600160a060020a031690565b3360009081526010602052604090205460ff1680611fd25750600754600160a060020a031633145b1515611fdd57600080fd5b600160a060020a03919091166000908152601060205260409020805460ff1916911515919091179055565b6000336118c381611d35565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114db5780601f106114b0576101008083540402835291602001916114db565b33600061207a82612cef565b50600160a060020a0381166000908152600c6020526040902054611b56816112fd565b60008060006120aa612008565b116120b457600080fd5b50336120c1818585612e47565b91505b5092915050565b601454604080517f949e8acd0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163949e8acd91600480830192602092919082900301818787803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b505050506040513d602081101561215457600080fd5b5051905090565b33600061216782612ff4565b60008311801561218f5750600160a060020a0382166000908152601560205260409020548311155b15611b5657600160a060020a0382166000908152601560205260409020546121b790846128aa565b600160a060020a0383166000908152601560205260409020556017546121dd90846128aa565b6017556121ec82846000610c3e565b905081600160a060020a03167f87cd5a7418500f46cf5a9adb4d803b7dac3c4a01c768df464c8e137c0b6c339c8483604051808381526020018281526020019250505060405180910390a2505050565b3360009081526010602052604090205460ff16806122645750600754600160a060020a031633145b151561226f57600080fd5b805161145190600190602084019061324f565b6000336118c381612861565b60006122a3333461229e85611daa565b610c3e565b92915050565b3360009081526010602052604090205460ff16806122d15750600754600160a060020a031633145b15156122dc57600080fd5b805161145190600090602084019061324f565b336122f981612ff4565b6000821180156123215750600160a060020a0381166000908152601560205260409020548211155b1561145157600160a060020a03811660009081526015602052604090205461234990836128aa565b600160a060020a03821660009081526015602052604090205560175461236f90836128aa565b601755604051600160a060020a0382169083156108fc029084906000818181858888f193505050501580156123a8573d6000803e3d6000fd5b50604080518381529051600160a060020a038316917fa84055832206cb61ec6fe97b8a159f93fb27c80ff52b2c8b7d633ba61a00245f919081900360200190a25050565b6000806123f986866116d1565b151561240457600080fd5b61240d8661288c565b15611b1b57506040517f332bb4c1000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052606060448401908152606484018690528893600160a060020a0385169363332bb4c19390928a928a928a929091608401848480828437820191505095505050505050602060405180830381600087803b158015611ae457600080fd5b3360006124b082612ff4565b50600160a060020a038116600090815260156020526040902054611b568161215b565b3360009081526010602052604090205460ff16806124fb5750600754600160a060020a031633145b151561250657600080fd5b61250f8161288c565b151561251a57600080fd5b600160a060020a03166000908152601260205260409020805460ff19166001179055565b600160a060020a03166000908152600a602052604090205490565b600160a060020a03918216600090815260136020908152604080832093909416825291909152205490565b6000806000806000806000612597612008565b116125a157600080fd5b3395506125ad86612ff4565b600160a060020a0386166000908152600960205260409020548711156125d257600080fd5b8694506125de85612f81565b93506125ee6117ef856005612d89565b92506125fa84846128aa565b9150612608600e54866128aa565b600e55600160a060020a03861660009081526009602052604090205461262e90866128aa565b600160a060020a038716600090815260096020908152604080832093909355600f54600b909152918120805492880268010000000000000000860201928390039055600e5491925010156126a4576126a0600f54600e5468010000000000000000860281151561269a57fe5b04612894565b600f555b60408051868152602081018490528151600160a060020a038916927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a2604080518681529051600091600160a060020a038916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050505050565b600160a060020a0381166000908152601560205260408120600101541561279757600160a060020a0382166000908152601560205260409020600101546016546801000000000000000091900361278784611d35565b0281151561279157fe5b046122a3565b506000919050565b33600081815260096020526040812054908111156127c0576127c081612584565b6127ca600161206e565b611b566001611c31565b565b60006122a3333484610c3e565b60008060008060008060008060006127f961181b565b98506128036120cb565b975061280d611f4d565b9650612817611b5b565b955060085494506128278a611d35565b93506128328a61253e565b61283b8b6111e3565b0192506128478a6118d3565b91506128528a612861565b90509193959799909294969850565b600160a060020a0381166000908152601560205260408120546122a39061288784612731565b612894565b6000903b1190565b6000828201838110156128a357fe5b9392505050565b6000828211156128b657fe5b50900390565b60008060008060008060006128d08a612ff4565b6128de6117ef8a600a612d89565b95506128eb866003612db4565b94506128f786866128aa565b935061290389876128aa565b925061290e83612dcb565b9150506801000000000000000083026000821180156129375750600e546129358382612894565b115b151561294257600080fd5b600160a060020a0388161580159061296c575089600160a060020a031688600160a060020a031614155b80156129925750600354600160a060020a03891660009081526009602052604090205410155b156129d857600160a060020a0388166000908152600a60205260409020546129ba9086612894565b600160a060020a0389166000908152600a60205260409020556129f2565b6129e28486612894565b9350506801000000000000000083025b6000600e541115612a5457612a09600e5483612894565b600e819055680100000000000000008502811515612a2357fe5b600f8054929091049091019055600e54680100000000000000008502811515612a4857fe5b04820281039003612a5a565b600e8290555b600160a060020a038a16600090815260096020526040902054612a7d9083612894565b600160a060020a038b8116600081815260096020908152604080832095909555600f54600b825291859020805492880287900390920190915583518d81529081018690528351928c169391927f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d5929181900390910190a3604080518381529051600160a060020a038c16916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35098975050505050505050565b6040805160208082528183019092526060918291600091829182918591908082016104008038833901905050945060009350600092505b6020831015612c05576008830260020a870291507fff00000000000000000000000000000000000000000000000000000000000000821615612bfa578451600185019483918791908110612bc957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600190920191612b79565b836040519080825280601f01601f191660200182016040528015612c33578160200160208202803883390190505b509050600092505b83831015612ce5578483815181101515612c5157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028184815181101515612caa57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600190920191612c3b565b9695505050505050565b6000612cfa826111e3565b600160a060020a0383166000908152600b602090815260408083208054680100000000000000008602019055600a8252808320805490849055600c9092529091205491019150612d4a9082612894565b600160a060020a039092166000908152600c602052604090209190915550565b805160009082901515612d805760009150611c2b565b50506020015190565b600080831515612d9c57600091506120c4565b50828202828482811515612dac57fe5b04146128a357fe5b6000808284811515612dc257fe5b04949350505050565b60028054600e54600092670de0b6b3a764000080840293859392633b9aca0092612e3492612e2e9280890a7259aedfc10d7279c5eed14016454000000000008c020190870a909202919091019085026b06765c793fa10079d00000000201613202565b856128aa565b811515612e3d57fe5b0403949350505050565b600160a060020a038316600090815260096020526040812054821115612e6c57600080fd5b612e7584612ff4565b612e7e83612ff4565b6000612e898561253e565b612e92866111e3565b011115612ea257612ea284612cef565b600160a060020a038416600090815260096020526040902054612ec590836128aa565b600160a060020a038086166000908152600960205260408082209390935590851681522054612ef49083612894565b600160a060020a03848116600081815260096020908152604080832095909555600f8054948a16808452600b83528684208054968a02909603909555548383529185902080549288029092019091558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b600e54600090670de0b6b3a7640000808401918101908390612fe186633b9aca00838604633b9aca00026002540103026002670de0b6b3a7640000876002890a03811515612fcb57fe5b04633b9aca0002811515612fdb57fe5b046128aa565b811515612fea57fe5b0495945050505050565b601454604080517f688abbf7000000000000000000000000000000000000000000000000000000008152600160048201529051600092839283928392600160a060020a03169163688abbf791602480830192602092919082900301818787803b15801561306057600080fd5b505af1158015613074573d6000803e3d6000fd5b505050506040513d602081101561308a57600080fd5b505111156130fe57601460009054906101000a9004600160a060020a0316600160a060020a0316633ccfd60b6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b505050505b6017543031935083118015613119575061311661181b565b15155b1561315e5761312a836017546128aa565b91506131556016546128876131488568010000000000000000612d89565b61315061181b565b612db4565b60165560178390555b600160a060020a03841660009081526015602052604090206001015415156131a057601654600160a060020a0385166000908152601560205260409020600101555b6131a984612731565b905060008111156131fc57600160a060020a0384166000908152601560205260409020546131d79082612894565b600160a060020a03851660009081526015602052604090209081556016546001909101555b50505050565b80600260018201045b81811015611c2b57809150600281828581151561322457fe5b040181151561322f57fe5b04905061320b565b60408051808201909152600081526060602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061329057805160ff19168380011785556132bd565b828001600101855582156132bd579182015b828111156132bd5782518255916020019190600101906132a2565b506118c69261181f9250905b808211156118c657600081556001016132c95600a165627a7a72305820a97d163bc012d67a66350ff5dbfae0a464d39535e7d4319cb913b2a1cd18ecdf0029000000000000000000000000000000000000000000000000000000005bff4820000000000000000000000000b3775fb83f7d12a36e0475abdd1fca35c091efbe
Deployed Bytecode
0x6080604052600436106102995763ffffffff60e060020a60003504166265318b81146102bb57806301ebccb9146102ee5780630562b9f71461038457806306fdde031461039c5780630830602b146103b1578063095ea7b3146103fd5780630f34dc161461043557806310d0ffdd1461045657806318160ddd1461048757806323b872dd1461049c57806324e34476146104c657806327defa1f146104db5780632b791d6e146104f05780632d0041c514610511578063313ce56714610537578063383bbab31461054c5780634000aea0146105a557806343a98caf146105d65780634b750334146105f057806356d399e8146106055780635c6581651461061a578063627045bf14610641578063688abbf714610659578063688eef87146106735780636e075e301461068d57806370a08231146106a5578063755d43d3146106c657806376be1585146106de5780637f873749146106ff57806381717607146107745780638328b6101461078957806384d2731c146107a15780638620410b1461088257806386aa6c091461089757806387c95058146108ac578063949e8acd146108d257806395d89b41146108e7578063a810a54c146108fc578063a9059cbb14610916578063ad7a672f1461093a578063b3f3dcf61461094f578063b84c824614610967578063b9d47fff146109c0578063bc4dd845146109d5578063c47f002714610a21578063ca03dab514610a7a578063cae9ca5114610a92578063cc7e74b314610ac3578063d3fb447c14610add578063d6349dd614610afe578063dd62ed3e14610b1f578063e4849b3214610b46578063e62d809d14610b5e578063e6c91a1514610b7f578063ed88c68e14610b99578063f088d54714610ba1578063f4c3f3f714610bb5578063f545118b14610c1d575b601454600160a060020a031633146102b9576102b733346000610c3e565b505b005b3480156102c757600080fd5b506102dc600160a060020a03600435166111e3565b60408051918252519081900360200190f35b3480156102fa57600080fd5b5061030f600160a060020a036004351661121e565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610349578181015183820152602001610331565b50505050905090810190601f1680156103765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039057600080fd5b506102b96004356112fd565b3480156103a857600080fd5b5061030f611455565b6040805160206004803580820135601f81018490048402850184019095528484526102b99436949293602493928401919081908401838280828437509497506114e39650505050505050565b34801561040957600080fd5b50610421600160a060020a03600435166024356116d1565b604080519115158252519081900360200190f35b34801561044157600080fd5b50610421600160a060020a0360043516611737565b34801561046257600080fd5b5061046e60043561174c565b6040805192835260208301919091528051918290030190f35b34801561049357600080fd5b506102dc61181b565b3480156104a857600080fd5b50610421600160a060020a0360043581169060243516604435611822565b3480156104d257600080fd5b506102dc6118b7565b3480156104e757600080fd5b506104216118ca565b3480156104fc57600080fd5b506102dc600160a060020a03600435166118d3565b34801561051d57600080fd5b506102b9600160a060020a03600435166024351515611909565b34801561054357600080fd5b506102dc611967565b34801561055857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b994369492936024939284019190819084018382808284375094975061196c9650505050505050565b3480156105b157600080fd5b5061042160048035600160a060020a0316906024803591604435918201910135611a06565b3480156105e257600080fd5b506102b96004351515611b27565b3480156105fc57600080fd5b506102dc611b5b565b34801561061157600080fd5b506102dc611bb5565b34801561062657600080fd5b506102dc600160a060020a0360043581169060243516611bbb565b34801561064d57600080fd5b506102b9600435611bd8565b34801561066557600080fd5b506102dc6004351515611bfe565b34801561067f57600080fd5b506102b96004351515611c31565b34801561069957600080fd5b506102b9600435611c60565b3480156106b157600080fd5b506102dc600160a060020a0360043516611d35565b3480156106d257600080fd5b506102dc600435611d50565b3480156106ea57600080fd5b50610421600160a060020a0360043516611d95565b34801561070b57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452610758943694929360249392840191908190840183828082843750949750611daa9650505050505050565b60408051600160a060020a039092168252519081900360200190f35b34801561078057600080fd5b506102dc611dea565b34801561079557600080fd5b506102b9600435611df0565b3480156107ad57600080fd5b506107c2600160a060020a0360043516611e28565b604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156108095781810151838201526020016107f1565b50505050905090810190601f1680156108365780820380516001836020036101000a031916815260200191505b508381038252845181528451602091820191808701910280838360005b8381101561086b578181015183820152602001610853565b505050509050019550505050505060405180910390f35b34801561088e57600080fd5b506102dc611f4d565b3480156108a357600080fd5b50610758611f9b565b3480156108b857600080fd5b506102b9600160a060020a03600435166024351515611faa565b3480156108de57600080fd5b506102dc612008565b3480156108f357600080fd5b5061030f612014565b34801561090857600080fd5b506102b9600435151561206e565b34801561092257600080fd5b50610421600160a060020a036004351660243561209d565b34801561094657600080fd5b506102dc6120cb565b34801561095b57600080fd5b506102b960043561215b565b34801561097357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b994369492936024939284019190819084018382808284375094975061223c9650505050505050565b3480156109cc57600080fd5b506102dc612282565b6040805160206004803580820135601f81018490048402850184019095528484526102dc94369492936024939284019190819084018382808284375094975061228e9650505050505050565b348015610a2d57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102b99436949293602493928401919081908401838280828437509497506122a99650505050505050565b348015610a8657600080fd5b506102b96004356122ef565b348015610a9e57600080fd5b5061042160048035600160a060020a03169060248035916044359182019101356123ec565b348015610acf57600080fd5b506102b960043515156124a4565b348015610ae957600080fd5b506102b9600160a060020a03600435166124d3565b348015610b0a57600080fd5b506102dc600160a060020a036004351661253e565b348015610b2b57600080fd5b506102dc600160a060020a0360043581169060243516612559565b348015610b5257600080fd5b506102b9600435612584565b348015610b6a57600080fd5b506102dc600160a060020a0360043516612731565b348015610b8b57600080fd5b506102b9600435151561279f565b6102b96127d4565b6102dc600160a060020a03600435166127d6565b348015610bc157600080fd5b50610bd6600160a060020a03600435166127e3565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b348015610c2957600080fd5b506102dc600160a060020a0360043516612861565b60008060008060008787610c518261288c565b1580610c755750600160a060020a03821660009081526012602052604090205460ff165b1515610c8057600080fd5b6008544210610c94576011805460ff191690555b60115460ff168015610cb2575067a688906bd8b00000816006540111155b15610fad57600160a060020a03821660009081526005602052604090205460ff1615156001148015610d075750600160a060020a0382166000908152600d6020526040902054670de0b6b3a764000090820111155b1515610d1257600080fd5b600160a060020a0382166000908152600d6020526040902054610d359082612894565b600160a060020a0383166000908152600d6020526040902055600654610d5b9082612894565b6006556004548996506000955068056bc75e2d6310000010610daf57670de0b6b3a7640000861115610d9f57670de0b6b3a76400009550610d9c89876128aa565b94505b610dab60045487612894565b6004555b6000851115610df057604051600160a060020a038b169086156108fc029087906000818181858888f19350505050158015610dee573d6000803e3d6000fd5b505b601460009054906101000a9004600160a060020a0316600160a060020a031663949e8acd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610e4357600080fd5b505af1158015610e57573d6000803e3d6000fd5b505050506040513d6020811015610e6d57600080fd5b5051601454604080517ff088d547000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152915193975091169163f088d547918991602480830192602092919082900301818588803b158015610ed957600080fd5b505af1158015610eed573d6000803e3d6000fd5b50505050506040513d6020811015610f0457600080fd5b5050601454604080517f949e8acd0000000000000000000000000000000000000000000000000000000081529051610f9992600160a060020a03169163949e8acd9160048083019260209291908290030181600087803b158015610f6757600080fd5b505af1158015610f7b573d6000803e3d6000fd5b505050506040513d6020811015610f9157600080fd5b5051856128aa565b9250610fa68a848a6128bc565b96506111d6565b60115460ff1615610fbd57600080fd5b6004548996506000955068056bc75e2d631000001061100e57670de0b6b3a7640000861115610ffe57670de0b6b3a76400009550610ffb89876128aa565b94505b61100a60045487612894565b6004555b600085111561104f57604051600160a060020a038b169086156108fc029087906000818181858888f1935050505015801561104d573d6000803e3d6000fd5b505b601460009054906101000a9004600160a060020a0316600160a060020a031663949e8acd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b505050506040513d60208110156110cc57600080fd5b5051601454604080517ff088d547000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152915193975091169163f088d547918991602480830192602092919082900301818588803b15801561113857600080fd5b505af115801561114c573d6000803e3d6000fd5b50505050506040513d602081101561116357600080fd5b5050601454604080517f949e8acd00000000000000000000000000000000000000000000000000000000815290516111c692600160a060020a03169163949e8acd9160048083019260209291908290030181600087803b158015610f6757600080fd5b92506111d38a848a6128bc565b96505b5050505050509392505050565b600160a060020a03166000908152600b6020908152604080832054600990925290912054600f54680100000000000000009102919091030490565b6060611228613237565b600160a060020a03831660009081526018602090815260408083208151808301835281548152600182018054845181870281018701909552808552919492938584019390929083018282801561129e57602002820191906000526020600020905b81548152600190910190602001808311611289575b5050505050815250509150600082602001515111156112e45760208201518251815181106112c857fe5b9060200190602002015190506112dd81612b42565b92506112f6565b60408051602081019091526000815292505b5050919050565b3361130781612cef565b60008211801561132f5750600160a060020a0381166000908152600c60205260409020548211155b1561145157600160a060020a0381166000908152600c602052604090205461135790836128aa565b600160a060020a038083166000818152600c602090815260408083209590955560145485517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810194909452602484018890529451949093169363a9059cbb936044808501949193918390030190829087803b1580156113da57600080fd5b505af11580156113ee573d6000803e3d6000fd5b505050506040513d602081101561140457600080fd5b5051151561141157600080fd5b604080518381529051600160a060020a038316917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25b5050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114db5780601f106114b0576101008083540402835291602001916114db565b820191906000526020600020905b8154815290600101906020018083116114be57829003601f168201915b505050505081565b60115433906000908190819060ff1615806115165750600160a060020a03841660009081526005602052604090205460ff165b151561152157600080fd5b845160001061152f57600080fd5b662386f26fc1000034101561154357600080fd5b61155434662386f26fc100006128aa565b925061155f85612d6a565b600081815260196020526040902054909250600160a060020a03161561158457600080fd5b50600160a060020a03831660008181526018602090815260408083206001808201805491820181558086528486209091018790555460001901815585845260199092528220805473ffffffffffffffffffffffffffffffffffffffff191690931790925583111561162757604051600160a060020a0385169084156108fc029085906000818181858888f19350505050158015611625573d6000803e3d6000fd5b505b83600160a060020a03167fc3e1d9d15ccfce2072b74368e985002385d0e710113e804dc0fa242a05feb414866040518080602001828103825283818151815260200191508051906020019080838360005b83811015611690578181015183820152602001611678565b50505050905090810190601f1680156116bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050505050565b336000818152601360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60126020526000908152604090205460ff1681565b600080600080600080601460009054906101000a9004600160a060020a0316600160a060020a03166310d0ffdd886040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050506040513d60208110156117dd57600080fd5b505193506117f66117ef85600a612d89565b6064612db4565b925061180284846128aa565b915061180d82612dcb565b939793965092945050505050565b600e545b90565b600160a060020a038316600090815260136020908152604080832033845290915281205482111561185257600080fd5b600160a060020a038416600090815260136020908152604080832033845290915290205461188090836128aa565b600160a060020a03851660009081526013602090815260408083203384529091529020556118af848484612e47565b949350505050565b6000336118c3816118d3565b91505b5090565b60115460ff1681565b60006118de8261253e565b6118e7836111e3565b600160a060020a0384166000908152600c602052604090205401019050919050565b3360009081526010602052604090205460ff16806119315750600754600160a060020a031633145b151561193c57600080fd5b600160a060020a03919091166000908152600560205260409020805460ff1916911515919091179055565b601281565b33600080808061197b86611daa565b600160a060020a0386811691161461199257600080fd5b61199b86612d6a565b600160a060020a038616600090815260186020526040812091955090935091508190505b60018301548110156119fe57600183018054829081106119db57fe5b6000918252602090912001548414156119f6578091506119fe565b6001016119bf565b509055505050565b600160a060020a038416600090815260126020526040812054819060ff161515611a2f57600080fd5b611a39868661209d565b1515611a4457600080fd5b611a4d8661288c565b15611b1b57506040517f6be32e73000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052606060448401908152606484018690528893600160a060020a03851693636be32e739390928a928a928a929091608401848480828437820191505095505050505050602060405180830381600087803b158015611ae457600080fd5b505af1158015611af8573d6000803e3d6000fd5b505050506040513d6020811015611b0e57600080fd5b50511515611b1b57600080fd5b50600195945050505050565b336000611b3382612cef565b50600160a060020a0381166000908152600c6020526040902054611b5681611c60565b505050565b600080600080600e5460001415611b7c57633b9aca00600254039350611baf565b611b8d670de0b6b3a7640000612f81565b9250611b9d6117ef846005612d89565b9150611ba983836128aa565b90508093505b50505090565b60035481565b601360209081526000928352604080842090915290825290205481565b33600081815260186020526040902060018101548310611bf757600080fd5b9190915550565b60003382611c1457611c0f816111e3565b611c28565b611c1d8161253e565b611c26826111e3565b015b91505b50919050565b336000611c3d82612ff4565b50600160a060020a038116600090815260156020526040902054611b56816122ef565b336000611c6c82612cef565b600083118015611c945750600160a060020a0382166000908152600c60205260409020548311155b15611b5657600160a060020a0382166000908152600c6020526040902054611cbc90846128aa565b600160a060020a0383166000908152600c6020526040812091909155611ce590839085906128bc565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600160a060020a031660009081526009602052604090205490565b600080600080600e548511151515611d6757600080fd5b611d7085612f81565b9250611d806117ef846005612d89565b9150611d8c83836128aa565b95945050505050565b60106020526000908152604090205460ff1681565b600080600083511115611de157611dc083612d6a565b600081815260196020526040902054600160a060020a031692509050611c2b565b60009150611c2b565b60085481565b3360009081526010602052604090205460ff1680611e185750600754600160a060020a031633145b1515611e2357600080fd5b600355565b6000606080611e35613237565b600160a060020a03851660009081526018602090815260408083208151808301835281548152600182018054845181870281018701909552808552869592948584019390929190830182828015611eac57602002820191906000526020600020905b81548152600190910190602001808311611e97575b5050505050815250509250826020015151915081604051908082528060200260200182016040528015611ee9578160200160208202803883390190505b509350600090505b81811015611f34576020830151805182908110611f0a57fe5b906020019060200201518482815181101515611f2257fe5b60209081029091010152600101611ef1565b82519550611f418761121e565b94505050509193909250565b600080600080600e5460001415611f6e57633b9aca00600254019350611baf565b611f7f670de0b6b3a7640000612f81565b9250611f8f6117ef84600a612d89565b9150611ba98383612894565b601454600160a060020a031690565b3360009081526010602052604090205460ff1680611fd25750600754600160a060020a031633145b1515611fdd57600080fd5b600160a060020a03919091166000908152601060205260409020805460ff1916911515919091179055565b6000336118c381611d35565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156114db5780601f106114b0576101008083540402835291602001916114db565b33600061207a82612cef565b50600160a060020a0381166000908152600c6020526040902054611b56816112fd565b60008060006120aa612008565b116120b457600080fd5b50336120c1818585612e47565b91505b5092915050565b601454604080517f949e8acd0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163949e8acd91600480830192602092919082900301818787803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b505050506040513d602081101561215457600080fd5b5051905090565b33600061216782612ff4565b60008311801561218f5750600160a060020a0382166000908152601560205260409020548311155b15611b5657600160a060020a0382166000908152601560205260409020546121b790846128aa565b600160a060020a0383166000908152601560205260409020556017546121dd90846128aa565b6017556121ec82846000610c3e565b905081600160a060020a03167f87cd5a7418500f46cf5a9adb4d803b7dac3c4a01c768df464c8e137c0b6c339c8483604051808381526020018281526020019250505060405180910390a2505050565b3360009081526010602052604090205460ff16806122645750600754600160a060020a031633145b151561226f57600080fd5b805161145190600190602084019061324f565b6000336118c381612861565b60006122a3333461229e85611daa565b610c3e565b92915050565b3360009081526010602052604090205460ff16806122d15750600754600160a060020a031633145b15156122dc57600080fd5b805161145190600090602084019061324f565b336122f981612ff4565b6000821180156123215750600160a060020a0381166000908152601560205260409020548211155b1561145157600160a060020a03811660009081526015602052604090205461234990836128aa565b600160a060020a03821660009081526015602052604090205560175461236f90836128aa565b601755604051600160a060020a0382169083156108fc029084906000818181858888f193505050501580156123a8573d6000803e3d6000fd5b50604080518381529051600160a060020a038316917fa84055832206cb61ec6fe97b8a159f93fb27c80ff52b2c8b7d633ba61a00245f919081900360200190a25050565b6000806123f986866116d1565b151561240457600080fd5b61240d8661288c565b15611b1b57506040517f332bb4c1000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052606060448401908152606484018690528893600160a060020a0385169363332bb4c19390928a928a928a929091608401848480828437820191505095505050505050602060405180830381600087803b158015611ae457600080fd5b3360006124b082612ff4565b50600160a060020a038116600090815260156020526040902054611b568161215b565b3360009081526010602052604090205460ff16806124fb5750600754600160a060020a031633145b151561250657600080fd5b61250f8161288c565b151561251a57600080fd5b600160a060020a03166000908152601260205260409020805460ff19166001179055565b600160a060020a03166000908152600a602052604090205490565b600160a060020a03918216600090815260136020908152604080832093909416825291909152205490565b6000806000806000806000612597612008565b116125a157600080fd5b3395506125ad86612ff4565b600160a060020a0386166000908152600960205260409020548711156125d257600080fd5b8694506125de85612f81565b93506125ee6117ef856005612d89565b92506125fa84846128aa565b9150612608600e54866128aa565b600e55600160a060020a03861660009081526009602052604090205461262e90866128aa565b600160a060020a038716600090815260096020908152604080832093909355600f54600b909152918120805492880268010000000000000000860201928390039055600e5491925010156126a4576126a0600f54600e5468010000000000000000860281151561269a57fe5b04612894565b600f555b60408051868152602081018490528151600160a060020a038916927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a2604080518681529051600091600160a060020a038916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050505050565b600160a060020a0381166000908152601560205260408120600101541561279757600160a060020a0382166000908152601560205260409020600101546016546801000000000000000091900361278784611d35565b0281151561279157fe5b046122a3565b506000919050565b33600081815260096020526040812054908111156127c0576127c081612584565b6127ca600161206e565b611b566001611c31565b565b60006122a3333484610c3e565b60008060008060008060008060006127f961181b565b98506128036120cb565b975061280d611f4d565b9650612817611b5b565b955060085494506128278a611d35565b93506128328a61253e565b61283b8b6111e3565b0192506128478a6118d3565b91506128528a612861565b90509193959799909294969850565b600160a060020a0381166000908152601560205260408120546122a39061288784612731565b612894565b6000903b1190565b6000828201838110156128a357fe5b9392505050565b6000828211156128b657fe5b50900390565b60008060008060008060006128d08a612ff4565b6128de6117ef8a600a612d89565b95506128eb866003612db4565b94506128f786866128aa565b935061290389876128aa565b925061290e83612dcb565b9150506801000000000000000083026000821180156129375750600e546129358382612894565b115b151561294257600080fd5b600160a060020a0388161580159061296c575089600160a060020a031688600160a060020a031614155b80156129925750600354600160a060020a03891660009081526009602052604090205410155b156129d857600160a060020a0388166000908152600a60205260409020546129ba9086612894565b600160a060020a0389166000908152600a60205260409020556129f2565b6129e28486612894565b9350506801000000000000000083025b6000600e541115612a5457612a09600e5483612894565b600e819055680100000000000000008502811515612a2357fe5b600f8054929091049091019055600e54680100000000000000008502811515612a4857fe5b04820281039003612a5a565b600e8290555b600160a060020a038a16600090815260096020526040902054612a7d9083612894565b600160a060020a038b8116600081815260096020908152604080832095909555600f54600b825291859020805492880287900390920190915583518d81529081018690528351928c169391927f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d5929181900390910190a3604080518381529051600160a060020a038c16916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35098975050505050505050565b6040805160208082528183019092526060918291600091829182918591908082016104008038833901905050945060009350600092505b6020831015612c05576008830260020a870291507fff00000000000000000000000000000000000000000000000000000000000000821615612bfa578451600185019483918791908110612bc957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600190920191612b79565b836040519080825280601f01601f191660200182016040528015612c33578160200160208202803883390190505b509050600092505b83831015612ce5578483815181101515612c5157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028184815181101515612caa57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600190920191612c3b565b9695505050505050565b6000612cfa826111e3565b600160a060020a0383166000908152600b602090815260408083208054680100000000000000008602019055600a8252808320805490849055600c9092529091205491019150612d4a9082612894565b600160a060020a039092166000908152600c602052604090209190915550565b805160009082901515612d805760009150611c2b565b50506020015190565b600080831515612d9c57600091506120c4565b50828202828482811515612dac57fe5b04146128a357fe5b6000808284811515612dc257fe5b04949350505050565b60028054600e54600092670de0b6b3a764000080840293859392633b9aca0092612e3492612e2e9280890a7259aedfc10d7279c5eed14016454000000000008c020190870a909202919091019085026b06765c793fa10079d00000000201613202565b856128aa565b811515612e3d57fe5b0403949350505050565b600160a060020a038316600090815260096020526040812054821115612e6c57600080fd5b612e7584612ff4565b612e7e83612ff4565b6000612e898561253e565b612e92866111e3565b011115612ea257612ea284612cef565b600160a060020a038416600090815260096020526040902054612ec590836128aa565b600160a060020a038086166000908152600960205260408082209390935590851681522054612ef49083612894565b600160a060020a03848116600081815260096020908152604080832095909555600f8054948a16808452600b83528684208054968a02909603909555548383529185902080549288029092019091558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b600e54600090670de0b6b3a7640000808401918101908390612fe186633b9aca00838604633b9aca00026002540103026002670de0b6b3a7640000876002890a03811515612fcb57fe5b04633b9aca0002811515612fdb57fe5b046128aa565b811515612fea57fe5b0495945050505050565b601454604080517f688abbf7000000000000000000000000000000000000000000000000000000008152600160048201529051600092839283928392600160a060020a03169163688abbf791602480830192602092919082900301818787803b15801561306057600080fd5b505af1158015613074573d6000803e3d6000fd5b505050506040513d602081101561308a57600080fd5b505111156130fe57601460009054906101000a9004600160a060020a0316600160a060020a0316633ccfd60b6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b505050505b6017543031935083118015613119575061311661181b565b15155b1561315e5761312a836017546128aa565b91506131556016546128876131488568010000000000000000612d89565b61315061181b565b612db4565b60165560178390555b600160a060020a03841660009081526015602052604090206001015415156131a057601654600160a060020a0385166000908152601560205260409020600101555b6131a984612731565b905060008111156131fc57600160a060020a0384166000908152601560205260409020546131d79082612894565b600160a060020a03851660009081526015602052604090209081556016546001909101555b50505050565b80600260018201045b81811015611c2b57809150600281828581151561322457fe5b040181151561322f57fe5b04905061320b565b60408051808201909152600081526060602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061329057805160ff19168380011785556132bd565b828001600101855582156132bd579182015b828111156132bd5782518255916020019190600101906132a2565b506118c69261181f9250905b808211156118c657600081556001016132c95600a165627a7a72305820a97d163bc012d67a66350ff5dbfae0a464d39535e7d4319cb913b2a1cd18ecdf0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000005bff4820000000000000000000000000b3775fb83f7d12a36e0475abdd1fca35c091efbe
-----Decoded View---------------
Arg [0] : _activationTime (uint256): 1543456800
Arg [1] : _P3D_address (address): 0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005bff4820
Arg [1] : 000000000000000000000000b3775fb83f7d12a36e0475abdd1fca35c091efbe
Swarm Source
bzzr://a97d163bc012d67a66350ff5dbfae0a464d39535e7d4319cb913b2a1cd18ecdf
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.