ERC-20
Overview
Max Total Supply
870 CSCPF
Holders
185
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CSCPreSaleManager
Compiler Version
v0.4.21+commit.dfe3193c
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-18 */ pragma solidity ^0.4.19; /* Adapted from strings.sol created by Nick Johnson <[email protected]> * Ref: https://github.com/Arachnid/solidity-stringutils/blob/2f6ca9accb48ae14c66f1437ec50ed19a0616f78/strings.sol * @title String & slice utility library for Solidity contracts. * @author Nick Johnson <[email protected]> */ library strings { struct slice { uint _len; uint _ptr; } /* * @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 pure returns (slice) { uint ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } function memcpy(uint dest, uint src, uint len) private pure { // 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)) } } 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 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; } } // 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; } /* * @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 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 pure returns (string) { var ret = new string(self._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); return ret; } } /* Helper String Functions for Game Manager Contract * @title String Healpers * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract StringHelpers { using strings for *; 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); } } /// @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 balanceOf(address _owner) public view returns (uint256 balance); function ownerOf(uint256 _tokenId) public view returns (address owner); function approve(address _to, uint256 _tokenId) public; function transfer(address _to, uint256 _tokenId) public; function transferFrom(address _from, address _to, uint256 _tokenId) public; function implementsERC721() public pure returns (bool); function takeOwnership(uint256 _tokenId) public; function totalSupply() public view returns (uint256 total); 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); // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165) function supportsInterface(bytes4 _interfaceID) external view returns (bool); } /* Controls state and access rights for contract functions * @title Operational Control * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) * Inspired and adapted from contract created by OpenZeppelin * Ref: https://github.com/OpenZeppelin/zeppelin-solidity/ */ contract OperationalControl { // Facilitates access & control for the game. // Roles: // -The Managers (Primary/Secondary): Has universal control of all elements (No ability to withdraw) // -The Banker: The Bank can withdraw funds and adjust fees / prices. /// @dev Emited when contract is upgraded event ContractUpgrade(address newContract); // The addresses of the accounts (or contracts) that can execute actions within each roles. address public managerPrimary; address public managerSecondary; address public bankManager; // @dev Keeps track whether the contract is paused. When that is true, most actions are blocked bool public paused = false; // @dev Keeps track whether the contract erroredOut. When that is true, most actions are blocked & refund can be claimed bool public error = false; /// @dev Operation modifiers for limiting access modifier onlyManager() { require(msg.sender == managerPrimary || msg.sender == managerSecondary); _; } modifier onlyBanker() { require(msg.sender == bankManager); _; } modifier anyOperator() { require( msg.sender == managerPrimary || msg.sender == managerSecondary || msg.sender == bankManager ); _; } /// @dev Assigns a new address to act as the Primary Manager. function setPrimaryManager(address _newGM) external onlyManager { require(_newGM != address(0)); managerPrimary = _newGM; } /// @dev Assigns a new address to act as the Secondary Manager. function setSecondaryManager(address _newGM) external onlyManager { require(_newGM != address(0)); managerSecondary = _newGM; } /// @dev Assigns a new address to act as the Banker. function setBanker(address _newBK) external onlyManager { require(_newBK != address(0)); bankManager = _newBK; } /*** Pausable functionality adapted from OpenZeppelin ***/ /// @dev Modifier to allow actions only when the contract IS NOT paused modifier whenNotPaused() { require(!paused); _; } /// @dev Modifier to allow actions only when the contract IS paused modifier whenPaused { require(paused); _; } /// @dev Modifier to allow actions only when the contract has Error modifier whenError { require(error); _; } /// @dev Called by any Operator role to pause the contract. /// Used only if a bug or exploit is discovered (Here to limit losses / damage) function pause() external onlyManager whenNotPaused { paused = true; } /// @dev Unpauses the smart contract. Can only be called by the Game Master /// @notice This is public rather than external so it can be called by derived contracts. function unpause() public onlyManager whenPaused { // can't unpause if contract was upgraded paused = false; } /// @dev Unpauses the smart contract. Can only be called by the Game Master /// @notice This is public rather than external so it can be called by derived contracts. function hasError() public onlyManager whenPaused { error = true; } /// @dev Unpauses the smart contract. Can only be called by the Game Master /// @notice This is public rather than external so it can be called by derived contracts. function noError() public onlyManager whenPaused { error = false; } } contract CSCPreSaleItemBase is ERC721, OperationalControl, StringHelpers { /*** EVENTS ***/ /// @dev The Created event is fired whenever a new collectible comes into existence. event CollectibleCreated(address owner, uint256 globalId, uint256 collectibleType, uint256 collectibleClass, uint256 sequenceId, bytes32 collectibleName); /*** CONSTANTS ***/ /// @notice Name and symbol of the non fungible token, as defined in ERC721. string public constant NAME = "CSCPreSaleFactory"; string public constant SYMBOL = "CSCPF"; bytes4 constant InterfaceSignature_ERC165 = bytes4(keccak256('supportsInterface(bytes4)')); bytes4 constant InterfaceSignature_ERC721 = bytes4(keccak256('name()')) ^ bytes4(keccak256('symbol()')) ^ bytes4(keccak256('totalSupply()')) ^ bytes4(keccak256('balanceOf(address)')) ^ bytes4(keccak256('ownerOf(uint256)')) ^ bytes4(keccak256('approve(address,uint256)')) ^ bytes4(keccak256('transfer(address,uint256)')) ^ bytes4(keccak256('transferFrom(address,address,uint256)')) ^ bytes4(keccak256('tokensOfOwner(address)')) ^ bytes4(keccak256('tokenMetadata(uint256,string)')); /// @dev CSC Pre Sale Struct, having details of the collectible struct CSCPreSaleItem { /// @dev sequence ID i..e Local Index uint256 sequenceId; /// @dev name of the collectible stored in bytes bytes32 collectibleName; /// @dev Collectible Type uint256 collectibleType; /// @dev Collectible Class uint256 collectibleClass; /// @dev owner address address owner; /// @dev redeemed flag (to help whether it got redeemed or not) bool isRedeemed; } /// @dev array of CSCPreSaleItem type holding information on the Collectibles Created CSCPreSaleItem[] allPreSaleItems; /// @dev Max Count for preSaleItem type -> preSaleItem class -> max. limit mapping(uint256 => mapping(uint256 => uint256)) public preSaleItemTypeToClassToMaxLimit; /// @dev Map from preSaleItem type -> preSaleItem class -> max. limit set (bool) mapping(uint256 => mapping(uint256 => bool)) public preSaleItemTypeToClassToMaxLimitSet; /// @dev Map from preSaleItem type -> preSaleItem class -> Name (string / bytes32) mapping(uint256 => mapping(uint256 => bytes32)) public preSaleItemTypeToClassToName; // @dev mapping which holds all the possible addresses which are allowed to interact with the contract mapping (address => bool) approvedAddressList; // @dev mapping holds the preSaleItem -> owner details mapping (uint256 => address) public preSaleItemIndexToOwner; // @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 preSaleItem to an address that has been approved to call /// transferFrom(). Each Collectible can only have one approved address for transfer /// at any time. A zero value means no approval is outstanding. mapping (uint256 => address) public preSaleItemIndexToApproved; /// @dev A mapping of preSaleItem Type to Type Sequence Number to Collectible mapping (uint256 => mapping (uint256 => mapping ( uint256 => uint256 ) ) ) public preSaleItemTypeToSequenceIdToCollectible; /// @dev A mapping from Pre Sale Item Type IDs to the Sequqence Number . mapping (uint256 => mapping ( uint256 => uint256 ) ) public preSaleItemTypeToCollectibleCount; /// @dev Token Starting Index taking into account the old presaleContract total assets that can be generated uint256 public STARTING_ASSET_BASE = 3000; /// @notice Introspection interface as per ERC-165 (https://github.com/ethereum/EIPs/issues/165). /// Returns true for any standardized interfaces implemented by this contract. We implement /// ERC-165 (obviously!) and ERC-721. function supportsInterface(bytes4 _interfaceID) external view returns (bool) { // DEBUG ONLY //require((InterfaceSignature_ERC165 == 0x01ffc9a7) && (InterfaceSignature_ERC721 == 0x9a20483d)); return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721)); } function setMaxLimit(string _collectibleName, uint256 _collectibleType, uint256 _collectibleClass, uint256 _maxLimit) external onlyManager whenNotPaused { require(_maxLimit > 0); require(_collectibleType >= 0 && _collectibleClass >= 0); require(stringToBytes32(_collectibleName) != stringToBytes32("")); require(!preSaleItemTypeToClassToMaxLimitSet[_collectibleType][_collectibleClass]); preSaleItemTypeToClassToMaxLimit[_collectibleType][_collectibleClass] = _maxLimit; preSaleItemTypeToClassToMaxLimitSet[_collectibleType][_collectibleClass] = true; preSaleItemTypeToClassToName[_collectibleType][_collectibleClass] = stringToBytes32(_collectibleName); } /// @dev Method to fetch collectible details function getCollectibleDetails(uint256 _tokenId) external view returns(uint256 assetId, uint256 sequenceId, uint256 collectibleType, uint256 collectibleClass, string collectibleName, bool isRedeemed, address owner) { require (_tokenId > STARTING_ASSET_BASE); uint256 generatedCollectibleId = _tokenId - STARTING_ASSET_BASE; CSCPreSaleItem memory _Obj = allPreSaleItems[generatedCollectibleId]; assetId = _tokenId; sequenceId = _Obj.sequenceId; collectibleType = _Obj.collectibleType; collectibleClass = _Obj.collectibleClass; collectibleName = bytes32ToString(_Obj.collectibleName); owner = _Obj.owner; isRedeemed = _Obj.isRedeemed; } /*** 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 (_tokenId > STARTING_ASSET_BASE); require(_owns(msg.sender, _tokenId)); preSaleItemIndexToApproved[_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]; } function implementsERC721() public pure returns (bool) { return true; } /// 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) { require (_tokenId > STARTING_ASSET_BASE); owner = preSaleItemIndexToOwner[_tokenId]; require(owner != address(0)); } /// @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 { require (_tokenId > STARTING_ASSET_BASE); address newOwner = msg.sender; address oldOwner = preSaleItemIndexToOwner[_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); } /// @param _owner The owner whose collectibles 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 CSCPreSaleItem array looking for collectibles 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) external 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 totalCount = totalSupply() + 1 + STARTING_ASSET_BASE; uint256 resultIndex = 0; // We count on the fact that all LS PreSaleItems have IDs starting at 0 and increasing // sequentially up to the total count. uint256 _tokenId; for (_tokenId = STARTING_ASSET_BASE; _tokenId < totalCount; _tokenId++) { if (preSaleItemIndexToOwner[_tokenId] == _owner) { result[resultIndex] = _tokenId; resultIndex++; } } return result; } } /// For querying totalSupply of token /// @dev Required for ERC-721 compliance. function totalSupply() public view returns (uint256 total) { return allPreSaleItems.length - 1; //Removed 0 index } /// 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 (_tokenId > STARTING_ASSET_BASE); require(_addressNotNull(_to)); require(_owns(msg.sender, _tokenId)); _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 (_tokenId > STARTING_ASSET_BASE); require(_owns(_from, _tokenId)); require(_approved(_to, _tokenId)); require(_addressNotNull(_to)); _transfer(_from, _to, _tokenId); } /*** PRIVATE FUNCTIONS ***/ /// @dev Safety check on _to address to prevent against an unexpected 0x0 default. function _addressNotNull(address _to) internal pure returns (bool) { return _to != address(0); } /// @dev For checking approval of transfer for address _to function _approved(address _to, uint256 _tokenId) internal view returns (bool) { return preSaleItemIndexToApproved[_tokenId] == _to; } /// @dev For creating CSC Collectible function _createCollectible(bytes32 _collectibleName, uint256 _collectibleType, uint256 _collectibleClass) internal returns(uint256) { uint256 _sequenceId = uint256(preSaleItemTypeToCollectibleCount[_collectibleType][_collectibleClass]) + 1; // These requires are not strictly necessary, our calling code should make // sure that these conditions are never broken. require(_sequenceId == uint256(uint32(_sequenceId))); CSCPreSaleItem memory _collectibleObj = CSCPreSaleItem( _sequenceId, _collectibleName, _collectibleType, _collectibleClass, address(0), false ); uint256 generatedCollectibleId = allPreSaleItems.push(_collectibleObj) - 1; uint256 collectibleIndex = generatedCollectibleId + STARTING_ASSET_BASE; preSaleItemTypeToSequenceIdToCollectible[_collectibleType][_collectibleClass][_sequenceId] = collectibleIndex; preSaleItemTypeToCollectibleCount[_collectibleType][_collectibleClass] = _sequenceId; // emit Created event // CollectibleCreated(address owner, uint256 globalId, uint256 collectibleType, uint256 collectibleClass, uint256 sequenceId, bytes32 collectibleName); CollectibleCreated(address(this), collectibleIndex, _collectibleType, _collectibleClass, _sequenceId, _collectibleObj.collectibleName); // This will assign ownership, and also emit the Transfer event as // per ERC721 draft _transfer(address(0), address(this), collectibleIndex); return collectibleIndex; } /// @dev Check for token ownership function _owns(address claimant, uint256 _tokenId) internal view returns (bool) { return claimant == preSaleItemIndexToOwner[_tokenId]; } /// @dev Assigns ownership of a specific preSaleItem to an address. function _transfer(address _from, address _to, uint256 _tokenId) internal { uint256 generatedCollectibleId = _tokenId - STARTING_ASSET_BASE; // Updating the owner details of the collectible CSCPreSaleItem memory _Obj = allPreSaleItems[generatedCollectibleId]; _Obj.owner = _to; allPreSaleItems[generatedCollectibleId] = _Obj; // Since the number of preSaleItem is capped to 2^32 we can't overflow this ownershipTokenCount[_to]++; //transfer ownership preSaleItemIndexToOwner[_tokenId] = _to; // When creating new collectibles _from is 0x0, but we can't account that address. if (_from != address(0)) { ownershipTokenCount[_from]--; // clear any previously approved ownership exchange delete preSaleItemIndexToApproved[_tokenId]; } // Emit the transfer event. Transfer(_from, _to, _tokenId); } /// @dev Checks if a given address currently has transferApproval for a particular CSCPreSaleItem. /// 0 is a valid value as it will be the starter function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) { require(_tokenId > STARTING_ASSET_BASE); return preSaleItemIndexToApproved[_tokenId] == _claimant; } } /* Lucid Sight, Inc. ERC-721 Collectibles Manager. * @title LSPreSaleManager - Lucid Sight, Inc. Non-Fungible Token * @author Fazri Zubair & Farhan Khwaja (Lucid Sight, Inc.) */ contract CSCPreSaleManager is CSCPreSaleItemBase { event RefundClaimed(address owner, uint256 refundValue); /// @dev defines if preSaleItem type -> preSaleItem class -> Vending Machine to set limit (bool) mapping(uint256 => mapping(uint256 => bool)) public preSaleItemTypeToClassToCanBeVendingMachine; /// @dev defines if preSaleItem type -> preSaleItem class -> Vending Machine Fee mapping(uint256 => mapping(uint256 => uint256)) public preSaleItemTypeToClassToVendingFee; /// @dev Mapping created store the amount of value a wallet address used to buy assets mapping(address => uint256) public addressToValue; bool CSCPreSaleInit = false; /// @dev Constructor creates a reference to the NFT (ERC721) ownership contract function CSCPreSaleManager() public { require(msg.sender != address(0)); paused = true; error = false; managerPrimary = msg.sender; } /// @dev allows the contract to accept ETH function() external payable { } /// @dev Function to add approved address to the /// approved address list function addToApprovedAddress (address _newAddr) onlyManager whenNotPaused { require(_newAddr != address(0)); require(!approvedAddressList[_newAddr]); approvedAddressList[_newAddr] = true; } /// @dev Function to remove an approved address from the /// approved address list function removeFromApprovedAddress (address _newAddr) onlyManager whenNotPaused { require(_newAddr != address(0)); require(approvedAddressList[_newAddr]); approvedAddressList[_newAddr] = false; } /// @dev Function toggle vending for collectible function toggleVending (uint256 _collectibleType, uint256 _collectibleClass) external onlyManager { if(preSaleItemTypeToClassToCanBeVendingMachine[_collectibleType][_collectibleClass] == false) { preSaleItemTypeToClassToCanBeVendingMachine[_collectibleType][_collectibleClass] = true; } else { preSaleItemTypeToClassToCanBeVendingMachine[_collectibleType][_collectibleClass] = false; } } /// @dev Function toggle vending for collectible function setVendingFee (uint256 _collectibleType, uint256 _collectibleClass, uint fee) external onlyManager { preSaleItemTypeToClassToVendingFee[_collectibleType][_collectibleClass] = fee; } /// @dev This helps in creating a collectible and then /// transfer it _toAddress function createCollectible(uint256 _collectibleType, uint256 _collectibleClass, address _toAddress) onlyManager external whenNotPaused { require(msg.sender != address(0)); require(msg.sender != address(this)); require(_toAddress != address(0)); require(_toAddress != address(this)); require(preSaleItemTypeToClassToMaxLimitSet[_collectibleType][_collectibleClass]); require(preSaleItemTypeToCollectibleCount[_collectibleType][_collectibleClass] < preSaleItemTypeToClassToMaxLimit[_collectibleType][_collectibleClass]); uint256 _tokenId = _createCollectible(preSaleItemTypeToClassToName[_collectibleType][_collectibleClass], _collectibleType, _collectibleClass); _transfer(address(this), _toAddress, _tokenId); } /// @dev This helps in creating a collectible and then /// transfer it _toAddress function vendingCreateCollectible(uint256 _collectibleType, uint256 _collectibleClass, address _toAddress) payable external whenNotPaused { //Only if Vending is Allowed for this Asset require(preSaleItemTypeToClassToCanBeVendingMachine[_collectibleType][_collectibleClass]); require(msg.value >= preSaleItemTypeToClassToVendingFee[_collectibleType][_collectibleClass]); require(msg.sender != address(0)); require(msg.sender != address(this)); require(_toAddress != address(0)); require(_toAddress != address(this)); require(preSaleItemTypeToClassToMaxLimitSet[_collectibleType][_collectibleClass]); require(preSaleItemTypeToCollectibleCount[_collectibleType][_collectibleClass] < preSaleItemTypeToClassToMaxLimit[_collectibleType][_collectibleClass]); uint256 _tokenId = _createCollectible(preSaleItemTypeToClassToName[_collectibleType][_collectibleClass], _collectibleType, _collectibleClass); uint256 excessBid = msg.value - preSaleItemTypeToClassToVendingFee[_collectibleType][_collectibleClass]; if(excessBid > 0) { msg.sender.transfer(excessBid); } addressToValue[msg.sender] += preSaleItemTypeToClassToVendingFee[_collectibleType][_collectibleClass]; _transfer(address(this), _toAddress, _tokenId); } /// @dev Override unpause so it requires all external contract addresses /// to be set before contract can be unpaused. Also, we can't have /// newContractAddress set either, because then the contract was upgraded. /// @notice This is public rather than external so we can call super.unpause /// without using an expensive CALL. function unpause() public onlyManager whenPaused { // Actually unpause the contract. super.unpause(); } /// @dev Override unpause so it requires all external contract addresses /// to be set before contract can be unpaused. Also, we can't have /// newContractAddress set either, because then the contract was upgraded. /// @notice This is public rather than external so we can call super.unpause /// without using an expensive CALL. function hasError() public onlyManager whenPaused { // Actually error out the contract. super.hasError(); } /// @dev Function does the init step and thus allow /// to create a Dummy 0th colelctible function preSaleInit() onlyManager { require(!CSCPreSaleInit); require(allPreSaleItems.length == 0); CSCPreSaleInit = true; //Fill in index 0 to null requests CSCPreSaleItem memory _Obj = CSCPreSaleItem(0, stringToBytes32("DummyAsset"), 0, 0, address(this), true); allPreSaleItems.push(_Obj); } /// @dev Remove all Ether from the contract, which is the owner's cuts /// as well as any Ether sent directly to the contract address. /// Always transfers to the NFT (ERC721) contract, but can be called either by /// the owner or the NFT (ERC721) contract. function withdrawBalance() onlyBanker { // We are using this boolean method to make sure that even if one fails it will still work bankManager.transfer(this.balance); } // @dev a function to claim refund if and only if theres an error in the contract function claimRefund(address _ownerAddress) whenError { uint256 refundValue = addressToValue[_ownerAddress]; require (refundValue > 0); addressToValue[_ownerAddress] = 0; _ownerAddress.transfer(refundValue); RefundClaimed(_ownerAddress, refundValue); } /// @dev Function used to set the flag isRedeemed to true /// can be called by addresses in the approvedAddressList function isRedeemed(uint256 _tokenId) { require(approvedAddressList[msg.sender]); require(_tokenId > STARTING_ASSET_BASE); uint256 generatedCollectibleId = _tokenId - STARTING_ASSET_BASE; CSCPreSaleItem memory _Obj = allPreSaleItems[generatedCollectibleId]; _Obj.isRedeemed = true; allPreSaleItems[generatedCollectibleId] = _Obj; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":"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":"_collectibleType","type":"uint256"},{"name":"_collectibleClass","type":"uint256"},{"name":"_toAddress","type":"address"}],"name":"createCollectible","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":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"preSaleItemTypeToClassToVendingFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_collectibleType","type":"uint256"},{"name":"_collectibleClass","type":"uint256"},{"name":"_toAddress","type":"address"}],"name":"vendingCreateCollectible","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"preSaleItemTypeToClassToMaxLimitSet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"preSaleItemTypeToClassToMaxLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAddr","type":"address"}],"name":"removeFromApprovedAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isRedeemed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"preSaleItemTypeToClassToName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"preSaleItemTypeToSequenceIdToCollectible","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_collectibleType","type":"uint256"},{"name":"_collectibleClass","type":"uint256"}],"name":"toggleVending","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"STARTING_ASSET_BASE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","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":"_tokenId","type":"uint256"}],"name":"getCollectibleDetails","outputs":[{"name":"assetId","type":"uint256"},{"name":"sequenceId","type":"uint256"},{"name":"collectibleType","type":"uint256"},{"name":"collectibleClass","type":"uint256"},{"name":"collectibleName","type":"string"},{"name":"isRedeemed","type":"bool"},{"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":false,"inputs":[{"name":"_collectibleName","type":"string"},{"name":"_collectibleType","type":"uint256"},{"name":"_collectibleClass","type":"uint256"},{"name":"_maxLimit","type":"uint256"}],"name":"setMaxLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newGM","type":"address"}],"name":"setSecondaryManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"","type":"uint256"}],"name":"preSaleItemIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"noError","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[{"name":"","type":"uint256"}],"name":"preSaleItemIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"preSaleInit","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"hasError","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"managerPrimary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAddr","type":"address"}],"name":"addToApprovedAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_collectibleType","type":"uint256"},{"name":"_collectibleClass","type":"uint256"},{"name":"fee","type":"uint256"}],"name":"setVendingFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"addressToValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ownerAddress","type":"address"}],"name":"claimRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newGM","type":"address"}],"name":"setPrimaryManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"error","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"preSaleItemTypeToClassToCanBeVendingMachine","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bankManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"managerSecondary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBK","type":"address"}],"name":"setBanker","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"preSaleItemTypeToCollectibleCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"refundValue","type":"uint256"}],"name":"RefundClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"globalId","type":"uint256"},{"indexed":false,"name":"collectibleType","type":"uint256"},{"indexed":false,"name":"collectibleClass","type":"uint256"},{"indexed":false,"name":"sequenceId","type":"uint256"},{"indexed":false,"name":"collectibleName","type":"bytes32"}],"name":"CollectibleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","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
60606040526002805460a060020a61ffff0219169055610bb8600d556011805460ff19169055341561003057600080fd5b33600160a060020a0316151561004557600080fd5b6002805460a860020a60ff021960a060020a60ff0219909116740100000000000000000000000000000000000000001716905560008054600160a060020a033316600160a060020a03199091161790556126e5806100a46000396000f3006060604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a78114610247578063095ea7b3146102935780631051db34146102b557806318160ddd146102c85780631f1e6c4e146102ed57806323b872dd14610312578063285acfb01461033a5780632bac0b3b146103535780632e1921751461036d5780632f3380d91461038657806330a7351c1461039f57806332d33cd0146103be5780633499bbf3146103d45780633f4ba83a146103ed57806341255ea7146104005780634a7143781461041c578063524a8131146104355780635c975abb146104485780635fd8c7101461045b5780636352211e1461046e57806370994b31146104a057806370a08231146105655780638084ee5814610584578063825bdb74146105ac5780638456cb59146105cb5780638462151c146105de578063884bd204146106505780638a53f2301461066657806395d89b4114610679578063a3f4df7e14610703578063a4d5ed1314610716578063a7c198411461072c578063a9059cbb1461073f578063ad5e46cb14610761578063b2e6ceeb14610774578063b777cad71461078a578063b86dab461461079d578063bc37d7b8146107bc578063bff2e095146107d8578063bffa55d5146107f7578063c0619c7014610816578063c79f8b6214610835578063e78d622514610848578063e9e2990e14610861578063ee70f39214610874578063f1ff732b14610887578063f76f8d78146108a6578063f973ece9146108b9575b005b341561025257600080fd5b61027f7fffffffff00000000000000000000000000000000000000000000000000000000600435166108d2565b604051901515815260200160405180910390f35b341561029e57600080fd5b610245600160a060020a0360043516602435610b59565b34156102c057600080fd5b61027f610be6565b34156102d357600080fd5b6102db610bec565b60405190815260200160405180910390f35b34156102f857600080fd5b610245600435602435600160a060020a0360443516610bf6565b341561031d57600080fd5b610245600160a060020a0360043581169060243516604435610d48565b341561034557600080fd5b6102db600435602435610da4565b610245600435602435600160a060020a0360443516610dc1565b341561037857600080fd5b61027f600435602435610fbf565b341561039157600080fd5b6102db600435602435610fdf565b34156103aa57600080fd5b610245600160a060020a0360043516610ffc565b34156103c957600080fd5b6102456004356110a6565b34156103df57600080fd5b6102db6004356024356111ee565b34156103f857600080fd5b61024561120b565b341561040b57600080fd5b6102db600435602435604435611263565b341561042757600080fd5b610245600435602435611286565b341561044057600080fd5b6102db61132e565b341561045357600080fd5b61027f611334565b341561046657600080fd5b610245611344565b341561047957600080fd5b610484600435611398565b604051600160a060020a03909116815260200160405180910390f35b34156104ab57600080fd5b6104b66004356113ce565b60405187815260208101879052604081018690526060810185905282151560a0820152600160a060020a03821660c082015260e06080820181815290820185818151815260200191508051906020019080838360005b8381101561052457808201518382015260200161050c565b50505050905090810190601f1680156105515780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b341561057057600080fd5b6102db600160a060020a03600435166114b0565b341561058f57600080fd5b6102456024600480358281019291013590356044356064356114cb565b34156105b757600080fd5b610245600160a060020a0360043516611655565b34156105d657600080fd5b6102456116c2565b34156105e957600080fd5b6105fd600160a060020a0360043516611727565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561063c578082015183820152602001610624565b505050509050019250505060405180910390f35b341561065b57600080fd5b610484600435611811565b341561067157600080fd5b61024561182c565b341561068457600080fd5b61068c61189b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156106c85780820151838201526020016106b0565b50505050905090810190601f1680156106f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561070e57600080fd5b61068c6118dc565b341561072157600080fd5b610484600435611913565b341561073757600080fd5b61024561192e565b341561074a57600080fd5b610245600160a060020a0360043516602435611aa8565b341561076c57600080fd5b610245611aea565b341561077f57600080fd5b610245600435611b40565b341561079557600080fd5b610484611ba3565b34156107a857600080fd5b610245600160a060020a0360043516611bb2565b34156107c757600080fd5b610245600435602435604435611c5e565b34156107e357600080fd5b6102db600160a060020a0360043516611cb0565b341561080257600080fd5b610245600160a060020a0360043516611cc2565b341561082157600080fd5b610245600160a060020a0360043516611da1565b341561084057600080fd5b61027f611e0e565b341561085357600080fd5b61027f600435602435611e30565b341561086c57600080fd5b610484611e50565b341561087f57600080fd5b610484611e5f565b341561089257600080fd5b610245600160a060020a0360043516611e6e565b34156108b157600080fd5b61068c611edb565b34156108c457600080fd5b6102db600435602435611f12565b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610b5157506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b600d548111610b6757600080fd5b610b713382611f2f565b1515610b7c57600080fd5b6000818152600a6020526040908190208054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b60015b90565b6003546000190190565b6000805433600160a060020a0390811691161480610c22575060015433600160a060020a039081169116145b1515610c2d57600080fd5b60025460a060020a900460ff1615610c4457600080fd5b33600160a060020a03161515610c5957600080fd5b30600160a060020a031633600160a060020a031614151515610c7a57600080fd5b600160a060020a0382161515610c8f57600080fd5b30600160a060020a031682600160a060020a031614151515610cb057600080fd5b600084815260056020908152604080832086845290915290205460ff161515610cd857600080fd5b6000848152600460209081526040808320868452825280832054878452600c83528184208785529092529091205410610d1057600080fd5b6000848152600660209081526040808320868452909152902054610d35908585611f4f565b9050610d42308383612126565b50505050565b600d548111610d5657600080fd5b610d608382611f2f565b1515610d6b57600080fd5b610d75828261230c565b1515610d8057600080fd5b610d898261232c565b1515610d9457600080fd5b610d9f838383612126565b505050565b600f60209081526000928352604080842090915290825290205481565b600254600090819060a060020a900460ff1615610ddd57600080fd5b6000858152600e6020908152604080832087845290915290205460ff161515610e0557600080fd5b6000858152600f60209081526040808320878452909152902054341015610e2b57600080fd5b33600160a060020a03161515610e4057600080fd5b30600160a060020a031633600160a060020a031614151515610e6157600080fd5b600160a060020a0383161515610e7657600080fd5b30600160a060020a031683600160a060020a031614151515610e9757600080fd5b600085815260056020908152604080832087845290915290205460ff161515610ebf57600080fd5b6000858152600460209081526040808320878452825280832054888452600c83528184208885529092529091205410610ef757600080fd5b6000858152600660209081526040808320878452909152902054610f1c908686611f4f565b6000868152600f6020908152604080832088845290915281205491935034919091039150811115610f7857600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610f7857600080fd5b6000858152600f60209081526040808320878452825280832054600160a060020a0333168452601090925290912080549091019055610fb8308484612126565b5050505050565b600560209081526000928352604080842090915290825290205460ff1681565b600460209081526000928352604080842090915290825290205481565b60005433600160a060020a0390811691161480611027575060015433600160a060020a039081169116145b151561103257600080fd5b60025460a060020a900460ff161561104957600080fd5b600160a060020a038116151561105e57600080fd5b600160a060020a03811660009081526007602052604090205460ff16151561108557600080fd5b600160a060020a03166000908152600760205260409020805460ff19169055565b60006110b06125fc565b600160a060020a03331660009081526007602052604090205460ff1615156110d757600080fd5b600d5483116110e557600080fd5b600d54830391506003828154811015156110fb57fe5b906000526020600020906005020160c060405190810160409081528254825260018084015460208401526002840154918301919091526003808401546060840152600490930154600160a060020a0316608083015260a082015281549092508291908490811061116757fe5b9060005260206000209060050201600082015181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff021990921691909117905550505050565b600660209081526000928352604080842090915290825290205481565b60005433600160a060020a0390811691161480611236575060015433600160a060020a039081169116145b151561124157600080fd5b60025460a060020a900460ff16151561125957600080fd5b61126161233a565b565b600b60209081526000938452604080852082529284528284209052825290205481565b60005433600160a060020a03908116911614806112b1575060015433600160a060020a039081169116145b15156112bc57600080fd5b6000828152600e6020908152604080832084845290915290205460ff161515611308576000828152600e602090815260408083208484529091529020805460ff1916600117905561132a565b6000828152600e602090815260408083208484529091529020805460ff191690555b5050565b600d5481565b60025460a060020a900460ff1681565b60025433600160a060020a0390811691161461135f57600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561126157600080fd5b600d5460009082116113a957600080fd5b50600081815260086020526040902054600160a060020a0316801515610b5457600080fd5b6000806000806113dc612631565b60008060006113e96125fc565b600d548a116113f757600080fd5b600d548a03915060038281548110151561140d57fe5b906000526020600020906005020160c06040519081016040908152825482526001830154602083015260028301549082015260038201546060820152600490910154600160a060020a038116608083015260a060020a900460ff16151560a08201528a99509050805197508060400151965080606001519550611493816020015161239a565b9450806080015192508060a0015193505050919395979092949650565b600160a060020a031660009081526009602052604090205490565b60005433600160a060020a03908116911614806114f6575060015433600160a060020a039081169116145b151561150157600080fd5b60025460a060020a900460ff161561151857600080fd5b6000811161152557600080fd5b60008310158015611537575060008210155b151561154257600080fd5b61155960206040519081016040526000815261254a565b6115908686806020601f8201819004810201604051908101604052818152929190602084018383808284375061254a945050505050565b141561159b57600080fd5b600083815260056020908152604080832085845290915290205460ff16156115c257600080fd5b6000838152600460209081526040808320858452825280832084905585835260058252808320858452825291829020805460ff1916600117905561163491879187918291601f83018190048102019051908101604052818152929190602084018383808284375061254a945050505050565b60009384526006602090815260408086209486529390529190922055505050565b60005433600160a060020a0390811691161480611680575060015433600160a060020a039081169116145b151561168b57600080fd5b600160a060020a03811615156116a057600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614806116ed575060015433600160a060020a039081169116145b15156116f857600080fd5b60025460a060020a900460ff161561170f57600080fd5b6002805460a060020a60ff02191660a060020a179055565b61172f612631565b6000611739612631565b6000806000611747876114b0565b945084151561177757600060405180591061175f5750595b90808252806020026020018201604052509550611807565b846040518059106117855750595b90808252806020026020018201604052509350600d546117a3610bec565b60010101925060009150600d5490505b8281101561180357600081815260086020526040902054600160a060020a03888116911614156117fb57808483815181106117ea57fe5b602090810290910101526001909101905b6001016117b3565b8395505b5050505050919050565b600860205260009081526040902054600160a060020a031681565b60005433600160a060020a0390811691161480611857575060015433600160a060020a039081169116145b151561186257600080fd5b60025460a060020a900460ff16151561187a57600080fd5b6002805475ff00000000000000000000000000000000000000000019169055565b6118a3612631565b60408051908101604052600581527f43534350460000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052601181527f43534350726553616c65466163746f7279000000000000000000000000000000602082015281565b600a60205260009081526040902054600160a060020a031681565b6119366125fc565b60005433600160a060020a0390811691161480611961575060015433600160a060020a039081169116145b151561196c57600080fd5b60115460ff161561197c57600080fd5b6003541561198957600080fd5b6011805460ff1916600117905560c060405190810160405280600081526020016119e560408051908101604052600a81527f44756d6d79417373657400000000000000000000000000000000000000000000602082015261254a565b81526000602082018190526040820152600160a060020a0330166060820152600160809091018190526003805492935091908101611a238382612643565b60009283526020909220839160050201815181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff0219909216919091179055505050565b600d548111611ab657600080fd5b611abf8261232c565b1515611aca57600080fd5b611ad43382611f2f565b1515611adf57600080fd5b61132a338383612126565b60005433600160a060020a0390811691161480611b15575060015433600160a060020a039081169116145b1515611b2057600080fd5b60025460a060020a900460ff161515611b3857600080fd5b611261612575565b600080600d5483111515611b5357600080fd5b50506000818152600860205260409020543390600160a060020a0316611b788261232c565b1515611b8357600080fd5b611b8d828461230c565b1515611b9857600080fd5b610d9f818385612126565b600054600160a060020a031681565b60005433600160a060020a0390811691161480611bdd575060015433600160a060020a039081169116145b1515611be857600080fd5b60025460a060020a900460ff1615611bff57600080fd5b600160a060020a0381161515611c1457600080fd5b600160a060020a03811660009081526007602052604090205460ff1615611c3a57600080fd5b600160a060020a03166000908152600760205260409020805460ff19166001179055565b60005433600160a060020a0390811691161480611c89575060015433600160a060020a039081169116145b1515611c9457600080fd5b6000928352600f60209081526040808520938552929052912055565b60106020526000908152604090205481565b6002546000907501000000000000000000000000000000000000000000900460ff161515611cef57600080fd5b50600160a060020a038116600090815260106020526040812054908111611d1557600080fd5b600160a060020a0382166000818152601060205260408082209190915582156108fc0290839051600060405180830381858888f193505050501515611d5957600080fd5b7f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae98282604051600160a060020a03909216825260208201526040908101905180910390a15050565b60005433600160a060020a0390811691161480611dcc575060015433600160a060020a039081169116145b1515611dd757600080fd5b600160a060020a0381161515611dec57600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b6002547501000000000000000000000000000000000000000000900460ff1681565b600e60209081526000928352604080842090915290825290205460ff1681565b600254600160a060020a031681565b600154600160a060020a031681565b60005433600160a060020a0390811691161480611e99575060015433600160a060020a039081169116145b1515611ea457600080fd5b600160a060020a0381161515611eb957600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60408051908101604052600581527f4353435046000000000000000000000000000000000000000000000000000000602082015281565b600c60209081526000928352604080842090915290825290205481565b600090815260086020526040902054600160a060020a0390811691161490565b600080611f5a6125fc565b6000858152600c6020908152604080832087845290915281205460010192508063ffffffff84168414611f8c57600080fd5b60c06040519081016040908152858252602082018a905281018890526060810187905260006080820181905260a082015260038054919450600191808301611fd48382612643565b60009283526020909220869160050201815181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff021990921691909117905550600d5460008a8152600b602090815260408083208c845282528083208a8452825280832095909403928301948590558b8252600c81528382208b8352815292902087905593509091507f21b6aa36302fbeb5de063ccfac1338053e8cb8939202417afc214d741f22bb6190309083908a908a908990890151604051600160a060020a03909616865260208601949094526040808601939093526060850191909152608084015260a083019190915260c0909101905180910390a161211b60003083612126565b979650505050505050565b60006121306125fc565b600d548303915060038281548110151561214657fe5b906000526020600020906005020160c060405190810160409081528254825260018301546020830152600283015490820152600380830154606083015260049092015460a060020a900460ff16151560a0820152600160a060020a03861660808201528154909250829190849081106121bb57fe5b9060005260206000209060050201600082015181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff021990921691909117905550600160a060020a03808516600081815260096020908152604080832080546001019055878352600890915290208054600160a060020a03191690911790558516156122be57600160a060020a03851660009081526009602090815260408083208054600019019055858352600a90915290208054600160a060020a03191690555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405190815260200160405180910390a35050505050565b6000908152600a6020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b60005433600160a060020a0390811691161480612365575060015433600160a060020a039081169116145b151561237057600080fd5b60025460a060020a900460ff16151561238857600080fd5b6002805460a060020a60ff0219169055565b6123a2612631565b6123aa612631565b60008060006123b7612631565b60206040518059106123c65750595b818152601f19601f83011681016020016040529050945060009350600092505b6020831015612471576008830260020a870291507fff00000000000000000000000000000000000000000000000000000000000000821615612466578185858151811061242f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001909301925b6001909201916123e6565b8360405180591061247f5750595b818152601f19601f830116810160200160405290509050600092505b83831015612540578483815181106124af57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000281848151811061250557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019092019161249b565b9695505050505050565b6000612554612631565b508180511515612567576000915061256f565b602083015191505b50919050565b60005433600160a060020a03908116911614806125a0575060015433600160a060020a039081169116145b15156125ab57600080fd5b60025460a060020a900460ff1615156125c357600080fd5b6002805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179055565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b60206040519081016040526000815290565b815481835581811511610d9f57600083815260209020610d9f91610be99160059182028101918502015b808211156126b55760008082556001820181905560028201819055600382015560048101805474ffffffffffffffffffffffffffffffffffffffffff1916905560050161266d565b50905600a165627a7a72305820b2b9dd3bf5ecc3d49a61c5cef8fc7f3e01428a82af13e7c297d4116e962a67b10029
Deployed Bytecode
0x6060604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a78114610247578063095ea7b3146102935780631051db34146102b557806318160ddd146102c85780631f1e6c4e146102ed57806323b872dd14610312578063285acfb01461033a5780632bac0b3b146103535780632e1921751461036d5780632f3380d91461038657806330a7351c1461039f57806332d33cd0146103be5780633499bbf3146103d45780633f4ba83a146103ed57806341255ea7146104005780634a7143781461041c578063524a8131146104355780635c975abb146104485780635fd8c7101461045b5780636352211e1461046e57806370994b31146104a057806370a08231146105655780638084ee5814610584578063825bdb74146105ac5780638456cb59146105cb5780638462151c146105de578063884bd204146106505780638a53f2301461066657806395d89b4114610679578063a3f4df7e14610703578063a4d5ed1314610716578063a7c198411461072c578063a9059cbb1461073f578063ad5e46cb14610761578063b2e6ceeb14610774578063b777cad71461078a578063b86dab461461079d578063bc37d7b8146107bc578063bff2e095146107d8578063bffa55d5146107f7578063c0619c7014610816578063c79f8b6214610835578063e78d622514610848578063e9e2990e14610861578063ee70f39214610874578063f1ff732b14610887578063f76f8d78146108a6578063f973ece9146108b9575b005b341561025257600080fd5b61027f7fffffffff00000000000000000000000000000000000000000000000000000000600435166108d2565b604051901515815260200160405180910390f35b341561029e57600080fd5b610245600160a060020a0360043516602435610b59565b34156102c057600080fd5b61027f610be6565b34156102d357600080fd5b6102db610bec565b60405190815260200160405180910390f35b34156102f857600080fd5b610245600435602435600160a060020a0360443516610bf6565b341561031d57600080fd5b610245600160a060020a0360043581169060243516604435610d48565b341561034557600080fd5b6102db600435602435610da4565b610245600435602435600160a060020a0360443516610dc1565b341561037857600080fd5b61027f600435602435610fbf565b341561039157600080fd5b6102db600435602435610fdf565b34156103aa57600080fd5b610245600160a060020a0360043516610ffc565b34156103c957600080fd5b6102456004356110a6565b34156103df57600080fd5b6102db6004356024356111ee565b34156103f857600080fd5b61024561120b565b341561040b57600080fd5b6102db600435602435604435611263565b341561042757600080fd5b610245600435602435611286565b341561044057600080fd5b6102db61132e565b341561045357600080fd5b61027f611334565b341561046657600080fd5b610245611344565b341561047957600080fd5b610484600435611398565b604051600160a060020a03909116815260200160405180910390f35b34156104ab57600080fd5b6104b66004356113ce565b60405187815260208101879052604081018690526060810185905282151560a0820152600160a060020a03821660c082015260e06080820181815290820185818151815260200191508051906020019080838360005b8381101561052457808201518382015260200161050c565b50505050905090810190601f1680156105515780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b341561057057600080fd5b6102db600160a060020a03600435166114b0565b341561058f57600080fd5b6102456024600480358281019291013590356044356064356114cb565b34156105b757600080fd5b610245600160a060020a0360043516611655565b34156105d657600080fd5b6102456116c2565b34156105e957600080fd5b6105fd600160a060020a0360043516611727565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561063c578082015183820152602001610624565b505050509050019250505060405180910390f35b341561065b57600080fd5b610484600435611811565b341561067157600080fd5b61024561182c565b341561068457600080fd5b61068c61189b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156106c85780820151838201526020016106b0565b50505050905090810190601f1680156106f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561070e57600080fd5b61068c6118dc565b341561072157600080fd5b610484600435611913565b341561073757600080fd5b61024561192e565b341561074a57600080fd5b610245600160a060020a0360043516602435611aa8565b341561076c57600080fd5b610245611aea565b341561077f57600080fd5b610245600435611b40565b341561079557600080fd5b610484611ba3565b34156107a857600080fd5b610245600160a060020a0360043516611bb2565b34156107c757600080fd5b610245600435602435604435611c5e565b34156107e357600080fd5b6102db600160a060020a0360043516611cb0565b341561080257600080fd5b610245600160a060020a0360043516611cc2565b341561082157600080fd5b610245600160a060020a0360043516611da1565b341561084057600080fd5b61027f611e0e565b341561085357600080fd5b61027f600435602435611e30565b341561086c57600080fd5b610484611e50565b341561087f57600080fd5b610484611e5f565b341561089257600080fd5b610245600160a060020a0360043516611e6e565b34156108b157600080fd5b61068c611edb565b34156108c457600080fd5b6102db600435602435611f12565b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610b5157506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b600d548111610b6757600080fd5b610b713382611f2f565b1515610b7c57600080fd5b6000818152600a6020526040908190208054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b60015b90565b6003546000190190565b6000805433600160a060020a0390811691161480610c22575060015433600160a060020a039081169116145b1515610c2d57600080fd5b60025460a060020a900460ff1615610c4457600080fd5b33600160a060020a03161515610c5957600080fd5b30600160a060020a031633600160a060020a031614151515610c7a57600080fd5b600160a060020a0382161515610c8f57600080fd5b30600160a060020a031682600160a060020a031614151515610cb057600080fd5b600084815260056020908152604080832086845290915290205460ff161515610cd857600080fd5b6000848152600460209081526040808320868452825280832054878452600c83528184208785529092529091205410610d1057600080fd5b6000848152600660209081526040808320868452909152902054610d35908585611f4f565b9050610d42308383612126565b50505050565b600d548111610d5657600080fd5b610d608382611f2f565b1515610d6b57600080fd5b610d75828261230c565b1515610d8057600080fd5b610d898261232c565b1515610d9457600080fd5b610d9f838383612126565b505050565b600f60209081526000928352604080842090915290825290205481565b600254600090819060a060020a900460ff1615610ddd57600080fd5b6000858152600e6020908152604080832087845290915290205460ff161515610e0557600080fd5b6000858152600f60209081526040808320878452909152902054341015610e2b57600080fd5b33600160a060020a03161515610e4057600080fd5b30600160a060020a031633600160a060020a031614151515610e6157600080fd5b600160a060020a0383161515610e7657600080fd5b30600160a060020a031683600160a060020a031614151515610e9757600080fd5b600085815260056020908152604080832087845290915290205460ff161515610ebf57600080fd5b6000858152600460209081526040808320878452825280832054888452600c83528184208885529092529091205410610ef757600080fd5b6000858152600660209081526040808320878452909152902054610f1c908686611f4f565b6000868152600f6020908152604080832088845290915281205491935034919091039150811115610f7857600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610f7857600080fd5b6000858152600f60209081526040808320878452825280832054600160a060020a0333168452601090925290912080549091019055610fb8308484612126565b5050505050565b600560209081526000928352604080842090915290825290205460ff1681565b600460209081526000928352604080842090915290825290205481565b60005433600160a060020a0390811691161480611027575060015433600160a060020a039081169116145b151561103257600080fd5b60025460a060020a900460ff161561104957600080fd5b600160a060020a038116151561105e57600080fd5b600160a060020a03811660009081526007602052604090205460ff16151561108557600080fd5b600160a060020a03166000908152600760205260409020805460ff19169055565b60006110b06125fc565b600160a060020a03331660009081526007602052604090205460ff1615156110d757600080fd5b600d5483116110e557600080fd5b600d54830391506003828154811015156110fb57fe5b906000526020600020906005020160c060405190810160409081528254825260018084015460208401526002840154918301919091526003808401546060840152600490930154600160a060020a0316608083015260a082015281549092508291908490811061116757fe5b9060005260206000209060050201600082015181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff021990921691909117905550505050565b600660209081526000928352604080842090915290825290205481565b60005433600160a060020a0390811691161480611236575060015433600160a060020a039081169116145b151561124157600080fd5b60025460a060020a900460ff16151561125957600080fd5b61126161233a565b565b600b60209081526000938452604080852082529284528284209052825290205481565b60005433600160a060020a03908116911614806112b1575060015433600160a060020a039081169116145b15156112bc57600080fd5b6000828152600e6020908152604080832084845290915290205460ff161515611308576000828152600e602090815260408083208484529091529020805460ff1916600117905561132a565b6000828152600e602090815260408083208484529091529020805460ff191690555b5050565b600d5481565b60025460a060020a900460ff1681565b60025433600160a060020a0390811691161461135f57600080fd5b600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561126157600080fd5b600d5460009082116113a957600080fd5b50600081815260086020526040902054600160a060020a0316801515610b5457600080fd5b6000806000806113dc612631565b60008060006113e96125fc565b600d548a116113f757600080fd5b600d548a03915060038281548110151561140d57fe5b906000526020600020906005020160c06040519081016040908152825482526001830154602083015260028301549082015260038201546060820152600490910154600160a060020a038116608083015260a060020a900460ff16151560a08201528a99509050805197508060400151965080606001519550611493816020015161239a565b9450806080015192508060a0015193505050919395979092949650565b600160a060020a031660009081526009602052604090205490565b60005433600160a060020a03908116911614806114f6575060015433600160a060020a039081169116145b151561150157600080fd5b60025460a060020a900460ff161561151857600080fd5b6000811161152557600080fd5b60008310158015611537575060008210155b151561154257600080fd5b61155960206040519081016040526000815261254a565b6115908686806020601f8201819004810201604051908101604052818152929190602084018383808284375061254a945050505050565b141561159b57600080fd5b600083815260056020908152604080832085845290915290205460ff16156115c257600080fd5b6000838152600460209081526040808320858452825280832084905585835260058252808320858452825291829020805460ff1916600117905561163491879187918291601f83018190048102019051908101604052818152929190602084018383808284375061254a945050505050565b60009384526006602090815260408086209486529390529190922055505050565b60005433600160a060020a0390811691161480611680575060015433600160a060020a039081169116145b151561168b57600080fd5b600160a060020a03811615156116a057600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614806116ed575060015433600160a060020a039081169116145b15156116f857600080fd5b60025460a060020a900460ff161561170f57600080fd5b6002805460a060020a60ff02191660a060020a179055565b61172f612631565b6000611739612631565b6000806000611747876114b0565b945084151561177757600060405180591061175f5750595b90808252806020026020018201604052509550611807565b846040518059106117855750595b90808252806020026020018201604052509350600d546117a3610bec565b60010101925060009150600d5490505b8281101561180357600081815260086020526040902054600160a060020a03888116911614156117fb57808483815181106117ea57fe5b602090810290910101526001909101905b6001016117b3565b8395505b5050505050919050565b600860205260009081526040902054600160a060020a031681565b60005433600160a060020a0390811691161480611857575060015433600160a060020a039081169116145b151561186257600080fd5b60025460a060020a900460ff16151561187a57600080fd5b6002805475ff00000000000000000000000000000000000000000019169055565b6118a3612631565b60408051908101604052600581527f43534350460000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052601181527f43534350726553616c65466163746f7279000000000000000000000000000000602082015281565b600a60205260009081526040902054600160a060020a031681565b6119366125fc565b60005433600160a060020a0390811691161480611961575060015433600160a060020a039081169116145b151561196c57600080fd5b60115460ff161561197c57600080fd5b6003541561198957600080fd5b6011805460ff1916600117905560c060405190810160405280600081526020016119e560408051908101604052600a81527f44756d6d79417373657400000000000000000000000000000000000000000000602082015261254a565b81526000602082018190526040820152600160a060020a0330166060820152600160809091018190526003805492935091908101611a238382612643565b60009283526020909220839160050201815181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff0219909216919091179055505050565b600d548111611ab657600080fd5b611abf8261232c565b1515611aca57600080fd5b611ad43382611f2f565b1515611adf57600080fd5b61132a338383612126565b60005433600160a060020a0390811691161480611b15575060015433600160a060020a039081169116145b1515611b2057600080fd5b60025460a060020a900460ff161515611b3857600080fd5b611261612575565b600080600d5483111515611b5357600080fd5b50506000818152600860205260409020543390600160a060020a0316611b788261232c565b1515611b8357600080fd5b611b8d828461230c565b1515611b9857600080fd5b610d9f818385612126565b600054600160a060020a031681565b60005433600160a060020a0390811691161480611bdd575060015433600160a060020a039081169116145b1515611be857600080fd5b60025460a060020a900460ff1615611bff57600080fd5b600160a060020a0381161515611c1457600080fd5b600160a060020a03811660009081526007602052604090205460ff1615611c3a57600080fd5b600160a060020a03166000908152600760205260409020805460ff19166001179055565b60005433600160a060020a0390811691161480611c89575060015433600160a060020a039081169116145b1515611c9457600080fd5b6000928352600f60209081526040808520938552929052912055565b60106020526000908152604090205481565b6002546000907501000000000000000000000000000000000000000000900460ff161515611cef57600080fd5b50600160a060020a038116600090815260106020526040812054908111611d1557600080fd5b600160a060020a0382166000818152601060205260408082209190915582156108fc0290839051600060405180830381858888f193505050501515611d5957600080fd5b7f358fe4192934d3bf28ae181feda1f4bd08ca67f5e2fad55582cce5eb67304ae98282604051600160a060020a03909216825260208201526040908101905180910390a15050565b60005433600160a060020a0390811691161480611dcc575060015433600160a060020a039081169116145b1515611dd757600080fd5b600160a060020a0381161515611dec57600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b6002547501000000000000000000000000000000000000000000900460ff1681565b600e60209081526000928352604080842090915290825290205460ff1681565b600254600160a060020a031681565b600154600160a060020a031681565b60005433600160a060020a0390811691161480611e99575060015433600160a060020a039081169116145b1515611ea457600080fd5b600160a060020a0381161515611eb957600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60408051908101604052600581527f4353435046000000000000000000000000000000000000000000000000000000602082015281565b600c60209081526000928352604080842090915290825290205481565b600090815260086020526040902054600160a060020a0390811691161490565b600080611f5a6125fc565b6000858152600c6020908152604080832087845290915281205460010192508063ffffffff84168414611f8c57600080fd5b60c06040519081016040908152858252602082018a905281018890526060810187905260006080820181905260a082015260038054919450600191808301611fd48382612643565b60009283526020909220869160050201815181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff021990921691909117905550600d5460008a8152600b602090815260408083208c845282528083208a8452825280832095909403928301948590558b8252600c81528382208b8352815292902087905593509091507f21b6aa36302fbeb5de063ccfac1338053e8cb8939202417afc214d741f22bb6190309083908a908a908990890151604051600160a060020a03909616865260208601949094526040808601939093526060850191909152608084015260a083019190915260c0909101905180910390a161211b60003083612126565b979650505050505050565b60006121306125fc565b600d548303915060038281548110151561214657fe5b906000526020600020906005020160c060405190810160409081528254825260018301546020830152600283015490820152600380830154606083015260049092015460a060020a900460ff16151560a0820152600160a060020a03861660808201528154909250829190849081106121bb57fe5b9060005260206000209060050201600082015181556020820151600182015560408201518160020155606082015181600301556080820151600482018054600160a060020a031916600160a060020a039290921691909117905560a08201516004909101805491151560a060020a0260a060020a60ff021990921691909117905550600160a060020a03808516600081815260096020908152604080832080546001019055878352600890915290208054600160a060020a03191690911790558516156122be57600160a060020a03851660009081526009602090815260408083208054600019019055858352600a90915290208054600160a060020a03191690555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405190815260200160405180910390a35050505050565b6000908152600a6020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b60005433600160a060020a0390811691161480612365575060015433600160a060020a039081169116145b151561237057600080fd5b60025460a060020a900460ff16151561238857600080fd5b6002805460a060020a60ff0219169055565b6123a2612631565b6123aa612631565b60008060006123b7612631565b60206040518059106123c65750595b818152601f19601f83011681016020016040529050945060009350600092505b6020831015612471576008830260020a870291507fff00000000000000000000000000000000000000000000000000000000000000821615612466578185858151811061242f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001909301925b6001909201916123e6565b8360405180591061247f5750595b818152601f19601f830116810160200160405290509050600092505b83831015612540578483815181106124af57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000281848151811061250557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060019092019161249b565b9695505050505050565b6000612554612631565b508180511515612567576000915061256f565b602083015191505b50919050565b60005433600160a060020a03908116911614806125a0575060015433600160a060020a039081169116145b15156125ab57600080fd5b60025460a060020a900460ff1615156125c357600080fd5b6002805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179055565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b60206040519081016040526000815290565b815481835581811511610d9f57600083815260209020610d9f91610be99160059182028101918502015b808211156126b55760008082556001820181905560028201819055600382015560048101805474ffffffffffffffffffffffffffffffffffffffffff1916905560050161266d565b50905600a165627a7a72305820b2b9dd3bf5ecc3d49a61c5cef8fc7f3e01428a82af13e7c297d4116e962a67b10029
Swarm Source
bzzr://b2b9dd3bf5ecc3d49a61c5cef8fc7f3e01428a82af13e7c297d4116e962a67b1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.