More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,691 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Purchase | 15400606 | 861 days ago | IN | 0.00443213 ETH | 0.00061429 | ||||
Purchase | 15400545 | 861 days ago | IN | 0.00443213 ETH | 0.00125962 | ||||
Set Emoji Msg | 6727227 | 2235 days ago | IN | 0 ETH | 0.00013826 | ||||
Set Emoji Msg | 6671588 | 2245 days ago | IN | 0 ETH | 0.00036592 | ||||
Set Emoji Msg | 6671584 | 2245 days ago | IN | 0 ETH | 0.00037708 | ||||
Set Emoji Msg | 6671574 | 2245 days ago | IN | 0 ETH | 0.00037429 | ||||
Set Emoji Msg | 6671570 | 2245 days ago | IN | 0 ETH | 0.00039104 | ||||
Set Emoji Msg | 6671568 | 2245 days ago | IN | 0 ETH | 0.00037429 | ||||
Set Emoji Msg | 6671561 | 2245 days ago | IN | 0 ETH | 0.00029747 | ||||
Purchase | 6667291 | 2245 days ago | IN | 0.00210526 ETH | 0.0011667 | ||||
Purchase | 6667278 | 2245 days ago | IN | 0.00443213 ETH | 0.0011667 | ||||
Purchase | 6667265 | 2245 days ago | IN | 0.00443213 ETH | 0.00105003 | ||||
Purchase | 6667252 | 2245 days ago | IN | 0.00210526 ETH | 0.00118503 | ||||
Purchase | 6667237 | 2245 days ago | IN | 0.00210526 ETH | 0.00092169 | ||||
Purchase | 6557258 | 2263 days ago | IN | 0.0093308 ETH | 0.00070002 | ||||
Purchase | 6557251 | 2263 days ago | IN | 0.00443213 ETH | 0.00079002 | ||||
Create Emoji Sto... | 6534583 | 2267 days ago | IN | 0 ETH | 0.0005184 | ||||
Purchase | 6515074 | 2270 days ago | IN | 0.0093308 ETH | 0.00046668 | ||||
Purchase | 6515074 | 2270 days ago | IN | 0.00886426 ETH | 0.0002038 | ||||
Purchase | 6515062 | 2270 days ago | IN | 0.00443213 ETH | 0.00045467 | ||||
Create Emoji Sto... | 6495159 | 2273 days ago | IN | 0 ETH | 0.0005184 | ||||
Set Emoji Msg | 5646927 | 2417 days ago | IN | 0 ETH | 0.00044992 | ||||
Purchase | 5646894 | 2417 days ago | IN | 0.00443213 ETH | 0.00118503 | ||||
Purchase | 5636271 | 2419 days ago | IN | 0.0196438 ETH | 0.00234506 | ||||
Purchase | 5636264 | 2419 days ago | IN | 0.08706394 ETH | 0.00234832 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15400606 | 861 days ago | 0.00421052 ETH | ||||
15400545 | 861 days ago | 0.00421052 ETH | ||||
6667291 | 2245 days ago | 0.00199999 ETH | ||||
6667278 | 2245 days ago | 0.00421052 ETH | ||||
6667265 | 2245 days ago | 0.00421052 ETH | ||||
6667252 | 2245 days ago | 0.00199999 ETH | ||||
6667237 | 2245 days ago | 0.00199999 ETH | ||||
6557258 | 2263 days ago | 0.00886426 ETH | ||||
6557251 | 2263 days ago | 0.00421052 ETH | ||||
6515074 | 2270 days ago | 0.00886426 ETH | ||||
6515074 | 2270 days ago | 0.00842105 ETH | ||||
6515062 | 2270 days ago | 0.00421052 ETH | ||||
5646894 | 2417 days ago | 0.00421052 ETH | ||||
5636271 | 2419 days ago | 0.01866161 ETH | ||||
5636264 | 2419 days ago | 0.08271074 ETH | ||||
5636261 | 2419 days ago | 0.01866161 ETH | ||||
5504222 | 2442 days ago | 1.88321904 ETH | ||||
5244114 | 2486 days ago | 0.79584574 ETH | ||||
5224564 | 2489 days ago | 0.00199999 ETH | ||||
5208816 | 2492 days ago | 0.00199999 ETH | ||||
5208816 | 2492 days ago | 0.00421052 ETH | ||||
5207029 | 2492 days ago | 0.00421052 ETH | ||||
5206957 | 2492 days ago | 0.00421052 ETH | ||||
5206155 | 2493 days ago | 0.00199999 ETH | ||||
5206154 | 2493 days ago | 0.00199999 ETH |
Loading...
Loading
Contract Name:
EmojiToken
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-02-17 */ pragma solidity ^0.4.18; /* * @title String & slice utility library for Solidity contracts. * @author Nick Johnson <[email protected]> * * @dev Functionality in this library is largely implemented using an * abstraction called a 'slice'. A slice represents a part of a string - * anything from the entire string to a single character, or even no * characters at all (a 0-length slice). Since a slice only has to specify * an offset and a length, copying and manipulating slices is a lot less * expensive than copying and manipulating the strings they reference. * * To further reduce gas costs, most functions on slice that need to return * a slice modify the original one instead of allocating a new one; for * instance, `s.split(".")` will return the text up to the first '.', * modifying s to only contain the remainder of the string after the '.'. * In situations where you do not want to modify the original slice, you * can make a copy first with `.copy()`, for example: * `s.copy().split(".")`. Try and avoid using this idiom in loops; since * Solidity has no memory management, it will result in allocating many * short-lived slices that are later discarded. * * Functions that return two slices come in two versions: a non-allocating * version that takes the second slice as an argument, modifying it in * place, and an allocating version that allocates and returns the second * slice; see `nextRune` for example. * * Functions that have to copy string data will return strings rather than * slices; these can be cast back to slices for further processing if * required. * * For convenience, some functions are provided with non-modifying * variants that create a new slice and return both; for instance, * `s.splitNew('.')` leaves s unmodified, and returns two values * corresponding to the left and right parts of the string. */ library strings { struct slice { uint _len; uint _ptr; } function memcpy(uint dest, uint src, uint len) private { // Copy word-length chunks while possible for(; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Returns a slice containing the entire string. * @param self The string to make a slice from. * @return A newly allocated slice containing the entire string. */ function toSlice(string self) internal returns (slice) { uint ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } /* * @dev Returns the length of a null-terminated bytes32 string. * @param self The value to find the length of. * @return The length of the string, from 0 to 32. */ function len(bytes32 self) internal returns (uint) { uint ret; if (self == 0) return 0; if (self & 0xffffffffffffffffffffffffffffffff == 0) { ret += 16; self = bytes32(uint(self) / 0x100000000000000000000000000000000); } if (self & 0xffffffffffffffff == 0) { ret += 8; self = bytes32(uint(self) / 0x10000000000000000); } if (self & 0xffffffff == 0) { ret += 4; self = bytes32(uint(self) / 0x100000000); } if (self & 0xffff == 0) { ret += 2; self = bytes32(uint(self) / 0x10000); } if (self & 0xff == 0) { ret += 1; } return 32 - ret; } /* * @dev Returns a slice containing the entire bytes32, interpreted as a * null-termintaed utf-8 string. * @param self The bytes32 value to convert to a slice. * @return A new slice containing the value of the input argument up to the * first null. */ function toSliceB32(bytes32 self) internal returns (slice ret) { // Allocate space for `self` in memory, copy it there, and point ret at it assembly { let ptr := mload(0x40) mstore(0x40, add(ptr, 0x20)) mstore(ptr, self) mstore(add(ret, 0x20), ptr) } ret._len = len(self); } /* * @dev Returns a new slice containing the same data as the current slice. * @param self The slice to copy. * @return A new slice containing the same data as `self`. */ function copy(slice self) internal returns (slice) { return slice(self._len, self._ptr); } /* * @dev Copies a slice to a new string. * @param self The slice to copy. * @return A newly allocated string containing the slice's text. */ function toString(slice self) internal returns (string) { var ret = new string(self._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); return ret; } /* * @dev Returns the length in runes of the slice. Note that this operation * takes time proportional to the length of the slice; avoid using it * in loops, and call `slice.empty()` if you only need to know whether * the slice is empty or not. * @param self The slice to operate on. * @return The length of the slice in runes. */ function len(slice self) internal returns (uint l) { // Starting at ptr-31 means the LSB will be the byte we care about var ptr = self._ptr - 31; var end = ptr + self._len; for (l = 0; ptr < end; l++) { uint8 b; assembly { b := and(mload(ptr), 0xFF) } if (b < 0x80) { ptr += 1; } else if(b < 0xE0) { ptr += 2; } else if(b < 0xF0) { ptr += 3; } else if(b < 0xF8) { ptr += 4; } else if(b < 0xFC) { ptr += 5; } else { ptr += 6; } } } /* * @dev Returns true if the slice is empty (has a length of 0). * @param self The slice to operate on. * @return True if the slice is empty, False otherwise. */ function empty(slice self) internal returns (bool) { return self._len == 0; } /* * @dev Returns a positive number if `other` comes lexicographically after * `self`, a negative number if it comes before, or zero if the * contents of the two slices are equal. Comparison is done per-rune, * on unicode codepoints. * @param self The first slice to compare. * @param other The second slice to compare. * @return The result of the comparison. */ function compare(slice self, slice other) internal returns (int) { uint shortest = self._len; if (other._len < self._len) shortest = other._len; var selfptr = self._ptr; var otherptr = other._ptr; for (uint idx = 0; idx < shortest; idx += 32) { uint a; uint b; assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant bytes and check again uint mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); var diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(self._len) - int(other._len); } /* * @dev Returns true if the two slices contain the same text. * @param self The first slice to compare. * @param self The second slice to compare. * @return True if the slices are equal, false otherwise. */ function equals(slice self, slice other) internal returns (bool) { return compare(self, other) == 0; } /* * @dev Extracts the first rune in the slice into `rune`, advancing the * slice to point to the next rune and returning `self`. * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `rune`. */ function nextRune(slice self, slice rune) internal returns (slice) { rune._ptr = self._ptr; if (self._len == 0) { rune._len = 0; return rune; } uint len; uint b; // Load the first byte of the rune into the LSBs of b assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) } if (b < 0x80) { len = 1; } else if(b < 0xE0) { len = 2; } else if(b < 0xF0) { len = 3; } else { len = 4; } // Check for truncated codepoints if (len > self._len) { rune._len = self._len; self._ptr += self._len; self._len = 0; return rune; } self._ptr += len; self._len -= len; rune._len = len; return rune; } /* * @dev Returns the first rune in the slice, advancing the slice to point * to the next rune. * @param self The slice to operate on. * @return A slice containing only the first rune from `self`. */ function nextRune(slice self) internal returns (slice ret) { nextRune(self, ret); } /* * @dev Returns the number of the first codepoint in the slice. * @param self The slice to operate on. * @return The number of the first codepoint in the slice. */ function ord(slice self) internal returns (uint ret) { if (self._len == 0) { return 0; } uint word; uint length; uint divisor = 2 ** 248; // Load the rune into the MSBs of b assembly { word:= mload(mload(add(self, 32))) } var b = word / divisor; if (b < 0x80) { ret = b; length = 1; } else if(b < 0xE0) { ret = b & 0x1F; length = 2; } else if(b < 0xF0) { ret = b & 0x0F; length = 3; } else { ret = b & 0x07; length = 4; } // Check for truncated codepoints if (length > self._len) { return 0; } for (uint i = 1; i < length; i++) { divisor = divisor / 256; b = (word / divisor) & 0xFF; if (b & 0xC0 != 0x80) { // Invalid UTF-8 sequence return 0; } ret = (ret * 64) | (b & 0x3F); } return ret; } /* * @dev Returns the keccak-256 hash of the slice. * @param self The slice to hash. * @return The hash of the slice. */ function keccak(slice self) internal returns (bytes32 ret) { assembly { ret := keccak256(mload(add(self, 32)), mload(self)) } } /* * @dev Returns true if `self` starts with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function startsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } if (self._ptr == needle._ptr) { return true; } bool equal; assembly { let length := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(keccak256(selfptr, length), keccak256(needleptr, length)) } return equal; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } bool equal = true; if (self._ptr != needle._ptr) { assembly { let length := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, length), sha3(needleptr, length)) } } if (equal) { self._len -= needle._len; self._ptr += needle._len; } return self; } /* * @dev Returns true if the slice ends with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function endsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } var selfptr = self._ptr + self._len - needle._len; if (selfptr == needle._ptr) { return true; } bool equal; assembly { let length := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(keccak256(selfptr, length), keccak256(needleptr, length)) } return equal; } /* * @dev If `self` ends with `needle`, `needle` is removed from the * end of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function until(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } var selfptr = self._ptr + self._len - needle._len; bool equal = true; if (selfptr != needle._ptr) { assembly { let length := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(keccak256(selfptr, length), keccak256(needleptr, length)) } } if (equal) { self._len -= needle._len; } return self; } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 68 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) let end := add(selfptr, sub(selflen, needlelen)) ptr := selfptr loop: jumpi(exit, eq(and(mload(ptr), mask), needledata)) ptr := add(ptr, 1) jumpi(loop, lt(sub(ptr, 1), end)) ptr := add(selfptr, selflen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr; for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } // Returns the memory address of the first byte after the last occurrence of // `needle` in `self`, or the address of `self` if not found. function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 69 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) ptr := add(selfptr, sub(selflen, needlelen)) loop: jumpi(ret, eq(and(mload(ptr), mask), needledata)) ptr := sub(ptr, 1) jumpi(loop, gt(add(ptr, 1), selfptr)) ptr := selfptr jump(exit) ret: ptr := add(ptr, needlelen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr + (selflen - needlelen); while (ptr >= selfptr) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr + needlelen; ptr -= 1; } } } return selfptr; } /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function find(slice self, slice needle) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); self._len -= ptr - self._ptr; self._ptr = ptr; return self; } /* * @dev Modifies `self` to contain the part of the string from the start of * `self` to the end of the first occurrence of `needle`. If `needle` * is not found, `self` is set to the empty slice. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function rfind(slice self, slice needle) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); self._len = ptr - self._ptr; return self; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and `token` to everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function split(slice self, slice needle, slice token) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = self._ptr; token._len = ptr - self._ptr; if (ptr == self._ptr + self._len) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; self._ptr = ptr + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and returning everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` up to the first occurrence of `delim`. */ function split(slice self, slice needle) internal returns (slice token) { split(self, needle, token); } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and `token` to everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function rsplit(slice self, slice needle, slice token) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = ptr; token._len = self._len - (ptr - self._ptr); if (ptr == self._ptr) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and returning everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` after the last occurrence of `delim`. */ function rsplit(slice self, slice needle) internal returns (slice token) { rsplit(self, needle, token); } /* * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return The number of occurrences of `needle` found in `self`. */ function count(slice self, slice needle) internal returns (uint cnt) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len; while (ptr <= self._ptr + self._len) { cnt++; ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len; } } /* * @dev Returns True if `self` contains `needle`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return True if `needle` is found in `self`, false otherwise. */ function contains(slice self, slice needle) internal returns (bool) { return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr; } /* * @dev Returns a newly allocated string containing the concatenation of * `self` and `other`. * @param self The first slice to concatenate. * @param other The second slice to concatenate. * @return The concatenation of the two strings. */ function concat(slice self, slice other) internal returns (string) { var ret = new string(self._len + other._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); memcpy(retptr + self._len, other._ptr, other._len); return ret; } /* * @dev Joins an array of slices, using `self` as a delimiter, returning a * newly allocated string. * @param self The delimiter to use. * @param parts A list of slices to join. * @return A newly allocated string containing all the slices in `parts`, * joined with `self`. */ function join(slice self, slice[] parts) internal returns (string) { if (parts.length == 0) return ""; uint length = self._len * (parts.length - 1); for(uint i = 0; i < parts.length; i++) length += parts[i]._len; var ret = new string(length); uint retptr; assembly { retptr := add(ret, 32) } for(i = 0; i < parts.length; i++) { memcpy(retptr, parts[i]._ptr, parts[i]._len); retptr += parts[i]._len; if (i < parts.length - 1) { memcpy(retptr, self._ptr, self._len); retptr += self._len; } } return ret; } } /** * @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; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens /// @author Dieter Shirley <[email protected]> (https://github.com/dete) contract ERC721 { // Required methods function approve(address _to, uint256 _tokenId) public; function balanceOf(address _owner) public view returns (uint256 balance); function implementsERC721() public pure returns (bool); function ownerOf(uint256 _tokenId) public view returns (address addr); function takeOwnership(uint256 _tokenId) public; function totalSupply() public view returns (uint256 total); function transferFrom(address _from, address _to, uint256 _tokenId) public; function transfer(address _to, uint256 _tokenId) public; event Transfer(address indexed from, address indexed to, uint256 tokenId); event Approval(address indexed owner, address indexed approved, uint256 tokenId); // Optional // function name() public view returns (string name); // function symbol() public view returns (string symbol); // function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId); // function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl); } contract ERC20 { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20 { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract MutableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount, uint256 balance, uint256 totalSupply); event Burn(address indexed burner, uint256 value, uint256 balance, uint256 totalSupply); address master; function setContractMaster(address _newMaster) onlyOwner public { require(_newMaster != address(0)); require(EmojiToken(_newMaster).isEmoji()); master = _newMaster; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) public returns (bool) { require(master == msg.sender); totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount, balances[_to], totalSupply_); Transfer(address(0), _to, _amount); return true; } /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value, address _owner) public { require(master == msg.sender); require(_value <= balances[_owner]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = _owner; balances[burner] = balances[burner].sub(_value); totalSupply_ = totalSupply_.sub(_value); Burn(burner, _value, balances[burner], totalSupply_); } } /* Base contract for ERC-20 Craft Token Collectibles. * @title Crypto Emoji - #Emojinomics * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract CraftToken is MutableToken { string public name; string public symbol; uint8 public decimals; function CraftToken(string emoji, string symb) public { require(EmojiToken(msg.sender).isEmoji()); master = msg.sender; name = emoji; symbol = symb; decimals = 8; } } /* Base contract for ERC-721 Emoji Token Collectibles. * @title Crypto Emoji - #Emojinomics * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract EmojiToken is ERC721 { using strings for *; /*** EVENTS ***/ event Birth(uint256 tokenId, string name, address owner); event TokenSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, string name); event Transfer(address from, address to, uint256 tokenId); event EmojiMessageUpdated(address from, uint256 tokenId, string message); event TokenBurnt(uint256 tokenId, address master); /*** CONSTANTS ***/ /// @notice Name and symbol of the non fungible token, as defined in ERC721. string public constant NAME = "CryptoEmoji"; string public constant SYMBOL = "CE"; uint256 private constant PROMO_CREATION_LIMIT = 1000; uint256 private startingPrice = 0.001 ether; uint256 private firstStepLimit = 0.063 ether; uint256 private secondStepLimit = 0.52 ether; //5% to contract uint256 ownerCut = 5; bool ownerCutIsLocked; //One Craft token 1 has 8 decimals uint256 oneCraftToken = 100000000; /*** STORAGE ***/ /// @dev A mapping from EMOJI IDs to the address that owns them. All emojis must have /// some valid owner address. mapping (uint256 => address) public emojiIndexToOwner; // @dev A mapping from owner address to count of tokens that address owns. // Used internally inside balanceOf() to resolve ownership count. mapping (address => uint256) private ownershipTokenCount; /// @dev A mapping from Emojis to an address that has been approved to call /// transferFrom(). Each Emoji can only have one approved address for transfer /// at any time. A zero value means no approval is outstanding. mapping (uint256 => address) public emojiIndexToApproved; // @dev A mapping from emojis to the price of the token. mapping (uint256 => uint256) private emojiIndexToPrice; // @dev A mapping from emojis in existence mapping (string => bool) private emojiCreated; mapping (uint256 => address) private emojiCraftTokenAddress; // The addresses of the accounts (or contracts) that can execute actions within each roles. address public ceoAddress; address public cooAddress; uint256 public promoCreatedCount; /*** DATATYPES ***/ struct Emoji { string name; string msg; } struct MemoryHolder { mapping(uint256 => uint256) bal; mapping(uint256 => uint256) used; } Emoji[] private emojis; /*** ACCESS MODIFIERS ***/ /// @dev Access modifier for CEO-only functionality modifier onlyCEO() { require(msg.sender == ceoAddress); _; } /// @dev Access modifier for COO-only functionality modifier onlyCOO() { require(msg.sender == cooAddress); _; } /// Access modifier for contract owner only functionality modifier onlyCLevel() { require( msg.sender == ceoAddress || msg.sender == cooAddress ); _; } /*** CONSTRUCTOR ***/ function EmojiToken() public { ceoAddress = msg.sender; cooAddress = msg.sender; } function isEmoji() public returns (bool) { return true; } /// @notice Here for bug related migration function migrateCraftTokenMaster(uint tokenId, address newMasterContract) public onlyCLevel { CraftToken(emojiCraftTokenAddress[tokenId]).setContractMaster(newMasterContract); } /*** PUBLIC FUNCTIONS ***/ /// @notice Grant another address the right to transfer token via takeOwnership() and transferFrom(). /// @param _to The address to be granted transfer approval. Pass address(0) to /// clear all approvals. /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function approve( address _to, uint256 _tokenId ) public { // Caller must own token. require(_owns(msg.sender, _tokenId)); emojiIndexToApproved[_tokenId] = _to; Approval(msg.sender, _to, _tokenId); } /// For querying balance of a particular account /// @param _owner The address for balance query /// @dev Required for ERC-721 compliance. function balanceOf(address _owner) public view returns (uint256 balance) { return ownershipTokenCount[_owner]; } /// @dev Creates a new promo Emoji with the given name, with given _price and assignes it to an address. function createPromoEmoji(address _owner, string _name, string _symb, uint256 _price) public onlyCLevel { require(promoCreatedCount < PROMO_CREATION_LIMIT); address emojiOwner = _owner; if (emojiOwner == address(0)) { emojiOwner = cooAddress; } if (_price <= 0) { _price = startingPrice; } promoCreatedCount++; uint256 indx = _createEmoji(_name, emojiOwner, _price); //Creates token contract emojiCraftTokenAddress[indx] = new CraftToken(_name, _symb); } /// @dev Creates a new Emoji with the given name. function createBaseEmoji(string _name, string _symb) public onlyCLevel { uint256 indx = _createEmoji(_name, address(this), startingPrice); //Creates token contract emojiCraftTokenAddress[indx] = new CraftToken(_name, _symb); } function createEmojiStory(uint[] _parts) public { MemoryHolder storage memD; string memory mashUp = ""; uint price; for(uint i = 0; i < _parts.length; i++) { if(memD.bal[_parts[i]] == 0) { memD.bal[_parts[i]] = CraftToken(emojiCraftTokenAddress[_parts[i]]).balanceOf(msg.sender); } memD.used[_parts[i]]++; require(CraftToken(emojiCraftTokenAddress[_parts[i]]).balanceOf(msg.sender) >= memD.used[_parts[i]]); price += emojiIndexToPrice[_parts[i]]; mashUp = mashUp.toSlice().concat(emojis[_parts[i]].name.toSlice()); } //Creates Mash Up _createEmoji(mashUp,msg.sender,price); //BURN for(uint iii = 0; iii < _parts.length; iii++) { CraftToken(emojiCraftTokenAddress[_parts[iii]]).burn(oneCraftToken, msg.sender); TokenBurnt(_parts[iii], emojiCraftTokenAddress[_parts[iii]]); } } /// @notice Returns all the relevant information about a specific emoji. /// @param _tokenId The tokenId of the emoji of interest. function getCraftTokenAddress(uint256 _tokenId) public view returns ( address masterErc20 ) { masterErc20 = emojiCraftTokenAddress[_tokenId]; } /// @notice Returns all the relevant information about a specific emoji. /// @param _tokenId The tokenId of the emoji of interest. function getEmoji(uint256 _tokenId) public view returns ( string emojiName, string emojiMsg, uint256 sellingPrice, address owner ) { Emoji storage emojiObj = emojis[_tokenId]; emojiName = emojiObj.name; emojiMsg = emojiObj.msg; sellingPrice = emojiIndexToPrice[_tokenId]; owner = emojiIndexToOwner[_tokenId]; } function implementsERC721() public pure returns (bool) { return true; } /// @dev Required for ERC-721 compliance. function name() public pure returns (string) { return NAME; } /// For querying owner of token /// @param _tokenId The tokenID for owner inquiry /// @dev Required for ERC-721 compliance. function ownerOf(uint256 _tokenId) public view returns (address owner) { owner = emojiIndexToOwner[_tokenId]; require(owner != address(0)); } function payout(address _to) public onlyCLevel { _payout(_to); } // Allows someone to send ether and obtain the token function purchase(uint256 _tokenId) public payable { address oldOwner = emojiIndexToOwner[_tokenId]; uint sellingPrice = emojiIndexToPrice[_tokenId]; address newOwner = msg.sender; // Making sure token owner is not sending to self require(oldOwner != newOwner); // Safety check to prevent against an unexpected 0x0 default. require(_addressNotNull(newOwner)); // Making sure sent amount is greater than or equal to the sellingPrice require(msg.value >= sellingPrice); uint256 percentage = SafeMath.sub(100, ownerCut); uint256 payment = uint256(SafeMath.div(SafeMath.mul(sellingPrice, percentage), 100)); uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice); // Update prices if (sellingPrice < firstStepLimit) { // first stage emojiIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 200), percentage); } else if (sellingPrice < secondStepLimit) { // second stage emojiIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 130), percentage); } else { // third stage emojiIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 115), percentage); } _transfer(oldOwner, newOwner, _tokenId); // Pay previous tokenOwner if owner is not contract if (oldOwner != address(this)) { oldOwner.transfer(payment); //(1-0.06) } TokenSold(_tokenId, sellingPrice, emojiIndexToPrice[_tokenId], oldOwner, newOwner, emojis[_tokenId].name); msg.sender.transfer(purchaseExcess); //if Non-Story if(emojiCraftTokenAddress[_tokenId] != address(0)) { CraftToken(emojiCraftTokenAddress[_tokenId]).mint(oldOwner,oneCraftToken); CraftToken(emojiCraftTokenAddress[_tokenId]).mint(msg.sender,oneCraftToken); } } function transferTokenToCEO(uint256 _tokenId, uint qty) public onlyCLevel { CraftToken(emojiCraftTokenAddress[_tokenId]).transfer(ceoAddress,qty); } function priceOf(uint256 _tokenId) public view returns (uint256 price) { return emojiIndexToPrice[_tokenId]; } /// @dev Assigns a new address to act as the CEO. Only available to the current CEO. /// @param _newCEO The address of the new CEO function setCEO(address _newCEO) public onlyCEO { require(_newCEO != address(0)); ceoAddress = _newCEO; } /// @dev Assigns a new address to act as the COO. Only available to the current CEO. /// @param _newCOO The address of the new COO function setCOO(address _newCOO) public onlyCOO { require(_newCOO != address(0)); cooAddress = _newCOO; } /// @dev Required for ERC-721 compliance. function symbol() public pure returns (string) { return SYMBOL; } /// @notice Allow pre-approved user to take ownership of a token /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function takeOwnership(uint256 _tokenId) public { address newOwner = msg.sender; address oldOwner = emojiIndexToOwner[_tokenId]; // Safety check to prevent against an unexpected 0x0 default. require(_addressNotNull(newOwner)); // Making sure transfer is approved require(_approved(newOwner, _tokenId)); _transfer(oldOwner, newOwner, _tokenId); } function setEmojiMsg(uint256 _tokenId, string message) public { require(_owns(msg.sender, _tokenId)); Emoji storage item = emojis[_tokenId]; item.msg = bytes32ToString(stringToBytes32(message)); EmojiMessageUpdated(msg.sender, _tokenId, item.msg); } function stringToBytes32(string memory source) internal returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(source); if (tempEmptyStringTest.length == 0) { return 0x0; } assembly { result := mload(add(source, 32)) } } function bytes32ToString(bytes32 x) constant internal returns (string) { bytes memory bytesString = new bytes(32); uint charCount = 0; for (uint j = 0; j < 32; j++) { byte char = byte(bytes32(uint(x) * 2 ** (8 * j))); if (char != 0) { bytesString[charCount] = char; charCount++; } } bytes memory bytesStringTrimmed = new bytes(charCount); for (j = 0; j < charCount; j++) { bytesStringTrimmed[j] = bytesString[j]; } return string(bytesStringTrimmed); } /// @param _owner The owner whose emoji tokens we are interested in. /// @dev This method MUST NEVER be called by smart contract code. First, it's fairly /// expensive (it walks the entire Emojis array looking for emojis belonging to owner), /// but it also returns a dynamic array, which is only supported for web3 calls, and /// not contract-to-contract calls. function tokensOfOwner(address _owner) public view returns(uint256[] ownerTokens) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 totalEmojis = totalSupply(); uint256 resultIndex = 0; uint256 emojiId; for (emojiId = 0; emojiId <= totalEmojis; emojiId++) { if (emojiIndexToOwner[emojiId] == _owner) { result[resultIndex] = emojiId; resultIndex++; } } return result; } } /// For querying totalSupply of token /// @dev Required for ERC-721 compliance. function totalSupply() public view returns (uint256 total) { return emojis.length; } /// Owner initates the transfer of the token to another account /// @param _to The address for the token to be transferred to. /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function transfer( address _to, uint256 _tokenId ) public { require(_owns(msg.sender, _tokenId)); require(_addressNotNull(_to)); _transfer(msg.sender, _to, _tokenId); } /// Third-party initiates transfer of token from address _from to address _to /// @param _from The address for the token to be transferred from. /// @param _to The address for the token to be transferred to. /// @param _tokenId The ID of the Token that can be transferred if this call succeeds. /// @dev Required for ERC-721 compliance. function transferFrom( address _from, address _to, uint256 _tokenId ) public { require(_owns(_from, _tokenId)); require(_approved(_to, _tokenId)); require(_addressNotNull(_to)); _transfer(_from, _to, _tokenId); } /*** PRIVATE FUNCTIONS ***/ /// Safety check on _to address to prevent against an unexpected 0x0 default. function _addressNotNull(address _to) private pure returns (bool) { return _to != address(0); } /// For checking approval of transfer for address _to function _approved(address _to, uint256 _tokenId) private view returns (bool) { return emojiIndexToApproved[_tokenId] == _to; } /// For creating Emoji function _createEmoji(string _name, address _owner, uint256 _price) private returns(uint256) { require(emojiCreated[_name] == false); Emoji memory _emoji = Emoji({ name: _name, msg: "💥New💥" }); uint256 newEmojiId = emojis.push(_emoji) - 1; // It's probably never going to happen, 4 billion tokens are A LOT, but // let's just be 100% sure we never let this happen. require(newEmojiId == uint256(uint32(newEmojiId))); Birth(newEmojiId, _name, _owner); emojiIndexToPrice[newEmojiId] = _price; // This will assign ownership, and also emit the Transfer event as // per ERC721 draft _transfer(address(0), _owner, newEmojiId); emojiCreated[_name] = true; return newEmojiId; } /// Check for token ownership function _owns(address claimant, uint256 _tokenId) private view returns (bool) { return claimant == emojiIndexToOwner[_tokenId]; } /// For paying out balance on contract function _payout(address _to) private { if (_to == address(0)) { ceoAddress.transfer(this.balance); } } /// @dev Assigns ownership of a specific Emoji to an address. function _transfer(address _from, address _to, uint256 _tokenId) private { // Since the number of emojis is capped to 2^32 we can't overflow this ownershipTokenCount[_to]++; //transfer ownership emojiIndexToOwner[_tokenId] = _to; // When creating new emojis _from is 0x0, but we can't account that address. if (_from != address(0)) { ownershipTokenCount[_from]--; // clear any previously approved ownership exchange delete emojiIndexToApproved[_tokenId]; } // Emit the transfer event. Transfer(_from, _to, _tokenId); } /// @dev Updates ownerCut function updateOwnerCut(uint256 _newCut) external onlyCLevel{ require(ownerCut <= 9); require(ownerCutIsLocked == false); ownerCut = _newCut; } /// @dev Lock ownerCut function lockOwnerCut(uint confirmCode) external onlyCLevel{ /// Not a secert just to make sure we don't accidentally submit this function if(confirmCode == 197428124) { ownerCutIsLocked = true; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"promoCreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"payout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_name","type":"string"},{"name":"_symb","type":"string"},{"name":"_price","type":"uint256"}],"name":"createPromoEmoji","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"confirmCode","type":"uint256"}],"name":"lockOwnerCut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"emojiIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"emojiIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"newMasterContract","type":"address"}],"name":"migrateCraftTokenMaster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"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":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"isEmoji","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getEmoji","outputs":[{"name":"emojiName","type":"string"},{"name":"emojiMsg","type":"string"},{"name":"sellingPrice","type":"uint256"},{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symb","type":"string"}],"name":"createBaseEmoji","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"message","type":"string"}],"name":"setEmojiMsg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCut","type":"uint256"}],"name":"updateOwnerCut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getCraftTokenAddress","outputs":[{"name":"masterErc20","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"qty","type":"uint256"}],"name":"transferTokenToCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_parts","type":"uint256[]"}],"name":"createEmojiStory","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"owner","type":"address"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"oldPrice","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"},{"indexed":false,"name":"prevOwner","type":"address"},{"indexed":false,"name":"winner","type":"address"},{"indexed":false,"name":"name","type":"string"}],"name":"TokenSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"message","type":"string"}],"name":"EmojiMessageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"master","type":"address"}],"name":"TokenBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
606060405266038d7ea4c6800060005566dfd22a8cd98000600155670737693eb334000060025560056003556305f5e100600555341561003e57600080fd5b600c8054600160a060020a033316600160a060020a03199182168117909255600d80549091169091179055613794806100786000396000f300606060405260043610620001b55763ffffffff60e060020a60003504166305e455468114620001ba57806306fdde0314620001e2578063095ea7b314620002725780630a0f816814620002995780630b7e9c4414620002cb5780631051db3414620002ed57806318160ddd14620003175780632112afe6146200032d57806323b872dd14620003d357806327d7874c14620003fe5780632ba73c1514620004205780634071e94e14620004425780634d8a5a57146200045b5780634ea409fa1462000474578063541e8515146200048d5780636352211e14620004b257806370a0823114620004cb5780638462151c14620004ed57806395d89b411462000564578063a3f4df7e146200057a578063a9059cbb1462000590578063aa8f027b14620002ed578063b047fb5014620005b5578063b2e6ceeb14620005cb578063b9186d7d14620005e4578063be7d97b314620005fd578063c721e51b1462000715578063cef13a3414620007ab578063d905bf921462000804578063e55db1e3146200081d578063ef7e81d91462000836578063efef39a11462000852578063f76f8d78146200085f578063fa84cb021462000875575b600080fd5b3415620001c657600080fd5b620001d0620008c7565b60405190815260200160405180910390f35b3415620001ee57600080fd5b620001f8620008cd565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015620002365780820151838201526020016200021c565b50505050905090810190601f168015620002645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156200027e57600080fd5b62000297600160a060020a036004351660243562000911565b005b3415620002a557600080fd5b620002af62000993565b604051600160a060020a03909116815260200160405180910390f35b3415620002d757600080fd5b62000297600160a060020a0360043516620009a2565b3415620002f957600080fd5b62000303620009e8565b604051901515815260200160405180910390f35b34156200032357600080fd5b620001d0620009ed565b34156200033957600080fd5b6200029760048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505093359350620009f392505050565b3415620003df57600080fd5b62000297600160a060020a036004358116906024351660443562000bbd565b34156200040a57600080fd5b62000297600160a060020a036004351662000c16565b34156200042c57600080fd5b62000297600160a060020a036004351662000c6a565b34156200044e57600080fd5b6200029760043562000cbe565b34156200046757600080fd5b620002af60043562000d13565b34156200048057600080fd5b620002af60043562000d2e565b34156200049957600080fd5b62000297600435600160a060020a036024351662000d49565b3415620004be57600080fd5b620002af60043562000dfa565b3415620004d757600080fd5b620001d0600160a060020a036004351662000e24565b3415620004f957600080fd5b6200050f600160a060020a036004351662000e3f565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200055057808201518382015260200162000536565b505050509050019250505060405180910390f35b34156200057057600080fd5b620001f862000f30565b34156200058657600080fd5b620001f862000f73565b34156200059c57600080fd5b62000297600160a060020a036004351660243562000faa565b3415620005c157600080fd5b620002af62000fea565b3415620005d757600080fd5b6200029760043562000ff9565b3415620005f057600080fd5b620001d06004356200104f565b34156200060957600080fd5b6200061660043562001061565b60405160408101839052600160a060020a0382166060820152608080825281906020820190820187818151815260200191508051906020019080838360005b838110156200066f57808201518382015260200162000655565b50505050905090810190601f1680156200069d5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015620006d5578082015183820152602001620006bb565b50505050905090810190601f168015620007035780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34156200072157600080fd5b6200029760046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506200120f95505050505050565b3415620007b757600080fd5b62000297600480359060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506200138995505050505050565b34156200081057600080fd5b62000297600435620014be565b34156200082957600080fd5b620002af6004356200151e565b34156200084257600080fd5b6200029760043560243562001539565b6200029760043562001606565b34156200086b57600080fd5b620001f8620019fd565b34156200088157600080fd5b62000297600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965062001a3495505050505050565b600e5481565b620008d76200264f565b60408051908101604052600b81527f43727970746f456d6f6a69000000000000000000000000000000000000000000602082015290505b90565b6200091d338262001f10565b15156200092957600080fd5b600081815260086020526040908190208054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600c54600160a060020a031681565b600c5433600160a060020a0390811691161480620009ce5750600d5433600160a060020a039081169116145b1515620009da57600080fd5b620009e58162001f30565b50565b600190565b600f5490565b600c54600090819033600160a060020a039081169116148062000a245750600d5433600160a060020a039081169116145b151562000a3057600080fd5b600e546103e8901062000a4257600080fd5b859150600160a060020a038216151562000a6557600d54600160a060020a031691505b6000831162000a745760005492505b600e8054600101905562000a8a85838562001f7b565b9050848462000a9862002661565b808060200180602001838103835285818151815260200191508051906020019080838360005b8381101562000ad857808201518382015260200162000abe565b50505050905090810190601f16801562000b065780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101562000b3e57808201518382015260200162000b24565b50505050905090810190601f16801562000b6c5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f080151562000b8a57600080fd5b6000918252600b60205260409091208054600160a060020a031916600160a060020a039092169190911790555050505050565b62000bc9838262001f10565b151562000bd557600080fd5b62000be1828262002210565b151562000bed57600080fd5b62000bf88262002230565b151562000c0457600080fd5b62000c118383836200223e565b505050565b600c5433600160a060020a0390811691161462000c3257600080fd5b600160a060020a038116151562000c4857600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600d5433600160a060020a0390811691161462000c8657600080fd5b600160a060020a038116151562000c9c57600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b600c5433600160a060020a039081169116148062000cea5750600d5433600160a060020a039081169116145b151562000cf657600080fd5b80630bc4839c1415620009e5576004805460ff1916600117905550565b600860205260009081526040902054600160a060020a031681565b600660205260009081526040902054600160a060020a031681565b600c5433600160a060020a039081169116148062000d755750600d5433600160a060020a039081169116145b151562000d8157600080fd5b6000828152600b60205260409081902054600160a060020a03169063e906e15c9083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151562000de157600080fd5b6102c65a03f1151562000df357600080fd5b5050505050565b600081815260066020526040902054600160a060020a031680151562000e1f57600080fd5b919050565b600160a060020a031660009081526007602052604090205490565b62000e496200264f565b600062000e556200264f565b600080600062000e658762000e24565b945084151562000e9857600060405180591062000e7f5750595b9080825280602002602001820160405250955062000f26565b8460405180591062000ea75750595b9080825280602002602001820160405250935062000ec4620009ed565b925060009150600090505b82811162000f2257600081815260066020526040902054600160a060020a038881169116141562000f19578084838151811062000f0857fe5b602090810290910101526001909101905b60010162000ecf565b8395505b5050505050919050565b62000f3a6200264f565b60408051908101604052600281527f43450000000000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052600b81527f43727970746f456d6f6a69000000000000000000000000000000000000000000602082015281565b62000fb6338262001f10565b151562000fc257600080fd5b62000fcd8262002230565b151562000fd957600080fd5b62000fe63383836200223e565b5050565b600d54600160a060020a031681565b6000818152600660205260409020543390600160a060020a03166200101e8262002230565b15156200102a57600080fd5b62001036828462002210565b15156200104257600080fd5b62000c118183856200223e565b60009081526009602052604090205490565b6200106b6200264f565b620010756200264f565b6000806000600f868154811015156200108a57fe5b90600052602060002090600202019050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620011365780601f106200110a5761010080835404028352916020019162001136565b820191906000526020600020905b8154815290600101906020018083116200111857829003601f168201915b50505050509450806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620011d95780601f10620011ad57610100808354040283529160200191620011d9565b820191906000526020600020905b815481529060010190602001808311620011bb57829003601f168201915b50505060009889525050600960209081526040808920546006909252909720549597909695600160a060020a0316945092505050565b600c5460009033600160a060020a03908116911614806200123e5750600d5433600160a060020a039081169116145b15156200124a57600080fd5b62001259833060005462001f7b565b905082826200126762002661565b808060200180602001838103835285818151815260200191508051906020019080838360005b83811015620012a75780820151838201526020016200128d565b50505050905090810190601f168015620012d55780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156200130d578082015183820152602001620012f3565b50505050905090810190601f1680156200133b5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015156200135957600080fd5b6000918252600b60205260409091208054600160a060020a031916600160a060020a039092169190911790555050565b600062001397338462001f10565b1515620013a357600080fd5b600f805484908110620013b257fe5b90600052602060002090600202019050620013d7620013d18362002315565b62002344565b81600101908051620013ee92916020019062002672565b507f634b5460846831c24a814503a12dd9565272ed6455da326222526dee8b9117df338483600101604051600160a060020a03841681526020810183905260606040820181815283546002600019610100600184161502019091160491830182905290608083019084908015620014a95780601f106200147d57610100808354040283529160200191620014a9565b820191906000526020600020905b8154815290600101906020018083116200148b57829003601f168201915b505094505050505060405180910390a1505050565b600c5433600160a060020a0390811691161480620014ea5750600d5433600160a060020a039081169116145b1515620014f657600080fd5b60035460099011156200150857600080fd5b60045460ff16156200151957600080fd5b600355565b6000908152600b6020526040902054600160a060020a031690565b600c5433600160a060020a0390811691161480620015655750600d5433600160a060020a039081169116145b15156200157157600080fd5b6000828152600b602052604080822054600c54600160a060020a039182169363a9059cbb9391909216918591516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620015e657600080fd5b6102c65a03f11515620015f857600080fd5b505050604051805150505050565b6000818152600660209081526040808320546009909252822054600160a060020a039182169290913391908190819084168614156200164457600080fd5b6200164f8462002230565b15156200165b57600080fd5b34859010156200166a57600080fd5b62001679606460035462002504565b9250620016936200168b868562002517565b606462002551565b9150620016a1348662002504565b9050600154851015620016db57620016c6620016bf8660c862002517565b8462002551565b60008881526009602052604090205562001718565b600254851015620016f757620016c6620016bf86608262002517565b62001708620016bf86607362002517565b6000888152600960205260409020555b620017258685896200223e565b30600160a060020a031686600160a060020a03161415156200177357600160a060020a03861682156108fc0283604051600060405180830381858888f1935050505015156200177357600080fd5b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f8786600960008b8152602001908152602001600020548988600f8d815481101515620017bb57fe5b90600052602060002090600202016000016040518681526020810186905260408101859052600160a060020a0380851660608301528316608082015260c060a082018181528354600260001961010060018416150201909116049183018290529060e083019084908015620018745780601f10620018485761010080835404028352916020019162001874565b820191906000526020600020905b8154815290600101906020018083116200185657829003601f168201915b505097505050505050505060405180910390a1600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515620018b957600080fd5b6000878152600b6020526040902054600160a060020a031615620019f4576000878152600b602052604080822054600554600160a060020a03909116926340c10f19928a929190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200194957600080fd5b6102c65a03f115156200195b57600080fd5b505050604051805150506000878152600b602052604080822054600554600160a060020a03909116926340c10f199233929190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620019d757600080fd5b6102c65a03f11515620019e957600080fd5b505050604051805150505b50505050505050565b60408051908101604052600281527f4345000000000000000000000000000000000000000000000000000000000000602082015281565b600062001a406200264f565b60008060006020604051908101604052600080825290945091505b855182101562001dab5784600087848151811062001a7557fe5b906020019060200201518152602001908152602001600020546000141562001b6557600b600087848151811062001aa857fe5b90602001906020020151815260208101919091526040908101600090812054600160a060020a0316916370a08231913391516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001b1d57600080fd5b6102c65a03f1151562001b2f57600080fd5b5050506040518051905085600088858151811062001b4957fe5b9060200190602002015181526020810191909152604001600020555b84600101600087848151811062001b7857fe5b906020019060200201518152602081019190915260400160009081208054600190810190915586019087848151811062001bae57fe5b90602001906020020151815260200190815260200160002054600b600088858151811062001bd857fe5b90602001906020020151815260208101919091526040908101600090812054600160a060020a0316916370a08231913391516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001c4d57600080fd5b6102c65a03f1151562001c5f57600080fd5b505050604051805190501015151562001c7757600080fd5b6009600087848151811062001c8857fe5b906020019060200201518152602001908152602001600020548301925062001d9d62001d85600f88858151811062001cbc57fe5b906020019060200201518154811062001cd157fe5b90600052602060002090600202016000018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562001d7a5780601f1062001d4e5761010080835404028352916020019162001d7a565b820191906000526020600020905b81548152906001019060200180831162001d5c57829003601f168201915b505050505062002569565b62001d908662002569565b9063ffffffff6200259316565b935060019091019062001a5b565b62001db884338562001f7b565b50600090505b855181101562001f0857600b600087838151811062001dd957fe5b90602001906020020151815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a031663fcd3533c6005543360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151562001e5c57600080fd5b6102c65a03f1151562001e6e57600080fd5b5050507f41b05bf655882bc27017be44e8216d1059cbc6b9668d754f5a745dcce690a9d486828151811062001e9f57fe5b90602001906020020151600b600089858151811062001eba57fe5b9060200190602002015181526020810191909152604090810160002054600160a060020a03169051918252600160a060020a031660208201526040908101905180910390a160010162001dbe565b505050505050565b600090815260066020526040902054600160a060020a0390811691161490565b600160a060020a0381161515620009e557600c54600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515620009e557600080fd5b600062001f87620026f7565b6000600a866040518082805190602001908083835b6020831062001fbd5780518252601f19909201916020918201910162001f9c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040519081900390205460ff16156200200057600080fd5b604080519081016040528087815260200160408051908101604052600b81527ff09f92a54e6577f09f92a500000000000000000000000000000000000000000060208201529052600f805491935060019180830162002060838262002720565b600092835260209092208591600202018151819080516200208692916020019062002672565b50602082015181600101908051620020a392916020019062002672565b50505003905063ffffffff81168114620020bc57600080fd5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef2818787604051838152600160a060020a038216604082015260606020820181815290820184818151815260200191508051906020019080838360005b838110156200213357808201518382015260200162002119565b50505050905090810190601f168015620021615780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160008181526009602052604081208590556200218e9086836200223e565b6001600a876040518082805190602001908083835b60208310620021c45780518252601f199092019160209182019101620021a3565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051908190039020805460ff191691151591909117905595945050505050565b600090815260086020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b600160a060020a03808316600081815260076020908152604080832080546001019055858352600690915290208054600160a060020a0319169091179055831615620022c057600160a060020a03831660009081526007602090815260408083208054600019019055838352600890915290208054600160a060020a03191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b6000620023216200264f565b5081805115156200233657600091506200233e565b602083015191505b50919050565b6200234e6200264f565b620023586200264f565b6000806000620023676200264f565b6020604051805910620023775750595b818152601f19601f83011681016020016040529050945060009350600092505b602083101562002426576008830260020a870291507fff000000000000000000000000000000000000000000000000000000000000008216156200241a5781858581518110620023e357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001909301925b60019092019162002397565b83604051805910620024355750595b818152601f19601f830116810160200160405290509050600092505b83831015620024fa578483815181106200246757fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818481518110620024be57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019092019162002451565b9695505050505050565b6000828211156200251157fe5b50900390565b6000808315156200252c57600091506200254a565b508282028284828115156200253d57fe5b04146200254657fe5b8091505b5092915050565b60008082848115156200256057fe5b04949350505050565b620025736200274f565b602082016040805190810160405280845181526020019190915292915050565b6200259d6200264f565b620025a76200264f565b60008351855101604051805910620025bc5750595b818152601f19601f830116810160200160405290509150602082019050620025eb818660200151875162002608565b62002600855182018560200151865162002608565b509392505050565b60005b602082106200263057825184526020840193506020830192506020820391506200260b565b6001826020036101000a03905080198351168185511617909352505050565b60206040519081016040526000815290565b604051610f65806200280483390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620026b557805160ff1916838001178555620026e5565b82800160010185558215620026e5579182015b82811115620026e5578251825591602001919060010190620026c8565b50620026f392915062002766565b5090565b60408051908101604052806200270c6200264f565b81526020016200271b6200264f565b905290565b81548183558181151162000c115760020281600202836000526020600020918201910162000c11919062002783565b604080519081016040526000808252602082015290565b6200090e91905b80821115620026f357600081556001016200276d565b6200090e91905b80821115620026f3576000620027a18282620027bb565b620027b1600183016000620027bb565b506002016200278a565b50805460018160011615610100020316600290046000825580601f10620027e35750620009e5565b601f016020900490600052602060002090810190620009e59190620027665600606060405234156200001057600080fd5b60405162000f6538038062000f658339810160405280805182019190602001805160038054600160a060020a03191633600160a060020a0316908117909155920191905063aa8f027b6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620000aa57600080fd5b6102c65a03f11515620000bc57600080fd5b505050604051805190501515620000d257600080fd5b60048054600160a060020a03191633600160a060020a03161790556005828051620001029291602001906200012e565b506006818051620001189291602001906200012e565b50506007805460ff1916600817905550620001d3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017157805160ff1916838001178555620001a1565b82800160010185558215620001a1579182015b82811115620001a157825182559160200191906001019062000184565b50620001af929150620001b3565b5090565b620001d091905b80821115620001af5760008155600101620001ba565b90565b610d8280620001e36000396000f3006060604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100ea578063095ea7b31461017457806318160ddd146101aa57806323b872dd146101cf578063313ce567146101f757806340c10f1914610220578063661884631461024257806370a08231146102645780638da5cb5b1461028357806395d89b41146102b2578063a9059cbb146102c5578063d73dd623146102e7578063dd62ed3e14610309578063e906e15c1461032e578063f2fde38b1461034f578063fcd3533c1461036e575b600080fd5b34156100f557600080fd5b6100fd610390565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610139578082015183820152602001610121565b50505050905090810190601f1680156101665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017f57600080fd5b610196600160a060020a036004351660243561042e565b604051901515815260200160405180910390f35b34156101b557600080fd5b6101bd61049a565b60405190815260200160405180910390f35b34156101da57600080fd5b610196600160a060020a03600435811690602435166044356104a0565b341561020257600080fd5b61020a610620565b60405160ff909116815260200160405180910390f35b341561022b57600080fd5b610196600160a060020a0360043516602435610629565b341561024d57600080fd5b610196600160a060020a0360043516602435610735565b341561026f57600080fd5b6101bd600160a060020a036004351661082f565b341561028e57600080fd5b61029661084a565b604051600160a060020a03909116815260200160405180910390f35b34156102bd57600080fd5b6100fd610859565b34156102d057600080fd5b610196600160a060020a03600435166024356108c4565b34156102f257600080fd5b610196600160a060020a03600435166024356109d6565b341561031457600080fd5b6101bd600160a060020a0360043581169060243516610a7a565b341561033957600080fd5b61034d600160a060020a0360043516610aa5565b005b341561035a57600080fd5b61034d600160a060020a0360043516610b89565b341561037957600080fd5b61034d600435600160a060020a0360243516610c24565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104265780601f106103fb57610100808354040283529160200191610426565b820191906000526020600020905b81548152906001019060200180831161040957829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60015490565b6000600160a060020a03831615156104b757600080fd5b600160a060020a0384166000908152602081905260409020548211156104dc57600080fd5b600160a060020a038085166000908152600260209081526040808320339094168352929052205482111561050f57600080fd5b600160a060020a038416600090815260208190526040902054610538908363ffffffff610d2e16565b600160a060020a03808616600090815260208190526040808220939093559085168152205461056d908363ffffffff610d4016565b600160a060020a03808516600090815260208181526040808320949094558783168252600281528382203390931682529190915220546105b3908363ffffffff610d2e16565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60075460ff1681565b60045460009033600160a060020a0390811691161461064757600080fd5b60015461065a908363ffffffff610d4016565b600155600160a060020a038316600090815260208190526040902054610686908363ffffffff610d4016565b600160a060020a0384166000818152602081905260409081902083905560015491927fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb9286925180848152602001838152602001828152602001935050505060405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561079257600160a060020a0333811660009081526002602090815260408083209388168352929052908120556107c9565b6107a2818463ffffffff610d2e16565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526020819052604090205490565b600354600160a060020a031681565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104265780601f106103fb57610100808354040283529160200191610426565b6000600160a060020a03831615156108db57600080fd5b600160a060020a03331660009081526020819052604090205482111561090057600080fd5b600160a060020a033316600090815260208190526040902054610929908363ffffffff610d2e16565b600160a060020a03338116600090815260208190526040808220939093559085168152205461095e908363ffffffff610d4016565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054610a0e908363ffffffff610d4016565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610ac057600080fd5b600160a060020a0381161515610ad557600080fd5b80600160a060020a031663aa8f027b6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610b3457600080fd5b6102c65a03f11515610b4557600080fd5b505050604051805190501515610b5a57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035433600160a060020a03908116911614610ba457600080fd5b600160a060020a0381161515610bb957600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045460009033600160a060020a03908116911614610c4257600080fd5b600160a060020a038216600090815260208190526040902054831115610c6757600080fd5b50600160a060020a0381166000908152602081905260409020548190610c93908463ffffffff610d2e16565b600160a060020a038216600090815260208190526040902055600154610cbf908463ffffffff610d2e16565b6001819055600160a060020a038216600081815260208190526040908190205491927f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b46449287929091905180848152602001838152602001828152602001935050505060405180910390a2505050565b600082821115610d3a57fe5b50900390565b600082820183811015610d4f57fe5b93925050505600a165627a7a723058206e27d0f59e9af9aa87e91752c1b5894219165844983bed9ba56c4941f45971640029a165627a7a7230582050907e595da7a55c70586f1e0379ae7487c7514553935a8ce236a8b052faa0c40029
Deployed Bytecode
0x606060405260043610620001b55763ffffffff60e060020a60003504166305e455468114620001ba57806306fdde0314620001e2578063095ea7b314620002725780630a0f816814620002995780630b7e9c4414620002cb5780631051db3414620002ed57806318160ddd14620003175780632112afe6146200032d57806323b872dd14620003d357806327d7874c14620003fe5780632ba73c1514620004205780634071e94e14620004425780634d8a5a57146200045b5780634ea409fa1462000474578063541e8515146200048d5780636352211e14620004b257806370a0823114620004cb5780638462151c14620004ed57806395d89b411462000564578063a3f4df7e146200057a578063a9059cbb1462000590578063aa8f027b14620002ed578063b047fb5014620005b5578063b2e6ceeb14620005cb578063b9186d7d14620005e4578063be7d97b314620005fd578063c721e51b1462000715578063cef13a3414620007ab578063d905bf921462000804578063e55db1e3146200081d578063ef7e81d91462000836578063efef39a11462000852578063f76f8d78146200085f578063fa84cb021462000875575b600080fd5b3415620001c657600080fd5b620001d0620008c7565b60405190815260200160405180910390f35b3415620001ee57600080fd5b620001f8620008cd565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015620002365780820151838201526020016200021c565b50505050905090810190601f168015620002645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156200027e57600080fd5b62000297600160a060020a036004351660243562000911565b005b3415620002a557600080fd5b620002af62000993565b604051600160a060020a03909116815260200160405180910390f35b3415620002d757600080fd5b62000297600160a060020a0360043516620009a2565b3415620002f957600080fd5b62000303620009e8565b604051901515815260200160405180910390f35b34156200032357600080fd5b620001d0620009ed565b34156200033957600080fd5b6200029760048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505093359350620009f392505050565b3415620003df57600080fd5b62000297600160a060020a036004358116906024351660443562000bbd565b34156200040a57600080fd5b62000297600160a060020a036004351662000c16565b34156200042c57600080fd5b62000297600160a060020a036004351662000c6a565b34156200044e57600080fd5b6200029760043562000cbe565b34156200046757600080fd5b620002af60043562000d13565b34156200048057600080fd5b620002af60043562000d2e565b34156200049957600080fd5b62000297600435600160a060020a036024351662000d49565b3415620004be57600080fd5b620002af60043562000dfa565b3415620004d757600080fd5b620001d0600160a060020a036004351662000e24565b3415620004f957600080fd5b6200050f600160a060020a036004351662000e3f565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156200055057808201518382015260200162000536565b505050509050019250505060405180910390f35b34156200057057600080fd5b620001f862000f30565b34156200058657600080fd5b620001f862000f73565b34156200059c57600080fd5b62000297600160a060020a036004351660243562000faa565b3415620005c157600080fd5b620002af62000fea565b3415620005d757600080fd5b6200029760043562000ff9565b3415620005f057600080fd5b620001d06004356200104f565b34156200060957600080fd5b6200061660043562001061565b60405160408101839052600160a060020a0382166060820152608080825281906020820190820187818151815260200191508051906020019080838360005b838110156200066f57808201518382015260200162000655565b50505050905090810190601f1680156200069d5780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015620006d5578082015183820152602001620006bb565b50505050905090810190601f168015620007035780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34156200072157600080fd5b6200029760046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506200120f95505050505050565b3415620007b757600080fd5b62000297600480359060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506200138995505050505050565b34156200081057600080fd5b62000297600435620014be565b34156200082957600080fd5b620002af6004356200151e565b34156200084257600080fd5b6200029760043560243562001539565b6200029760043562001606565b34156200086b57600080fd5b620001f8620019fd565b34156200088157600080fd5b62000297600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965062001a3495505050505050565b600e5481565b620008d76200264f565b60408051908101604052600b81527f43727970746f456d6f6a69000000000000000000000000000000000000000000602082015290505b90565b6200091d338262001f10565b15156200092957600080fd5b600081815260086020526040908190208054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600c54600160a060020a031681565b600c5433600160a060020a0390811691161480620009ce5750600d5433600160a060020a039081169116145b1515620009da57600080fd5b620009e58162001f30565b50565b600190565b600f5490565b600c54600090819033600160a060020a039081169116148062000a245750600d5433600160a060020a039081169116145b151562000a3057600080fd5b600e546103e8901062000a4257600080fd5b859150600160a060020a038216151562000a6557600d54600160a060020a031691505b6000831162000a745760005492505b600e8054600101905562000a8a85838562001f7b565b9050848462000a9862002661565b808060200180602001838103835285818151815260200191508051906020019080838360005b8381101562000ad857808201518382015260200162000abe565b50505050905090810190601f16801562000b065780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101562000b3e57808201518382015260200162000b24565b50505050905090810190601f16801562000b6c5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f080151562000b8a57600080fd5b6000918252600b60205260409091208054600160a060020a031916600160a060020a039092169190911790555050505050565b62000bc9838262001f10565b151562000bd557600080fd5b62000be1828262002210565b151562000bed57600080fd5b62000bf88262002230565b151562000c0457600080fd5b62000c118383836200223e565b505050565b600c5433600160a060020a0390811691161462000c3257600080fd5b600160a060020a038116151562000c4857600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600d5433600160a060020a0390811691161462000c8657600080fd5b600160a060020a038116151562000c9c57600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b600c5433600160a060020a039081169116148062000cea5750600d5433600160a060020a039081169116145b151562000cf657600080fd5b80630bc4839c1415620009e5576004805460ff1916600117905550565b600860205260009081526040902054600160a060020a031681565b600660205260009081526040902054600160a060020a031681565b600c5433600160a060020a039081169116148062000d755750600d5433600160a060020a039081169116145b151562000d8157600080fd5b6000828152600b60205260409081902054600160a060020a03169063e906e15c9083905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151562000de157600080fd5b6102c65a03f1151562000df357600080fd5b5050505050565b600081815260066020526040902054600160a060020a031680151562000e1f57600080fd5b919050565b600160a060020a031660009081526007602052604090205490565b62000e496200264f565b600062000e556200264f565b600080600062000e658762000e24565b945084151562000e9857600060405180591062000e7f5750595b9080825280602002602001820160405250955062000f26565b8460405180591062000ea75750595b9080825280602002602001820160405250935062000ec4620009ed565b925060009150600090505b82811162000f2257600081815260066020526040902054600160a060020a038881169116141562000f19578084838151811062000f0857fe5b602090810290910101526001909101905b60010162000ecf565b8395505b5050505050919050565b62000f3a6200264f565b60408051908101604052600281527f43450000000000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052600b81527f43727970746f456d6f6a69000000000000000000000000000000000000000000602082015281565b62000fb6338262001f10565b151562000fc257600080fd5b62000fcd8262002230565b151562000fd957600080fd5b62000fe63383836200223e565b5050565b600d54600160a060020a031681565b6000818152600660205260409020543390600160a060020a03166200101e8262002230565b15156200102a57600080fd5b62001036828462002210565b15156200104257600080fd5b62000c118183856200223e565b60009081526009602052604090205490565b6200106b6200264f565b620010756200264f565b6000806000600f868154811015156200108a57fe5b90600052602060002090600202019050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620011365780601f106200110a5761010080835404028352916020019162001136565b820191906000526020600020905b8154815290600101906020018083116200111857829003601f168201915b50505050509450806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620011d95780601f10620011ad57610100808354040283529160200191620011d9565b820191906000526020600020905b815481529060010190602001808311620011bb57829003601f168201915b50505060009889525050600960209081526040808920546006909252909720549597909695600160a060020a0316945092505050565b600c5460009033600160a060020a03908116911614806200123e5750600d5433600160a060020a039081169116145b15156200124a57600080fd5b62001259833060005462001f7b565b905082826200126762002661565b808060200180602001838103835285818151815260200191508051906020019080838360005b83811015620012a75780820151838201526020016200128d565b50505050905090810190601f168015620012d55780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156200130d578082015183820152602001620012f3565b50505050905090810190601f1680156200133b5780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015156200135957600080fd5b6000918252600b60205260409091208054600160a060020a031916600160a060020a039092169190911790555050565b600062001397338462001f10565b1515620013a357600080fd5b600f805484908110620013b257fe5b90600052602060002090600202019050620013d7620013d18362002315565b62002344565b81600101908051620013ee92916020019062002672565b507f634b5460846831c24a814503a12dd9565272ed6455da326222526dee8b9117df338483600101604051600160a060020a03841681526020810183905260606040820181815283546002600019610100600184161502019091160491830182905290608083019084908015620014a95780601f106200147d57610100808354040283529160200191620014a9565b820191906000526020600020905b8154815290600101906020018083116200148b57829003601f168201915b505094505050505060405180910390a1505050565b600c5433600160a060020a0390811691161480620014ea5750600d5433600160a060020a039081169116145b1515620014f657600080fd5b60035460099011156200150857600080fd5b60045460ff16156200151957600080fd5b600355565b6000908152600b6020526040902054600160a060020a031690565b600c5433600160a060020a0390811691161480620015655750600d5433600160a060020a039081169116145b15156200157157600080fd5b6000828152600b602052604080822054600c54600160a060020a039182169363a9059cbb9391909216918591516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620015e657600080fd5b6102c65a03f11515620015f857600080fd5b505050604051805150505050565b6000818152600660209081526040808320546009909252822054600160a060020a039182169290913391908190819084168614156200164457600080fd5b6200164f8462002230565b15156200165b57600080fd5b34859010156200166a57600080fd5b62001679606460035462002504565b9250620016936200168b868562002517565b606462002551565b9150620016a1348662002504565b9050600154851015620016db57620016c6620016bf8660c862002517565b8462002551565b60008881526009602052604090205562001718565b600254851015620016f757620016c6620016bf86608262002517565b62001708620016bf86607362002517565b6000888152600960205260409020555b620017258685896200223e565b30600160a060020a031686600160a060020a03161415156200177357600160a060020a03861682156108fc0283604051600060405180830381858888f1935050505015156200177357600080fd5b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f8786600960008b8152602001908152602001600020548988600f8d815481101515620017bb57fe5b90600052602060002090600202016000016040518681526020810186905260408101859052600160a060020a0380851660608301528316608082015260c060a082018181528354600260001961010060018416150201909116049183018290529060e083019084908015620018745780601f10620018485761010080835404028352916020019162001874565b820191906000526020600020905b8154815290600101906020018083116200185657829003601f168201915b505097505050505050505060405180910390a1600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515620018b957600080fd5b6000878152600b6020526040902054600160a060020a031615620019f4576000878152600b602052604080822054600554600160a060020a03909116926340c10f19928a929190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200194957600080fd5b6102c65a03f115156200195b57600080fd5b505050604051805150506000878152600b602052604080822054600554600160a060020a03909116926340c10f199233929190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620019d757600080fd5b6102c65a03f11515620019e957600080fd5b505050604051805150505b50505050505050565b60408051908101604052600281527f4345000000000000000000000000000000000000000000000000000000000000602082015281565b600062001a406200264f565b60008060006020604051908101604052600080825290945091505b855182101562001dab5784600087848151811062001a7557fe5b906020019060200201518152602001908152602001600020546000141562001b6557600b600087848151811062001aa857fe5b90602001906020020151815260208101919091526040908101600090812054600160a060020a0316916370a08231913391516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001b1d57600080fd5b6102c65a03f1151562001b2f57600080fd5b5050506040518051905085600088858151811062001b4957fe5b9060200190602002015181526020810191909152604001600020555b84600101600087848151811062001b7857fe5b906020019060200201518152602081019190915260400160009081208054600190810190915586019087848151811062001bae57fe5b90602001906020020151815260200190815260200160002054600b600088858151811062001bd857fe5b90602001906020020151815260208101919091526040908101600090812054600160a060020a0316916370a08231913391516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151562001c4d57600080fd5b6102c65a03f1151562001c5f57600080fd5b505050604051805190501015151562001c7757600080fd5b6009600087848151811062001c8857fe5b906020019060200201518152602001908152602001600020548301925062001d9d62001d85600f88858151811062001cbc57fe5b906020019060200201518154811062001cd157fe5b90600052602060002090600202016000018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562001d7a5780601f1062001d4e5761010080835404028352916020019162001d7a565b820191906000526020600020905b81548152906001019060200180831162001d5c57829003601f168201915b505050505062002569565b62001d908662002569565b9063ffffffff6200259316565b935060019091019062001a5b565b62001db884338562001f7b565b50600090505b855181101562001f0857600b600087838151811062001dd957fe5b90602001906020020151815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a031663fcd3533c6005543360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151562001e5c57600080fd5b6102c65a03f1151562001e6e57600080fd5b5050507f41b05bf655882bc27017be44e8216d1059cbc6b9668d754f5a745dcce690a9d486828151811062001e9f57fe5b90602001906020020151600b600089858151811062001eba57fe5b9060200190602002015181526020810191909152604090810160002054600160a060020a03169051918252600160a060020a031660208201526040908101905180910390a160010162001dbe565b505050505050565b600090815260066020526040902054600160a060020a0390811691161490565b600160a060020a0381161515620009e557600c54600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515620009e557600080fd5b600062001f87620026f7565b6000600a866040518082805190602001908083835b6020831062001fbd5780518252601f19909201916020918201910162001f9c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040519081900390205460ff16156200200057600080fd5b604080519081016040528087815260200160408051908101604052600b81527ff09f92a54e6577f09f92a500000000000000000000000000000000000000000060208201529052600f805491935060019180830162002060838262002720565b600092835260209092208591600202018151819080516200208692916020019062002672565b50602082015181600101908051620020a392916020019062002672565b50505003905063ffffffff81168114620020bc57600080fd5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef2818787604051838152600160a060020a038216604082015260606020820181815290820184818151815260200191508051906020019080838360005b838110156200213357808201518382015260200162002119565b50505050905090810190601f168015620021615780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160008181526009602052604081208590556200218e9086836200223e565b6001600a876040518082805190602001908083835b60208310620021c45780518252601f199092019160209182019101620021a3565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051908190039020805460ff191691151591909117905595945050505050565b600090815260086020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b600160a060020a03808316600081815260076020908152604080832080546001019055858352600690915290208054600160a060020a0319169091179055831615620022c057600160a060020a03831660009081526007602090815260408083208054600019019055838352600890915290208054600160a060020a03191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b6000620023216200264f565b5081805115156200233657600091506200233e565b602083015191505b50919050565b6200234e6200264f565b620023586200264f565b6000806000620023676200264f565b6020604051805910620023775750595b818152601f19601f83011681016020016040529050945060009350600092505b602083101562002426576008830260020a870291507fff000000000000000000000000000000000000000000000000000000000000008216156200241a5781858581518110620023e357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001909301925b60019092019162002397565b83604051805910620024355750595b818152601f19601f830116810160200160405290509050600092505b83831015620024fa578483815181106200246757fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818481518110620024be57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019092019162002451565b9695505050505050565b6000828211156200251157fe5b50900390565b6000808315156200252c57600091506200254a565b508282028284828115156200253d57fe5b04146200254657fe5b8091505b5092915050565b60008082848115156200256057fe5b04949350505050565b620025736200274f565b602082016040805190810160405280845181526020019190915292915050565b6200259d6200264f565b620025a76200264f565b60008351855101604051805910620025bc5750595b818152601f19601f830116810160200160405290509150602082019050620025eb818660200151875162002608565b62002600855182018560200151865162002608565b509392505050565b60005b602082106200263057825184526020840193506020830192506020820391506200260b565b6001826020036101000a03905080198351168185511617909352505050565b60206040519081016040526000815290565b604051610f65806200280483390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620026b557805160ff1916838001178555620026e5565b82800160010185558215620026e5579182015b82811115620026e5578251825591602001919060010190620026c8565b50620026f392915062002766565b5090565b60408051908101604052806200270c6200264f565b81526020016200271b6200264f565b905290565b81548183558181151162000c115760020281600202836000526020600020918201910162000c11919062002783565b604080519081016040526000808252602082015290565b6200090e91905b80821115620026f357600081556001016200276d565b6200090e91905b80821115620026f3576000620027a18282620027bb565b620027b1600183016000620027bb565b506002016200278a565b50805460018160011615610100020316600290046000825580601f10620027e35750620009e5565b601f016020900490600052602060002090810190620009e59190620027665600606060405234156200001057600080fd5b60405162000f6538038062000f658339810160405280805182019190602001805160038054600160a060020a03191633600160a060020a0316908117909155920191905063aa8f027b6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620000aa57600080fd5b6102c65a03f11515620000bc57600080fd5b505050604051805190501515620000d257600080fd5b60048054600160a060020a03191633600160a060020a03161790556005828051620001029291602001906200012e565b506006818051620001189291602001906200012e565b50506007805460ff1916600817905550620001d3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017157805160ff1916838001178555620001a1565b82800160010185558215620001a1579182015b82811115620001a157825182559160200191906001019062000184565b50620001af929150620001b3565b5090565b620001d091905b80821115620001af5760008155600101620001ba565b90565b610d8280620001e36000396000f3006060604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100ea578063095ea7b31461017457806318160ddd146101aa57806323b872dd146101cf578063313ce567146101f757806340c10f1914610220578063661884631461024257806370a08231146102645780638da5cb5b1461028357806395d89b41146102b2578063a9059cbb146102c5578063d73dd623146102e7578063dd62ed3e14610309578063e906e15c1461032e578063f2fde38b1461034f578063fcd3533c1461036e575b600080fd5b34156100f557600080fd5b6100fd610390565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610139578082015183820152602001610121565b50505050905090810190601f1680156101665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017f57600080fd5b610196600160a060020a036004351660243561042e565b604051901515815260200160405180910390f35b34156101b557600080fd5b6101bd61049a565b60405190815260200160405180910390f35b34156101da57600080fd5b610196600160a060020a03600435811690602435166044356104a0565b341561020257600080fd5b61020a610620565b60405160ff909116815260200160405180910390f35b341561022b57600080fd5b610196600160a060020a0360043516602435610629565b341561024d57600080fd5b610196600160a060020a0360043516602435610735565b341561026f57600080fd5b6101bd600160a060020a036004351661082f565b341561028e57600080fd5b61029661084a565b604051600160a060020a03909116815260200160405180910390f35b34156102bd57600080fd5b6100fd610859565b34156102d057600080fd5b610196600160a060020a03600435166024356108c4565b34156102f257600080fd5b610196600160a060020a03600435166024356109d6565b341561031457600080fd5b6101bd600160a060020a0360043581169060243516610a7a565b341561033957600080fd5b61034d600160a060020a0360043516610aa5565b005b341561035a57600080fd5b61034d600160a060020a0360043516610b89565b341561037957600080fd5b61034d600435600160a060020a0360243516610c24565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104265780601f106103fb57610100808354040283529160200191610426565b820191906000526020600020905b81548152906001019060200180831161040957829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60015490565b6000600160a060020a03831615156104b757600080fd5b600160a060020a0384166000908152602081905260409020548211156104dc57600080fd5b600160a060020a038085166000908152600260209081526040808320339094168352929052205482111561050f57600080fd5b600160a060020a038416600090815260208190526040902054610538908363ffffffff610d2e16565b600160a060020a03808616600090815260208190526040808220939093559085168152205461056d908363ffffffff610d4016565b600160a060020a03808516600090815260208181526040808320949094558783168252600281528382203390931682529190915220546105b3908363ffffffff610d2e16565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60075460ff1681565b60045460009033600160a060020a0390811691161461064757600080fd5b60015461065a908363ffffffff610d4016565b600155600160a060020a038316600090815260208190526040902054610686908363ffffffff610d4016565b600160a060020a0384166000818152602081905260409081902083905560015491927fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb9286925180848152602001838152602001828152602001935050505060405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561079257600160a060020a0333811660009081526002602090815260408083209388168352929052908120556107c9565b6107a2818463ffffffff610d2e16565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526020819052604090205490565b600354600160a060020a031681565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104265780601f106103fb57610100808354040283529160200191610426565b6000600160a060020a03831615156108db57600080fd5b600160a060020a03331660009081526020819052604090205482111561090057600080fd5b600160a060020a033316600090815260208190526040902054610929908363ffffffff610d2e16565b600160a060020a03338116600090815260208190526040808220939093559085168152205461095e908363ffffffff610d4016565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054610a0e908363ffffffff610d4016565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610ac057600080fd5b600160a060020a0381161515610ad557600080fd5b80600160a060020a031663aa8f027b6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610b3457600080fd5b6102c65a03f11515610b4557600080fd5b505050604051805190501515610b5a57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035433600160a060020a03908116911614610ba457600080fd5b600160a060020a0381161515610bb957600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045460009033600160a060020a03908116911614610c4257600080fd5b600160a060020a038216600090815260208190526040902054831115610c6757600080fd5b50600160a060020a0381166000908152602081905260409020548190610c93908463ffffffff610d2e16565b600160a060020a038216600090815260208190526040902055600154610cbf908463ffffffff610d2e16565b6001819055600160a060020a038216600081815260208190526040908190205491927f743033787f4738ff4d6a7225ce2bd0977ee5f86b91a902a58f5e4d0b297b46449287929091905180848152602001838152602001828152602001935050505060405180910390a2505050565b600082821115610d3a57fe5b50900390565b600082820183811015610d4f57fe5b93925050505600a165627a7a723058206e27d0f59e9af9aa87e91752c1b5894219165844983bed9ba56c4941f45971640029a165627a7a7230582050907e595da7a55c70586f1e0379ae7487c7514553935a8ce236a8b052faa0c40029
Swarm Source
bzzr://50907e595da7a55c70586f1e0379ae7487c7514553935a8ce236a8b052faa0c4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,325.87 | 0.00956091 | $31.8 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.