ERC-20
Overview
Max Total Supply
25,000,000 MAIL
Holders
108
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Mail
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-01-14 */ pragma solidity ^0.4.6; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant 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; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Owned { // The address of the account that is the current owner address public owner; // Contract which manage issuing of new tokens (airdrop and referral tokens) address public issuer; // The publiser is the inital owner function Owned() { owner = msg.sender; } /** * Restricted access to the current owner */ modifier onlyOwner() { if (msg.sender != owner) throw; _; } /** * Restricted access to the issuer and owner */ modifier onlyIssuer() { if (msg.sender != owner && msg.sender != issuer) throw; _; } /** * Transfer ownership to `_newOwner` * * @param _newOwner The address of the account that will become the new owner */ function transferOwnership(address _newOwner) onlyOwner { owner = _newOwner; } } // Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 contract Token { /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /** * @title Mail token * * Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 with the addition * of ownership, a lock and issuing. * */ contract Mail is Owned, Token { using SafeMath for uint256; // Ethereum token standaard string public standard = "Token 0.2"; // Full name string public name = "Ethereum Mail"; // Symbol string public symbol = "MAIL"; // No decimal points uint8 public decimals = 0; // Token distribution uint256 public freeToUseTokens = 10 * 10 ** 6; // 10 million tokens are free to use // List of available tokens for attachment mapping (bytes32 => Token) public tokens; // No decimal points uint256 public maxTotalSupply = 10 ** 9; // 1 billion // Token starts if the locked state restricting transfers bool public locked; mapping (address => uint256) public balances; mapping (address => uint256) public usableBalances; mapping (address => mapping (address => uint256)) public allowed; uint256 public currentMessageNumber; struct Message { bytes32 content; uint256 weight; uint256 validUntil; uint256 time; bytes32 attachmentSymbol; uint256 attachmentValue; address from; address[] to; address[] read; } mapping (uint256 => Message) messages; struct UnreadMessage { uint256 id; bool isOpened; bool free; address from; uint256 time; uint256 weight; } mapping (address => UnreadMessage[]) public unreadMessages; mapping (address => uint256) public unreadMessageCount; uint[] indexesUnread; uint[] indexesRead; mapping (address => uint256) public lastReceivedMessage; /** * Set up issuer * * @param _issuer The address of the account that will become the new issuer */ function setIssuer(address _issuer) onlyOwner { issuer = _issuer; } /** * Unlocks the token irreversibly so that the transfering of value is enabled * * @return Whether the unlocking was successful or not */ function unlock() onlyOwner returns (bool success) { locked = false; return true; } /** * Everyone can call this function to invalidate mail if its validation time is already in past * * @param _number Number od unread messages */ function invalidateMail(uint256 _number) { if (messages[_number].validUntil >= now) { throw; } if (messages[_number].attachmentSymbol.length != 0x0 && messages[_number].attachmentValue > 0) { Token token = tokens[messages[_number].attachmentSymbol]; token.transfer(messages[_number].from, messages[_number].attachmentValue.mul(messages[_number].to.length.sub(messages[_number].read.length)).div(messages[_number].to.length)); } uint256 i = 0; while (i < messages[_number].to.length) { address recipient = messages[_number].to[i]; for (uint a = 0; a < unreadMessages[recipient].length; ++a) { if (unreadMessages[recipient][a].id == _number) { if (!unreadMessages[recipient][a].isOpened) { unreadMessages[recipient][a].weight = 0; unreadMessages[recipient][a].time = 0; uint256 value = messages[_number].weight.div(messages[_number].to.length); unreadMessageCount[recipient]--; balances[recipient] = balances[recipient].sub(value); if (!unreadMessages[recipient][a].free) { usableBalances[messages[_number].from] = usableBalances[messages[_number].from].add(value); balances[messages[_number].from] = balances[messages[_number].from].add(value); } } break; } } i++; } } /** * Returns number of unread messages for specific user * * @param _userAddress Address of user * @return Number od unread messages */ function getUnreadMessageCount(address _userAddress) constant returns (uint256 count) { uint256 unreadCount; for (uint i = 0; i < unreadMessageCount[_userAddress]; ++i) { if (unreadMessages[_userAddress][i].isOpened == false) { unreadCount++; } } return unreadCount; } /** * Returns unread messages for current user * * @param _userAddress Address of user * @return Unread messages as array of message numbers */ function getUnreadMessages(address _userAddress) constant returns (uint[] mmessages) { for (uint i = 0; i < unreadMessageCount[_userAddress]; ++i) { if (unreadMessages[_userAddress][i].isOpened == false) { indexesUnread.push(unreadMessages[_userAddress][i].id); } } return indexesUnread; } function getUnreadMessagesArrayContent(uint256 _number) public constant returns(uint256, bool, address, uint256, uint256) { for (uint a = 0; a < unreadMessageCount[msg.sender]; ++a) { if (unreadMessages[msg.sender][a].id == _number) { return (unreadMessages[msg.sender][a].id,unreadMessages[msg.sender][a].isOpened,unreadMessages[msg.sender][a].from, unreadMessages[msg.sender][a].time,unreadMessages[msg.sender][a].weight); } } } /** * Returns read messages for current user * * @param _userAddress Address of user * @return Read messages as array of message numbers */ function getReadMessages(address _userAddress) constant returns (uint[] mmessages) { for (uint i = 0; i < unreadMessageCount[_userAddress]; ++i) { if (unreadMessages[_userAddress][i].isOpened == true) { indexesRead.push(unreadMessages[_userAddress][i].id); } } return indexesRead; } /** * Add token which will can be used as attachment * * @param _tokenAddress Address of token contract * @param _symbol Symbol of token * @return If action was successful */ function addToken(address _tokenAddress, bytes32 _symbol) onlyOwner returns (bool success) { Token token = Token(_tokenAddress); tokens[_symbol] = token; return true; } /** * Locks the token irreversibly so that the transfering of value is not enabled * * @return Whether the locking was successful or not */ function lock() onlyOwner returns (bool success) { locked = true; return true; } /** * Restricted access to the current owner */ modifier onlyOwner() { if (msg.sender != owner) throw; _; } /** * Get balance of `_owner` * * @param _owner The address from which the balance will be retrieved * @return The balance */ function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } /** * Prevents accidental sending of ether */ function () { throw; } /** * Send `_value` token to `_to` from `msg.sender` * * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transfer(address _to, uint256 _value) returns (bool success) { // Unable to transfer while still locked if (locked) { throw; } // Check if the sender has enough tokens if (balances[msg.sender] < _value || usableBalances[msg.sender] < _value) { throw; } // Check for overflows if (balances[_to] + _value < balances[_to]) { throw; } // Transfer tokens balances[msg.sender] -= _value; balances[_to] += _value; usableBalances[msg.sender] -= _value; usableBalances[_to] += _value; // Notify listners Transfer(msg.sender, _to, _value); return true; } /** * Send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { // Unable to transfer while still locked if (locked) { throw; } // Check if the sender has enough if (balances[_from] < _value || usableBalances[_from] < _value) { throw; } // Check for overflows if (balances[_to] + _value < balances[_to]) { throw; } // Check allowance if (_value > allowed[_from][msg.sender]) { throw; } // Transfer tokens balances[_to] += _value; balances[_from] -= _value; usableBalances[_from] -= _value; usableBalances[_to] += _value; // Update allowance allowed[_from][msg.sender] -= _value; // Notify listners Transfer(_from, _to, _value); return true; } /** * `msg.sender` approves `_spender` to spend `_value` tokens * * @param _spender The address of the account able to transfer the tokens * @param _value The amount of tokens to be approved for transfer * @return Whether the approval was successful or not */ function approve(address _spender, uint256 _value) returns (bool success) { // Unable to approve while still locked if (locked) { throw; } // Update allowance allowed[msg.sender][_spender] = _value; // Notify listners Approval(msg.sender, _spender, _value); return true; } /** * Get the amount of remaining tokens that `_spender` is allowed to spend from `_owner` * * @param _owner The address of the account owning tokens * @param _spender The address of the account able to transfer the tokens * @return Amount of remaining tokens allowed to spent */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * Sends an mail to the specific list of recipients with amount of MAIL tokens to spend on them, hash message, time unti when is * message available and tokens * * @param _to List of recipients * @param _weight Tokens to be spent on messages * @param _hashedMessage Hashed content of mail * @param _validUntil Mail is available until this specific time when will be returned to sender * @param _attachmentToken Name of attached token * @param _attachmentAmount Amount of attached token */ function sendMail(address[] _to, uint256 _weight, bytes32 _hashedMessage, uint256 _validUntil, bytes32 _attachmentToken, uint256 _attachmentAmount) { bool useFreeTokens = false; if (_weight == 0 && freeToUseTokens > 0) { _weight = _to.length; useFreeTokens = true; } if ((!useFreeTokens && usableBalances[msg.sender] < _weight) || _weight < _to.length) { throw; } messages[currentMessageNumber].content = _hashedMessage; messages[currentMessageNumber].validUntil = _validUntil; messages[currentMessageNumber].time = now; messages[currentMessageNumber].from = msg.sender; messages[currentMessageNumber].to = _to; if (_attachmentToken != "") { Token token = tokens[_attachmentToken]; if (!token.transferFrom(msg.sender, address(this), _attachmentAmount)) { throw; } messages[currentMessageNumber].attachmentSymbol = _attachmentToken; messages[currentMessageNumber].attachmentValue = _attachmentAmount; } UnreadMessage memory currentUnreadMessage; currentUnreadMessage.id = currentMessageNumber; currentUnreadMessage.isOpened = false; currentUnreadMessage.from = msg.sender; currentUnreadMessage.time = now; currentUnreadMessage.weight = _weight; currentUnreadMessage.free = useFreeTokens; uint256 i = 0; uint256 duplicateWeight = 0; while (i < _to.length) { if (lastReceivedMessage[_to[i]] == currentMessageNumber) { i++; duplicateWeight = duplicateWeight.add(_weight.div(_to.length)); continue; } lastReceivedMessage[_to[i]] = currentMessageNumber; unreadMessages[_to[i]].push(currentUnreadMessage); unreadMessageCount[_to[i]]++; balances[_to[i]] = balances[_to[i]].add(_weight.div(_to.length)); i++; } if (useFreeTokens) { freeToUseTokens = freeToUseTokens.sub(_weight.sub(duplicateWeight)); } else { usableBalances[msg.sender] = usableBalances[msg.sender].sub(_weight.sub(duplicateWeight)); balances[msg.sender] = balances[msg.sender].sub(_weight.sub(duplicateWeight)); } messages[currentMessageNumber].weight = _weight.sub(duplicateWeight); currentMessageNumber++; } function getUnreadMessage(uint256 _number) constant returns (UnreadMessage unread) { for (uint a = 0; a < unreadMessages[msg.sender].length; ++a) { if (unreadMessages[msg.sender][a].id == _number) { return unreadMessages[msg.sender][a]; } } } /** * Open specific mail for current user who receives MAIL tokens and tokens attached to mail * * @param _number Number of message recipient is trying to open * @return Success of opeining mail */ function openMail(uint256 _number) returns (bool success) { UnreadMessage memory currentUnreadMessage = getUnreadMessage(_number); // throw error if it is already opened or invalidate if (currentUnreadMessage.isOpened || currentUnreadMessage.weight == 0) { throw; } if (messages[_number].attachmentSymbol != 0x0 && messages[_number].attachmentValue > 0) { Token token = tokens[messages[_number].attachmentSymbol]; token.transfer(msg.sender, messages[_number].attachmentValue.div(messages[_number].to.length)); } for (uint a = 0; a < unreadMessages[msg.sender].length; ++a) { if (unreadMessages[msg.sender][a].id == _number) { unreadMessages[msg.sender][a].isOpened = true; } } messages[_number].read.push(msg.sender); usableBalances[msg.sender] = usableBalances[msg.sender].add(messages[_number].weight.div(messages[_number].to.length)); return true; } /** * Return opened mail with specific number * * @param _number Number of message * @return Mail content */ function getMail(uint256 _number) constant returns (bytes32 message) { UnreadMessage memory currentUnreadMessage = getUnreadMessage(_number); if (!currentUnreadMessage.isOpened || currentUnreadMessage.weight == 0) { throw; } return messages[_number].content; } /** * Issuing MAIL tokens * * @param _recipient Recipient of tokens * @param _value Amount of tokens * @return Success of issuing */ function issue(address _recipient, uint256 _value) onlyIssuer returns (bool success) { if (totalSupply.add(_value) > maxTotalSupply) { return; } // Create tokens balances[_recipient] = balances[_recipient].add(_value); usableBalances[_recipient] = usableBalances[_recipient].add(_value); totalSupply = totalSupply.add(_value); return true; } function Mail() { balances[msg.sender] = 0; totalSupply = 0; locked = false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"usableBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"unreadMessageCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"issuer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"getReadMessages","outputs":[{"name":"mmessages","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lastReceivedMessage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_issuer","type":"address"}],"name":"setIssuer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"string"}],"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":true,"inputs":[{"name":"_number","type":"uint256"}],"name":"getUnreadMessagesArrayContent","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"unreadMessages","outputs":[{"name":"id","type":"uint256"},{"name":"isOpened","type":"bool"},{"name":"free","type":"bool"},{"name":"from","type":"address"},{"name":"time","type":"uint256"},{"name":"weight","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address[]"},{"name":"_weight","type":"uint256"},{"name":"_hashedMessage","type":"bytes32"},{"name":"_validUntil","type":"uint256"},{"name":"_attachmentToken","type":"bytes32"},{"name":"_attachmentAmount","type":"uint256"}],"name":"sendMail","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_value","type":"uint256"}],"name":"issue","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"tokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_number","type":"uint256"}],"name":"getUnreadMessage","outputs":[{"components":[{"name":"id","type":"uint256"},{"name":"isOpened","type":"bool"},{"name":"free","type":"bool"},{"name":"from","type":"address"},{"name":"time","type":"uint256"},{"name":"weight","type":"uint256"}],"name":"unread","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"getUnreadMessageCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unlock","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_number","type":"uint256"}],"name":"openMail","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_symbol","type":"bytes32"}],"name":"addToken","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"locked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentMessageNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_number","type":"uint256"}],"name":"getMail","outputs":[{"name":"message","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"getUnreadMessages","outputs":[{"name":"mmessages","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"freeToUseTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"lock","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_number","type":"uint256"}],"name":"invalidateMail","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
606060405260408051908101604052600981527f546f6b656e20302e320000000000000000000000000000000000000000000000602082015260039080516200004d92916020019062000145565b5060408051908101604052600d81527f457468657265756d204d61696c00000000000000000000000000000000000000602082015260049080516200009792916020019062000145565b5060408051908101604052600481527f4d41494c0000000000000000000000000000000000000000000000000000000060208201526005908051620000e192916020019062000145565b506006805460ff1916905562989680600755633b9aca0060095534156200010757600080fd5b60008054600160a060020a03191633600160a060020a031690811782558152600b60205260408120819055600255600a805460ff19169055620001ea565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200018857805160ff1916838001178555620001b8565b82800160010185558215620001b8579182015b82811115620001b85782518255916020019190600101906200019b565b50620001c6929150620001ca565b5090565b620001e791905b80821115620001c65760008155600101620001d1565b90565b6123b680620001fa6000396000f3006060604052600436106101be5763ffffffff60e060020a60003504166306fdde0381146101ce578063095ea7b3146102585780630a1ceb0e1461028e57806318160ddd146102bf57806319a2bfd8146102d25780631d143848146102f157806323b872dd1461032057806327e235e3146103485780632ab4d05214610367578063313ce5671461037a57806334c7b8e8146103a35780634d3a2f101461041557806355cc4e57146104345780635a3b7e42146104555780635c6581651461046857806364ab374b1461048d5780636f1cecd8146104e257806370a082311461054b57806378a71d781461056a578063867904b4146105d15780638da5cb5b146105f3578063904194a31461060657806395d89b411461061c578063995b2e2c1461062f578063a63e10fa14610645578063a69df4b514610664578063a9059cbb14610677578063acc79f7414610699578063c0c1eebc146106af578063cf309012146106d1578063d91f68a2146106e4578063dcc53305146106f7578063dd62ed3e1461070d578063e45ceec114610732578063ecd2718914610751578063f2fde38b14610764578063f83d08ba14610783578063fed8f40f14610796575b34156101c957600080fd5b600080fd5b34156101d957600080fd5b6101e16107ac565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561021d578082015183820152602001610205565b50505050905090810190601f16801561024a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026357600080fd5b61027a600160a060020a036004351660243561084a565b604051901515815260200160405180910390f35b341561029957600080fd5b6102ad600160a060020a03600435166108c7565b60405190815260200160405180910390f35b34156102ca57600080fd5b6102ad6108d9565b34156102dd57600080fd5b6102ad600160a060020a03600435166108df565b34156102fc57600080fd5b6103046108f1565b604051600160a060020a03909116815260200160405180910390f35b341561032b57600080fd5b61027a600160a060020a0360043581169060243516604435610900565b341561035357600080fd5b6102ad600160a060020a0360043516610a61565b341561037257600080fd5b6102ad610a73565b341561038557600080fd5b61038d610a79565b60405160ff909116815260200160405180910390f35b34156103ae57600080fd5b6103c2600160a060020a0360043516610a82565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104015780820151838201526020016103e9565b505050509050019250505060405180910390f35b341561042057600080fd5b6102ad600160a060020a0360043516610bbb565b341561043f57600080fd5b610453600160a060020a0360043516610bcd565b005b341561046057600080fd5b6101e1610c0a565b341561047357600080fd5b6102ad600160a060020a0360043581169060243516610c75565b341561049857600080fd5b6104a3600435610c92565b6040519485529215156020850152600160a060020a039091166040808501919091526060840191909152608083019190915260a0909101905180910390f35b34156104ed57600080fd5b610504600160a060020a0360043516602435610e5f565b6040519586529315156020860152911515604080860191909152600160a060020a039091166060850152608084019190915260a083019190915260c0909101905180910390f35b341561055657600080fd5b6102ad600160a060020a0360043516610ec1565b341561057557600080fd5b610453600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050843594602081013594506040810135935060608101359250608001359050610edc565b34156105dc57600080fd5b61027a600160a060020a0360043516602435611428565b34156105fe57600080fd5b610304611518565b341561061157600080fd5b610304600435611527565b341561062757600080fd5b6101e1611542565b341561063a57600080fd5b6102ad6004356115ad565b341561065057600080fd5b6102ad600160a060020a03600435166116b2565b341561066f57600080fd5b61027a61172e565b341561068257600080fd5b61027a600160a060020a036004351660243561175b565b34156106a457600080fd5b61027a60043561186c565b34156106ba57600080fd5b61027a600160a060020a0360043516602435611b01565b34156106dc57600080fd5b61027a611b52565b34156106ef57600080fd5b6102ad611b5b565b341561070257600080fd5b6102ad600435611b61565b341561071857600080fd5b6102ad600160a060020a0360043581169060243516611ba7565b341561073d57600080fd5b6103c2600160a060020a0360043516611bd2565b341561075c57600080fd5b6102ad611d05565b341561076f57600080fd5b610453600160a060020a0360043516611d0b565b341561078e57600080fd5b61027a611d48565b34156107a157600080fd5b610453600435611d78565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108425780601f1061081757610100808354040283529160200191610842565b820191906000526020600020905b81548152906001019060200180831161082557829003601f168201915b505050505081565b600a5460009060ff161561085d57600080fd5b600160a060020a033381166000818152600d6020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600c6020526000908152604090205481565b60025481565b60116020526000908152604090205481565b600154600160a060020a031681565b600a5460009060ff161561091357600080fd5b600160a060020a0384166000908152600b6020526040902054829010806109525750600160a060020a0384166000908152600c60205260409020548290105b1561095c57600080fd5b600160a060020a0383166000908152600b6020526040902054828101101561098357600080fd5b600160a060020a038085166000908152600d6020908152604080832033909416835292905220548211156109b657600080fd5b600160a060020a038084166000818152600b6020908152604080832080548801905588851680845281842080548990039055600c835281842080548990039055848452818420805489019055808452600d83528184203390961684529490915290819020805486900390559091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600b6020526000908152604090205481565b60095481565b60065460ff1681565b610a8a612201565b60005b600160a060020a038316600090815260116020526040902054811015610b6157600160a060020a0383166000908152601060205260409020805482908110610ad157fe5b60009182526020909120600160049092020181015460ff1615151415610b59576013805460018101610b038382612213565b916000526020600020900160006010600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515610b4257fe5b600091825260209091206004909102015490915550505b600101610a8d565b6013805480602002602001604051908101604052809291908181526020018280548015610bad57602002820191906000526020600020905b815481526020019060010190808311610b99575b505050505091505b50919050565b60146020526000908152604090205481565b60005433600160a060020a03908116911614610be857600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108425780601f1061081757610100808354040283529160200191610842565b600d60209081526000928352604080842090915290825290205481565b600080808080805b600160a060020a033316600090815260116020526040902054811015610e5557600160a060020a0333166000908152601060205260409020805488919083908110610ce157fe5b9060005260206000209060040201600001541415610e4d57600160a060020a0333166000908152601060205260409020805482908110610d1d57fe5b60009182526020808320600490920290910154600160a060020a033316835260109091526040909120805483908110610d5257fe5b6000918252602080832060016004909302019190910154600160a060020a033316835260109091526040909120805460ff9092169184908110610d9157fe5b906000526020600020906004020160010160029054906101000a9004600160a060020a03166010600033600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515610de857fe5b9060005260206000209060040201600201546010600033600160a060020a0316600160a060020a0316815260200190815260200160002085815481101515610e2c57fe5b90600052602060002090600402016003015495509550955095509550610e55565b600101610c9a565b5091939590929450565b601060205281600052604060002081815481101515610e7a57fe5b6000918252602090912060049091020180546001820154600283015460039093015491945060ff80821694506101008204169262010000909104600160a060020a03169186565b600160a060020a03166000908152600b602052604090205490565b600080610ee761223c565b60009250828089158015610efd57506000600754115b15610f0b578a519950600194505b84158015610f315750600160a060020a0333166000908152600c60205260409020548a90105b80610f3c57508a518a105b15610f4657600080fd5b600e80546000908152600f60205260408082208c9055825482528082206002018b90558254825280822042600390910155825482528082206006018054600160a060020a03191633600160a060020a031617905591548152206007018b8051610fb3929160200190612271565b5086156110835760008781526008602052604080822054600160a060020a0316955085916323b872dd91339130918b9190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561103857600080fd5b6102c65a03f1151561104957600080fd5b50505060405180519050151561105e57600080fd5b600e80546000908152600f60205260408082206004018a905591548152206005018690555b5050600e548152600060208201819052600160a060020a033316606083015242608083015260a082018990528315156040830152805b8a5182101561131657600e54601460008d85815181106110d557fe5b90602001906020020151600160a060020a0316600160a060020a031681526020019081526020016000205414156111355760019091019061112e6111218c518c9063ffffffff61219e16565b829063ffffffff6121b516565b90506110b9565b600e54601460008d858151811061114857fe5b90602001906020020151600160a060020a0316600160a060020a0316815260200190815260200160002081905550601060008c848151811061118657fe5b90602001906020020151600160a060020a0316815260208101919091526040016000208054600181016111b983826122d8565b6000928352602090922085916004020181518155602082015160018201805460ff191691151591909117905560408201516001820180549115156101000261ff001990921691909117905560608201518160010160026101000a815481600160a060020a030219169083600160a060020a031602179055506080820151816002015560a08201518160030155505050601160008c848151811061125857fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460010190556112d76112978c518c9063ffffffff61219e16565b600b60008e86815181106112a757fe5b90602001906020020151600160a060020a031681526020810191909152604001600020549063ffffffff6121b516565b600b60008d85815181106112e757fe5b90602001906020020151600160a060020a031681526020810191909152604001600020556001909101906110b9565b84156113465761133e61132f8b8363ffffffff6121cb16565b6007549063ffffffff6121cb16565b6007556113e9565b61137e6113598b8363ffffffff6121cb16565b600160a060020a0333166000908152600c60205260409020549063ffffffff6121cb16565b600160a060020a0333166000908152600c60205260409020556113cf6113aa8b8363ffffffff6121cb16565b600160a060020a0333166000908152600b60205260409020549063ffffffff6121cb16565b600160a060020a0333166000908152600b60205260409020555b6113f98a8263ffffffff6121cb16565b600e80546000908152600f60205260409020600190810192909255805490910190555050505050505050505050565b6000805433600160a060020a03908116911614801590611457575060015433600160a060020a03908116911614155b1561146157600080fd5b600954600254611477908463ffffffff6121b516565b1115611482576108c1565b600160a060020a0383166000908152600b60205260409020546114ab908363ffffffff6121b516565b600160a060020a0384166000908152600b6020908152604080832093909355600c905220546114e0908363ffffffff6121b516565b600160a060020a0384166000908152600c602052604090205560025461150c908363ffffffff6121b516565b60025550600192915050565b600054600160a060020a031681565b600860205260009081526040902054600160a060020a031681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108425780601f1061081757610100808354040283529160200191610842565b6115b561223c565b60005b600160a060020a033316600090815260106020526040902054811015610bb557600160a060020a03331660009081526010602052604090208054849190839081106115ff57fe5b90600052602060002090600402016000015414156116aa57600160a060020a033316600090815260106020526040902080548290811061163b57fe5b906000526020600020906004020160c0604051908101604090815282548252600183015460ff80821615156020850152610100820416151591830191909152620100009004600160a060020a031660608201526002820154608082015260039091015460a08201529150610bb5565b6001016115b8565b600080805b600160a060020a03841660009081526011602052604090205481101561172757600160a060020a03841660009081526010602052604090208054829081106116fb57fe5b600091825260209091206001600490920201015460ff16151561171f576001909101905b6001016116b7565b5092915050565b6000805433600160a060020a0390811691161461174a57600080fd5b50600a805460ff1916905560015b90565b600a5460009060ff161561176e57600080fd5b600160a060020a0333166000908152600b6020526040902054829010806117ad5750600160a060020a0333166000908152600c60205260409020548290105b156117b757600080fd5b600160a060020a0383166000908152600b602052604090205482810110156117de57600080fd5b600160a060020a033381166000818152600b6020908152604080832080548890039055938716808352848320805488019055838352600c9091528382208054879003905580825290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b600061187661223c565b600080611882856115ad565b925082602001518061189657508260a00151155b156118a057600080fd5b6000858152600f6020526040902060040154158015906118cf57506000858152600f6020526040812060050154115b15611994576000858152600f60208181526040808420600481015485526008835290842054938990529190526007810154600590910154600160a060020a039092169350839163a9059cbb91339161192c9163ffffffff61219e16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561197857600080fd5b6102c65a03f1151561198957600080fd5b505050604051805150505b5060005b600160a060020a033316600090815260106020526040902054811015611a4a57600160a060020a03331660009081526010602052604090208054869190839081106119df57fe5b9060005260206000209060040201600001541415611a4257600160a060020a033316600090815260106020526040902080546001919083908110611a1f57fe5b60009182526020909120600490910201600101805460ff19169115159190911790555b600101611998565b6000858152600f60205260409020600801805460018101611a6b8382612213565b5060009182526020808320919091018054600160a060020a03191633600160a060020a0316179055868252600f905260409020600781015460019190910154611add91611ab8919061219e565b600160a060020a0333166000908152600c60205260409020549063ffffffff6121b516565b33600160a060020a03166000908152600c6020526040902055506001949350505050565b60008054819033600160a060020a03908116911614611b1f57600080fd5b505060008181526008602052604090208054600160a060020a038416600160a060020a0319909116179055600192915050565b600a5460ff1681565b600e5481565b6000611b6b61223c565b611b74836115ad565b905080602001511580611b8957508060a00151155b15611b9357600080fd5b50506000908152600f602052604090205490565b600160a060020a039182166000908152600d6020908152604080832093909416825291909152205490565b611bda612201565b60005b600160a060020a038316600090815260116020526040902054811015611cae57600160a060020a0383166000908152601060205260409020805482908110611c2157fe5b600091825260209091206001600490920201015460ff161515611ca6576012805460018101611c508382612213565b916000526020600020900160006010600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515611c8f57fe5b600091825260209091206004909102015490915550505b600101611bdd565b6012805480602002602001604051908101604052809291908181526020018280548015610bad5760200282019190600052602060002090815481526020019060010190808311610b99575050505050915050919050565b60075481565b60005433600160a060020a03908116911614611d2657600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b6000805433600160a060020a03908116911614611d6457600080fd5b50600a805460ff1916600190811790915590565b6000818152600f60205260408120600201548190819081908190429010611d9e57600080fd5b6000868152600f60205260408120600501541115611eaa576000868152600f6020818152604080842060048101548552600880845291852054948b905292909152600682015460078301549190920154600160a060020a039384169850889363a9059cbb931691611e4291611e3690611e189083906121cb565b60008d8152600f60205260409020600501549063ffffffff6121dd16565b9063ffffffff61219e16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611e8e57600080fd5b6102c65a03f11515611e9f57600080fd5b505050604051805150505b600093505b6000868152600f6020526040902060070154841015612196576000868152600f60205260409020600701805485908110611ee557fe5b6000918252602082200154600160a060020a0316935091505b600160a060020a03831660009081526010602052604090205482101561218b57600160a060020a0383166000908152601060205260409020805487919084908110611f4557fe5b906000526020600020906004020160000154141561218057600160a060020a0383166000908152601060205260409020805483908110611f8157fe5b600091825260209091206001600490920201015460ff16151561217b57600160a060020a0383166000908152601060205260408120805484908110611fc257fe5b6000918252602080832060036004909302019190910192909255600160a060020a0385168152601090915260408120805484908110611ffd57fe5b6000918252602080832060026004909302019190910192909255878152600f90915260409020600781015460019091015461203d9163ffffffff61219e16565b600160a060020a03841660009081526011602090815260408083208054600019019055600b90915290205490915061207b908263ffffffff6121cb16565b600160a060020a0384166000908152600b602090815260408083209390935560109052208054839081106120ab57fe5b906000526020600020906004020160010160019054906101000a900460ff16151561217b576000868152600f6020908152604080832060060154600160a060020a03168352600c909152902054612108908263ffffffff6121b516565b6000878152600f602090815260408083206006018054600160a060020a039081168552600c845282852095909555549093168252600b90522054612152908263ffffffff6121b516565b6000878152600f6020908152604080832060060154600160a060020a03168352600b9091529020555b61218b565b816001019150611efe565b600190930192611eaf565b505050505050565b60008082848115156121ac57fe5b04949350505050565b6000828201838110156121c457fe5b9392505050565b6000828211156121d757fe5b50900390565b60008282028315806121f957508284828115156121f657fe5b04145b15156121c457fe5b60206040519081016040526000815290565b81548183558181151161223757600083815260209020612237918101908301612304565b505050565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b8280548282559060005260206000209081019282156122c8579160200282015b828111156122c85782518254600160a060020a031916600160a060020a039190911617825560209290920191600190910190612291565b506122d492915061231e565b5090565b815481835581811511612237576004028160040283600052602060002091820191016122379190612342565b61175891905b808211156122d4576000815560010161230a565b61175891905b808211156122d4578054600160a060020a0319168155600101612324565b61175891905b808211156122d457600080825560018201805475ffffffffffffffffffffffffffffffffffffffffffff191690556002820181905560038201556004016123485600a165627a7a7230582016f7344a8bf7ae22a1eaea3265290161c620e795707d63c82712c65863d5b6d30029
Deployed Bytecode
0x6060604052600436106101be5763ffffffff60e060020a60003504166306fdde0381146101ce578063095ea7b3146102585780630a1ceb0e1461028e57806318160ddd146102bf57806319a2bfd8146102d25780631d143848146102f157806323b872dd1461032057806327e235e3146103485780632ab4d05214610367578063313ce5671461037a57806334c7b8e8146103a35780634d3a2f101461041557806355cc4e57146104345780635a3b7e42146104555780635c6581651461046857806364ab374b1461048d5780636f1cecd8146104e257806370a082311461054b57806378a71d781461056a578063867904b4146105d15780638da5cb5b146105f3578063904194a31461060657806395d89b411461061c578063995b2e2c1461062f578063a63e10fa14610645578063a69df4b514610664578063a9059cbb14610677578063acc79f7414610699578063c0c1eebc146106af578063cf309012146106d1578063d91f68a2146106e4578063dcc53305146106f7578063dd62ed3e1461070d578063e45ceec114610732578063ecd2718914610751578063f2fde38b14610764578063f83d08ba14610783578063fed8f40f14610796575b34156101c957600080fd5b600080fd5b34156101d957600080fd5b6101e16107ac565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561021d578082015183820152602001610205565b50505050905090810190601f16801561024a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026357600080fd5b61027a600160a060020a036004351660243561084a565b604051901515815260200160405180910390f35b341561029957600080fd5b6102ad600160a060020a03600435166108c7565b60405190815260200160405180910390f35b34156102ca57600080fd5b6102ad6108d9565b34156102dd57600080fd5b6102ad600160a060020a03600435166108df565b34156102fc57600080fd5b6103046108f1565b604051600160a060020a03909116815260200160405180910390f35b341561032b57600080fd5b61027a600160a060020a0360043581169060243516604435610900565b341561035357600080fd5b6102ad600160a060020a0360043516610a61565b341561037257600080fd5b6102ad610a73565b341561038557600080fd5b61038d610a79565b60405160ff909116815260200160405180910390f35b34156103ae57600080fd5b6103c2600160a060020a0360043516610a82565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104015780820151838201526020016103e9565b505050509050019250505060405180910390f35b341561042057600080fd5b6102ad600160a060020a0360043516610bbb565b341561043f57600080fd5b610453600160a060020a0360043516610bcd565b005b341561046057600080fd5b6101e1610c0a565b341561047357600080fd5b6102ad600160a060020a0360043581169060243516610c75565b341561049857600080fd5b6104a3600435610c92565b6040519485529215156020850152600160a060020a039091166040808501919091526060840191909152608083019190915260a0909101905180910390f35b34156104ed57600080fd5b610504600160a060020a0360043516602435610e5f565b6040519586529315156020860152911515604080860191909152600160a060020a039091166060850152608084019190915260a083019190915260c0909101905180910390f35b341561055657600080fd5b6102ad600160a060020a0360043516610ec1565b341561057557600080fd5b610453600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050843594602081013594506040810135935060608101359250608001359050610edc565b34156105dc57600080fd5b61027a600160a060020a0360043516602435611428565b34156105fe57600080fd5b610304611518565b341561061157600080fd5b610304600435611527565b341561062757600080fd5b6101e1611542565b341561063a57600080fd5b6102ad6004356115ad565b341561065057600080fd5b6102ad600160a060020a03600435166116b2565b341561066f57600080fd5b61027a61172e565b341561068257600080fd5b61027a600160a060020a036004351660243561175b565b34156106a457600080fd5b61027a60043561186c565b34156106ba57600080fd5b61027a600160a060020a0360043516602435611b01565b34156106dc57600080fd5b61027a611b52565b34156106ef57600080fd5b6102ad611b5b565b341561070257600080fd5b6102ad600435611b61565b341561071857600080fd5b6102ad600160a060020a0360043581169060243516611ba7565b341561073d57600080fd5b6103c2600160a060020a0360043516611bd2565b341561075c57600080fd5b6102ad611d05565b341561076f57600080fd5b610453600160a060020a0360043516611d0b565b341561078e57600080fd5b61027a611d48565b34156107a157600080fd5b610453600435611d78565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108425780601f1061081757610100808354040283529160200191610842565b820191906000526020600020905b81548152906001019060200180831161082557829003601f168201915b505050505081565b600a5460009060ff161561085d57600080fd5b600160a060020a033381166000818152600d6020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600c6020526000908152604090205481565b60025481565b60116020526000908152604090205481565b600154600160a060020a031681565b600a5460009060ff161561091357600080fd5b600160a060020a0384166000908152600b6020526040902054829010806109525750600160a060020a0384166000908152600c60205260409020548290105b1561095c57600080fd5b600160a060020a0383166000908152600b6020526040902054828101101561098357600080fd5b600160a060020a038085166000908152600d6020908152604080832033909416835292905220548211156109b657600080fd5b600160a060020a038084166000818152600b6020908152604080832080548801905588851680845281842080548990039055600c835281842080548990039055848452818420805489019055808452600d83528184203390961684529490915290819020805486900390559091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600b6020526000908152604090205481565b60095481565b60065460ff1681565b610a8a612201565b60005b600160a060020a038316600090815260116020526040902054811015610b6157600160a060020a0383166000908152601060205260409020805482908110610ad157fe5b60009182526020909120600160049092020181015460ff1615151415610b59576013805460018101610b038382612213565b916000526020600020900160006010600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515610b4257fe5b600091825260209091206004909102015490915550505b600101610a8d565b6013805480602002602001604051908101604052809291908181526020018280548015610bad57602002820191906000526020600020905b815481526020019060010190808311610b99575b505050505091505b50919050565b60146020526000908152604090205481565b60005433600160a060020a03908116911614610be857600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108425780601f1061081757610100808354040283529160200191610842565b600d60209081526000928352604080842090915290825290205481565b600080808080805b600160a060020a033316600090815260116020526040902054811015610e5557600160a060020a0333166000908152601060205260409020805488919083908110610ce157fe5b9060005260206000209060040201600001541415610e4d57600160a060020a0333166000908152601060205260409020805482908110610d1d57fe5b60009182526020808320600490920290910154600160a060020a033316835260109091526040909120805483908110610d5257fe5b6000918252602080832060016004909302019190910154600160a060020a033316835260109091526040909120805460ff9092169184908110610d9157fe5b906000526020600020906004020160010160029054906101000a9004600160a060020a03166010600033600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515610de857fe5b9060005260206000209060040201600201546010600033600160a060020a0316600160a060020a0316815260200190815260200160002085815481101515610e2c57fe5b90600052602060002090600402016003015495509550955095509550610e55565b600101610c9a565b5091939590929450565b601060205281600052604060002081815481101515610e7a57fe5b6000918252602090912060049091020180546001820154600283015460039093015491945060ff80821694506101008204169262010000909104600160a060020a03169186565b600160a060020a03166000908152600b602052604090205490565b600080610ee761223c565b60009250828089158015610efd57506000600754115b15610f0b578a519950600194505b84158015610f315750600160a060020a0333166000908152600c60205260409020548a90105b80610f3c57508a518a105b15610f4657600080fd5b600e80546000908152600f60205260408082208c9055825482528082206002018b90558254825280822042600390910155825482528082206006018054600160a060020a03191633600160a060020a031617905591548152206007018b8051610fb3929160200190612271565b5086156110835760008781526008602052604080822054600160a060020a0316955085916323b872dd91339130918b9190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561103857600080fd5b6102c65a03f1151561104957600080fd5b50505060405180519050151561105e57600080fd5b600e80546000908152600f60205260408082206004018a905591548152206005018690555b5050600e548152600060208201819052600160a060020a033316606083015242608083015260a082018990528315156040830152805b8a5182101561131657600e54601460008d85815181106110d557fe5b90602001906020020151600160a060020a0316600160a060020a031681526020019081526020016000205414156111355760019091019061112e6111218c518c9063ffffffff61219e16565b829063ffffffff6121b516565b90506110b9565b600e54601460008d858151811061114857fe5b90602001906020020151600160a060020a0316600160a060020a0316815260200190815260200160002081905550601060008c848151811061118657fe5b90602001906020020151600160a060020a0316815260208101919091526040016000208054600181016111b983826122d8565b6000928352602090922085916004020181518155602082015160018201805460ff191691151591909117905560408201516001820180549115156101000261ff001990921691909117905560608201518160010160026101000a815481600160a060020a030219169083600160a060020a031602179055506080820151816002015560a08201518160030155505050601160008c848151811061125857fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460010190556112d76112978c518c9063ffffffff61219e16565b600b60008e86815181106112a757fe5b90602001906020020151600160a060020a031681526020810191909152604001600020549063ffffffff6121b516565b600b60008d85815181106112e757fe5b90602001906020020151600160a060020a031681526020810191909152604001600020556001909101906110b9565b84156113465761133e61132f8b8363ffffffff6121cb16565b6007549063ffffffff6121cb16565b6007556113e9565b61137e6113598b8363ffffffff6121cb16565b600160a060020a0333166000908152600c60205260409020549063ffffffff6121cb16565b600160a060020a0333166000908152600c60205260409020556113cf6113aa8b8363ffffffff6121cb16565b600160a060020a0333166000908152600b60205260409020549063ffffffff6121cb16565b600160a060020a0333166000908152600b60205260409020555b6113f98a8263ffffffff6121cb16565b600e80546000908152600f60205260409020600190810192909255805490910190555050505050505050505050565b6000805433600160a060020a03908116911614801590611457575060015433600160a060020a03908116911614155b1561146157600080fd5b600954600254611477908463ffffffff6121b516565b1115611482576108c1565b600160a060020a0383166000908152600b60205260409020546114ab908363ffffffff6121b516565b600160a060020a0384166000908152600b6020908152604080832093909355600c905220546114e0908363ffffffff6121b516565b600160a060020a0384166000908152600c602052604090205560025461150c908363ffffffff6121b516565b60025550600192915050565b600054600160a060020a031681565b600860205260009081526040902054600160a060020a031681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108425780601f1061081757610100808354040283529160200191610842565b6115b561223c565b60005b600160a060020a033316600090815260106020526040902054811015610bb557600160a060020a03331660009081526010602052604090208054849190839081106115ff57fe5b90600052602060002090600402016000015414156116aa57600160a060020a033316600090815260106020526040902080548290811061163b57fe5b906000526020600020906004020160c0604051908101604090815282548252600183015460ff80821615156020850152610100820416151591830191909152620100009004600160a060020a031660608201526002820154608082015260039091015460a08201529150610bb5565b6001016115b8565b600080805b600160a060020a03841660009081526011602052604090205481101561172757600160a060020a03841660009081526010602052604090208054829081106116fb57fe5b600091825260209091206001600490920201015460ff16151561171f576001909101905b6001016116b7565b5092915050565b6000805433600160a060020a0390811691161461174a57600080fd5b50600a805460ff1916905560015b90565b600a5460009060ff161561176e57600080fd5b600160a060020a0333166000908152600b6020526040902054829010806117ad5750600160a060020a0333166000908152600c60205260409020548290105b156117b757600080fd5b600160a060020a0383166000908152600b602052604090205482810110156117de57600080fd5b600160a060020a033381166000818152600b6020908152604080832080548890039055938716808352848320805488019055838352600c9091528382208054879003905580825290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b600061187661223c565b600080611882856115ad565b925082602001518061189657508260a00151155b156118a057600080fd5b6000858152600f6020526040902060040154158015906118cf57506000858152600f6020526040812060050154115b15611994576000858152600f60208181526040808420600481015485526008835290842054938990529190526007810154600590910154600160a060020a039092169350839163a9059cbb91339161192c9163ffffffff61219e16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561197857600080fd5b6102c65a03f1151561198957600080fd5b505050604051805150505b5060005b600160a060020a033316600090815260106020526040902054811015611a4a57600160a060020a03331660009081526010602052604090208054869190839081106119df57fe5b9060005260206000209060040201600001541415611a4257600160a060020a033316600090815260106020526040902080546001919083908110611a1f57fe5b60009182526020909120600490910201600101805460ff19169115159190911790555b600101611998565b6000858152600f60205260409020600801805460018101611a6b8382612213565b5060009182526020808320919091018054600160a060020a03191633600160a060020a0316179055868252600f905260409020600781015460019190910154611add91611ab8919061219e565b600160a060020a0333166000908152600c60205260409020549063ffffffff6121b516565b33600160a060020a03166000908152600c6020526040902055506001949350505050565b60008054819033600160a060020a03908116911614611b1f57600080fd5b505060008181526008602052604090208054600160a060020a038416600160a060020a0319909116179055600192915050565b600a5460ff1681565b600e5481565b6000611b6b61223c565b611b74836115ad565b905080602001511580611b8957508060a00151155b15611b9357600080fd5b50506000908152600f602052604090205490565b600160a060020a039182166000908152600d6020908152604080832093909416825291909152205490565b611bda612201565b60005b600160a060020a038316600090815260116020526040902054811015611cae57600160a060020a0383166000908152601060205260409020805482908110611c2157fe5b600091825260209091206001600490920201015460ff161515611ca6576012805460018101611c508382612213565b916000526020600020900160006010600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515611c8f57fe5b600091825260209091206004909102015490915550505b600101611bdd565b6012805480602002602001604051908101604052809291908181526020018280548015610bad5760200282019190600052602060002090815481526020019060010190808311610b99575050505050915050919050565b60075481565b60005433600160a060020a03908116911614611d2657600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b6000805433600160a060020a03908116911614611d6457600080fd5b50600a805460ff1916600190811790915590565b6000818152600f60205260408120600201548190819081908190429010611d9e57600080fd5b6000868152600f60205260408120600501541115611eaa576000868152600f6020818152604080842060048101548552600880845291852054948b905292909152600682015460078301549190920154600160a060020a039384169850889363a9059cbb931691611e4291611e3690611e189083906121cb565b60008d8152600f60205260409020600501549063ffffffff6121dd16565b9063ffffffff61219e16565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611e8e57600080fd5b6102c65a03f11515611e9f57600080fd5b505050604051805150505b600093505b6000868152600f6020526040902060070154841015612196576000868152600f60205260409020600701805485908110611ee557fe5b6000918252602082200154600160a060020a0316935091505b600160a060020a03831660009081526010602052604090205482101561218b57600160a060020a0383166000908152601060205260409020805487919084908110611f4557fe5b906000526020600020906004020160000154141561218057600160a060020a0383166000908152601060205260409020805483908110611f8157fe5b600091825260209091206001600490920201015460ff16151561217b57600160a060020a0383166000908152601060205260408120805484908110611fc257fe5b6000918252602080832060036004909302019190910192909255600160a060020a0385168152601090915260408120805484908110611ffd57fe5b6000918252602080832060026004909302019190910192909255878152600f90915260409020600781015460019091015461203d9163ffffffff61219e16565b600160a060020a03841660009081526011602090815260408083208054600019019055600b90915290205490915061207b908263ffffffff6121cb16565b600160a060020a0384166000908152600b602090815260408083209390935560109052208054839081106120ab57fe5b906000526020600020906004020160010160019054906101000a900460ff16151561217b576000868152600f6020908152604080832060060154600160a060020a03168352600c909152902054612108908263ffffffff6121b516565b6000878152600f602090815260408083206006018054600160a060020a039081168552600c845282852095909555549093168252600b90522054612152908263ffffffff6121b516565b6000878152600f6020908152604080832060060154600160a060020a03168352600b9091529020555b61218b565b816001019150611efe565b600190930192611eaf565b505050505050565b60008082848115156121ac57fe5b04949350505050565b6000828201838110156121c457fe5b9392505050565b6000828211156121d757fe5b50900390565b60008282028315806121f957508284828115156121f657fe5b04145b15156121c457fe5b60206040519081016040526000815290565b81548183558181151161223757600083815260209020612237918101908301612304565b505050565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b8280548282559060005260206000209081019282156122c8579160200282015b828111156122c85782518254600160a060020a031916600160a060020a039190911617825560209290920191600190910190612291565b506122d492915061231e565b5090565b815481835581811511612237576004028160040283600052602060002091820191016122379190612342565b61175891905b808211156122d4576000815560010161230a565b61175891905b808211156122d4578054600160a060020a0319168155600101612324565b61175891905b808211156122d457600080825560018201805475ffffffffffffffffffffffffffffffffffffffffffff191690556002820181905560038201556004016123485600a165627a7a7230582016f7344a8bf7ae22a1eaea3265290161c620e795707d63c82712c65863d5b6d30029
Swarm Source
bzzr://16f7344a8bf7ae22a1eaea3265290161c620e795707d63c82712c65863d5b6d3
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.