Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
102 BEEPLE
Holders
65
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BEEPLELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BeepleSpecialEdition
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-29 */ pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } /** * @dev Required interface of an ERC721 compliant contract. */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of NFTs in `owner`'s account. */ function balanceOf(address owner) public view returns (uint256 balance); /** * @dev Returns the owner of the NFT specified by `tokenId`. */ function ownerOf(uint256 tokenId) public view returns (address owner); /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * * * Requirements: * - `from`, `to` cannot be zero. * - `tokenId` must be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this * NFT by either {approve} or {setApprovalForAll}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public; /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * Requirements: * - If the caller is not `from`, it must be approved to move this NFT by * either {approve} or {setApprovalForAll}. */ function transferFrom(address from, address to, uint256 tokenId) public; 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 safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a {IERC721-safeTransferFrom}. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is Context, ERC165, IERC721 { using SafeMath for uint256; using Address for address; using Counters for Counters.Counter; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => Counters.Counter) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @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), "ERC721: balance query for the zero address"); return _ownedTokensCount[owner].current(); } /** * @dev Gets the owner of the specified token ID. * @param tokenId uint256 ID of the token to query the owner of * @return 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), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * 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, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * 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 != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][to] = approved; emit ApprovalForAll(_msgSender(), 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. * Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * 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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * 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 { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the _msgSender() 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 memory _data) public { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransferFrom(from, to, tokenId, _data); } /** * @dev Safely transfers the ownership of a given token ID to another address * 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,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * 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 memory _data) internal { _transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether the specified token exists. * @param tokenId uint256 ID of the token to query the existence of * @return bool whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @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) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * 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,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _safeMint(address to, uint256 tokenId) internal { _safeMint(to, tokenId, ""); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * 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,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted * @param _data bytes data to send along with a safe transfer check */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Internal function to mint a new token. * 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 */ function _mint(address to, uint256 tokenId) internal { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _tokenOwner[tokenId] = to; _ownedTokensCount[to].increment(); emit Transfer(address(0), to, tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner, "ERC721: burn of token that is not own"); _clearApproval(tokenId); _ownedTokensCount[owner].decrement(); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * @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) internal { require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _clearApproval(tokenId); _ownedTokensCount[from].decrement(); _ownedTokensCount[to].increment(); _tokenOwner[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * This function is deprecated. * @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 bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool) { if (!to.isContract()) { return true; } bytes4 retval = IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data); return (retval == _ERC721_RECEIVED); } /** * @dev Private function to clear current approval of a given token ID. * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Enumerable is IERC721 { 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 with optional enumeration extension logic * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Enumerable is Context, ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => uint256[]) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /* * bytes4(keccak256('totalSupply()')) == 0x18160ddd * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59 * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7 * * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63 */ bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * @dev Constructor function. */ constructor () public { // register the supported interface to conform to ERC721Enumerable via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @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), "ERC721Enumerable: owner index out of bounds"); 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 * 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(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @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) internal { super._transferFrom(from, to, tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); _addTokenToOwnerEnumeration(to, tokenId); } /** * @dev Internal function to mint a new token. * 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 */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId); _addTokenToOwnerEnumeration(to, tokenId); _addTokenToAllTokensEnumeration(tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {ERC721-_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _removeTokenFromOwnerEnumeration(owner, tokenId); // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund _ownedTokensIndex[tokenId] = 0; _removeTokenFromAllTokensEnumeration(tokenId); } /** * @dev Gets the list of token IDs of the requested owner. * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @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 _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @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 _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _ownedTokens[from].length.sub(1); uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by // lastTokenId, or just over the end of the array if the token was the last one). } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length.sub(1); uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array _allTokens.length--; _allTokensIndex[tokenId] = 0; } } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } contract ERC721Metadata is Context, ERC165, ERC721, IERC721Metadata { // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; //Optional mapping for IPFS link to canonical image file mapping(uint256 => string) private _tokenIPFSHashes; mapping(uint256 => string) private _niftyTypeName; //Optional mapping for IPFS link to canonical image file by Nifty type mapping(uint256 => string) private _niftyTypeIPFSHashes; //Token name mapping(uint256 => string) private _tokenName; /* * bytes4(keccak256('name()')) == 0x06fdde03 * bytes4(keccak256('symbol()')) == 0x95d89b41 * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd * * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f */ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /** * @dev Constructor function */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } /** * @dev Gets the token name. * @return string representing the token name */ function name() external view returns (string memory) { return _name; } /** * @dev Gets the token symbol. * @return string representing the token symbol */ function symbol() external view returns (string memory) { return _symbol; } //master builder - ONLY DOES STATIC CALLS address public masterBuilderContract = 0x6EFB06cF568253a53C7511BD3c31AB28BecB0192; /** * @dev Returns an URI for a given token ID. * 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) external view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return _tokenURIs[tokenId]; } /** * @dev Returns an IPFS Hash for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenIPFSHash(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); //master for static calls BuilderMaster bm = BuilderMaster(masterBuilderContract); uint nifty_type = bm.getNiftyTypeId(tokenId); return _niftyTypeIPFSHashes[nifty_type]; } /** * @dev Returns an URI for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenName(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); //master for static calls BuilderMaster bm = BuilderMaster(masterBuilderContract); uint nifty_type = bm.getNiftyTypeId(tokenId); return _niftyTypeName[nifty_type]; } /** * @dev Internal function to set the token URI for a given token. * 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 memory uri) internal { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = uri; } /** * @dev Internal function to set the token IPFS hash for a given token. * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to set its URI * @param ipfs_hash string IPFS link to assign */ function _setTokenIPFSHash(uint256 tokenId, string memory ipfs_hash) internal { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenIPFSHashes[tokenId] = ipfs_hash; } /** * @dev Internal function to set the token IPFS hash for a given token. * Reverts if the token ID does not exist. * @param niftyType uint256 ID of the token to set its URI * @param ipfs_hash string IPFS link to assign */ function _setTokenIPFSHashNiftyType(uint256 niftyType, string memory ipfs_hash) internal { // require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _niftyTypeIPFSHashes[niftyType] = ipfs_hash; } /** * @dev Internal function to set the token IPFS hash for a given token. * Reverts if the token ID does not exist. * @param nifty_type uint256 of nifty type name to be set * @param nifty_type_name name of nifty type */ function _setNiftyTypeName(uint256 nifty_type, string memory nifty_type_name) internal { _niftyTypeName[nifty_type] = nifty_type_name; } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use _burn(uint256) instead. * @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]; } } } /** * @title Full ERC721 Token * @dev This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology. * * See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata { constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) { // solhint-disable-previous-line no-empty-blocks } } contract BeepleSpecialEdition is ERC721Full { //MODIFIERS modifier onlyOwner() { require(msg.sender == contractOwner); _; } //CONSTANTS // how many nifties this contract is selling // used for metadat retrieval uint public numNiftiesCurrentlyInContract; //id of this contract for metadata server uint public contractId; //baseURI for metadata server string public baseURI; // name of creator string public nameOfCreator; //election victor string public electionVictor; //ipfs hashes for images if trump or biden wins string public bidenVictoryIPFSHash; string public trumpVictoryIPFSHash; bool public electionVictorEncoded = false; address public contractOwner; //master builder - ONLY DOES STATIC CALLS address public masterBuilderContract = 0x6EFB06cF568253a53C7511BD3c31AB28BecB0192; using Counters for Counters.Counter; //MAPPINGS //mappings for token Ids mapping (uint => Counters.Counter) public _numNiftyMinted; mapping (uint => uint) public _numNiftyPermitted; mapping (uint => uint) public _niftyPrice; mapping (uint => string) public _niftyIPFSHashes; // mapping (uint => bool) public _IPFSHashHasBeenSet; //EVENTS //purchase + creation events event NiftyPurchased(address _buyer, uint256 _amount, uint _tokenId); event NiftyCreated(address new_owner, uint _niftyType, uint _tokenId); //CONSTRUCTOR FUNCTION constructor( string memory biden_victory_ipfs_hash, string memory trump_victory_ipfs_hash, string memory special_edition_initial_ipfs_hash, string memory normal_auction_ipfs_hash, string memory edition_ipfs_hash, string memory base_uri) ERC721Full("Beeple Special Edition", "BEEPLE") public { //set contract owner to deployer wallet contractOwner = msg.sender; //set local variables based on inputs contractId = 1; numNiftiesCurrentlyInContract = 3; baseURI = base_uri; nameOfCreator = "Beeple"; electionVictor = "unknown"; //nifty type 1 is an edition of 1, the special changing auction _numNiftyPermitted[1] = 1; //nifty type 2 is the other auction _numNiftyPermitted[2] = 1; //nifty type 3 is the edition of 100 _numNiftyPermitted[3] = 100; //store trump & biden victory ipfs hashes bidenVictoryIPFSHash = biden_victory_ipfs_hash; trumpVictoryIPFSHash = trump_victory_ipfs_hash; _setTokenIPFSHashNiftyType(1,special_edition_initial_ipfs_hash); _setTokenIPFSHashNiftyType(2,normal_auction_ipfs_hash); _setTokenIPFSHashNiftyType(3,edition_ipfs_hash); //set names _setNiftyTypeName(1, "CROSSROAD"); _setNiftyTypeName(2, "CRYPTO IS BULLSHIT"); _setNiftyTypeName(3, "POLITICS IS BULLSHIT"); } function certifyBidenVictory() onlyOwner public { if (electionVictorEncoded == true) { revert("Election victory has already been encoded!"); } else { electionVictorEncoded = true; electionVictor = "Biden"; _setTokenIPFSHashNiftyType(1,bidenVictoryIPFSHash); } } function certifyTrumpVictory() onlyOwner public { if (electionVictorEncoded == true) { revert("Election victory has already been encoded!"); } else { electionVictorEncoded = true; electionVictor = "Trump"; _setTokenIPFSHashNiftyType(1,trumpVictoryIPFSHash); } } function isNiftySoldOut(uint niftyType) public view returns (bool) { if (niftyType > numNiftiesCurrentlyInContract) { return true; } if (_numNiftyMinted[niftyType].current() > _numNiftyPermitted[niftyType]) { return (true); } else { return (false); } } function giftNifty(address collector_address, uint niftyType) onlyOwner public { //master for static calls BuilderMaster bm = BuilderMaster(masterBuilderContract); _numNiftyMinted[niftyType].increment(); //check if this nifty is sold out if (isNiftySoldOut(niftyType)==true) { revert("Nifty sold out!"); } //mint a nifty uint specificTokenId = _numNiftyMinted[niftyType].current(); uint tokenId = bm.encodeTokenId(contractId, niftyType, specificTokenId); string memory tokenIdStr = bm.uint2str(tokenId); string memory tokenURI = bm.strConcat(baseURI, tokenIdStr); string memory ipfsHash = _niftyIPFSHashes[niftyType]; //mint token _mint(collector_address, tokenId); _setTokenURI(tokenId, tokenURI); _setTokenIPFSHash(tokenId, ipfsHash); //do events emit NiftyCreated(collector_address, niftyType, tokenId); } function massMintType3NFTs(address collector_address, uint numToMint) onlyOwner public { //loop through array and create nifties for (uint i=0; i < numToMint; i++) { giftNifty(collector_address,3); } } } contract NiftyRegistry { function isValidNiftySender(address sending_key) public view returns (bool); function isOwner(address owner_key) public view returns (bool); } contract BuilderMaster { function getContractId(uint tokenId) public view returns (uint); function getNiftyTypeId(uint tokenId) public view returns (uint); function getSpecificNiftyNum(uint tokenId) public view returns (uint); function encodeTokenId(uint contractId, uint niftyType, uint specificNiftyNum) public view returns (uint); function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) public view returns (string memory); function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) public view returns (string memory); function strConcat(string memory _a, string memory _b, string memory _c) public view returns (string memory); function strConcat(string memory _a, string memory _b) public view returns (string memory); function uint2str(uint _i) public view returns (string memory _uintAsString); } /** * Contracts and libraries below are from OpenZeppelin, except nifty builder instance **/ /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * IMPORTANT: It is unsafe to assume that an address for which this * function returns false is an externally-owned account (EOA) and not a * contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never * directly accessed. */ library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { // The {SafeMath} overflow check can be skipped here, see the comment at the top counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"biden_victory_ipfs_hash","type":"string"},{"internalType":"string","name":"trump_victory_ipfs_hash","type":"string"},{"internalType":"string","name":"special_edition_initial_ipfs_hash","type":"string"},{"internalType":"string","name":"normal_auction_ipfs_hash","type":"string"},{"internalType":"string","name":"edition_ipfs_hash","type":"string"},{"internalType":"string","name":"base_uri","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"new_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_niftyType","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"NiftyCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"NiftyPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_niftyIPFSHashes","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_niftyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_numNiftyMinted","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_numNiftyPermitted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bidenVictoryIPFSHash","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"certifyBidenVictory","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"certifyTrumpVictory","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"electionVictor","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"electionVictorEncoded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"collector_address","type":"address"},{"internalType":"uint256","name":"niftyType","type":"uint256"}],"name":"giftNifty","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"niftyType","type":"uint256"}],"name":"isNiftySoldOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"collector_address","type":"address"},{"internalType":"uint256","name":"numToMint","type":"uint256"}],"name":"massMintType3NFTs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"masterBuilderContract","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nameOfCreator","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numNiftiesCurrentlyInContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenIPFSHash","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"trumpVictoryIPFSHash","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052736efb06cf568253a53c7511bd3c31ab28becb0192601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601860006101000a81548160ff021916908315150217905550736efb06cf568253a53c7511bd3c31ab28becb0192601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b5060405162004ce038038062004ce0833981810160405260c0811015620000fc57600080fd5b81019080805160405193929190846401000000008211156200011d57600080fd5b838201915060208201858111156200013457600080fd5b82518660018202830111640100000000821117156200015257600080fd5b8083526020830192505050908051906020019080838360005b83811015620001885780820151818401526020810190506200016b565b50505050905090810190601f168015620001b65780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001da57600080fd5b83820191506020820185811115620001f157600080fd5b82518660018202830111640100000000821117156200020f57600080fd5b8083526020830192505050908051906020019080838360005b838110156200024557808201518184015260208101905062000228565b50505050905090810190601f168015620002735780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200029757600080fd5b83820191506020820185811115620002ae57600080fd5b8251866001820283011164010000000082111715620002cc57600080fd5b8083526020830192505050908051906020019080838360005b8381101562000302578082015181840152602081019050620002e5565b50505050905090810190601f168015620003305780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200035457600080fd5b838201915060208201858111156200036b57600080fd5b82518660018202830111640100000000821117156200038957600080fd5b8083526020830192505050908051906020019080838360005b83811015620003bf578082015181840152602081019050620003a2565b50505050905090810190601f168015620003ed5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200041157600080fd5b838201915060208201858111156200042857600080fd5b82518660018202830111640100000000821117156200044657600080fd5b8083526020830192505050908051906020019080838360005b838110156200047c5780820151818401526020810190506200045f565b50505050905090810190601f168015620004aa5780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620004ce57600080fd5b83820191506020820185811115620004e557600080fd5b82518660018202830111640100000000821117156200050357600080fd5b8083526020830192505050908051906020019080838360005b83811015620005395780820151818401526020810190506200051c565b50505050905090810190601f168015620005675780820380516001836020036101000a031916815260200191505b506040525050506040518060400160405280601681526020017f426565706c65205370656369616c2045646974696f6e000000000000000000008152506040518060400160405280600681526020017f424545504c4500000000000000000000000000000000000000000000000000008152508181620005f46301ffc9a760e01b6200091560201b60201c565b6200060c6380ac58cd60e01b6200091560201b60201c565b6200062463780e9d6360e01b6200091560201b60201c565b81600990805190602001906200063c92919062000a7a565b5080600a90805190602001906200065592919062000a7a565b506200066e635b5e139f60e01b6200091560201b60201c565b5050505033601860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160128190555060036011819055508060139080519060200190620006db92919062000a7a565b506040518060400160405280600681526020017f426565706c650000000000000000000000000000000000000000000000000000815250601490805190602001906200072992919062000a7a565b506040518060400160405280600781526020017f756e6b6e6f776e00000000000000000000000000000000000000000000000000815250601590805190602001906200077792919062000a7a565b506001601b600060018152602001908152602001600020819055506001601b600060028152602001908152602001600020819055506064601b600060038152602001908152602001600020819055508560169080519060200190620007de92919062000a7a565b508460179080519060200190620007f792919062000a7a565b506200080b60018562000a1e60201b60201c565b6200081e60028462000a1e60201b60201c565b6200083160038362000a1e60201b60201c565b6200087960016040518060400160405280600981526020017f43524f5353524f4144000000000000000000000000000000000000000000000081525062000a4c60201b60201c565b620008c160026040518060400160405280601281526020017f43525950544f2049532042554c4c53484954000000000000000000000000000081525062000a4c60201b60201c565b6200090960036040518060400160405280601481526020017f504f4c49544943532049532042554c4c5348495400000000000000000000000081525062000a4c60201b60201c565b50505050505062000b29565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620009b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b80600e6000848152602001908152602001600020908051906020019062000a4792919062000a7a565b505050565b80600d6000848152602001908152602001600020908051906020019062000a7592919062000a7a565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000abd57805160ff191683800117855562000aee565b8280016001018555821562000aee579182015b8281111562000aed57825182559160200191906001019062000ad0565b5b50905062000afd919062000b01565b5090565b62000b2691905b8082111562000b2257600081600090555060010162000b08565b5090565b90565b6141a78062000b396000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063741bb41311610130578063cd1d155f116100b8578063e725f8771161007c578063e725f87714610e5b578063e8c1862514610f02578063e943753714610f85578063e985e9c514610fc7578063faeaa1531461104357610227565b8063cd1d155f14610c1e578063ce606ee014610c40578063d2dc32b914610c8a578063d371663014610d0d578063e101628414610db457610227565b8063983472c3116100ff578063983472c3146109595780639b18f574146109dc578063a22cb46514610a22578063b88d4fde14610a72578063c87b56dd14610b7757610227565b8063741bb413146108605780638291286c1461086a578063892788491461088857806395d89b41146108d657610227565b80632f745c59116101b35780636352211e116101825780636352211e1461068b57806363b7e173146106f95780636c0360eb1461074357806370a08231146107c657806372ba8c091461081e57610227565b80632f745c591461052b57806342842e0e1461058d5780634f1d4832146105fb5780634f6ccce71461064957610227565b806316e978c5116101fa57806316e978c5146103d057806317dafd891461041257806318160ddd1461041c57806319fb7ee21461043a57806323b872dd146104bd57610227565b806301ffc9a71461022c57806306fdde0314610291578063081812fc14610314578063095ea7b314610382575b600080fd5b6102776004803603602081101561024257600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611061565b604051808215151515815260200191505060405180910390f35b6102996110c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d95780820151818401526020810190506102be565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103406004803603602081101561032a57600080fd5b810190808035906020019092919050505061116a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103ce6004803603604081101561039857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611205565b005b6103fc600480360360208110156103e657600080fd5b81019080803590602001909291905050506113ec565b6040518082815260200191505060405180910390f35b61041a611404565b005b6104246115d9565b6040518082815260200191505060405180910390f35b6104426115e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610482578082015181840152602081019050610467565b50505050905090810190601f1680156104af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610529600480360360608110156104d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611684565b005b6105776004803603604081101561054157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116fa565b6040518082815260200191505060405180910390f35b6105f9600480360360608110156105a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117b9565b005b6106476004803603604081101561061157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117d9565b005b6106756004803603602081101561065f57600080fd5b8101908080359060200190929190505050611e90565b6040518082815260200191505060405180910390f35b6106b7600480360360208110156106a157600080fd5b8101908080359060200190929190505050611f10565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610701611fd8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61074b611ffe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561078b578082015181840152602081019050610770565b50505050905090810190601f1680156107b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610808600480360360208110156107dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209c565b6040518082815260200191505060405180910390f35b61084a6004803603602081101561083457600080fd5b8101908080359060200190929190505050612171565b6040518082815260200191505060405180910390f35b610868612189565b005b61087261235e565b6040518082815260200191505060405180910390f35b6108d46004803603604081101561089e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612364565b005b6108de6123e9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561091e578082015181840152602081019050610903565b50505050905090810190601f16801561094b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61096161248b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109a1578082015181840152602081019050610986565b50505050905090810190601f1680156109ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a08600480360360208110156109f257600080fd5b8101908080359060200190929190505050612529565b604051808215151515815260200191505060405180910390f35b610a7060048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612586565b005b610b7560048036036080811015610a8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610aef57600080fd5b820183602082011115610b0157600080fd5b80359060200191846001830284011164010000000083111715610b2357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061273e565b005b610ba360048036036020811015610b8d57600080fd5b81019080803590602001909291905050506127b6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610be3578082015181840152602081019050610bc8565b50505050905090810190601f168015610c105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c266128c9565b604051808215151515815260200191505060405180910390f35b610c486128dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c92612902565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd2578082015181840152602081019050610cb7565b50505050905090810190601f168015610cff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d3960048036036020811015610d2357600080fd5b81019080803590602001909291905050506129a0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d79578082015181840152602081019050610d5e565b50505050905090810190601f168015610da65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610de060048036036020811015610dca57600080fd5b8101908080359060200190929190505050612b6c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e20578082015181840152602081019050610e05565b50505050905090810190601f168015610e4d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e8760048036036020811015610e7157600080fd5b8101908080359060200190929190505050612c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ec7578082015181840152602081019050610eac565b50505050905090810190601f168015610ef45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610f0a612de8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f4a578082015181840152602081019050610f2f565b50505050905090810190601f168015610f775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610fb160048036036020811015610f9b57600080fd5b8101908080359060200190929190505050612e86565b6040518082815260200191505060405180910390f35b61102960048036036040811015610fdd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ea4565b604051808215151515815260200191505060405180910390f35b61104b612f38565b6040518082815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111605780601f1061113557610100808354040283529160200191611160565b820191906000526020600020905b81548152906001019060200180831161114357829003601f168201915b5050505050905090565b600061117582612f3e565b6111ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061401b602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061121082611f10565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140f56021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166112b6612fb0565b73ffffffffffffffffffffffffffffffffffffffff1614806112e557506112e4816112df612fb0565b612ea4565b5b61133a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180613f906038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b601c6020528060005260406000206000915090505481565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145e57600080fd5b60011515601860009054906101000a900460ff16151514156114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061409c602a913960400191505060405180910390fd5b6001601860006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f426964656e00000000000000000000000000000000000000000000000000000081525060159080519060200190611531929190613e11565b506115d7600160168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115cd5780601f106115a2576101008083540402835291602001916115cd565b820191906000526020600020905b8154815290600101906020018083116115b057829003601f168201915b5050505050612fb8565b565b6000600780549050905090565b60168054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561167c5780601f106116515761010080835404028352916020019161167c565b820191906000526020600020905b81548152906001019060200180831161165f57829003601f168201915b505050505081565b61169561168f612fb0565b82612fe4565b6116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806141166031913960400191505060405180910390fd5b6116f58383836130d8565b505050565b60006117058361209c565b821061175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613ee3602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106117a657fe5b9060005260206000200154905092915050565b6117d48383836040518060200160405280600081525061273e565b505050565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461183357600080fd5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611875601a60008481526020019081526020016000206130fc565b6001151561188283612529565b151514156118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6966747920736f6c64206f757421000000000000000000000000000000000081525060200191505060405180910390fd5b6000611915601a6000858152602001908152602001600020613112565b905060008273ffffffffffffffffffffffffffffffffffffffff1663959c45b760125486856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d60208110156119a657600080fd5b8101908080519060200190929190505050905060608373ffffffffffffffffffffffffffffffffffffffff1663f76f950e836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611a0c57600080fd5b505afa158015611a20573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611a4a57600080fd5b8101908080516040519392919084640100000000821115611a6a57600080fd5b83820191506020820185811115611a8057600080fd5b8251866001820283011164010000000082111715611a9d57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ad1578082015181840152602081019050611ab6565b50505050905090810190601f168015611afe5780820380516001836020036101000a031916815260200191505b50604052505050905060608473ffffffffffffffffffffffffffffffffffffffff1663ff74927b6013846040518363ffffffff1660e01b8152600401808060200180602001838103835285818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611bc45780601f10611b9957610100808354040283529160200191611bc4565b820191906000526020600020905b815481529060010190602001808311611ba757829003601f168201915b5050838103825284818151815260200191508051906020019080838360005b83811015611bfe578082015181840152602081019050611be3565b50505050905090810190601f168015611c2b5780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b158015611c4a57600080fd5b505afa158015611c5e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611c8857600080fd5b8101908080516040519392919084640100000000821115611ca857600080fd5b83820191506020820185811115611cbe57600080fd5b8251866001820283011164010000000082111715611cdb57600080fd5b8083526020830192505050908051906020019080838360005b83811015611d0f578082015181840152602081019050611cf4565b50505050905090810190601f168015611d3c5780820380516001836020036101000a031916815260200191505b5060405250505090506060601d60008881526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dee5780601f10611dc357610100808354040283529160200191611dee565b820191906000526020600020905b815481529060010190602001808311611dd157829003601f168201915b50505050509050611dff8885613120565b611e098483613141565b611e1384826131cb565b7fce98476f2a1c16f3466ad65b59759356e098b8f100a498ebb025280fcc6759f6888886604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050505050565b6000611e9a6115d9565b8210611ef1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614147602c913960400191505060405180910390fd5b60078281548110611efe57fe5b90600052602060002001549050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613ff26029913960400191505060405180910390fd5b80915050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60138054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120945780601f1061206957610100808354040283529160200191612094565b820191906000526020600020905b81548152906001019060200180831161207757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613fc8602a913960400191505060405180910390fd5b61216a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613112565b9050919050565b601b6020528060005260406000206000915090505481565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121e357600080fd5b60011515601860009054906101000a900460ff1615151415612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061409c602a913960400191505060405180910390fd5b6001601860006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f5472756d70000000000000000000000000000000000000000000000000000000815250601590805190602001906122b6929190613e11565b5061235c600160178054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123525780601f1061232757610100808354040283529160200191612352565b820191906000526020600020905b81548152906001019060200180831161233557829003601f168201915b5050505050612fb8565b565b60125481565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123be57600080fd5b60008090505b818110156123e4576123d78360036117d9565b80806001019150506123c4565b505050565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124815780601f1061245657610100808354040283529160200191612481565b820191906000526020600020905b81548152906001019060200180831161246457829003601f168201915b5050505050905090565b60148054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125215780601f106124f657610100808354040283529160200191612521565b820191906000526020600020905b81548152906001019060200180831161250457829003601f168201915b505050505081565b600060115482111561253e5760019050612581565b601b60008381526020019081526020016000205461256d601a6000858152602001908152602001600020613112565b111561257c5760019050612581565b600090505b919050565b61258e612fb0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b806004600061263c612fb0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166126e9612fb0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b61274f612749612fb0565b83612fe4565b6127a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806141166031913960400191505060405180910390fd5b6127b084848484613255565b50505050565b60606127c182612f3e565b612816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806140c6602f913960400191505060405180910390fd5b600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128bd5780601f10612892576101008083540402835291602001916128bd565b820191906000526020600020905b8154815290600101906020018083116128a057829003601f168201915b50505050509050919050565b601860009054906101000a900460ff1681565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129985780601f1061296d57610100808354040283529160200191612998565b820191906000526020600020905b81548152906001019060200180831161297b57829003601f168201915b505050505081565b60606129ab82612f3e565b612a00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806140c6602f913960400191505060405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663a9d659c2856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612a7a57600080fd5b505afa158015612a8e573d6000803e3d6000fd5b505050506040513d6020811015612aa457600080fd5b81019080805190602001909291905050509050600e60008281526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b5e5780601f10612b3357610100808354040283529160200191612b5e565b820191906000526020600020905b815481529060010190602001808311612b4157829003601f168201915b505050505092505050919050565b601d6020528060005260406000206000915090508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c145780601f10612be957610100808354040283529160200191612c14565b820191906000526020600020905b815481529060010190602001808311612bf757829003601f168201915b505050505081565b6060612c2782612f3e565b612c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806140c6602f913960400191505060405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663a9d659c2856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612cf657600080fd5b505afa158015612d0a573d6000803e3d6000fd5b505050506040513d6020811015612d2057600080fd5b81019080805190602001909291905050509050600d60008281526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612dda5780601f10612daf57610100808354040283529160200191612dda565b820191906000526020600020905b815481529060010190602001808311612dbd57829003601f168201915b505050505092505050919050565b60178054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e7e5780601f10612e5357610100808354040283529160200191612e7e565b820191906000526020600020905b815481529060010190602001808311612e6157829003601f168201915b505050505081565b601a6020528060005260406000206000915090508060000154905081565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b80600e60008481526020019081526020016000209080519060200190612fdf929190613e11565b505050565b6000612fef82612f3e565b613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613f64602c913960400191505060405180910390fd5b600061304f83611f10565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130be57508373ffffffffffffffffffffffffffffffffffffffff166130a68461116a565b73ffffffffffffffffffffffffffffffffffffffff16145b806130cf57506130ce8185612ea4565b5b91505092915050565b6130e38383836132c7565b6130ed8382613522565b6130f782826136c0565b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b61312a8282613787565b61313482826136c0565b61313d8161399f565b5050565b61314a82612f3e565b61319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614047602c913960400191505060405180910390fd5b80600b600084815260200190815260200160002090805190602001906131c6929190613e11565b505050565b6131d482612f3e565b613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614047602c913960400191505060405180910390fd5b80600c60008481526020019081526020016000209080519060200190613250929190613e11565b505050565b6132608484846130d8565b61326c848484846139eb565b6132c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613f0e6032913960400191505060405180910390fd5b50505050565b8273ffffffffffffffffffffffffffffffffffffffff166132e782611f10565b73ffffffffffffffffffffffffffffffffffffffff1614613353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806140736029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f406024913960400191505060405180910390fd5b6133e281613bdb565b613429600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613c99565b613470600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206130fc565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061357a6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613cbc90919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114613667576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106135e757fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061363f57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036136b99190613e91565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561382a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61383381612f3e565b156138a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061393f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206130fc565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b6000613a0c8473ffffffffffffffffffffffffffffffffffffffff16613d06565b613a195760019050613bd3565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a3f612fb0565b8887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613afb578082015181840152602081019050613ae0565b50505050905090810190601f168015613b285780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613b4a57600080fd5b505af1158015613b5e573d6000803e3d6000fd5b505050506040513d6020811015613b7457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613c965760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b613cb160018260000154613cbc90919063ffffffff16565b816000018190555050565b6000613cfe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d51565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015613d485750808214155b92505050919050565b6000838311158290613dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dc3578082015181840152602081019050613da8565b50505050905090810190601f168015613df05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e5257805160ff1916838001178555613e80565b82800160010185558215613e80579182015b82811115613e7f578251825591602001919060010190613e64565b5b509050613e8d9190613ebd565b5090565b815481835581811115613eb857818360005260206000209182019101613eb79190613ebd565b5b505050565b613edf91905b80821115613edb576000816000905550600101613ec3565b5090565b9056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e456c656374696f6e20766963746f72792068617320616c7265616479206265656e20656e636f646564214552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820ff1a79304cd812c0c326b8e2f79ba36f8b560561b32c4727467a17ba53aa0c1864736f6c6343000511003200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000002e516d536a3134397a71544d3873736177776d6166596d4852486352413243395071523258356f643142616a665143000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d5475367272386f3843776257446632416250313367644c46514b62716b317861485a68466d6170746b456467000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d65475465783379356d7135474e5075477533564b644350734d4b67676b65695744504458664b374372334d50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d5a336d3132364e66536b6639776d6776585537466955475739776139694a33657946316f437234456f4e3164000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d58446e4266635235527369354166694176666e7553436a6a36644b6b436b686d79383544446579424a726132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6170692e6e69667479676174657761792e636f6d2f626565706c652f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063741bb41311610130578063cd1d155f116100b8578063e725f8771161007c578063e725f87714610e5b578063e8c1862514610f02578063e943753714610f85578063e985e9c514610fc7578063faeaa1531461104357610227565b8063cd1d155f14610c1e578063ce606ee014610c40578063d2dc32b914610c8a578063d371663014610d0d578063e101628414610db457610227565b8063983472c3116100ff578063983472c3146109595780639b18f574146109dc578063a22cb46514610a22578063b88d4fde14610a72578063c87b56dd14610b7757610227565b8063741bb413146108605780638291286c1461086a578063892788491461088857806395d89b41146108d657610227565b80632f745c59116101b35780636352211e116101825780636352211e1461068b57806363b7e173146106f95780636c0360eb1461074357806370a08231146107c657806372ba8c091461081e57610227565b80632f745c591461052b57806342842e0e1461058d5780634f1d4832146105fb5780634f6ccce71461064957610227565b806316e978c5116101fa57806316e978c5146103d057806317dafd891461041257806318160ddd1461041c57806319fb7ee21461043a57806323b872dd146104bd57610227565b806301ffc9a71461022c57806306fdde0314610291578063081812fc14610314578063095ea7b314610382575b600080fd5b6102776004803603602081101561024257600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611061565b604051808215151515815260200191505060405180910390f35b6102996110c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d95780820151818401526020810190506102be565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103406004803603602081101561032a57600080fd5b810190808035906020019092919050505061116a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103ce6004803603604081101561039857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611205565b005b6103fc600480360360208110156103e657600080fd5b81019080803590602001909291905050506113ec565b6040518082815260200191505060405180910390f35b61041a611404565b005b6104246115d9565b6040518082815260200191505060405180910390f35b6104426115e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610482578082015181840152602081019050610467565b50505050905090810190601f1680156104af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610529600480360360608110156104d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611684565b005b6105776004803603604081101561054157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116fa565b6040518082815260200191505060405180910390f35b6105f9600480360360608110156105a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117b9565b005b6106476004803603604081101561061157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117d9565b005b6106756004803603602081101561065f57600080fd5b8101908080359060200190929190505050611e90565b6040518082815260200191505060405180910390f35b6106b7600480360360208110156106a157600080fd5b8101908080359060200190929190505050611f10565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610701611fd8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61074b611ffe565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561078b578082015181840152602081019050610770565b50505050905090810190601f1680156107b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610808600480360360208110156107dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209c565b6040518082815260200191505060405180910390f35b61084a6004803603602081101561083457600080fd5b8101908080359060200190929190505050612171565b6040518082815260200191505060405180910390f35b610868612189565b005b61087261235e565b6040518082815260200191505060405180910390f35b6108d46004803603604081101561089e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612364565b005b6108de6123e9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561091e578082015181840152602081019050610903565b50505050905090810190601f16801561094b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61096161248b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109a1578082015181840152602081019050610986565b50505050905090810190601f1680156109ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a08600480360360208110156109f257600080fd5b8101908080359060200190929190505050612529565b604051808215151515815260200191505060405180910390f35b610a7060048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612586565b005b610b7560048036036080811015610a8857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610aef57600080fd5b820183602082011115610b0157600080fd5b80359060200191846001830284011164010000000083111715610b2357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061273e565b005b610ba360048036036020811015610b8d57600080fd5b81019080803590602001909291905050506127b6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610be3578082015181840152602081019050610bc8565b50505050905090810190601f168015610c105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c266128c9565b604051808215151515815260200191505060405180910390f35b610c486128dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c92612902565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd2578082015181840152602081019050610cb7565b50505050905090810190601f168015610cff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d3960048036036020811015610d2357600080fd5b81019080803590602001909291905050506129a0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d79578082015181840152602081019050610d5e565b50505050905090810190601f168015610da65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610de060048036036020811015610dca57600080fd5b8101908080359060200190929190505050612b6c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e20578082015181840152602081019050610e05565b50505050905090810190601f168015610e4d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e8760048036036020811015610e7157600080fd5b8101908080359060200190929190505050612c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ec7578082015181840152602081019050610eac565b50505050905090810190601f168015610ef45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610f0a612de8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f4a578082015181840152602081019050610f2f565b50505050905090810190601f168015610f775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610fb160048036036020811015610f9b57600080fd5b8101908080359060200190929190505050612e86565b6040518082815260200191505060405180910390f35b61102960048036036040811015610fdd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ea4565b604051808215151515815260200191505060405180910390f35b61104b612f38565b6040518082815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111605780601f1061113557610100808354040283529160200191611160565b820191906000526020600020905b81548152906001019060200180831161114357829003601f168201915b5050505050905090565b600061117582612f3e565b6111ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061401b602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061121082611f10565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806140f56021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166112b6612fb0565b73ffffffffffffffffffffffffffffffffffffffff1614806112e557506112e4816112df612fb0565b612ea4565b5b61133a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180613f906038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b601c6020528060005260406000206000915090505481565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145e57600080fd5b60011515601860009054906101000a900460ff16151514156114cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061409c602a913960400191505060405180910390fd5b6001601860006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f426964656e00000000000000000000000000000000000000000000000000000081525060159080519060200190611531929190613e11565b506115d7600160168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115cd5780601f106115a2576101008083540402835291602001916115cd565b820191906000526020600020905b8154815290600101906020018083116115b057829003601f168201915b5050505050612fb8565b565b6000600780549050905090565b60168054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561167c5780601f106116515761010080835404028352916020019161167c565b820191906000526020600020905b81548152906001019060200180831161165f57829003601f168201915b505050505081565b61169561168f612fb0565b82612fe4565b6116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806141166031913960400191505060405180910390fd5b6116f58383836130d8565b505050565b60006117058361209c565b821061175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613ee3602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106117a657fe5b9060005260206000200154905092915050565b6117d48383836040518060200160405280600081525061273e565b505050565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461183357600080fd5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611875601a60008481526020019081526020016000206130fc565b6001151561188283612529565b151514156118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6966747920736f6c64206f757421000000000000000000000000000000000081525060200191505060405180910390fd5b6000611915601a6000858152602001908152602001600020613112565b905060008273ffffffffffffffffffffffffffffffffffffffff1663959c45b760125486856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d60208110156119a657600080fd5b8101908080519060200190929190505050905060608373ffffffffffffffffffffffffffffffffffffffff1663f76f950e836040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611a0c57600080fd5b505afa158015611a20573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611a4a57600080fd5b8101908080516040519392919084640100000000821115611a6a57600080fd5b83820191506020820185811115611a8057600080fd5b8251866001820283011164010000000082111715611a9d57600080fd5b8083526020830192505050908051906020019080838360005b83811015611ad1578082015181840152602081019050611ab6565b50505050905090810190601f168015611afe5780820380516001836020036101000a031916815260200191505b50604052505050905060608473ffffffffffffffffffffffffffffffffffffffff1663ff74927b6013846040518363ffffffff1660e01b8152600401808060200180602001838103835285818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611bc45780601f10611b9957610100808354040283529160200191611bc4565b820191906000526020600020905b815481529060010190602001808311611ba757829003601f168201915b5050838103825284818151815260200191508051906020019080838360005b83811015611bfe578082015181840152602081019050611be3565b50505050905090810190601f168015611c2b5780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b158015611c4a57600080fd5b505afa158015611c5e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015611c8857600080fd5b8101908080516040519392919084640100000000821115611ca857600080fd5b83820191506020820185811115611cbe57600080fd5b8251866001820283011164010000000082111715611cdb57600080fd5b8083526020830192505050908051906020019080838360005b83811015611d0f578082015181840152602081019050611cf4565b50505050905090810190601f168015611d3c5780820380516001836020036101000a031916815260200191505b5060405250505090506060601d60008881526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dee5780601f10611dc357610100808354040283529160200191611dee565b820191906000526020600020905b815481529060010190602001808311611dd157829003601f168201915b50505050509050611dff8885613120565b611e098483613141565b611e1384826131cb565b7fce98476f2a1c16f3466ad65b59759356e098b8f100a498ebb025280fcc6759f6888886604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050505050565b6000611e9a6115d9565b8210611ef1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614147602c913960400191505060405180910390fd5b60078281548110611efe57fe5b90600052602060002001549050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613ff26029913960400191505060405180910390fd5b80915050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60138054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120945780601f1061206957610100808354040283529160200191612094565b820191906000526020600020905b81548152906001019060200180831161207757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613fc8602a913960400191505060405180910390fd5b61216a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613112565b9050919050565b601b6020528060005260406000206000915090505481565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121e357600080fd5b60011515601860009054906101000a900460ff1615151415612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061409c602a913960400191505060405180910390fd5b6001601860006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f5472756d70000000000000000000000000000000000000000000000000000000815250601590805190602001906122b6929190613e11565b5061235c600160178054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123525780601f1061232757610100808354040283529160200191612352565b820191906000526020600020905b81548152906001019060200180831161233557829003601f168201915b5050505050612fb8565b565b60125481565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123be57600080fd5b60008090505b818110156123e4576123d78360036117d9565b80806001019150506123c4565b505050565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124815780601f1061245657610100808354040283529160200191612481565b820191906000526020600020905b81548152906001019060200180831161246457829003601f168201915b5050505050905090565b60148054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125215780601f106124f657610100808354040283529160200191612521565b820191906000526020600020905b81548152906001019060200180831161250457829003601f168201915b505050505081565b600060115482111561253e5760019050612581565b601b60008381526020019081526020016000205461256d601a6000858152602001908152602001600020613112565b111561257c5760019050612581565b600090505b919050565b61258e612fb0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b806004600061263c612fb0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166126e9612fb0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b61274f612749612fb0565b83612fe4565b6127a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806141166031913960400191505060405180910390fd5b6127b084848484613255565b50505050565b60606127c182612f3e565b612816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806140c6602f913960400191505060405180910390fd5b600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128bd5780601f10612892576101008083540402835291602001916128bd565b820191906000526020600020905b8154815290600101906020018083116128a057829003601f168201915b50505050509050919050565b601860009054906101000a900460ff1681565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60158054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129985780601f1061296d57610100808354040283529160200191612998565b820191906000526020600020905b81548152906001019060200180831161297b57829003601f168201915b505050505081565b60606129ab82612f3e565b612a00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806140c6602f913960400191505060405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663a9d659c2856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612a7a57600080fd5b505afa158015612a8e573d6000803e3d6000fd5b505050506040513d6020811015612aa457600080fd5b81019080805190602001909291905050509050600e60008281526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b5e5780601f10612b3357610100808354040283529160200191612b5e565b820191906000526020600020905b815481529060010190602001808311612b4157829003601f168201915b505050505092505050919050565b601d6020528060005260406000206000915090508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c145780601f10612be957610100808354040283529160200191612c14565b820191906000526020600020905b815481529060010190602001808311612bf757829003601f168201915b505050505081565b6060612c2782612f3e565b612c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806140c6602f913960400191505060405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663a9d659c2856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612cf657600080fd5b505afa158015612d0a573d6000803e3d6000fd5b505050506040513d6020811015612d2057600080fd5b81019080805190602001909291905050509050600d60008281526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612dda5780601f10612daf57610100808354040283529160200191612dda565b820191906000526020600020905b815481529060010190602001808311612dbd57829003601f168201915b505050505092505050919050565b60178054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e7e5780601f10612e5357610100808354040283529160200191612e7e565b820191906000526020600020905b815481529060010190602001808311612e6157829003601f168201915b505050505081565b601a6020528060005260406000206000915090508060000154905081565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b80600e60008481526020019081526020016000209080519060200190612fdf929190613e11565b505050565b6000612fef82612f3e565b613044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613f64602c913960400191505060405180910390fd5b600061304f83611f10565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130be57508373ffffffffffffffffffffffffffffffffffffffff166130a68461116a565b73ffffffffffffffffffffffffffffffffffffffff16145b806130cf57506130ce8185612ea4565b5b91505092915050565b6130e38383836132c7565b6130ed8382613522565b6130f782826136c0565b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b61312a8282613787565b61313482826136c0565b61313d8161399f565b5050565b61314a82612f3e565b61319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614047602c913960400191505060405180910390fd5b80600b600084815260200190815260200160002090805190602001906131c6929190613e11565b505050565b6131d482612f3e565b613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614047602c913960400191505060405180910390fd5b80600c60008481526020019081526020016000209080519060200190613250929190613e11565b505050565b6132608484846130d8565b61326c848484846139eb565b6132c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613f0e6032913960400191505060405180910390fd5b50505050565b8273ffffffffffffffffffffffffffffffffffffffff166132e782611f10565b73ffffffffffffffffffffffffffffffffffffffff1614613353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806140736029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f406024913960400191505060405180910390fd5b6133e281613bdb565b613429600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613c99565b613470600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206130fc565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061357a6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613cbc90919063ffffffff16565b9050600060066000848152602001908152602001600020549050818114613667576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106135e757fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061363f57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036136b99190613e91565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561382a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b61383381612f3e565b156138a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061393f600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206130fc565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b6000613a0c8473ffffffffffffffffffffffffffffffffffffffff16613d06565b613a195760019050613bd3565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a3f612fb0565b8887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613afb578082015181840152602081019050613ae0565b50505050905090810190601f168015613b285780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613b4a57600080fd5b505af1158015613b5e573d6000803e3d6000fd5b505050506040513d6020811015613b7457600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613c965760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b613cb160018260000154613cbc90919063ffffffff16565b816000018190555050565b6000613cfe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d51565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015613d485750808214155b92505050919050565b6000838311158290613dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dc3578082015181840152602081019050613da8565b50505050905090810190601f168015613df05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e5257805160ff1916838001178555613e80565b82800160010185558215613e80579182015b82811115613e7f578251825591602001919060010190613e64565b5b509050613e8d9190613ebd565b5090565b815481835581811115613eb857818360005260206000209182019101613eb79190613ebd565b5b505050565b613edf91905b80821115613edb576000816000905550600101613ec3565b5090565b9056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e456c656374696f6e20766963746f72792068617320616c7265616479206265656e20656e636f646564214552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820ff1a79304cd812c0c326b8e2f79ba36f8b560561b32c4727467a17ba53aa0c1864736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000002e516d536a3134397a71544d3873736177776d6166596d4852486352413243395071523258356f643142616a665143000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d5475367272386f3843776257446632416250313367644c46514b62716b317861485a68466d6170746b456467000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d65475465783379356d7135474e5075477533564b644350734d4b67676b65695744504458664b374372334d50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d5a336d3132364e66536b6639776d6776585537466955475739776139694a33657946316f437234456f4e3164000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e516d58446e4266635235527369354166694176666e7553436a6a36644b6b436b686d79383544446579424a726132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f6170692e6e69667479676174657761792e636f6d2f626565706c652f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : biden_victory_ipfs_hash (string): QmSj149zqTM8ssawwmafYmHRHcRA2C9PqR2X5od1BajfQC
Arg [1] : trump_victory_ipfs_hash (string): QmTu6rr8o8CwbWDf2AbP13gdLFQKbqk1xaHZhFmaptkEdg
Arg [2] : special_edition_initial_ipfs_hash (string): QmeGTex3y5mq5GNPuGu3VKdCPsMKggkeiWDPDXfK7Cr3MP
Arg [3] : normal_auction_ipfs_hash (string): QmZ3m126NfSkf9wmgvXU7FiUGW9wa9iJ3eyF1oCr4EoN1d
Arg [4] : edition_ipfs_hash (string): QmXDnBfcR5Rsi5AfiAvfnuSCjj6dKkCkhmy85DDeyBJra2
Arg [5] : base_uri (string): https://api.niftygateway.com/beeple/
-----Encoded View---------------
24 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [5] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [6] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [7] : 516d536a3134397a71544d3873736177776d6166596d48524863524132433950
Arg [8] : 71523258356f643142616a665143000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [10] : 516d5475367272386f3843776257446632416250313367644c46514b62716b31
Arg [11] : 7861485a68466d6170746b456467000000000000000000000000000000000000
Arg [12] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [13] : 516d65475465783379356d7135474e5075477533564b644350734d4b67676b65
Arg [14] : 695744504458664b374372334d50000000000000000000000000000000000000
Arg [15] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [16] : 516d5a336d3132364e66536b6639776d6776585537466955475739776139694a
Arg [17] : 33657946316f437234456f4e3164000000000000000000000000000000000000
Arg [18] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [19] : 516d58446e4266635235527369354166694176666e7553436a6a36644b6b436b
Arg [20] : 686d79383544446579424a726132000000000000000000000000000000000000
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [22] : 68747470733a2f2f6170692e6e69667479676174657761792e636f6d2f626565
Arg [23] : 706c652f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
37024:5250:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37024:5250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2726:133;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2726:133:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32170:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;32170:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10582:201;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10582:201:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9879:417;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9879:417:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38151:41;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38151:41:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39998:337;;;:::i;:::-;;23775:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37643:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;37643:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12233:288;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12233:288:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23392:229;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23392:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13171:132;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13171:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41024:991;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41024:991:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24208:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24208:196:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9233:224;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9233:224:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37856:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37446:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;37446:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8805:208;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8805:208:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38097:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38097:48:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40342:336;;;:::i;:::-;;37382:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42022:247;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42022:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32363:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;32363:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37498:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;37498:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40685:332;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40685:332:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11077:250;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11077:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14027:269;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14027:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;14027:269:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14027:269:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14027:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;14027:269:0;;;;;;;;;;;;;;;:::i;:::-;;32789:202;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32789:202:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;32789:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37725:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37774:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37555;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;37555:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33202:374;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33202:374:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;33202:374:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38198:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38198:48:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;38198:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33782:364;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33782:364:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;33782:364:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37683:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;37683:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38034:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38034:57:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11650:145;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11650:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37287:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2726:133;2796:4;2819:20;:33;2840:11;2819:33;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:40;;2726:133;;;:::o;32170:83::-;32209:13;32241:5;32234:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32170:83;:::o;10582:201::-;10641:7;10668:16;10676:7;10668;:16::i;:::-;10660:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:15;:24;10768:7;10752:24;;;;;;;;;;;;;;;;;;;;;10745:31;;10582:201;;;:::o;9879:417::-;9942:13;9958:16;9966:7;9958;:16::i;:::-;9942:32;;9998:5;9992:11;;:2;:11;;;;9984:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10077:5;10061:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;10086:37;10103:5;10110:12;:10;:12::i;:::-;10086:16;:37::i;:::-;10061:62;10053:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10244:2;10217:15;:24;10233:7;10217:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;10281:7;10277:2;10261:28;;10270:5;10261:28;;;;;;;;;;;;9879:417;;;:::o;38151:41::-;;;;;;;;;;;;;;;;;:::o;39998:337::-;37147:13;;;;;;;;;;;37133:27;;:10;:27;;;37125:36;;;;;;40085:4;40060:29;;:21;;;;;;;;;;;:29;;;40056:273;;;40105:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40056:273;40212:4;40188:21;;:28;;;;;;;;;;;;;;;;;;40230:24;;;;;;;;;;;;;;;;;:14;:24;;;;;;;;;;;;:::i;:::-;;40268:50;40295:1;40297:20;40268:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;:50::i;:::-;39998:337::o;23775:94::-;23819:7;23845:10;:17;;;;23838:24;;23775:94;:::o;37643:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12233:288::-;12375:41;12394:12;:10;:12::i;:::-;12408:7;12375:18;:41::i;:::-;12367:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12482:32;12496:4;12502:2;12506:7;12482:13;:32::i;:::-;12233:288;;;:::o;23392:229::-;23472:7;23507:16;23517:5;23507:9;:16::i;:::-;23499:5;:24;23491:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23588:12;:19;23601:5;23588:19;;;;;;;;;;;;;;;23608:5;23588:26;;;;;;;;;;;;;;;;23581:33;;23392:229;;;;:::o;13171:132::-;13257:39;13274:4;13280:2;13284:7;13257:39;;;;;;;;;;;;:16;:39::i;:::-;13171:132;;;:::o;41024:991::-;37147:13;;;;;;;;;;;37133:27;;:10;:27;;;37125:36;;;;;;41170:16;41203:21;;;;;;;;;;;41170:55;;41235:38;:15;:26;41251:9;41235:26;;;;;;;;;;;:36;:38::i;:::-;41356:4;41329:31;;:25;41344:9;41329:14;:25::i;:::-;:31;;;41325:87;;;41376:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41325:87;41444:20;41467:36;:15;:26;41483:9;41467:26;;;;;;;;;;;:34;:36::i;:::-;41444:59;;41513:12;41528:2;:16;;;41545:10;;41557:9;41568:15;41528:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41528:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41528:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41528:56:0;;;;;;;;;;;;;;;;41513:71;;41594:24;41621:2;:11;;;41633:7;41621:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41621:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41621:20:0;;;;;;39:16:-1;36:1;17:17;2:54;41621:20:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41621:20:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;384:12;379:3;372:25;420:4;415:3;411:14;404:21;;0:432;;41621:20:0;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;41621:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41594:47;;41651:22;41676:2;:12;;;41689:7;41698:10;41676:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;41676:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41676:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41676:33:0;;;;;;39:16:-1;36:1;17:17;2:54;41676:33:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41676:33:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;384:12;379:3;372:25;420:4;415:3;411:14;404:21;;0:432;;41676:33:0;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;41676:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41651:58;;41719:22;41744:16;:27;41761:9;41744:27;;;;;;;;;;;41719:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41802:33;41808:17;41827:7;41802:5;:33::i;:::-;41845:31;41858:7;41867:8;41845:12;:31::i;:::-;41886:36;41904:7;41913:8;41886:17;:36::i;:::-;41957:51;41970:17;41989:9;42000:7;41957:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37171:1;;;;;;41024:991;;:::o;24208:196::-;24266:7;24301:13;:11;:13::i;:::-;24293:5;:21;24285:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24380:10;24391:5;24380:17;;;;;;;;;;;;;;;;24373:24;;24208:196;;;:::o;9233:224::-;9288:7;9307:13;9323:11;:20;9335:7;9323:20;;;;;;;;;;;;;;;;;;;;;9307:36;;9378:1;9361:19;;:5;:19;;;;9353:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:5;9438:12;;;9233:224;;;:::o;37856:81::-;;;;;;;;;;;;;:::o;37446:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8805:208::-;8860:7;8904:1;8887:19;;:5;:19;;;;8879:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8972:34;:17;:24;8990:5;8972:24;;;;;;;;;;;;;;;:32;:34::i;:::-;8965:41;;8805:208;;;:::o;38097:48::-;;;;;;;;;;;;;;;;;:::o;40342:336::-;37147:13;;;;;;;;;;;37133:27;;:10;:27;;;37125:36;;;;;;40429:4;40404:29;;:21;;;;;;;;;;;:29;;;40400:272;;;40449:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40400:272;40556:4;40532:21;;:28;;;;;;;;;;;;;;;;;;40574:24;;;;;;;;;;;;;;;;;:14;:24;;;;;;;;;;;;:::i;:::-;;40611:50;40638:1;40640:20;40611:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;:50::i;:::-;40342:336::o;37382:22::-;;;;:::o;42022:247::-;37147:13;;;;;;;;;;;37133:27;;:10;:27;;;37125:36;;;;;;42174:6;42181:1;42174:8;;42169:92;42188:9;42184:1;:13;42169:92;;;42219:30;42229:17;42247:1;42219:9;:30::i;:::-;42199:3;;;;;;;42169:92;;;;42022:247;;:::o;32363:87::-;32404:13;32436:7;32429:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32363:87;:::o;37498:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40685:332::-;40746:4;40778:29;;40766:9;:41;40762:83;;;40830:4;40823:11;;;;40762:83;40897:18;:29;40916:9;40897:29;;;;;;;;;;;;40858:36;:15;:26;40874:9;40858:26;;;;;;;;;;;:34;:36::i;:::-;:68;40854:157;;;40950:4;40942:13;;;;40854:157;40994:5;40986:14;;40685:332;;;;:::o;11077:250::-;11162:12;:10;:12::i;:::-;11156:18;;:2;:18;;;;11148:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11255:8;11216:18;:32;11235:12;:10;:12::i;:::-;11216:32;;;;;;;;;;;;;;;:36;11249:2;11216:36;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;11307:2;11278:42;;11293:12;:10;:12::i;:::-;11278:42;;;11311:8;11278:42;;;;;;;;;;;;;;;;;;;;;;11077:250;;:::o;14027:269::-;14141:41;14160:12;:10;:12::i;:::-;14174:7;14141:18;:41::i;:::-;14133:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14246:43;14264:4;14270:2;14274:7;14283:5;14246:17;:43::i;:::-;14027:269;;;;:::o;32789:202::-;32847:13;32880:16;32888:7;32880;:16::i;:::-;32872:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32965:10;:19;32976:7;32965:19;;;;;;;;;;;32958:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32789:202;;;:::o;37725:41::-;;;;;;;;;;;;;:::o;37774:28::-;;;;;;;;;;;;;:::o;37555:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33202:374::-;33265:13;33298:16;33306:7;33298;:16::i;:::-;33290:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33411:16;33444:21;;;;;;;;;;;33411:55;;33476:15;33494:2;:17;;;33512:7;33494:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33494:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33494:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33494:26:0;;;;;;;;;;;;;;;;33476:44;;33537:20;:32;33558:10;33537:32;;;;;;;;;;;33530:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33202:374;;;:::o;38198:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33782:364::-;33841:13;33874:16;33882:7;33874;:16::i;:::-;33866:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33987:16;34020:21;;;;;;;;;;;33987:55;;34052:15;34070:2;:17;;;34088:7;34070:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34070:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34070:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34070:26:0;;;;;;;;;;;;;;;;34052:44;;34113:14;:26;34128:10;34113:26;;;;;;;;;;;34106:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33782:364;;;:::o;37683:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38034:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;11650:145::-;11730:4;11753:18;:25;11772:5;11753:25;;;;;;;;;;;;;;;:35;11779:8;11753:35;;;;;;;;;;;;;;;;;;;;;;;;;11746:42;;11650:145;;;;:::o;37287:41::-;;;;:::o;15467:152::-;15524:4;15540:13;15556:11;:20;15568:7;15556:20;;;;;;;;;;;;;;;;;;;;;15540:36;;15610:1;15593:19;;:5;:19;;;;15586:26;;;15467:152;;;:::o;792:96::-;837:15;871:10;864:17;;792:96;:::o;35323:234::-;35541:9;35507:20;:31;35528:9;35507:31;;;;;;;;;;;:43;;;;;;;;;;;;:::i;:::-;;35323:234;;:::o;15981:329::-;16066:4;16090:16;16098:7;16090;:16::i;:::-;16082:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16165:13;16181:16;16189:7;16181;:16::i;:::-;16165:32;;16226:5;16215:16;;:7;:16;;;:51;;;;16259:7;16235:31;;:20;16247:7;16235:11;:20::i;:::-;:31;;;16215:51;:87;;;;16270:32;16287:5;16294:7;16270:16;:32::i;:::-;16215:87;16207:96;;;15981:329;;;;:::o;24780:241::-;24865:38;24885:4;24891:2;24895:7;24865:19;:38::i;:::-;24915:47;24948:4;24954:7;24915:32;:47::i;:::-;24974:40;25002:2;25006:7;24974:27;:40::i;:::-;24780:241;;;:::o;53306:178::-;53476:1;53458:7;:14;;;:19;;;;;;;;;;;53306:178;:::o;53187:112::-;53252:7;53278;:14;;;53271:21;;53187:112;;;:::o;25279:198::-;25342:24;25354:2;25358:7;25342:11;:24::i;:::-;25378:40;25406:2;25410:7;25378:27;:40::i;:::-;25430;25462:7;25430:31;:40::i;:::-;25279:198;;:::o;34386:192::-;34471:16;34479:7;34471;:16::i;:::-;34463:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34568:3;34546:10;:19;34557:7;34546:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;34386:192;;:::o;34839:215::-;34935:16;34943:7;34935;:16::i;:::-;34927:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35038:9;35010:16;:25;35027:7;35010:25;;;;;;;;;;;:37;;;;;;;;;;;;:::i;:::-;;34839:215;;:::o;15002:269::-;15111:32;15125:4;15131:2;15135:7;15111:13;:32::i;:::-;15161:48;15184:4;15190:2;15194:7;15203:5;15161:22;:48::i;:::-;15153:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15002:269;;;;:::o;19602:451::-;19715:4;19695:24;;:16;19703:7;19695;:16::i;:::-;:24;;;19687:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19797:1;19783:16;;:2;:16;;;;19775:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19852:23;19867:7;19852:14;:23::i;:::-;19887:35;:17;:23;19905:4;19887:23;;;;;;;;;;;;;;;:33;:35::i;:::-;19932:33;:17;:21;19950:2;19932:21;;;;;;;;;;;;;;;:31;:33::i;:::-;20000:2;19977:11;:20;19989:7;19977:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;20038:7;20034:2;20019:27;;20028:4;20019:27;;;;;;;;;;;;19602:451;;;:::o;27902:1133::-;28165:22;28190:32;28220:1;28190:12;:18;28203:4;28190:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;28165:57;;28232:18;28253:17;:26;28271:7;28253:26;;;;;;;;;;;;28232:47;;28398:14;28384:10;:28;28380:324;;28428:19;28450:12;:18;28463:4;28450:18;;;;;;;;;;;;;;;28469:14;28450:34;;;;;;;;;;;;;;;;28428:56;;28533:11;28500:12;:18;28513:4;28500:18;;;;;;;;;;;;;;;28519:10;28500:30;;;;;;;;;;;;;;;:44;;;;28649:10;28616:17;:30;28634:11;28616:30;;;;;;;;;;;:43;;;;28380:324;;28791:12;:18;28804:4;28791:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;27902:1133;;;;:::o;26744:183::-;26857:12;:16;26870:2;26857:16;;;;;;;;;;;;;;;:23;;;;26828:17;:26;26846:7;26828:26;;;;;;;;;;;:52;;;;26890:12;:16;26903:2;26890:16;;;;;;;;;;;;;;;26912:7;26890:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;26890:30:0;;;;;;;;;;;;;;;;;;;;;;26744:183;;:::o;18027:329::-;18112:1;18098:16;;:2;:16;;;;18090:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18170:16;18178:7;18170;:16::i;:::-;18169:17;18161:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18254:2;18231:11;:20;18243:7;18231:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;18266:33;:17;:21;18284:2;18266:21;;;;;;;;;;;;;;;:31;:33::i;:::-;18341:7;18337:2;18316:33;;18333:1;18316:33;;;;;;;;;;;;18027:329;;:::o;27123:161::-;27226:10;:17;;;;27199:15;:24;27215:7;27199:24;;;;;;;;;;;:44;;;;27253:10;27269:7;27253:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;27253:24:0;;;;;;;;;;;;;;;;;;;;;;27123:161;:::o;20643:350::-;20764:4;20789:15;:2;:13;;;:15::i;:::-;20784:58;;20827:4;20820:11;;;;20784:58;20853:13;20885:2;20869:36;;;20906:12;:10;:12::i;:::-;20920:4;20926:7;20935:5;20869:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20869:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20869:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20869:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20869:72:0;;;;;;;;;;;;;;;;20853:88;;7039:10;20969:16;;20959:26;;;:6;:26;;;;20951:35;;;20643:350;;;;;;;:::o;21156:171::-;21255:1;21219:38;;:15;:24;21235:7;21219:24;;;;;;;;;;;;;;;;;;;;;:38;;;21215:106;;21308:1;21273:15;:24;21289:7;21273:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21215:106;21156:171;:::o;53491:108::-;53571:21;53590:1;53571:7;:14;;;:18;;:21;;;;:::i;:::-;53554:7;:14;;:38;;;;53491:108;:::o;44740:134::-;44798:7;44824:43;44828:1;44831;44824:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;44817:50;;44740:134;;;;:::o;49640:798::-;49700:4;50146:16;50172:19;50194:66;50172:88;;;;50361:7;50349:20;50337:32;;50400:3;50388:15;;:8;:15;;:42;;;;;50419:11;50407:8;:23;;50388:42;50380:51;;;;49640:798;;;:::o;45311:188::-;45397:7;45429:1;45424;:6;;45432:12;45416:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;45416:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45455:9;45471:1;45467;:5;45455:17;;45491:1;45484:8;;;45311:188;;;;;:::o;37024:5250::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://ff1a79304cd812c0c326b8e2f79ba36f8b560561b32c4727467a17ba53aa0c18
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.