ERC-20
Overview
Max Total Supply
474 PIS
Holders
87
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ParsecInitialShip
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-15 */ pragma solidity ^0.4.23; // File: contracts/ParsecReferralTracking.sol contract ParsecReferralTracking { mapping (address => address) public referrer; event ReferrerUpdated(address indexed _referee, address indexed _referrer); function _updateReferrerFor(address _referee, address _referrer) internal { if (_referrer != address(0) && _referrer != _referee) { referrer[_referee] = _referrer; emit ReferrerUpdated(_referee, _referrer); } } } // File: contracts/ParsecShipInfo.sol contract ParsecShipInfo { uint256 public constant TOTAL_SHIP = 900; uint256 public constant TOTAL_ARK = 100; uint256 public constant TOTAL_HAWKING = 400; uint256 public constant TOTAL_SATOSHI = 400; uint256 public constant NAME_NOT_AVAILABLE = 0; uint256 public constant NAME_ARK = 1; uint256 public constant NAME_HAWKING = 2; uint256 public constant NAME_SATOSHI = 3; uint256 public constant TYPE_NOT_AVAILABLE = 0; uint256 public constant TYPE_EXPLORER_FREIGHTER = 1; uint256 public constant TYPE_EXPLORER = 2; uint256 public constant TYPE_FREIGHTER = 3; uint256 public constant COLOR_NOT_AVAILABLE = 0; uint256 public constant COLOR_CUSTOM = 1; uint256 public constant COLOR_BLACK = 2; uint256 public constant COLOR_BLUE = 3; uint256 public constant COLOR_BROWN = 4; uint256 public constant COLOR_GOLD = 5; uint256 public constant COLOR_GREEN = 6; uint256 public constant COLOR_GREY = 7; uint256 public constant COLOR_PINK = 8; uint256 public constant COLOR_RED = 9; uint256 public constant COLOR_SILVER = 10; uint256 public constant COLOR_WHITE = 11; uint256 public constant COLOR_YELLOW = 12; function getShip(uint256 _shipId) external pure returns ( uint256 /* _name */, uint256 /* _type */, uint256 /* _color */ ) { return ( _getShipName(_shipId), _getShipType(_shipId), _getShipColor(_shipId) ); } function _getShipName(uint256 _shipId) internal pure returns (uint256 /* _name */) { if (_shipId < 1) { return NAME_NOT_AVAILABLE; } else if (_shipId <= TOTAL_ARK) { return NAME_ARK; } else if (_shipId <= TOTAL_ARK + TOTAL_HAWKING) { return NAME_HAWKING; } else if (_shipId <= TOTAL_SHIP) { return NAME_SATOSHI; } else { return NAME_NOT_AVAILABLE; } } function _getShipType(uint256 _shipId) internal pure returns (uint256 /* _type */) { if (_shipId < 1) { return TYPE_NOT_AVAILABLE; } else if (_shipId <= TOTAL_ARK) { return TYPE_EXPLORER_FREIGHTER; } else if (_shipId <= TOTAL_ARK + TOTAL_HAWKING) { return TYPE_EXPLORER; } else if (_shipId <= TOTAL_SHIP) { return TYPE_FREIGHTER; } else { return TYPE_NOT_AVAILABLE; } } function _getShipColor(uint256 _shipId) internal pure returns (uint256 /* _color */) { if (_shipId < 1) { return COLOR_NOT_AVAILABLE; } else if (_shipId == 1) { return COLOR_CUSTOM; } else if (_shipId <= 23) { return COLOR_BLACK; } else if (_shipId <= 37) { return COLOR_BLUE; } else if (_shipId <= 42) { return COLOR_BROWN; } else if (_shipId <= 45) { return COLOR_GOLD; } else if (_shipId <= 49) { return COLOR_GREEN; } else if (_shipId <= 64) { return COLOR_GREY; } else if (_shipId <= 67) { return COLOR_PINK; } else if (_shipId <= 77) { return COLOR_RED; } else if (_shipId <= 83) { return COLOR_SILVER; } else if (_shipId <= 93) { return COLOR_WHITE; } else if (_shipId <= 100) { return COLOR_YELLOW; } else if (_shipId <= 140) { return COLOR_BLACK; } else if (_shipId <= 200) { return COLOR_BLUE; } else if (_shipId <= 237) { return COLOR_BROWN; } else if (_shipId <= 247) { return COLOR_GOLD; } else if (_shipId <= 330) { return COLOR_GREEN; } else if (_shipId <= 370) { return COLOR_GREY; } else if (_shipId <= 380) { return COLOR_PINK; } else if (_shipId <= 440) { return COLOR_RED; } else if (_shipId <= 460) { return COLOR_SILVER; } else if (_shipId <= 500) { return COLOR_WHITE; } else if (_shipId <= 540) { return COLOR_BLACK; } else if (_shipId <= 600) { return COLOR_BLUE; } else if (_shipId <= 637) { return COLOR_BROWN; } else if (_shipId <= 647) { return COLOR_GOLD; } else if (_shipId <= 730) { return COLOR_GREEN; } else if (_shipId <= 770) { return COLOR_GREY; } else if (_shipId <= 780) { return COLOR_PINK; } else if (_shipId <= 840) { return COLOR_RED; } else if (_shipId <= 860) { return COLOR_SILVER; } else if (_shipId <= TOTAL_SHIP) { return COLOR_WHITE; } else { return COLOR_NOT_AVAILABLE; } } } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @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 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: contracts/ParsecShipPricing.sol contract ParsecShipPricing { using SafeMath for uint256; uint256 public constant TOTAL_PARSEC_CREDIT_SUPPLY = 30856775800000000; // Starting with 30,856,775,800,000,000 (total supply of Parsec Credit, including 6 decimals), // each time we multiply the number we have with 0.9995. These are results: // 1: 30841347412100000 // 2: 30825926738393950 // 4: 30795108518137240.6484875 // 8: 30733564478368113.80826526098454678 // 16: 30610845140405444.1555510982248498 // 32: 30366874565355062.01905741115048326 // 64: 29884751305352135.55319509943479229 // 128: 28943346718121670.05118183115407839 // 256: 27148569399315026.57115329246779589 // 512: 23885995905943752.64119680273916152 // 1024: 18489968106737895.55394216521160879 // 2048: 11079541258752787.70222144092290365 // 4096: 3978258626243293.616409580784511455 // 8192: 512903285808596.2996925781077178762 // 16384: 8525510970373.470528186667481043039 // 32768: 2355538951.219861249087266462563245 // 65536: 179.8167049816644768546906209889074 // 75918: 0.9996399085102312393019871402909541 uint256[18] private _multipliers = [ 30841347412100000, 30825926738393950, 307951085181372406484875, 3073356447836811380826526098454678, 306108451404054441555510982248498, 3036687456535506201905741115048326, 2988475130535213555319509943479229, 2894334671812167005118183115407839, 2714856939931502657115329246779589, 2388599590594375264119680273916152, 1848996810673789555394216521160879, 1107954125875278770222144092290365, 3978258626243293616409580784511455, 5129032858085962996925781077178762, 8525510970373470528186667481043039, 2355538951219861249087266462563245, 1798167049816644768546906209889074 ]; uint256[18] private _decimals = [ 0, 0, 7, 17, 16, 17, 17, 17, 17, 17, 17, 17, 18, 19, 21, 24, 31 ]; function _getShipPrice( uint256 _initialPrice, uint256 _minutesPassed ) internal view returns (uint256 /* _price */) { require( _initialPrice <= TOTAL_PARSEC_CREDIT_SUPPLY, "Initial ship price must not be greater than total Parsec Credit." ); if (_minutesPassed >> _multipliers.length > 0) { return 0; } uint256 _price = _initialPrice; for (uint256 _powerOfTwo = 0; _powerOfTwo < _multipliers.length; _powerOfTwo++) { if (_minutesPassed >> _powerOfTwo & 1 > 0) { _price = _price .mul(_multipliers[_powerOfTwo]) .div(TOTAL_PARSEC_CREDIT_SUPPLY) .div(10 ** _decimals[_powerOfTwo]); } } return _price; } } // File: contracts/TokenRecipient.sol interface TokenRecipient { function receiveApproval( address _from, uint256 _value, address _token, bytes _extraData ) external; } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @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)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: openzeppelin-solidity/contracts/lifecycle/Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { 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); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Basic.sol /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Basic { event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function exists(uint256 _tokenId) public view returns (bool _exists); function approve(address _to, uint256 _tokenId) public; function getApproved(uint256 _tokenId) public view returns (address _operator); function setApprovalForAll(address _operator, bool _approved) public; function isApprovedForAll(address _owner, address _operator) public view returns (bool); function transferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes _data ) public; } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Enumerable is ERC721Basic { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256 _tokenId); function tokenByIndex(uint256 _index) public view returns (uint256); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Metadata is ERC721Basic { function name() public view returns (string _name); function symbol() public view returns (string _symbol); function tokenURI(uint256 _tokenId) public view returns (string); } /** * @title ERC-721 Non-Fungible Token Standard, full implementation interface * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata { } // File: openzeppelin-solidity/contracts/AddressUtils.sol /** * Utility library of inline functions on addresses */ library AddressUtils { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. assembly { size := extcodesize(addr) } // solium-disable-line security/no-inline-assembly return size > 0; } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Receiver.sol /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract ERC721Receiver { /** * @dev Magic value to be returned upon successful reception of an NFT * Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`, * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` */ bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba; /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safetransfer`. This function MAY throw to revert and reject the * transfer. This function MUST use 50,000 gas or less. Return of other * than the magic value MUST result in the transaction being reverted. * Note: the contract address is always the message sender. * @param _from The sending address * @param _tokenId The NFT identifier which is being transfered * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))` */ function onERC721Received(address _from, uint256 _tokenId, bytes _data) public returns(bytes4); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721BasicToken.sol /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721BasicToken is ERC721Basic { using SafeMath for uint256; using AddressUtils for address; // Equals to `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))` // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba; // Mapping from token ID to owner mapping (uint256 => address) internal tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) internal tokenApprovals; // Mapping from owner to number of owned token mapping (address => uint256) internal ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) internal operatorApprovals; /** * @dev Guarantees msg.sender is owner of the given token * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender */ modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } /** * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator * @param _tokenId uint256 ID of the token to validate */ modifier canTransfer(uint256 _tokenId) { require(isApprovedOrOwner(msg.sender, _tokenId)); _; } /** * @dev Gets the balance of the specified address * @param _owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address _owner) public view returns (uint256) { require(_owner != address(0)); return ownedTokensCount[_owner]; } /** * @dev Gets the owner of the specified token ID * @param _tokenId uint256 ID of the token to query the owner of * @return owner address currently marked as the owner of the given token ID */ function ownerOf(uint256 _tokenId) public view returns (address) { address owner = tokenOwner[_tokenId]; require(owner != address(0)); return owner; } /** * @dev Returns whether the specified token exists * @param _tokenId uint256 ID of the token to query the existance of * @return whether the token exists */ function exists(uint256 _tokenId) public view returns (bool) { address owner = tokenOwner[_tokenId]; return owner != address(0); } /** * @dev Approves another address to transfer the given token ID * @dev The zero address indicates there is no approved address. * @dev There can only be one approved address per token at a given time. * @dev Can only be called by the token owner or an approved operator. * @param _to address to be approved for the given token ID * @param _tokenId uint256 ID of the token to be approved */ function approve(address _to, uint256 _tokenId) public { address owner = ownerOf(_tokenId); require(_to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); if (getApproved(_tokenId) != address(0) || _to != address(0)) { tokenApprovals[_tokenId] = _to; emit Approval(owner, _to, _tokenId); } } /** * @dev Gets the approved address for a token ID, or zero if no address set * @param _tokenId uint256 ID of the token to query the approval of * @return address currently approved for a the given token ID */ function getApproved(uint256 _tokenId) public view returns (address) { return tokenApprovals[_tokenId]; } /** * @dev Sets or unsets the approval of a given operator * @dev An operator is allowed to transfer all tokens of the sender on their behalf * @param _to operator address to set the approval * @param _approved representing the status of the approval to be set */ function setApprovalForAll(address _to, bool _approved) public { require(_to != msg.sender); operatorApprovals[msg.sender][_to] = _approved; emit ApprovalForAll(msg.sender, _to, _approved); } /** * @dev Tells whether an operator is approved by a given owner * @param _owner owner address which you want to query the approval of * @param _operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address _owner, address _operator) public view returns (bool) { return operatorApprovals[_owner][_operator]; } /** * @dev Transfers the ownership of a given token ID to another address * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible * @dev Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred */ function transferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) { require(_from != address(0)); require(_to != address(0)); clearApproval(_from, _tokenId); removeTokenFrom(_from, _tokenId); addTokenTo(_to, _tokenId); emit Transfer(_from, _to, _tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * @dev If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @dev Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) public canTransfer(_tokenId) { // solium-disable-next-line arg-overflow safeTransferFrom(_from, _to, _tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * @dev If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @dev Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes _data ) public canTransfer(_tokenId) { transferFrom(_from, _to, _tokenId); // solium-disable-next-line arg-overflow require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data)); } /** * @dev Returns whether the given spender can transfer a given token ID * @param _spender address of the spender to query * @param _tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function isApprovedOrOwner(address _spender, uint256 _tokenId) internal view returns (bool) { address owner = ownerOf(_tokenId); return _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender); } /** * @dev Internal function to mint a new token * @dev Reverts if the given token ID already exists * @param _to The address that will own the minted token * @param _tokenId uint256 ID of the token to be minted by the msg.sender */ function _mint(address _to, uint256 _tokenId) internal { require(_to != address(0)); addTokenTo(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @dev Internal function to burn a specific token * @dev Reverts if the token does not exist * @param _tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address _owner, uint256 _tokenId) internal { clearApproval(_owner, _tokenId); removeTokenFrom(_owner, _tokenId); emit Transfer(_owner, address(0), _tokenId); } /** * @dev Internal function to clear current approval of a given token ID * @dev Reverts if the given address is not indeed the owner of the token * @param _owner owner of the token * @param _tokenId uint256 ID of the token to be transferred */ function clearApproval(address _owner, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _owner); if (tokenApprovals[_tokenId] != address(0)) { tokenApprovals[_tokenId] = address(0); emit Approval(_owner, address(0), _tokenId); } } /** * @dev Internal function to add a token ID to the list of a given address * @param _to address representing the new owner of the given token ID * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address */ function addTokenTo(address _to, uint256 _tokenId) internal { require(tokenOwner[_tokenId] == address(0)); tokenOwner[_tokenId] = _to; ownedTokensCount[_to] = ownedTokensCount[_to].add(1); } /** * @dev Internal function to remove a token ID from the list of a given address * @param _from address representing the previous owner of the given token ID * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function removeTokenFrom(address _from, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _from); ownedTokensCount[_from] = ownedTokensCount[_from].sub(1); tokenOwner[_tokenId] = address(0); } /** * @dev Internal function to invoke `onERC721Received` on a target address * @dev The call is not executed if the target address is not a contract * @param _from address representing the previous owner of the given token ID * @param _to target address that will receive the tokens * @param _tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function checkAndCallSafeTransfer( address _from, address _to, uint256 _tokenId, bytes _data ) internal returns (bool) { if (!_to.isContract()) { return true; } bytes4 retval = ERC721Receiver(_to).onERC721Received(_from, _tokenId, _data); return (retval == ERC721_RECEIVED); } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Token.sol /** * @title Full ERC721 Token * This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Token is ERC721, ERC721BasicToken { // Token name string internal name_; // Token symbol string internal symbol_; // Mapping from owner to list of owned token IDs mapping (address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Optional mapping for token URIs mapping(uint256 => string) internal tokenURIs; /** * @dev Constructor function */ function ERC721Token(string _name, string _symbol) public { name_ = _name; symbol_ = _symbol; } /** * @dev Gets the token name * @return string representing the token name */ function name() public view returns (string) { return name_; } /** * @dev Gets the token symbol * @return string representing the token symbol */ function symbol() public view returns (string) { return symbol_; } /** * @dev Returns an URI for a given token ID * @dev Throws if the token ID does not exist. May return an empty string. * @param _tokenId uint256 ID of the token to query */ function tokenURI(uint256 _tokenId) public view returns (string) { require(exists(_tokenId)); return tokenURIs[_tokenId]; } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner * @param _owner address owning the tokens list to be accessed * @param _index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) { require(_index < balanceOf(_owner)); return ownedTokens[_owner][_index]; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * @dev Reverts if the index is greater or equal to the total number of tokens * @param _index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 _index) public view returns (uint256) { require(_index < totalSupply()); return allTokens[_index]; } /** * @dev Internal function to set the token URI for a given token * @dev Reverts if the token ID does not exist * @param _tokenId uint256 ID of the token to set its URI * @param _uri string URI to assign */ function _setTokenURI(uint256 _tokenId, string _uri) internal { require(exists(_tokenId)); tokenURIs[_tokenId] = _uri; } /** * @dev Internal function to add a token ID to the list of a given address * @param _to address representing the new owner of the given token ID * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address */ function addTokenTo(address _to, uint256 _tokenId) internal { super.addTokenTo(_to, _tokenId); uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } /** * @dev Internal function to remove a token ID from the list of a given address * @param _from address representing the previous owner of the given token ID * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function removeTokenFrom(address _from, uint256 _tokenId) internal { super.removeTokenFrom(_from, _tokenId); uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping // the lastToken to the first position, and then dropping the element placed in the last position of the list ownedTokens[_from].length--; ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev Internal function to mint a new token * @dev Reverts if the given token ID already exists * @param _to address the beneficiary that will own the minted token * @param _tokenId uint256 ID of the token to be minted by the msg.sender */ function _mint(address _to, uint256 _tokenId) internal { super._mint(_to, _tokenId); allTokensIndex[_tokenId] = allTokens.length; allTokens.push(_tokenId); } /** * @dev Internal function to burn a specific token * @dev Reverts if the token does not exist * @param _owner owner of the token to burn * @param _tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address _owner, uint256 _tokenId) internal { super._burn(_owner, _tokenId); // Clear metadata (if any) if (bytes(tokenURIs[_tokenId]).length != 0) { delete tokenURIs[_tokenId]; } // Reorg all tokens array uint256 tokenIndex = allTokensIndex[_tokenId]; uint256 lastTokenIndex = allTokens.length.sub(1); uint256 lastToken = allTokens[lastTokenIndex]; allTokens[tokenIndex] = lastToken; allTokens[lastTokenIndex] = 0; allTokens.length--; allTokensIndex[_tokenId] = 0; allTokensIndex[lastToken] = tokenIndex; } } // File: contracts/ParsecShipAuction.sol // solium-disable-next-line lbrace contract ParsecShipAuction is ERC721Token("Parsec Initial Ship", "PIS"), ParsecShipInfo, ParsecShipPricing, ParsecReferralTracking, Ownable, Pausable { uint256 public constant PARSEC_CREDIT_DECIMALS = 6; uint256 public constant FIRST_AUCTIONS_MINIMUM_RAISE = 2 * uint256(10) ** (5 + PARSEC_CREDIT_DECIMALS); uint256 public constant SECOND_AUCTIONS_INITIAL_PERCENTAGE = 50; uint256 public constant LATER_AUCTIONS_INITIAL_PERCENTAGE = 125; uint256 public constant REFERRAL_REWARD_PERCENTAGE = 20; ERC20 public parsecCreditContract = ERC20(0x4373D59176891dA98CA6faaa86bd387fc9e12b6E); // May 15th, 2018 – 16:00 UTC uint256 public firstAuctionsStartDate = 1526400000; uint256 public firstAuctionsInitialDuration = 48 hours; uint256 public firstAuctionsExtendableDuration = 12 hours; uint256 public firstAuctionsExtendedChunkDuration = 1 hours; uint256 public firstAuctionsExtendedDuration = 0; uint256 public firstAuctionsHighestBid = uint256(10) ** (6 + PARSEC_CREDIT_DECIMALS); address public firstAuctionsHighestBidder = address(0); address public firstAuctionsReferrer; bool public firstAuctionConcluded = false; uint256 private _lastAuctionedShipId = 0; uint256 private _lastAuctionsWinningBid; uint256 private _lastAuctionWinsDate; event FirstShipBidded( address indexed _bidder, uint256 _value, address indexed _referrer ); event LaterShipBidded( uint256 indexed _shipId, address indexed _winner, uint256 _value, address indexed _referrer ); function receiveApproval( address _from, uint256 _value, address _token, bytes _extraData ) external whenNotPaused { require(_token == address(parsecCreditContract)); require(_extraData.length == 64); uint256 _shipId; address _referrer; // solium-disable-next-line security/no-inline-assembly assembly { _shipId := calldataload(164) _referrer := calldataload(196) } if (_shipId == 1) { _bidFirstShip(_value, _from, _referrer); } else { _bidLaterShip(_shipId, _value, _from, _referrer); } } function getFirstAuctionsRemainingDuration() external view returns (uint256 /* _duration */) { uint256 _currentDate = now; uint256 _endDate = getFirstAuctionsEndDate(); if (_endDate >= _currentDate) { return _endDate - _currentDate; } else { return 0; } } function concludeFirstAuction() external { require(getLastAuctionedShipId() >= 1, "The first auction must have ended."); require(!firstAuctionConcluded, "The first auction must not have been concluded."); firstAuctionConcluded = true; if (firstAuctionsHighestBidder != address(0)) { _mint(firstAuctionsHighestBidder, 1); if (firstAuctionsReferrer != address(0)) { _sendTo( firstAuctionsReferrer, firstAuctionsHighestBid.mul(REFERRAL_REWARD_PERCENTAGE).div(100) ); } } else { _mint(owner, 1); } } function getFirstAuctionsExtendableStartDate() public view returns (uint256 /* _extendableStartDate */) { return firstAuctionsStartDate // solium-disable indentation .add(firstAuctionsInitialDuration) .sub(firstAuctionsExtendableDuration); // solium-enable indentation } function getFirstAuctionsEndDate() public view returns (uint256 /* _endDate */) { return firstAuctionsStartDate .add(firstAuctionsInitialDuration) .add(firstAuctionsExtendedDuration); } function getLastAuctionedShipId() public view returns (uint256 /* _shipId */) { if (_lastAuctionedShipId == 0 && now >= getFirstAuctionsEndDate()) { return 1; } else { return _lastAuctionedShipId; } } function getLastAuctionsWinningBid() public view returns (uint256 /* _value */) { if (_lastAuctionedShipId == 0 && now >= getFirstAuctionsEndDate()) { return firstAuctionsHighestBid; } else { return _lastAuctionsWinningBid; } } function getLastAuctionWinsDate() public view returns (uint256 /* _date */) { if (_lastAuctionedShipId == 0) { uint256 _firstAuctionsEndDate = getFirstAuctionsEndDate(); if (now >= _firstAuctionsEndDate) { return _firstAuctionsEndDate; } } return _lastAuctionWinsDate; } function getShipPrice(uint256 _shipId) public view returns (uint256 /* _price */) { uint256 _minutesPassed = now .sub(getLastAuctionWinsDate()) .div(1 minutes); return getShipPrice(_shipId, _minutesPassed); } function getShipPrice(uint256 _shipId, uint256 _minutesPassed) public view returns (uint256 /* _price */) { require(_shipId >= 2, "Ship ID must be greater than or equal to 2."); require(_shipId <= TOTAL_SHIP, "Ship ID must be smaller than or equal to total number of ship."); require(_shipId == getLastAuctionedShipId().add(1), "Can only get price of the ship which is being auctioned."); uint256 _initialPrice = getLastAuctionsWinningBid(); if (_shipId == 2) { _initialPrice = _initialPrice .mul(SECOND_AUCTIONS_INITIAL_PERCENTAGE) .div(100); } else { _initialPrice = _initialPrice .mul(LATER_AUCTIONS_INITIAL_PERCENTAGE) .div(100); } return _getShipPrice(_initialPrice, _minutesPassed); } function _bidFirstShip(uint256 _value, address _bidder, address _referrer) internal { require(now >= firstAuctionsStartDate, "Auction of the first ship is not started yet."); require(now < getFirstAuctionsEndDate(), "Auction of the first ship has ended."); require(_value >= firstAuctionsHighestBid.add(FIRST_AUCTIONS_MINIMUM_RAISE), "Not enough Parsec Credit."); _updateReferrerFor(_bidder, _referrer); _receiveFrom(_bidder, _value); if (firstAuctionsHighestBidder != address(0)) { _sendTo(firstAuctionsHighestBidder, firstAuctionsHighestBid); } firstAuctionsHighestBid = _value; firstAuctionsHighestBidder = _bidder; // To prevent the first auction's referrer being overriden, // since later auction's bidders could be the same as the first auction's bidder // but their referrers could be different. firstAuctionsReferrer = referrer[_bidder]; if (now >= getFirstAuctionsExtendableStartDate()) { firstAuctionsExtendedDuration = firstAuctionsExtendedDuration .add(firstAuctionsExtendedChunkDuration); } emit FirstShipBidded(_bidder, _value, referrer[_bidder]); } function _bidLaterShip( uint256 _shipId, uint256 _value, address _bidder, address _referrer ) internal { uint256 _price = getShipPrice(_shipId); require(_value >= _price, "Not enough Parsec Credit."); _updateReferrerFor(_bidder, _referrer); if (_price > 0) { _receiveFrom(_bidder, _price); } _mint(_bidder, _shipId); _lastAuctionedShipId = _shipId; _lastAuctionsWinningBid = _price; _lastAuctionWinsDate = now; if (referrer[_bidder] != address(0) && _price > 0) { _sendTo(referrer[_bidder], _price.mul(REFERRAL_REWARD_PERCENTAGE).div(100)); } emit LaterShipBidded( _shipId, _bidder, _value, referrer[_bidder] ); } function _receiveFrom(address _from, uint256 _value) internal { parsecCreditContract.transferFrom(_from, this, _value); } function _sendTo(address _to, uint256 _value) internal { // Not like when transferring ETH, we are not afraid of a DoS attack here // because Parsec Credit contract is trustable and there are no callbacks involved. // solium-disable-next-line security/no-low-level-calls require(address(parsecCreditContract).call( bytes4(keccak256("transfer(address,uint256)")), _to, _value ), "Parsec Credit transfer failed."); } } // File: openzeppelin-solidity/contracts/ownership/HasNoContracts.sol /** * @title Contracts that should not own Contracts * @author Remco Bloemen <remco@2π.com> * @dev Should contracts (anything Ownable) end up being owned by this contract, it allows the owner * of this contract to reclaim ownership of the contracts. */ contract HasNoContracts is Ownable { /** * @dev Reclaim ownership of Ownable contracts * @param contractAddr The address of the Ownable to be reclaimed. */ function reclaimContract(address contractAddr) external onlyOwner { Ownable contractInst = Ownable(contractAddr); contractInst.transferOwnership(owner); } } // File: openzeppelin-solidity/contracts/ownership/HasNoEther.sol /** * @title Contracts that should not own Ether * @author Remco Bloemen <remco@2π.com> * @dev This tries to block incoming ether to prevent accidental loss of Ether. Should Ether end up * in the contract, it will allow the owner to reclaim this ether. * @notice Ether can still be sent to this contract by: * calling functions labeled `payable` * `selfdestruct(contract_address)` * mining directly to the contract address */ contract HasNoEther is Ownable { /** * @dev Constructor that rejects incoming Ether * @dev The `payable` flag is added so we can access `msg.value` without compiler warning. If we * leave out payable, then Solidity will allow inheriting contracts to implement a payable * constructor. By doing it this way we prevent a payable constructor from working. Alternatively * we could use assembly to access msg.value. */ function HasNoEther() public payable { require(msg.value == 0); } /** * @dev Disallows direct send by settings a default function without the `payable` flag. */ function() external { } /** * @dev Transfer all Ether held by the contract to the owner. */ function reclaimEther() external onlyOwner { // solium-disable-next-line security/no-send assert(owner.send(address(this).balance)); } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { assert(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { assert(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: openzeppelin-solidity/contracts/ownership/HasNoTokens.sol /** * @title Contracts that should not own Tokens * @author Remco Bloemen <remco@2π.com> * @dev This blocks incoming ERC223 tokens to prevent accidental loss of tokens. * Should tokens (any ERC20Basic compatible) end up in the contract, it allows the * owner to reclaim the tokens. */ contract HasNoTokens is CanReclaimToken { /** * @dev Reject all ERC223 compatible tokens * @param from_ address The address that is transferring the tokens * @param value_ uint256 the amount of the specified token * @param data_ Bytes The data passed from the caller. */ function tokenFallback(address from_, uint256 value_, bytes data_) external { from_; value_; data_; revert(); } } // File: openzeppelin-solidity/contracts/ownership/NoOwner.sol /** * @title Base contract for contracts that should not own things. * @author Remco Bloemen <remco@2π.com> * @dev Solves a class of errors where a contract accidentally becomes owner of Ether, Tokens or * Owned contracts. See respective base contracts for details. */ contract NoOwner is HasNoEther, HasNoTokens, HasNoContracts { } // File: contracts/ParsecInitialShip.sol // solium-disable-next-line lbrace contract ParsecInitialShip is ParsecShipAuction, NoOwner { function reclaimToken(ERC20Basic token) external onlyOwner { require(token != parsecCreditContract); // Use `reclaimParsecCredit()` instead! uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } function reclaimParsecCredit() external onlyOwner { require(firstAuctionConcluded, "The first auction must have been concluded."); _sendTo(owner, parsecCreditContract.balanceOf(this)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"concludeFirstAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"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":"FIRST_AUCTIONS_MINIMUM_RAISE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLastAuctionsWinningBid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_GREEN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFirstAuctionsEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reclaimParsecCredit","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":"getFirstAuctionsExtendableStartDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_PARSEC_CREDIT_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contractAddr","type":"address"}],"name":"reclaimContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referrer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsExtendedDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TYPE_EXPLORER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_GREY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_shipId","type":"uint256"}],"name":"getShip","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_PINK","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLastAuctionedShipId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_WHITE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_ARK","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_RED","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionConcluded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFirstAuctionsRemainingDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NAME_SATOSHI","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsHighestBidder","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NAME_NOT_AVAILABLE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFERRAL_REWARD_PERCENTAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_SHIP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsExtendedChunkDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsHighestBid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TYPE_EXPLORER_FREIGHTER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NAME_HAWKING","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_BROWN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_shipId","type":"uint256"},{"name":"_minutesPassed","type":"uint256"}],"name":"getShipPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"},{"name":"_token","type":"address"},{"name":"_extraData","type":"bytes"}],"name":"receiveApproval","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_NOT_AVAILABLE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_shipId","type":"uint256"}],"name":"getShipPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reclaimEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_NOT_AVAILABLE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_SATOSHI","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_SILVER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_HAWKING","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TYPE_FREIGHTER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_YELLOW","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsExtendableDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getLastAuctionWinsDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LATER_AUCTIONS_INITIAL_PERCENTAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SECOND_AUCTIONS_INITIAL_PERCENTAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsReferrer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsStartDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parsecCreditContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_BLACK","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PARSEC_CREDIT_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_CUSTOM","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstAuctionsInitialDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_GOLD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NAME_ARK","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COLOR_BLUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_bidder","type":"address"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":true,"name":"_referrer","type":"address"}],"name":"FirstShipBidded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_shipId","type":"uint256"},{"indexed":true,"name":"_winner","type":"address"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":true,"name":"_referrer","type":"address"}],"name":"LaterShipBidded","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_referee","type":"address"},{"indexed":true,"name":"_referrer","type":"address"}],"name":"ReferrerUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]
Contract Creation Code
608060405261022060405190810160405280666d920ac4e483a06effffffffffffffffffffffffffffff168152602001666d84045d1d3b5e6effffffffffffffffffffffffffffff1681526020016941360fd0b9ae9220cf8b6effffffffffffffffffffffffffffff1681526020016d978736451d8e306d4d8c7c70f8966effffffffffffffffffffffffffffff1681526020016d0f17a1c0570e76db00e37b4e88326effffffffffffffffffffffffffffff1681526020016d95b8625e6ddbd50b4899254e41866effffffffffffffffffffffffffffff1681526020016d9357dbf1135affd1fbf6af9a6bbd6effffffffffffffffffffffffffffff1681526020016d8eb3a3b6c3578c488e35633941df6effffffffffffffffffffffffffffff1681526020016d85da4fe290fe3090827bb92fd8c56effffffffffffffffffffffffffffff1681526020016d75c45d887de467fed504d1a6a0f86effffffffffffffffffffffffffffff1681526020016d5b299eea76349416dcce1de0d8af6effffffffffffffffffffffffffffff1681526020016d36a058dc85acc3a47a50313abd3d6effffffffffffffffffffffffffffff1681526020016dc424aee759acddfa502c5c22e9df6effffffffffffffffffffffffffffff1681526020016dfce17efd5b2cda1892cc1370b98a6effffffffffffffffffffffffffffff1681526020016e01a45713aacd13e388d58bed06105f6effffffffffffffffffffffffffffff1681526020016d742314d8900402d47ab768c6fbad6effffffffffffffffffffffffffffff1681526020016d58a80f19bd70d3a7cc72386dab326effffffffffffffffffffffffffffff16815250600b9060116200028592919062000541565b5061022060405190810160405280600060ff168152602001600060ff168152602001600760ff168152602001601160ff168152602001601060ff168152602001601160ff168152602001601160ff168152602001601160ff168152602001601160ff168152602001601160ff168152602001601160ff168152602001601160ff168152602001601260ff168152602001601360ff168152602001601560ff168152602001601860ff168152602001601f60ff16815250601d9060116200034d92919062000599565b506000603060146101000a81548160ff021916908315150217905550734373d59176891da98ca6faaa86bd387fc9e12b6e603160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550635afb04006032556202a30060335561a8c0603455610e10603555600060365560068001600a0a6037556000603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000603960146101000a81548160ff0219169083151502179055506000603a556040805190810160405280601381526020017f50617273656320496e697469616c2053686970000000000000000000000000008152506040805190810160405280600381526020017f50495300000000000000000000000000000000000000000000000000000000008152508160049080519060200190620004ce929190620005e3565b508060059080519060200190620004e7929190620005e3565b50505033603060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000341415156200053b57600080fd5b62000692565b826012810192821562000586579160200282015b828111156200058557825182906effffffffffffffffffffffffffffff1690559160200191906001019062000555565b5b5090506200059591906200066a565b5090565b8260128101928215620005d0579160200282015b82811115620005cf578251829060ff16905591602001919060010190620005ad565b5b509050620005df91906200066a565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200062657805160ff191683800117855562000657565b8280016001018555821562000657579182015b828111156200065657825182559160200191906001019062000639565b5b5090506200066691906200066a565b5090565b6200068f91905b808211156200068b57600081600090555060010162000671565b5090565b90565b614efe80620006a26000396000f30060806040526004361061039a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680622d7c9d146103a957806306fdde03146103c0578063081812fc14610450578063095ea7b3146104bd578063108456b41461050a578063117e62fd14610535578063125385f21461056057806316dd68b11461058b57806317ffc320146105b657806318160ddd146105f95780631ebcf2fb1461062457806323b872dd1461063b578063248e150a146106a857806327e584d4146106d35780632aed7f3f146106fe5780632cf003c2146107415780632f745c59146107c4578063300e7b2d1461082557806331db6c4814610850578063373f5ff01461087b5780633f4ba83a146108a65780634025b22d146108bd57806342842e0e1461090c57806344ba16a21461097957806346021deb146109a45780634caf6231146109cf5780634e18405d146109fa5780634f558e7914610a255780634f6ccce714610a6a57806358d9010814610aab5780635b3ddbf214610ad65780635c975abb14610b055780635cc2e6aa14610b345780635ea1fc6a14610b5f5780636121108714610b8a57806362e23e9e14610be157806362ffb19514610c0c5780636352211e14610c3757806369810d0c14610ca45780636d41a3fb14610ccf57806370a0823114610cfa57806372a2201414610d515780637ed5a6d414610d7c578063835fcab314610da75780638456cb5914610dd25780638c549ef714610de95780638da5cb5b14610e145780638ed06b6214610e6b5780638f4ffcb114610eb657806395d89b4114610f3b5780639689ac9514610fcb5780639edf256d14610ff65780639f727c2714611037578063a0422d021461104e578063a062d5fe14611079578063a1aec173146110a4578063a22cb465146110cf578063b4349daf1461111e578063b591747814611149578063b5d1aedc14611174578063b88d4fde1461119f578063bd131a7814611252578063c0ee0b8a1461127d578063c256d578146112e2578063c87b56dd1461130d578063d57a9e4f146113b3578063d876c9c0146113de578063e985e9c514611409578063ea68008014611484578063eb34c173146114db578063f179f9f114611506578063f2f6ff151461155d578063f2fde38b14611588578063f706b814146115cb578063f7e0bc92146115f6578063f7f1962e14611621578063fc4d705b1461164c578063fc753ce314611677578063fd2cf77a146116a2575b3480156103a657600080fd5b50005b3480156103b557600080fd5b506103be6116cd565b005b3480156103cc57600080fd5b506103d56119a0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104155780820151818401526020810190506103fa565b50505050905090810190601f1680156104425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045c57600080fd5b5061047b60048036038101908080359060200190929190505050611a42565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c957600080fd5b50610508600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a7f565b005b34801561051657600080fd5b5061051f611c45565b6040518082815260200191505060405180910390f35b34801561054157600080fd5b5061054a611c53565b6040518082815260200191505060405180910390f35b34801561056c57600080fd5b50610575611c85565b6040518082815260200191505060405180910390f35b34801561059757600080fd5b506105a0611c8a565b6040518082815260200191505060405180910390f35b3480156105c257600080fd5b506105f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbc565b005b34801561060557600080fd5b5061060e611ea0565b6040518082815260200191505060405180910390f35b34801561063057600080fd5b50610639611ead565b005b34801561064757600080fd5b506106a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120d8565b005b3480156106b457600080fd5b506106bd6121ef565b6040518082815260200191505060405180910390f35b3480156106df57600080fd5b506106e8612221565b6040518082815260200191505060405180910390f35b34801561070a57600080fd5b5061073f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061222c565b005b34801561074d57600080fd5b50610782600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612366565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107d057600080fd5b5061080f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612399565b6040518082815260200191505060405180910390f35b34801561083157600080fd5b5061083a612410565b6040518082815260200191505060405180910390f35b34801561085c57600080fd5b50610865612416565b6040518082815260200191505060405180910390f35b34801561088757600080fd5b5061089061241b565b6040518082815260200191505060405180910390f35b3480156108b257600080fd5b506108bb612420565b005b3480156108c957600080fd5b506108e8600480360381019080803590602001909291905050506124e0565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561091857600080fd5b50610977600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061250d565b005b34801561098557600080fd5b5061098e612545565b6040518082815260200191505060405180910390f35b3480156109b057600080fd5b506109b961254a565b6040518082815260200191505060405180910390f35b3480156109db57600080fd5b506109e461257b565b6040518082815260200191505060405180910390f35b348015610a0657600080fd5b50610a0f612580565b6040518082815260200191505060405180910390f35b348015610a3157600080fd5b50610a5060048036038101908080359060200190929190505050612585565b604051808215151515815260200191505060405180910390f35b348015610a7657600080fd5b50610a95600480360381019080803590602001909291905050506125f6565b6040518082815260200191505060405180910390f35b348015610ab757600080fd5b50610ac061262e565b6040518082815260200191505060405180910390f35b348015610ae257600080fd5b50610aeb612633565b604051808215151515815260200191505060405180910390f35b348015610b1157600080fd5b50610b1a612646565b604051808215151515815260200191505060405180910390f35b348015610b4057600080fd5b50610b49612659565b6040518082815260200191505060405180910390f35b348015610b6b57600080fd5b50610b74612688565b6040518082815260200191505060405180910390f35b348015610b9657600080fd5b50610b9f61268d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bed57600080fd5b50610bf66126b3565b6040518082815260200191505060405180910390f35b348015610c1857600080fd5b50610c216126b8565b6040518082815260200191505060405180910390f35b348015610c4357600080fd5b50610c62600480360381019080803590602001909291905050506126bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cb057600080fd5b50610cb961273a565b6040518082815260200191505060405180910390f35b348015610cdb57600080fd5b50610ce4612740565b6040518082815260200191505060405180910390f35b348015610d0657600080fd5b50610d3b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612746565b6040518082815260200191505060405180910390f35b348015610d5d57600080fd5b50610d666127ca565b6040518082815260200191505060405180910390f35b348015610d8857600080fd5b50610d916127d0565b6040518082815260200191505060405180910390f35b348015610db357600080fd5b50610dbc6127d5565b6040518082815260200191505060405180910390f35b348015610dde57600080fd5b50610de76127da565b005b348015610df557600080fd5b50610dfe61289b565b6040518082815260200191505060405180910390f35b348015610e2057600080fd5b50610e296128a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e7757600080fd5b50610ea060048036038101908080359060200190929190803590602001909291905050506128c6565b6040518082815260200191505060405180910390f35b348015610ec257600080fd5b50610f39600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050612b3d565b005b348015610f4757600080fd5b50610f50612c03565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f90578082015181840152602081019050610f75565b50505050905090810190601f168015610fbd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610fd757600080fd5b50610fe0612ca5565b6040518082815260200191505060405180910390f35b34801561100257600080fd5b5061102160048036038101908080359060200190929190505050612caa565b6040518082815260200191505060405180910390f35b34801561104357600080fd5b5061104c612cee565b005b34801561105a57600080fd5b50611063612dc2565b6040518082815260200191505060405180910390f35b34801561108557600080fd5b5061108e612dc7565b6040518082815260200191505060405180910390f35b3480156110b057600080fd5b506110b9612dcd565b6040518082815260200191505060405180910390f35b3480156110db57600080fd5b5061111c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612dd2565b005b34801561112a57600080fd5b50611133612f0e565b6040518082815260200191505060405180910390f35b34801561115557600080fd5b5061115e612f14565b6040518082815260200191505060405180910390f35b34801561118057600080fd5b50611189612f19565b6040518082815260200191505060405180910390f35b3480156111ab57600080fd5b50611250600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612f1e565b005b34801561125e57600080fd5b50611267612f5d565b6040518082815260200191505060405180910390f35b34801561128957600080fd5b506112e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001919091929391929390505050612f63565b005b3480156112ee57600080fd5b506112f7612f68565b6040518082815260200191505060405180910390f35b34801561131957600080fd5b5061133860048036038101908080359060200190929190505050612f9c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561137857808201518184015260208101905061135d565b50505050905090810190601f1680156113a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156113bf57600080fd5b506113c8613065565b6040518082815260200191505060405180910390f35b3480156113ea57600080fd5b506113f361306a565b6040518082815260200191505060405180910390f35b34801561141557600080fd5b5061146a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061306f565b604051808215151515815260200191505060405180910390f35b34801561149057600080fd5b50611499613103565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156114e757600080fd5b506114f0613129565b6040518082815260200191505060405180910390f35b34801561151257600080fd5b5061151b61312f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561156957600080fd5b50611572613155565b6040518082815260200191505060405180910390f35b34801561159457600080fd5b506115c9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061315a565b005b3480156115d757600080fd5b506115e06132b2565b6040518082815260200191505060405180910390f35b34801561160257600080fd5b5061160b6132b7565b6040518082815260200191505060405180910390f35b34801561162d57600080fd5b506116366132bc565b6040518082815260200191505060405180910390f35b34801561165857600080fd5b506116616132c2565b6040518082815260200191505060405180910390f35b34801561168357600080fd5b5061168c6132c7565b6040518082815260200191505060405180910390f35b3480156116ae57600080fd5b506116b76132cc565b6040518082815260200191505060405180910390f35b60016116d761254a565b10151515611773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f5468652066697273742061756374696f6e206d757374206861766520656e646581526020017f642e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b603960149054906101000a900460ff1615151561181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f5468652066697273742061756374696f6e206d757374206e6f7420686176652081526020017f6265656e20636f6e636c756465642e000000000000000000000000000000000081525060400191505060405180910390fd5b6001603960146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611970576118be603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016132d1565b600073ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561196b5761196a603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119656064611957601460375461332890919063ffffffff16565b61336090919063ffffffff16565b613376565b5b61199e565b61199d603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016132d1565b5b565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a385780601f10611a0d57610100808354040283529160200191611a38565b820191906000526020600020905b815481529060010190602001808311611a1b57829003601f168201915b5050505050905090565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611a8a826126bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ac757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611b075750611b06813361306f565b5b1515611b1257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16611b3383611a42565b73ffffffffffffffffffffffffffffffffffffffff16141580611b835750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c4057826001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35b505050565b6006600501600a0a60020281565b600080603a54148015611c6d5750611c69611c8a565b4210155b15611c7c576037549050611c82565b603b5490505b90565b600681565b6000611cb7603654611ca96033546032546134fc90919063ffffffff16565b6134fc90919063ffffffff16565b905090565b6000603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d1a57600080fd5b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d7757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611e1257600080fd5b505af1158015611e26573d6000803e3d6000fd5b505050506040513d6020811015611e3c57600080fd5b81019080805190602001909291905050509050611e9c603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166135189092919063ffffffff16565b5050565b6000600880549050905090565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f0957600080fd5b603960149054906101000a900460ff161515611fb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f5468652066697273742061756374696f6e206d7573742068617665206265656e81526020017f20636f6e636c756465642e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b6120d6603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505050506040513d60208110156120c057600080fd5b8101908080519060200190929190505050613376565b565b806120e33382613603565b15156120ee57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561212a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561216657600080fd5b6121708483613698565b61217a8483613801565b6121848383613a19565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600061221c60345461220e6033546032546134fc90919063ffffffff16565b613af090919063ffffffff16565b905090565b666da012f8790e0081565b6000603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561228a57600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561234a57600080fd5b505af115801561235e573d6000803e3d6000fd5b505050505050565b602f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006123a483612746565b821015156123b157600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156123fd57fe5b9060005260206000200154905092915050565b60365481565b600281565b600781565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561247c57600080fd5b603060149054906101000a900460ff16151561249757600080fd5b6000603060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60008060006124ee84613b09565b6124f785613b65565b61250086613bc1565b9250925092509193909250565b806125183382613603565b151561252357600080fd5b61253f8484846020604051908101604052806000815250612f1e565b50505050565b600881565b600080603a541480156125645750612560611c8a565b4210155b156125725760019050612578565b603a5490505b90565b600b81565b606481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000612600611ea0565b8210151561260d57600080fd5b60088281548110151561261c57fe5b90600052602060002001549050919050565b600981565b603960149054906101000a900460ff1681565b603060149054906101000a900460ff1681565b6000806000429150612669611c8a565b9050818110151561267e578181039250612683565b600092505b505090565b600381565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b601481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561273157600080fd5b80915050919050565b61038481565b60355481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561278357600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60375481565b600181565b600281565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561283657600080fd5b603060149054906101000a900460ff1615151561285257600080fd5b6001603060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600481565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060028410151515612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f53686970204944206d7573742062652067726561746572207468616e206f722081526020017f657175616c20746f20322e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b6103848411151515612a08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001807f53686970204944206d75737420626520736d616c6c6572207468616e206f722081526020017f657175616c20746f20746f74616c206e756d626572206f6620736869702e000081525060400191505060405180910390fd5b612a236001612a1561254a565b6134fc90919063ffffffff16565b84141515612abf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001807f43616e206f6e6c7920676574207072696365206f66207468652073686970207781526020017f68696368206973206265696e672061756374696f6e65642e000000000000000081525060400191505060405180910390fd5b612ac7611c53565b90506002841415612b0057612af96064612aeb60328461332890919063ffffffff16565b61336090919063ffffffff16565b9050612b2a565b612b276064612b19607d8461332890919063ffffffff16565b61336090919063ffffffff16565b90505b612b348184613e4e565b91505092915050565b600080603060149054906101000a900460ff16151515612b5c57600080fd5b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515612bb857600080fd5b604084849050141515612bca57600080fd5b60a435915060c43590506001821415612bed57612be8868883613fb3565b612bfa565b612bf982878984614407565b5b50505050505050565b606060058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c9b5780601f10612c7057610100808354040283529160200191612c9b565b820191906000526020600020905b815481529060010190602001808311612c7e57829003601f168201915b5050505050905090565b600081565b600080612cda603c612ccc612cbd612f68565b42613af090919063ffffffff16565b61336090919063ffffffff16565b9050612ce683826128c6565b915050919050565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d4a57600080fd5b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515612dc057fe5b565b600081565b61019081565b600a81565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e0d57600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b61019081565b600381565b600c81565b81612f293382613603565b1515612f3457600080fd5b612f3f8585856120d8565b612f4b858585856146c6565b1515612f5657600080fd5b5050505050565b60345481565b600080fd5b6000806000603a541415612f9257612f7e611c8a565b90508042101515612f9157809150612f98565b5b603c5491505b5090565b6060612fa782612585565b1515612fb257600080fd5b600a60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130595780601f1061302e57610100808354040283529160200191613059565b820191906000526020600020905b81548152906001019060200180831161303c57829003601f168201915b50505050509050919050565b607d81565b603281565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60325481565b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600281565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131b657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156131f257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600681565b600181565b60335481565b600581565b600181565b600381565b6132db82826148b4565b600880549050600960008381526020019081526020016000208190555060088190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60008083141561333b576000905061335a565b818302905081838281151561334c57fe5b0414151561335657fe5b8090505b92915050565b6000818381151561336d57fe5b04905092915050565b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660405180807f7472616e7366657228616464726573732c75696e743235362900000000000000815250601901905060405180910390207c0100000000000000000000000000000000000000000000000000000000900483836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506000604051808303816000875af19250505015156134f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f50617273656320437265646974207472616e73666572206661696c65642e000081525060200191505060405180910390fd5b5050565b6000818301905082811015151561350f57fe5b80905092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135bb57600080fd5b505af11580156135cf573d6000803e3d6000fd5b505050506040513d60208110156135e557600080fd5b810190808051906020019092919050505015156135fe57fe5b505050565b60008061360f836126bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061367e57508373ffffffffffffffffffffffffffffffffffffffff1661366684611a42565b73ffffffffffffffffffffffffffffffffffffffff16145b8061368f575061368e818561306f565b5b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff166136b8826126bd565b73ffffffffffffffffffffffffffffffffffffffff161415156136da57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156137fd5760006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b5050565b60008060006138108585614964565b6007600085815260200190815260200160002054925061387c6001600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613af090919063ffffffff16565b9150600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156138ca57fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561392457fe5b90600052602060002001819055506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561398057fe5b9060005260206000200181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036139e09190614e81565b50600060076000868152602001908152602001600020819055508260076000838152602001908152602001600020819055505050505050565b6000613a258383614a92565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050906001820390600052602060002001600090919290919091505550806007600084815260200190815260200160002081905550505050565b6000828211151515613afe57fe5b818303905092915050565b60006001821015613b1d5760009050613b60565b606482111515613b305760019050613b60565b61019060640182111515613b475760029050613b60565b61038482111515613b5b5760039050613b60565b600090505b919050565b60006001821015613b795760009050613bbc565b606482111515613b8c5760019050613bbc565b61019060640182111515613ba35760029050613bbc565b61038482111515613bb75760039050613bbc565b600090505b919050565b60006001821015613bd55760009050613e49565b6001821415613be75760019050613e49565b601782111515613bfa5760029050613e49565b602582111515613c0d5760039050613e49565b602a82111515613c205760049050613e49565b602d82111515613c335760059050613e49565b603182111515613c465760069050613e49565b604082111515613c595760079050613e49565b604382111515613c6c5760089050613e49565b604d82111515613c7f5760099050613e49565b605382111515613c9257600a9050613e49565b605d82111515613ca557600b9050613e49565b606482111515613cb857600c9050613e49565b608c82111515613ccb5760029050613e49565b60c882111515613cde5760039050613e49565b60ed82111515613cf15760049050613e49565b60f782111515613d045760059050613e49565b61014a82111515613d185760069050613e49565b61017282111515613d2c5760079050613e49565b61017c82111515613d405760089050613e49565b6101b882111515613d545760099050613e49565b6101cc82111515613d6857600a9050613e49565b6101f482111515613d7c57600b9050613e49565b61021c82111515613d905760029050613e49565b61025882111515613da45760039050613e49565b61027d82111515613db85760049050613e49565b61028782111515613dcc5760059050613e49565b6102da82111515613de05760069050613e49565b61030282111515613df45760079050613e49565b61030c82111515613e085760089050613e49565b61034882111515613e1c5760099050613e49565b61035c82111515613e3057600a9050613e49565b61038482111515613e4457600b9050613e49565b600090505b919050565b6000806000666da012f8790e008511151515613ef8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f496e697469616c2073686970207072696365206d757374206e6f74206265206781526020017f726561746572207468616e20746f74616c20506172736563204372656469742e81525060400191505060405180910390fd5b60006012859060020a90041115613f125760009250613fab565b849150600090505b6012811015613fa7576000600182869060020a9004161115613f9a57613f97601d82601281101515613f4857fe5b0154600a0a613f89666da012f8790e00613f7b600b86601281101515613f6a57fe5b01548761332890919063ffffffff16565b61336090919063ffffffff16565b61336090919063ffffffff16565b91505b8080600101915050613f1a565b8192505b505092915050565b6032544210151515614053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f41756374696f6e206f66207468652066697273742073686970206973206e6f7481526020017f2073746172746564207965742e0000000000000000000000000000000000000081525060400191505060405180910390fd5b61405b611c8a565b421015156140f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f41756374696f6e206f662074686520666972737420736869702068617320656e81526020017f6465642e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6141166006600501600a0a6002026037546134fc90919063ffffffff16565b831015151561418d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4e6f7420656e6f75676820506172736563204372656469742e0000000000000081525060200191505060405180910390fd5b6141978282614bea565b6141a18284614d35565b600073ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561422857614227603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603754613376565b5b8260378190555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506143186121ef565b4210151561433e576143376035546036546134fc90919063ffffffff16565b6036819055505b602f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa35be3dd4d373abce5ad64f15f73a1f9496153b01cfb94fde9be0be4e55a1beb856040518082815260200191505060405180910390a3505050565b600061441285612caa565b905080841015151561448c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4e6f7420656e6f75676820506172736563204372656469742e0000000000000081525060200191505060405180910390fd5b6144968383614bea565b60008111156144aa576144a98382614d35565b5b6144b483866132d1565b84603a8190555080603b8190555042603c81905550600073ffffffffffffffffffffffffffffffffffffffff16602f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156145655750600081115b156145fa576145f9602f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166145f460646145e660148661332890919063ffffffff16565b61336090919063ffffffff16565b613376565b5b602f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16867fc20f4dbecc8b52b305c9287220931f3d821a06994945d00f26720063ce323a98876040518082815260200191505060405180910390a45050505050565b6000806146e88573ffffffffffffffffffffffffffffffffffffffff16614e6e565b15156146f757600191506148ab565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156147b957808201518184015260208101905061479e565b50505050905090810190601f1680156147e65780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561480757600080fd5b505af115801561481b573d6000803e3d6000fd5b505050506040513d602081101561483157600080fd5b8101908080519060200190929190505050905063f0b9e5ba7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505b50949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156148f057600080fd5b6148fa8282613a19565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff16614984826126bd565b73ffffffffffffffffffffffffffffffffffffffff161415156149a657600080fd5b6149f96001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613af090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614aff57600080fd5b8160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614ba36001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134fc90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614c5357508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15614d315780602f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc40302e3b5897f6966b131753cb09f65aa712ae82e3f49b189d089d5694256e360405160405180910390a35b5050565b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015614e2e57600080fd5b505af1158015614e42573d6000803e3d6000fd5b505050506040513d6020811015614e5857600080fd5b8101908080519060200190929190505050505050565b600080823b905060008111915050919050565b815481835581811115614ea857818360005260206000209182019101614ea79190614ead565b5b505050565b614ecf91905b80821115614ecb576000816000905550600101614eb3565b5090565b905600a165627a7a72305820dbf0831eb68b75b73165f61f773a63869ea7853bffe8aca30e6ef301a9524e010029
Deployed Bytecode
0x60806040526004361061039a576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680622d7c9d146103a957806306fdde03146103c0578063081812fc14610450578063095ea7b3146104bd578063108456b41461050a578063117e62fd14610535578063125385f21461056057806316dd68b11461058b57806317ffc320146105b657806318160ddd146105f95780631ebcf2fb1461062457806323b872dd1461063b578063248e150a146106a857806327e584d4146106d35780632aed7f3f146106fe5780632cf003c2146107415780632f745c59146107c4578063300e7b2d1461082557806331db6c4814610850578063373f5ff01461087b5780633f4ba83a146108a65780634025b22d146108bd57806342842e0e1461090c57806344ba16a21461097957806346021deb146109a45780634caf6231146109cf5780634e18405d146109fa5780634f558e7914610a255780634f6ccce714610a6a57806358d9010814610aab5780635b3ddbf214610ad65780635c975abb14610b055780635cc2e6aa14610b345780635ea1fc6a14610b5f5780636121108714610b8a57806362e23e9e14610be157806362ffb19514610c0c5780636352211e14610c3757806369810d0c14610ca45780636d41a3fb14610ccf57806370a0823114610cfa57806372a2201414610d515780637ed5a6d414610d7c578063835fcab314610da75780638456cb5914610dd25780638c549ef714610de95780638da5cb5b14610e145780638ed06b6214610e6b5780638f4ffcb114610eb657806395d89b4114610f3b5780639689ac9514610fcb5780639edf256d14610ff65780639f727c2714611037578063a0422d021461104e578063a062d5fe14611079578063a1aec173146110a4578063a22cb465146110cf578063b4349daf1461111e578063b591747814611149578063b5d1aedc14611174578063b88d4fde1461119f578063bd131a7814611252578063c0ee0b8a1461127d578063c256d578146112e2578063c87b56dd1461130d578063d57a9e4f146113b3578063d876c9c0146113de578063e985e9c514611409578063ea68008014611484578063eb34c173146114db578063f179f9f114611506578063f2f6ff151461155d578063f2fde38b14611588578063f706b814146115cb578063f7e0bc92146115f6578063f7f1962e14611621578063fc4d705b1461164c578063fc753ce314611677578063fd2cf77a146116a2575b3480156103a657600080fd5b50005b3480156103b557600080fd5b506103be6116cd565b005b3480156103cc57600080fd5b506103d56119a0565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104155780820151818401526020810190506103fa565b50505050905090810190601f1680156104425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045c57600080fd5b5061047b60048036038101908080359060200190929190505050611a42565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c957600080fd5b50610508600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a7f565b005b34801561051657600080fd5b5061051f611c45565b6040518082815260200191505060405180910390f35b34801561054157600080fd5b5061054a611c53565b6040518082815260200191505060405180910390f35b34801561056c57600080fd5b50610575611c85565b6040518082815260200191505060405180910390f35b34801561059757600080fd5b506105a0611c8a565b6040518082815260200191505060405180910390f35b3480156105c257600080fd5b506105f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbc565b005b34801561060557600080fd5b5061060e611ea0565b6040518082815260200191505060405180910390f35b34801561063057600080fd5b50610639611ead565b005b34801561064757600080fd5b506106a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120d8565b005b3480156106b457600080fd5b506106bd6121ef565b6040518082815260200191505060405180910390f35b3480156106df57600080fd5b506106e8612221565b6040518082815260200191505060405180910390f35b34801561070a57600080fd5b5061073f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061222c565b005b34801561074d57600080fd5b50610782600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612366565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107d057600080fd5b5061080f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612399565b6040518082815260200191505060405180910390f35b34801561083157600080fd5b5061083a612410565b6040518082815260200191505060405180910390f35b34801561085c57600080fd5b50610865612416565b6040518082815260200191505060405180910390f35b34801561088757600080fd5b5061089061241b565b6040518082815260200191505060405180910390f35b3480156108b257600080fd5b506108bb612420565b005b3480156108c957600080fd5b506108e8600480360381019080803590602001909291905050506124e0565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561091857600080fd5b50610977600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061250d565b005b34801561098557600080fd5b5061098e612545565b6040518082815260200191505060405180910390f35b3480156109b057600080fd5b506109b961254a565b6040518082815260200191505060405180910390f35b3480156109db57600080fd5b506109e461257b565b6040518082815260200191505060405180910390f35b348015610a0657600080fd5b50610a0f612580565b6040518082815260200191505060405180910390f35b348015610a3157600080fd5b50610a5060048036038101908080359060200190929190505050612585565b604051808215151515815260200191505060405180910390f35b348015610a7657600080fd5b50610a95600480360381019080803590602001909291905050506125f6565b6040518082815260200191505060405180910390f35b348015610ab757600080fd5b50610ac061262e565b6040518082815260200191505060405180910390f35b348015610ae257600080fd5b50610aeb612633565b604051808215151515815260200191505060405180910390f35b348015610b1157600080fd5b50610b1a612646565b604051808215151515815260200191505060405180910390f35b348015610b4057600080fd5b50610b49612659565b6040518082815260200191505060405180910390f35b348015610b6b57600080fd5b50610b74612688565b6040518082815260200191505060405180910390f35b348015610b9657600080fd5b50610b9f61268d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bed57600080fd5b50610bf66126b3565b6040518082815260200191505060405180910390f35b348015610c1857600080fd5b50610c216126b8565b6040518082815260200191505060405180910390f35b348015610c4357600080fd5b50610c62600480360381019080803590602001909291905050506126bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cb057600080fd5b50610cb961273a565b6040518082815260200191505060405180910390f35b348015610cdb57600080fd5b50610ce4612740565b6040518082815260200191505060405180910390f35b348015610d0657600080fd5b50610d3b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612746565b6040518082815260200191505060405180910390f35b348015610d5d57600080fd5b50610d666127ca565b6040518082815260200191505060405180910390f35b348015610d8857600080fd5b50610d916127d0565b6040518082815260200191505060405180910390f35b348015610db357600080fd5b50610dbc6127d5565b6040518082815260200191505060405180910390f35b348015610dde57600080fd5b50610de76127da565b005b348015610df557600080fd5b50610dfe61289b565b6040518082815260200191505060405180910390f35b348015610e2057600080fd5b50610e296128a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e7757600080fd5b50610ea060048036038101908080359060200190929190803590602001909291905050506128c6565b6040518082815260200191505060405180910390f35b348015610ec257600080fd5b50610f39600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050612b3d565b005b348015610f4757600080fd5b50610f50612c03565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f90578082015181840152602081019050610f75565b50505050905090810190601f168015610fbd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610fd757600080fd5b50610fe0612ca5565b6040518082815260200191505060405180910390f35b34801561100257600080fd5b5061102160048036038101908080359060200190929190505050612caa565b6040518082815260200191505060405180910390f35b34801561104357600080fd5b5061104c612cee565b005b34801561105a57600080fd5b50611063612dc2565b6040518082815260200191505060405180910390f35b34801561108557600080fd5b5061108e612dc7565b6040518082815260200191505060405180910390f35b3480156110b057600080fd5b506110b9612dcd565b6040518082815260200191505060405180910390f35b3480156110db57600080fd5b5061111c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612dd2565b005b34801561112a57600080fd5b50611133612f0e565b6040518082815260200191505060405180910390f35b34801561115557600080fd5b5061115e612f14565b6040518082815260200191505060405180910390f35b34801561118057600080fd5b50611189612f19565b6040518082815260200191505060405180910390f35b3480156111ab57600080fd5b50611250600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612f1e565b005b34801561125e57600080fd5b50611267612f5d565b6040518082815260200191505060405180910390f35b34801561128957600080fd5b506112e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001919091929391929390505050612f63565b005b3480156112ee57600080fd5b506112f7612f68565b6040518082815260200191505060405180910390f35b34801561131957600080fd5b5061133860048036038101908080359060200190929190505050612f9c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561137857808201518184015260208101905061135d565b50505050905090810190601f1680156113a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156113bf57600080fd5b506113c8613065565b6040518082815260200191505060405180910390f35b3480156113ea57600080fd5b506113f361306a565b6040518082815260200191505060405180910390f35b34801561141557600080fd5b5061146a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061306f565b604051808215151515815260200191505060405180910390f35b34801561149057600080fd5b50611499613103565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156114e757600080fd5b506114f0613129565b6040518082815260200191505060405180910390f35b34801561151257600080fd5b5061151b61312f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561156957600080fd5b50611572613155565b6040518082815260200191505060405180910390f35b34801561159457600080fd5b506115c9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061315a565b005b3480156115d757600080fd5b506115e06132b2565b6040518082815260200191505060405180910390f35b34801561160257600080fd5b5061160b6132b7565b6040518082815260200191505060405180910390f35b34801561162d57600080fd5b506116366132bc565b6040518082815260200191505060405180910390f35b34801561165857600080fd5b506116616132c2565b6040518082815260200191505060405180910390f35b34801561168357600080fd5b5061168c6132c7565b6040518082815260200191505060405180910390f35b3480156116ae57600080fd5b506116b76132cc565b6040518082815260200191505060405180910390f35b60016116d761254a565b10151515611773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f5468652066697273742061756374696f6e206d757374206861766520656e646581526020017f642e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b603960149054906101000a900460ff1615151561181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f5468652066697273742061756374696f6e206d757374206e6f7420686176652081526020017f6265656e20636f6e636c756465642e000000000000000000000000000000000081525060400191505060405180910390fd5b6001603960146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611970576118be603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016132d1565b600073ffffffffffffffffffffffffffffffffffffffff16603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561196b5761196a603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119656064611957601460375461332890919063ffffffff16565b61336090919063ffffffff16565b613376565b5b61199e565b61199d603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016132d1565b5b565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a385780601f10611a0d57610100808354040283529160200191611a38565b820191906000526020600020905b815481529060010190602001808311611a1b57829003601f168201915b5050505050905090565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611a8a826126bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ac757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611b075750611b06813361306f565b5b1515611b1257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16611b3383611a42565b73ffffffffffffffffffffffffffffffffffffffff16141580611b835750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c4057826001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35b505050565b6006600501600a0a60020281565b600080603a54148015611c6d5750611c69611c8a565b4210155b15611c7c576037549050611c82565b603b5490505b90565b600681565b6000611cb7603654611ca96033546032546134fc90919063ffffffff16565b6134fc90919063ffffffff16565b905090565b6000603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d1a57600080fd5b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d7757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611e1257600080fd5b505af1158015611e26573d6000803e3d6000fd5b505050506040513d6020811015611e3c57600080fd5b81019080805190602001909291905050509050611e9c603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166135189092919063ffffffff16565b5050565b6000600880549050905090565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f0957600080fd5b603960149054906101000a900460ff161515611fb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f5468652066697273742061756374696f6e206d7573742068617665206265656e81526020017f20636f6e636c756465642e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b6120d6603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505050506040513d60208110156120c057600080fd5b8101908080519060200190929190505050613376565b565b806120e33382613603565b15156120ee57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561212a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561216657600080fd5b6121708483613698565b61217a8483613801565b6121848383613a19565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600061221c60345461220e6033546032546134fc90919063ffffffff16565b613af090919063ffffffff16565b905090565b666da012f8790e0081565b6000603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561228a57600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff1663f2fde38b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561234a57600080fd5b505af115801561235e573d6000803e3d6000fd5b505050505050565b602f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006123a483612746565b821015156123b157600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156123fd57fe5b9060005260206000200154905092915050565b60365481565b600281565b600781565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561247c57600080fd5b603060149054906101000a900460ff16151561249757600080fd5b6000603060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60008060006124ee84613b09565b6124f785613b65565b61250086613bc1565b9250925092509193909250565b806125183382613603565b151561252357600080fd5b61253f8484846020604051908101604052806000815250612f1e565b50505050565b600881565b600080603a541480156125645750612560611c8a565b4210155b156125725760019050612578565b603a5490505b90565b600b81565b606481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000612600611ea0565b8210151561260d57600080fd5b60088281548110151561261c57fe5b90600052602060002001549050919050565b600981565b603960149054906101000a900460ff1681565b603060149054906101000a900460ff1681565b6000806000429150612669611c8a565b9050818110151561267e578181039250612683565b600092505b505090565b600381565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081565b601481565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561273157600080fd5b80915050919050565b61038481565b60355481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561278357600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60375481565b600181565b600281565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561283657600080fd5b603060149054906101000a900460ff1615151561285257600080fd5b6001603060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600481565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060028410151515612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f53686970204944206d7573742062652067726561746572207468616e206f722081526020017f657175616c20746f20322e00000000000000000000000000000000000000000081525060400191505060405180910390fd5b6103848411151515612a08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001807f53686970204944206d75737420626520736d616c6c6572207468616e206f722081526020017f657175616c20746f20746f74616c206e756d626572206f6620736869702e000081525060400191505060405180910390fd5b612a236001612a1561254a565b6134fc90919063ffffffff16565b84141515612abf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001807f43616e206f6e6c7920676574207072696365206f66207468652073686970207781526020017f68696368206973206265696e672061756374696f6e65642e000000000000000081525060400191505060405180910390fd5b612ac7611c53565b90506002841415612b0057612af96064612aeb60328461332890919063ffffffff16565b61336090919063ffffffff16565b9050612b2a565b612b276064612b19607d8461332890919063ffffffff16565b61336090919063ffffffff16565b90505b612b348184613e4e565b91505092915050565b600080603060149054906101000a900460ff16151515612b5c57600080fd5b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515612bb857600080fd5b604084849050141515612bca57600080fd5b60a435915060c43590506001821415612bed57612be8868883613fb3565b612bfa565b612bf982878984614407565b5b50505050505050565b606060058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c9b5780601f10612c7057610100808354040283529160200191612c9b565b820191906000526020600020905b815481529060010190602001808311612c7e57829003601f168201915b5050505050905090565b600081565b600080612cda603c612ccc612cbd612f68565b42613af090919063ffffffff16565b61336090919063ffffffff16565b9050612ce683826128c6565b915050919050565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d4a57600080fd5b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515612dc057fe5b565b600081565b61019081565b600a81565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612e0d57600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b61019081565b600381565b600c81565b81612f293382613603565b1515612f3457600080fd5b612f3f8585856120d8565b612f4b858585856146c6565b1515612f5657600080fd5b5050505050565b60345481565b600080fd5b6000806000603a541415612f9257612f7e611c8a565b90508042101515612f9157809150612f98565b5b603c5491505b5090565b6060612fa782612585565b1515612fb257600080fd5b600a60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130595780601f1061302e57610100808354040283529160200191613059565b820191906000526020600020905b81548152906001019060200180831161303c57829003601f168201915b50505050509050919050565b607d81565b603281565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60325481565b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600281565b603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131b657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156131f257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16603060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600681565b600181565b60335481565b600581565b600181565b600381565b6132db82826148b4565b600880549050600960008381526020019081526020016000208190555060088190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60008083141561333b576000905061335a565b818302905081838281151561334c57fe5b0414151561335657fe5b8090505b92915050565b6000818381151561336d57fe5b04905092915050565b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660405180807f7472616e7366657228616464726573732c75696e743235362900000000000000815250601901905060405180910390207c0100000000000000000000000000000000000000000000000000000000900483836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506000604051808303816000875af19250505015156134f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f50617273656320437265646974207472616e73666572206661696c65642e000081525060200191505060405180910390fd5b5050565b6000818301905082811015151561350f57fe5b80905092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135bb57600080fd5b505af11580156135cf573d6000803e3d6000fd5b505050506040513d60208110156135e557600080fd5b810190808051906020019092919050505015156135fe57fe5b505050565b60008061360f836126bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061367e57508373ffffffffffffffffffffffffffffffffffffffff1661366684611a42565b73ffffffffffffffffffffffffffffffffffffffff16145b8061368f575061368e818561306f565b5b91505092915050565b8173ffffffffffffffffffffffffffffffffffffffff166136b8826126bd565b73ffffffffffffffffffffffffffffffffffffffff161415156136da57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156137fd5760006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b5050565b60008060006138108585614964565b6007600085815260200190815260200160002054925061387c6001600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613af090919063ffffffff16565b9150600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156138ca57fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110151561392457fe5b90600052602060002001819055506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561398057fe5b9060005260206000200181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036139e09190614e81565b50600060076000868152602001908152602001600020819055508260076000838152602001908152602001600020819055505050505050565b6000613a258383614a92565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050906001820390600052602060002001600090919290919091505550806007600084815260200190815260200160002081905550505050565b6000828211151515613afe57fe5b818303905092915050565b60006001821015613b1d5760009050613b60565b606482111515613b305760019050613b60565b61019060640182111515613b475760029050613b60565b61038482111515613b5b5760039050613b60565b600090505b919050565b60006001821015613b795760009050613bbc565b606482111515613b8c5760019050613bbc565b61019060640182111515613ba35760029050613bbc565b61038482111515613bb75760039050613bbc565b600090505b919050565b60006001821015613bd55760009050613e49565b6001821415613be75760019050613e49565b601782111515613bfa5760029050613e49565b602582111515613c0d5760039050613e49565b602a82111515613c205760049050613e49565b602d82111515613c335760059050613e49565b603182111515613c465760069050613e49565b604082111515613c595760079050613e49565b604382111515613c6c5760089050613e49565b604d82111515613c7f5760099050613e49565b605382111515613c9257600a9050613e49565b605d82111515613ca557600b9050613e49565b606482111515613cb857600c9050613e49565b608c82111515613ccb5760029050613e49565b60c882111515613cde5760039050613e49565b60ed82111515613cf15760049050613e49565b60f782111515613d045760059050613e49565b61014a82111515613d185760069050613e49565b61017282111515613d2c5760079050613e49565b61017c82111515613d405760089050613e49565b6101b882111515613d545760099050613e49565b6101cc82111515613d6857600a9050613e49565b6101f482111515613d7c57600b9050613e49565b61021c82111515613d905760029050613e49565b61025882111515613da45760039050613e49565b61027d82111515613db85760049050613e49565b61028782111515613dcc5760059050613e49565b6102da82111515613de05760069050613e49565b61030282111515613df45760079050613e49565b61030c82111515613e085760089050613e49565b61034882111515613e1c5760099050613e49565b61035c82111515613e3057600a9050613e49565b61038482111515613e4457600b9050613e49565b600090505b919050565b6000806000666da012f8790e008511151515613ef8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f496e697469616c2073686970207072696365206d757374206e6f74206265206781526020017f726561746572207468616e20746f74616c20506172736563204372656469742e81525060400191505060405180910390fd5b60006012859060020a90041115613f125760009250613fab565b849150600090505b6012811015613fa7576000600182869060020a9004161115613f9a57613f97601d82601281101515613f4857fe5b0154600a0a613f89666da012f8790e00613f7b600b86601281101515613f6a57fe5b01548761332890919063ffffffff16565b61336090919063ffffffff16565b61336090919063ffffffff16565b91505b8080600101915050613f1a565b8192505b505092915050565b6032544210151515614053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f41756374696f6e206f66207468652066697273742073686970206973206e6f7481526020017f2073746172746564207965742e0000000000000000000000000000000000000081525060400191505060405180910390fd5b61405b611c8a565b421015156140f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f41756374696f6e206f662074686520666972737420736869702068617320656e81526020017f6465642e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6141166006600501600a0a6002026037546134fc90919063ffffffff16565b831015151561418d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4e6f7420656e6f75676820506172736563204372656469742e0000000000000081525060200191505060405180910390fd5b6141978282614bea565b6141a18284614d35565b600073ffffffffffffffffffffffffffffffffffffffff16603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561422857614227603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603754613376565b5b8260378190555081603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506143186121ef565b4210151561433e576143376035546036546134fc90919063ffffffff16565b6036819055505b602f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa35be3dd4d373abce5ad64f15f73a1f9496153b01cfb94fde9be0be4e55a1beb856040518082815260200191505060405180910390a3505050565b600061441285612caa565b905080841015151561448c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4e6f7420656e6f75676820506172736563204372656469742e0000000000000081525060200191505060405180910390fd5b6144968383614bea565b60008111156144aa576144a98382614d35565b5b6144b483866132d1565b84603a8190555080603b8190555042603c81905550600073ffffffffffffffffffffffffffffffffffffffff16602f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156145655750600081115b156145fa576145f9602f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166145f460646145e660148661332890919063ffffffff16565b61336090919063ffffffff16565b613376565b5b602f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16867fc20f4dbecc8b52b305c9287220931f3d821a06994945d00f26720063ce323a98876040518082815260200191505060405180910390a45050505050565b6000806146e88573ffffffffffffffffffffffffffffffffffffffff16614e6e565b15156146f757600191506148ab565b8473ffffffffffffffffffffffffffffffffffffffff1663f0b9e5ba8786866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156147b957808201518184015260208101905061479e565b50505050905090810190601f1680156147e65780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561480757600080fd5b505af115801561481b573d6000803e3d6000fd5b505050506040513d602081101561483157600080fd5b8101908080519060200190929190505050905063f0b9e5ba7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505b50949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156148f057600080fd5b6148fa8282613a19565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff16614984826126bd565b73ffffffffffffffffffffffffffffffffffffffff161415156149a657600080fd5b6149f96001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613af090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515614aff57600080fd5b8160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614ba36001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134fc90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614c5357508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15614d315780602f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc40302e3b5897f6966b131753cb09f65aa712ae82e3f49b189d089d5694256e360405160405180910390a35b5050565b603160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015614e2e57600080fd5b505af1158015614e42573d6000803e3d6000fd5b505050506040513d6020811015614e5857600080fd5b8101908080519060200190929190505050505050565b600080823b905060008111915050919050565b815481835581811115614ea857818360005260206000209182019101614ea79190614ead565b5b505050565b614ecf91905b80821115614ecb576000816000905550600101614eb3565b5090565b905600a165627a7a72305820dbf0831eb68b75b73165f61f773a63869ea7853bffe8aca30e6ef301a9524e010029
Swarm Source
bzzr://dbf0831eb68b75b73165f61f773a63869ea7853bffe8aca30e6ef301a9524e01
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.