Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
210 DUDE
Holders
56
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DistractedDudes
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity 0.8.15; import "./WTFERC721.sol"; import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import { LicenseVersion, CantBeEvil } from "@a16z/contracts/licenses/CantBeEvil.sol"; import { IDudesAuctionHouse } from "./IDudesAuctionHouse.sol"; /** * @title Distracted Dudes * @notice What distracts you?? Released CC0; onchain verifiable via a16z Cant Be Evil license */ contract DistractedDudes is WTFERC721, Ownable, CantBeEvil(LicenseVersion.PUBLIC) { /* ============ Variables ============ */ /// @notice NFT price in ETH uint256 public price; /// @notice mfer contract address IERC721 public immutable mferAddress; /// @notice pfer contract address IERC721 public immutable pferAddress; /// @notice sproto contract address IERC721 public immutable sprotoAddress; /// @notice Max number of non 1/1 NFTs available in this collection uint256 public immutable maxNFT; /// @notice Max number of 1/1 NFTs available in this collection uint256 public immutable max1o1NFT; /// @notice Max number of NFTs that can be public minted in a single transaction uint256 public immutable maxPublicMint; /// @notice Timestamp of when public sale starts uint256 public saleStartTimestamp; /// @notice Timestamp of when presale starts uint256 public presaleStartTimestamp; /// @notice Total current supply of non 1/1 NFTs uint256 public dudeCurrentSupply; /// @notice Total current supply of 1/1 NFTs uint256 public dude1o1CurrentSupply; /// @notice NFT tokens base URI string public baseURI; /// @notice Map to track what access token ids were used to mint dudes mapping(IERC721 => mapping(uint256 => bool)) public accessTokenUsedToMint; IDudesAuctionHouse public auctionHouse; /// @notice Flag for if NFT metadata is revealed bool private revealed = false; string private constant PRE_REVEAL_URI = "ipfs://QmP1paK6cVekPPCvMGH6JHKVu1QYu4tMBZDqbYs5LWoM3A"; address payable private mainDude; /* ============ Structs ============ */ // Enum for type of access NFT enum AccessNFTType { MFER, PFER, SPROTO } struct ContractData { uint256 price; IERC721 mferAddress; IERC721 pferAddress; IERC721 sprotoAddress; uint256 maxNFT; uint256 max1o1NFT; uint256 maxPublicMint; uint256 saleStartTimestamp; uint256 presaleStartTimestamp; address payable mainDude; } /* ============ Constructor ============ */ /** * @notice Initializes the NFT contract * @param _name NFT collection name * @param _symbol NFT collection symbol * @param _contractData struct containing contract data * price - price per dude * mferAddress - mfer contract address * pferAddress - pfer contract address * sprotoAddress - sproto contract address * maxNFT - max number of non 1/1 NFTs available in this collection * max1o1NFT - max number of 1/1 NFTs available in this collection * maxPublicMint - max number of NFTs that can be public minted * saleStartTimestamp - timestamp of when public sale starts * presaleStartTimestamp - timestamp of when early access presale starts * mainDude - main dude address */ constructor( string memory _name, string memory _symbol, ContractData memory _contractData ) WTFERC721(_name, _symbol) { require(_contractData.maxNFT > 0, "Dudes:max-nft-gt-zero"); require(_contractData.max1o1NFT > 0, "Dudes:max-1o1-gt-zero"); require(_contractData.maxPublicMint > 0, "Dudes:max-mint-gt-zero"); require(_contractData.presaleStartTimestamp > block.timestamp, "Dudes:presale-start-gt-now"); require(_contractData.saleStartTimestamp > block.timestamp, "Dudes:sale-start-gt-now"); require(_contractData.mainDude != address(0), "Dudes:main-dude-not-zero-address"); price = _contractData.price; mferAddress = _contractData.mferAddress; pferAddress = _contractData.pferAddress; sprotoAddress = _contractData.sprotoAddress; maxNFT = _contractData.maxNFT; max1o1NFT = _contractData.max1o1NFT; maxPublicMint = _contractData.maxPublicMint; saleStartTimestamp = _contractData.saleStartTimestamp; presaleStartTimestamp = _contractData.presaleStartTimestamp; mainDude = _contractData.mainDude; } modifier onlyAuctionHouse() { require(msg.sender != address(0) && msg.sender == address(auctionHouse), "Dudes:caller-is-not-auction-house"); _; } /* ============ External Functions ============ */ function supportsInterface(bytes4 interfaceId) public view virtual override(CantBeEvil, WTFERC721) returns (bool) { return super.supportsInterface(interfaceId); } function totalSupply() external view returns (uint256) { return dudeCurrentSupply + dude1o1CurrentSupply - balanceOf(address(0)); } /** * @notice Returns true is public sale is live. */ function isPublicSaleActive() external view returns (bool) { return _isPublicSaleActive(); } /** * @notice Returns true if mfers can mint. */ function isPremintActive() external view returns (bool) { return _isPremintActive(); } /** * @notice Override: returns token uri or static reveal uri if reveal is not active */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (revealed) { return super.tokenURI(tokenId); } else { return PRE_REVEAL_URI; } } /** * @notice Returns true if the specific access token has been used to mint a dude */ function isAccessTokenUsed(address _accessTokenAddress, uint256 _tokenId) external view returns (bool) { return _isAccessTokenUsed(_accessTokenAddress, _tokenId); } /** * @notice set reveal state to true * no way to set reveal back to false riskaay */ function setRevealed() external onlyOwner { revealed = true; } function setPrice(uint256 _price) external onlyOwner { price = _price; } function setMainDude(address payable _mainDude) external onlyOwner { mainDude = _mainDude; } function setAuctionHouse(IDudesAuctionHouse _auctionHouse) external onlyOwner { auctionHouse = _auctionHouse; } /** * @notice Mints a new number of dudes at a 1:1 ratio of mfer/pfer/sproto. * @param _accessTokenIds list of mfer/pfer/sproto token ids that the sender holds to mint dudes * @param _accessNFTType type of access NFT from AccessNFTType enum - 0 for mfer, 1 for pfer, 2 for sproto * @dev be aware that even if one of the access token ids is not valid, the whole transaction will fail */ function premint(uint256[] calldata _accessTokenIds, uint8 _accessNFTType) external payable { require(_isPremintActive(), "Dudes:premint-not-active"); require(!_isPublicSaleActive(), "Dudes:premint-is-over"); uint256 numberOfTokens = _accessTokenIds.length; require(numberOfTokens > 0, "Dudes:premint-ids-gt-zero"); // set erc721 contract address based on accessNFTType IERC721 accessNFTAddress; if (_accessNFTType == uint8(AccessNFTType.MFER)) { accessNFTAddress = mferAddress; } else if (_accessNFTType == uint8(AccessNFTType.PFER)) { accessNFTAddress = pferAddress; } else if (_accessNFTType == uint8(AccessNFTType.SPROTO)) { accessNFTAddress = sprotoAddress; } else { revert("Dudes:invalid-access-nft-type"); } require(accessNFTAddress.balanceOf(msg.sender) >= numberOfTokens, "Dudes:not-enough-tokens"); uint256 _totalSupply = dudeCurrentSupply; require(_totalSupply + numberOfTokens <= maxNFT, "Dudes:premint-sold-out"); // loop through the list of access tokens // check that the msg.sender owns the token // check that the token has not been used to mint a dude // if all checks pass, mint a dude and mark the token as used for (uint256 i = 0; i < numberOfTokens; i++) { uint256 accessTokenId = _accessTokenIds[i]; require(accessNFTAddress.ownerOf(accessTokenId) == msg.sender, "Dudes:premint-not-owner"); require( accessTokenUsedToMint[accessNFTAddress][accessTokenId] == false, "Dudes:premint-already-used" ); uint256 mintTokenId = _totalSupply + i; accessTokenUsedToMint[accessNFTAddress][accessTokenId] = true; _safeMint(msg.sender, mintTokenId); } dudeCurrentSupply += numberOfTokens; } /** * @notice Mints a new number of dudes. * @param _numberOfTokens Number of dudes to mint */ function mintDudes(uint256 _numberOfTokens) external payable { require(_isPublicSaleActive(), "Dudes:sale-inactive"); require(_numberOfTokens > 0, "Dudes:wtf"); uint256 _totalSupply = dudeCurrentSupply; require(_totalSupply + _numberOfTokens <= maxNFT, "Dudes:sold-out"); require(_numberOfTokens <= maxPublicMint, "Dudes:exceeds-max-mint-per-tx"); uint256 totalCost = _numberOfTokens * price; require(msg.value >= totalCost, "Dudes:insufficient-funds"); dudeCurrentSupply += _numberOfTokens; for (uint256 i; i < _numberOfTokens; i++) { uint256 _mintIndex = _totalSupply + i; _safeMint(msg.sender, _mintIndex); } } /** * @notice Set NFT tokens base URI * @dev This function is only callable by the owner of the contract. * @param baseURI_ NFT tokens base URI */ function setBaseURI(string memory baseURI_) external onlyOwner { baseURI = baseURI_; } /** * @notice Withdraw ETH from the contract. * @dev This function can be called by anyone but hardcode to withdraw to only specific address. */ function withdraw() external { uint256 _amount = address(this).balance; require(_amount > 0, "Dudes:withdraw-amount-gt-zero"); (bool _success, ) = mainDude.call{ value: _amount }(""); require(_success, "Dudes:failed-to-withdraw-eth"); } receive() external payable {} /* ============ Internal Functions ============ */ function _isPublicSaleActive() internal view returns (bool) { return saleStartTimestamp < block.timestamp; } function _isPremintActive() internal view returns (bool) { return presaleStartTimestamp < block.timestamp; } function _isAccessTokenUsed(address _accessTokenAddress, uint256 _tokenId) internal view returns (bool) { return accessTokenUsedToMint[IERC721(_accessTokenAddress)][_tokenId]; } /** * @notice Set NFT base URI. * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. * @return NFT tokens base URI */ function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { if (address(auctionHouse) != address(0)) { // do not allow transfers of dudes out for the current auction winner IDudesAuctionHouse.Auction memory _auction = auctionHouse.getActiveAuction(); if (_auction.bidder != address(0)) { if (!_auction.settled) { require(_auction.bidder != from, "Dudes:transfer-auction-bidder"); } } } } /* ============ Auction House Functions ============ */ /** * @notice Get the next 1 of 1 dude token id. * @dev the 1 of 1 token ids will start at the non 1 of 1 max supply for the collection. Since token ids are zero indexed, * the first token id of the 1 of 1s will be maxNFT. * @return dudeId The next 1 of 1 dude token id or 0 if there are no more dudes for auction */ function getDudeForAuction() external view returns (uint256 dudeId) { if (dude1o1CurrentSupply < max1o1NFT) { dudeId = maxNFT + dude1o1CurrentSupply; } else { dudeId = 0; } } function mintAuctionDude(address _winner, uint256 _dudeId) external onlyAuctionHouse { dude1o1CurrentSupply++; _safeMint(_winner, _dudeId); } function burnByAuction(uint256 _dudeId) external onlyAuctionHouse { _burn(_dudeId); } }
// SPDX-License-Identifier: MIT // a16z Contracts v0.0.1 (CantBeEvil.sol) pragma solidity ^0.8.13; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import "./ICantBeEvil.sol"; enum LicenseVersion { PUBLIC, EXCLUSIVE, COMMERCIAL, COMMERCIAL_NO_HATE, PERSONAL, PERSONAL_NO_HATE } contract CantBeEvil is ERC165, ICantBeEvil { using Strings for uint; string internal constant _BASE_LICENSE_URI = "ar://zmc1WTspIhFyVY82bwfAIcIExLFH5lUcHHUN0wXg4W8/"; LicenseVersion internal licenseVersion; constructor(LicenseVersion _licenseVersion) { licenseVersion = _licenseVersion; } function getLicenseURI() public view returns (string memory) { return string.concat(_BASE_LICENSE_URI, uint(licenseVersion).toString()); } function getLicenseName() public view returns (string memory) { return _getLicenseVersionKeyByValue(licenseVersion); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165) returns (bool) { return interfaceId == type(ICantBeEvil).interfaceId || super.supportsInterface(interfaceId); } function _getLicenseVersionKeyByValue(LicenseVersion _licenseVersion) internal pure returns (string memory) { require(uint8(_licenseVersion) <= 6); if (LicenseVersion.PUBLIC == _licenseVersion) return "PUBLIC"; if (LicenseVersion.EXCLUSIVE == _licenseVersion) return "EXCLUSIVE"; if (LicenseVersion.COMMERCIAL == _licenseVersion) return "COMMERCIAL"; if (LicenseVersion.COMMERCIAL_NO_HATE == _licenseVersion) return "COMMERCIAL_NO_HATE"; if (LicenseVersion.PERSONAL == _licenseVersion) return "PERSONAL"; else return "PERSONAL_NO_HATE"; } }
// SPDX-License-Identifier: MIT // a16z Contracts v0.0.1 (ICantBeEvil.sol) pragma solidity ^0.8.13; interface ICantBeEvil { function getLicenseURI() external view returns (string memory); function getLicenseName() external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is 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. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @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"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.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 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. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @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); }
// SPDX-License-Identifier: GPL-3.0 /// @title Interface for Dudes Auction House // LICENSE // IDudesAuctionHouse.sol is a modified version of Nouns's INounsAuctionHouse.sol: // https://github.com/nounsDAO/nouns-monorepo/blob/master/packages/nouns-contracts/contracts/interfaces/INounsAuctionHouse.sol // // INounsAuctionHouse.sol source code Copyright Nounders DAO licensed under the GPL-3.0 license. // With modifications by the Dudes. pragma solidity 0.8.15; interface IDudesAuctionHouse { struct Auction { // ID for the DUDE (ERC721 token ID) uint256 dudeId; // The current highest bid amount // This will be the number of DUDE NFTs uint256 amount; // The time that the auction started uint256 startTime; // The time that the auction is scheduled to end uint256 endTime; // The address of the current highest bid address bidder; // Whether or not the auction has been settled bool settled; // array of dude token ids that were used to bid uint256[] biddedDudes; } event AuctionCreated(uint256 indexed dudeId, uint256 startTime, uint256 endTime); event AuctionBid(uint256 indexed dudeId, address sender, uint256 value, bool extended); event AuctionExtended(uint256 indexed dudeId, uint256 endTime); event AuctionSettled(uint256 indexed dudeId, address winner, uint256 amount); event AuctionTimeBufferUpdated(uint256 timeBuffer); event AuctionReservePriceUpdated(uint256 reservePrice); event AuctionMinBidIncrementPercentageUpdated(uint256 minBidIncrementPercentage); function getActiveAuction() external view returns (IDudesAuctionHouse.Auction memory); function getActiveAuctionBiddedDudes() external view returns (uint256[] memory); function settleAuction() external; function settleCurrentAndCreateNewAuction() external; function createBid(uint256 dudeId, uint256[] calldata dudesToUse) external; function setTimeBuffer(uint256 timeBuffer) external; function setReservePrice(uint256 reservePrice) external; function setMinBidIncrementPercentage(uint8 minBidIncrementPercentage) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract WTFERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = WTFERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved" ); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = WTFERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = WTFERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(WTFERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(WTFERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns ( bytes4 retval ) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 2000 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"contract IERC721","name":"mferAddress","type":"address"},{"internalType":"contract IERC721","name":"pferAddress","type":"address"},{"internalType":"contract IERC721","name":"sprotoAddress","type":"address"},{"internalType":"uint256","name":"maxNFT","type":"uint256"},{"internalType":"uint256","name":"max1o1NFT","type":"uint256"},{"internalType":"uint256","name":"maxPublicMint","type":"uint256"},{"internalType":"uint256","name":"saleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"presaleStartTimestamp","type":"uint256"},{"internalType":"address payable","name":"mainDude","type":"address"}],"internalType":"struct DistractedDudes.ContractData","name":"_contractData","type":"tuple"}],"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"contract IERC721","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"accessTokenUsedToMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auctionHouse","outputs":[{"internalType":"contract IDudesAuctionHouse","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dudeId","type":"uint256"}],"name":"burnByAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dude1o1CurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dudeCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDudeForAuction","outputs":[{"internalType":"uint256","name":"dudeId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLicenseName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLicenseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_accessTokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isAccessTokenUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPremintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max1o1NFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mferAddress","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_winner","type":"address"},{"internalType":"uint256","name":"_dudeId","type":"uint256"}],"name":"mintAuctionDude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"}],"name":"mintDudes","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pferAddress","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_accessTokenIds","type":"uint256[]"},{"internalType":"uint8","name":"_accessNFTType","type":"uint8"}],"name":"premint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IDudesAuctionHouse","name":"_auctionHouse","type":"address"}],"name":"setAuctionHouse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_mainDude","type":"address"}],"name":"setMainDude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sprotoAddress","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
610140604052600e805460ff60a01b191690553480156200001f57600080fd5b5060405162003a7338038062003a738339810160408190526200004291620004b7565b600083838262000053838262000663565b50600162000062828262000663565b5050506200007f620000796200033a60201b60201c565b6200033e565b6006805482919060ff60a01b1916600160a01b836005811115620000a757620000a76200072f565b0217905550506000816080015111620001075760405162461bcd60e51b815260206004820152601560248201527f44756465733a6d61782d6e66742d67742d7a65726f000000000000000000000060448201526064015b60405180910390fd5b60008160a00151116200015d5760405162461bcd60e51b815260206004820152601560248201527f44756465733a6d61782d316f312d67742d7a65726f00000000000000000000006044820152606401620000fe565b60008160c0015111620001b35760405162461bcd60e51b815260206004820152601660248201527f44756465733a6d61782d6d696e742d67742d7a65726f000000000000000000006044820152606401620000fe565b4281610100015111620002095760405162461bcd60e51b815260206004820152601a60248201527f44756465733a70726573616c652d73746172742d67742d6e6f770000000000006044820152606401620000fe565b428160e00151116200025e5760405162461bcd60e51b815260206004820152601760248201527f44756465733a73616c652d73746172742d67742d6e6f770000000000000000006044820152606401620000fe565b6101208101516001600160a01b0316620002bb5760405162461bcd60e51b815260206004820181905260248201527f44756465733a6d61696e2d647564652d6e6f742d7a65726f2d616464726573736044820152606401620000fe565b805160075560208101516001600160a01b0390811660809081526040830151821660a09081526060840151831660c09081529184015160e09081529084015161010090815291840151610120908152908401516008559083015160095590910151600f80546001600160a01b0319169190921617905550620007459050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715620003cc57620003cc62000390565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620003fd57620003fd62000390565b604052919050565b600082601f8301126200041757600080fd5b81516001600160401b0381111562000433576200043362000390565b602062000449601f8301601f19168201620003d2565b82815285828487010111156200045e57600080fd5b60005b838110156200047e57858101830151828201840152820162000461565b83811115620004905760008385840101525b5095945050505050565b80516001600160a01b0381168114620004b257600080fd5b919050565b6000806000838503610180811215620004cf57600080fd5b84516001600160401b0380821115620004e757600080fd5b620004f58883890162000405565b955060208701519150808211156200050c57600080fd5b506200051b8782880162000405565b93505061014080603f19830112156200053357600080fd5b6200053d620003a6565b91506040860151825262000554606087016200049a565b602083015262000567608087016200049a565b60408301526200057a60a087016200049a565b606083015260c0860151608083015260e086015160a08301526101008087015160c08401526101208088015160e08501528288015182850152620005c261016089016200049a565b81850152505050809150509250925092565b600181811c90821680620005e957607f821691505b6020821081036200060a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065e57600081815260208120601f850160051c81016020861015620006395750805b601f850160051c820191505b818110156200065a5782815560010162000645565b5050505b505050565b81516001600160401b038111156200067f576200067f62000390565b6200069781620006908454620005d4565b8462000610565b602080601f831160018114620006cf5760008415620006b65750858301515b600019600386901b1c1916600185901b1785556200065a565b600085815260208120601f198616915b828110156200070057888601518255948401946001909101908401620006df565b50858210156200071f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e05161010051610120516132a6620007cd6000396000818161080d0152610caa01526000818161073b0152610e2501526000818161084101528181610c3101528181610e5601526115cf015260008181610649015261148d015260008181610575015261143c015260008181610541015261140901526132a66000f3fe60806040526004361061030c5760003560e01c8063715018a61161019a578063c2b75a35116100e1578063e76d89521161008a578063f129fc2d11610064578063f129fc2d146108ec578063f29e6a891461090c578063f2fde38b1461092257600080fd5b8063e76d895214610863578063e985e9c514610883578063ed9152c8146108cc57600080fd5b8063c87b56dd116100bb578063c87b56dd146107db578063cabadaa0146107fb578063e456b01c1461082f57600080fd5b8063c2b75a351461079d578063c45e70df146107b0578063c7db2893146107c657600080fd5b8063a035b1fe11610143578063a9c24fb61161011d578063a9c24fb614610729578063b88d4fde1461075d578063bf492b591461077d57600080fd5b8063a035b1fe146106de578063a22cb465146106f4578063a341793b1461071457600080fd5b80638da5cb5b116101745780638da5cb5b1461068b57806391b7f5ed146106a957806395d89b41146106c957600080fd5b8063715018a614610622578063786a198b1461063757806388c64f781461066b57600080fd5b80633bd649681161025e578063548e26f7116102075780636352211e116101e15780636352211e146105b75780636c0360eb146105d757806370a08231146105ec57600080fd5b8063548e26f71461052f5780635500d1701461056357806355f804b31461059757600080fd5b80633da70257116102385780633da70257146104be57806342842e0e146104f95780634ea37fec1461051957600080fd5b80633bd649681461047e5780633c276d86146104935780633ccfd60b146104a957600080fd5b806309e76777116102c05780631e84c4131161029a5780631e84c413146104345780631eb899b61461044957806323b872dd1461045e57600080fd5b806309e76777146103e95780630bc3319c146103fe57806318160ddd1461041157600080fd5b8063081812fc116102f1578063081812fc1461036f5780630927ffd6146103a7578063095ea7b3146103c957600080fd5b806301ffc9a71461031857806306fdde031461034d57600080fd5b3661031357005b600080fd5b34801561032457600080fd5b506103386103333660046129fd565b610942565b60405190151581526020015b60405180910390f35b34801561035957600080fd5b50610362610953565b6040516103449190612a72565b34801561037b57600080fd5b5061038f61038a366004612a85565b6109e5565b6040516001600160a01b039091168152602001610344565b3480156103b357600080fd5b506103c76103c2366004612ab3565b610a0c565b005b3480156103d557600080fd5b506103c76103e4366004612ad0565b610a43565b3480156103f557600080fd5b50610338610b79565b6103c761040c366004612a85565b610b8b565b34801561041d57600080fd5b50610426610dce565b604051908152602001610344565b34801561044057600080fd5b50610338610e14565b34801561045557600080fd5b50610426610e21565b34801561046a57600080fd5b506103c7610479366004612afc565b610e80565b34801561048a57600080fd5b506103c7610f07565b34801561049f57600080fd5b5061042660085481565b3480156104b557600080fd5b506103c7610f3f565b3480156104ca57600080fd5b506103386104d9366004612ad0565b600d60209081526000928352604080842090915290825290205460ff1681565b34801561050557600080fd5b506103c7610514366004612afc565b611034565b34801561052557600080fd5b5061042660095481565b34801561053b57600080fd5b5061038f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056f57600080fd5b5061038f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a357600080fd5b506103c76105b2366004612c05565b61104f565b3480156105c357600080fd5b5061038f6105d2366004612a85565b611063565b3480156105e357600080fd5b506103626110c8565b3480156105f857600080fd5b50610426610607366004612ab3565b6001600160a01b031660009081526003602052604090205490565b34801561062e57600080fd5b506103c7611156565b34801561064357600080fd5b5061038f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b506103c7610686366004612ad0565b61116a565b34801561069757600080fd5b506006546001600160a01b031661038f565b3480156106b557600080fd5b506103c76106c4366004612a85565b611214565b3480156106d557600080fd5b50610362611221565b3480156106ea57600080fd5b5061042660075481565b34801561070057600080fd5b506103c761070f366004612c5c565b611230565b34801561072057600080fd5b5061036261123b565b34801561073557600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000000081565b34801561076957600080fd5b506103c7610778366004612c95565b611254565b34801561078957600080fd5b50610338610798366004612ad0565b6112dc565b6103c76107ab366004612d15565b61130b565b3480156107bc57600080fd5b50610426600b5481565b3480156107d257600080fd5b5061036261182c565b3480156107e757600080fd5b506103626107f6366004612a85565b611893565b34801561080757600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000000081565b34801561083b57600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000000081565b34801561086f57600080fd5b506103c761087e366004612ab3565b6118d5565b34801561088f57600080fd5b5061033861089e366004612da1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108d857600080fd5b50600e5461038f906001600160a01b031681565b3480156108f857600080fd5b506103c7610907366004612a85565b61190c565b34801561091857600080fd5b50610426600a5481565b34801561092e57600080fd5b506103c761093d366004612ab3565b6119a3565b600061094d82611a30565b92915050565b60606000805461096290612dcf565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90612dcf565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050905090565b60006109f082611a86565b506000908152600460205260409020546001600160a01b031690565b610a14611aea565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a4e82611063565b9050806001600160a01b0316836001600160a01b031603610adc5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610af85750610af8813361089e565b610b6a5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610ad3565b610b748383611b44565b505050565b6000610b86600954421190565b905090565b6008544211610bdc5760405162461bcd60e51b815260206004820152601360248201527f44756465733a73616c652d696e616374697665000000000000000000000000006044820152606401610ad3565b60008111610c2c5760405162461bcd60e51b815260206004820152600960248201527f44756465733a77746600000000000000000000000000000000000000000000006044820152606401610ad3565b600a547f0000000000000000000000000000000000000000000000000000000000000000610c5a8383612e1f565b1115610ca85760405162461bcd60e51b815260206004820152600e60248201527f44756465733a736f6c642d6f75740000000000000000000000000000000000006044820152606401610ad3565b7f0000000000000000000000000000000000000000000000000000000000000000821115610d185760405162461bcd60e51b815260206004820152601d60248201527f44756465733a657863656564732d6d61782d6d696e742d7065722d74780000006044820152606401610ad3565b600060075483610d289190612e37565b905080341015610d7a5760405162461bcd60e51b815260206004820152601860248201527f44756465733a696e73756666696369656e742d66756e647300000000000000006044820152606401610ad3565b82600a6000828254610d8c9190612e1f565b90915550600090505b83811015610dc8576000610da98285612e1f565b9050610db53382611bbf565b5080610dc081612e56565b915050610d95565b50505050565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff54600b54600a54610e0a9190612e1f565b610b869190612e70565b6000610b86600854421190565b60007f0000000000000000000000000000000000000000000000000000000000000000600b541015610e7a57600b54610b86907f0000000000000000000000000000000000000000000000000000000000000000612e1f565b50600090565b610e8a3382611bd9565b610efc5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610ad3565b610b74838383611c58565b610f0f611aea565b600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b4780610f8d5760405162461bcd60e51b815260206004820152601d60248201527f44756465733a77697468647261772d616d6f756e742d67742d7a65726f0000006044820152606401610ad3565b600f546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610fda576040519150601f19603f3d011682016040523d82523d6000602084013e610fdf565b606091505b50509050806110305760405162461bcd60e51b815260206004820152601c60248201527f44756465733a6661696c65642d746f2d77697468647261772d657468000000006044820152606401610ad3565b5050565b610b7483838360405180602001604052806000815250611254565b611057611aea565b600c6110308282612ed5565b6000818152600260205260408120546001600160a01b03168061094d5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ad3565b600c80546110d590612dcf565b80601f016020809104026020016040519081016040528092919081815260200182805461110190612dcf565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b505050505081565b61115e611aea565b6111686000611e3d565b565b33158015906111835750600e546001600160a01b031633145b6111f55760405162461bcd60e51b815260206004820152602160248201527f44756465733a63616c6c65722d69732d6e6f742d61756374696f6e2d686f757360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610ad3565b600b805490600061120583612e56565b91905055506110308282611bbf565b61121c611aea565b600755565b60606001805461096290612dcf565b611030338383611e9c565b600654606090610b8690600160a01b900460ff16611f6a565b61125e3383611bd9565b6112d05760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610ad3565b610dc884848484612161565b6001600160a01b0382166000908152600d6020908152604080832084845290915281205460ff165b9392505050565b600954421161135c5760405162461bcd60e51b815260206004820152601860248201527f44756465733a7072656d696e742d6e6f742d61637469766500000000000000006044820152606401610ad3565b6008544211156113ae5760405162461bcd60e51b815260206004820152601560248201527f44756465733a7072656d696e742d69732d6f76657200000000000000000000006044820152606401610ad3565b81806113fc5760405162461bcd60e51b815260206004820152601960248201527f44756465733a7072656d696e742d6964732d67742d7a65726f000000000000006044820152606401610ad3565b600060ff831661142d57507f00000000000000000000000000000000000000000000000000000000000000006114f9565b60001960ff84160161146057507f00000000000000000000000000000000000000000000000000000000000000006114f9565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8416016114b157507f00000000000000000000000000000000000000000000000000000000000000006114f9565b60405162461bcd60e51b815260206004820152601d60248201527f44756465733a696e76616c69642d6163636573732d6e66742d747970650000006044820152606401610ad3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015282906001600160a01b038316906370a0823190602401602060405180830381865afa158015611558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157c9190612fab565b10156115ca5760405162461bcd60e51b815260206004820152601760248201527f44756465733a6e6f742d656e6f7567682d746f6b656e730000000000000000006044820152606401610ad3565b600a547f00000000000000000000000000000000000000000000000000000000000000006115f88483612e1f565b11156116465760405162461bcd60e51b815260206004820152601660248201527f44756465733a7072656d696e742d736f6c642d6f7574000000000000000000006044820152606401610ad3565b60005b8381101561180c57600087878381811061166557611665612fc4565b905060200201359050336001600160a01b0316846001600160a01b0316636352211e836040518263ffffffff1660e01b81526004016116a691815260200190565b602060405180830381865afa1580156116c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e79190612fe5565b6001600160a01b03161461173d5760405162461bcd60e51b815260206004820152601760248201527f44756465733a7072656d696e742d6e6f742d6f776e65720000000000000000006044820152606401610ad3565b6001600160a01b0384166000908152600d6020908152604080832084845290915290205460ff16156117b15760405162461bcd60e51b815260206004820152601a60248201527f44756465733a7072656d696e742d616c72656164792d757365640000000000006044820152606401610ad3565b60006117bd8385612e1f565b6001600160a01b0386166000908152600d602090815260408083208684529091529020805460ff1916600117905590506117f73382611bbf565b5050808061180490612e56565b915050611649565b5082600a600082825461181f9190612e1f565b9091555050505050505050565b60606040518060600160405280603181526020016132406031913960065461186e90600160a01b900460ff16600581111561186957611869612f95565b6121ea565b60405160200161187f929190613002565b604051602081830303815290604052905090565b600e54606090600160a01b900460ff16156118b15761094d8261231f565b60405180606001604052806035815260200161320b6035913992915050565b919050565b6118dd611aea565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b33158015906119255750600e546001600160a01b031633145b6119975760405162461bcd60e51b815260206004820152602160248201527f44756465733a63616c6c65722d69732d6e6f742d61756374696f6e2d686f757360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610ad3565b6119a081612385565b50565b6119ab611aea565b6001600160a01b038116611a275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad3565b6119a081611e3d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f649a51a800000000000000000000000000000000000000000000000000000000148061094d575061094d82612439565b6000818152600260205260409020546001600160a01b03166119a05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ad3565b6006546001600160a01b031633146111685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad3565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091558190611b8682611063565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61103082826040518060200160405280600081525061251c565b600080611be583611063565b9050806001600160a01b0316846001600160a01b03161480611c2c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80611c505750836001600160a01b0316611c45846109e5565b6001600160a01b0316145b949350505050565b826001600160a01b0316611c6b82611063565b6001600160a01b031614611ce75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610ad3565b6001600160a01b038216611d625760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad3565b611d6d8383836125a5565b611d78600082611b44565b6001600160a01b0383166000908152600360205260408120805460019290611da1908490612e70565b90915550506001600160a01b0382166000908152600360205260408120805460019290611dcf908490612e1f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611efd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ad3565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606006826005811115611f8057611f80612f95565b60ff161115611f8e57600080fd5b816005811115611fa057611fa0612f95565b600003611fe057505060408051808201909152600681527f5055424c49430000000000000000000000000000000000000000000000000000602082015290565b816005811115611ff257611ff2612f95565b60010361203257505060408051808201909152600981527f4558434c55534956450000000000000000000000000000000000000000000000602082015290565b81600581111561204457612044612f95565b60020361208457505060408051808201909152600a81527f434f4d4d45524349414c00000000000000000000000000000000000000000000602082015290565b81600581111561209657612096612f95565b6003036120d657505060408051808201909152601281527f434f4d4d45524349414c5f4e4f5f484154450000000000000000000000000000602082015290565b8160058111156120e8576120e8612f95565b60040361212857505060408051808201909152600881527f504552534f4e414c000000000000000000000000000000000000000000000000602082015290565b505060408051808201909152601081527f504552534f4e414c5f4e4f5f4841544500000000000000000000000000000000602082015290565b61216c848484611c58565b612178848484846126c4565b610dc85760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ad3565b60608160000361222d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612257578061224181612e56565b91506122509050600a83613047565b9150612231565b60008167ffffffffffffffff81111561227257612272612b3d565b6040519080825280601f01601f19166020018201604052801561229c576020820181803683370190505b5090505b8415611c50576122b1600183612e70565b91506122be600a8661305b565b6122c9906030612e1f565b60f81b8183815181106122de576122de612fc4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612318600a86613047565b94506122a0565b606061232a82611a86565b6000612334612865565b905060008151116123545760405180602001604052806000815250611304565b8061235e846121ea565b60405160200161236f929190613002565b6040516020818303038152906040529392505050565b600061239082611063565b905061239e816000846125a5565b6123a9600083611b44565b6001600160a01b03811660009081526003602052604081208054600192906123d2908490612e70565b9091555050600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806124cc57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061094d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461094d565b6125268383612874565b61253360008484846126c4565b610b745760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ad3565b600e546001600160a01b031615610b7457600e54604080517f6bc416bb00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691636bc416bb91600480830192869291908290030181865afa158015612618573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261264091908101906130fa565b60808101519091506001600160a01b031615610dc8578060a00151610dc857836001600160a01b031681608001516001600160a01b031603610dc85760405162461bcd60e51b815260206004820152601d60248201527f44756465733a7472616e736665722d61756374696f6e2d6269646465720000006044820152606401610ad3565b60006001600160a01b0384163b1561285a576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906127219033908990889088906004016131b1565b6020604051808303816000875af192505050801561275c575060408051601f3d908101601f19168201909252612759918101906131ed565b60015b61280f573d80801561278a576040519150601f19603f3d011682016040523d82523d6000602084013e61278f565b606091505b5080516000036128075760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ad3565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611c50565b506001949350505050565b6060600c805461096290612dcf565b6001600160a01b0382166128ca5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ad3565b6000818152600260205260409020546001600160a01b03161561292f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ad3565b61293b600083836125a5565b6001600160a01b0382166000908152600360205260408120805460019290612964908490612e1f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146119a057600080fd5b600060208284031215612a0f57600080fd5b8135611304816129cf565b60005b83811015612a35578181015183820152602001612a1d565b83811115610dc85750506000910152565b60008151808452612a5e816020860160208601612a1a565b601f01601f19169290920160200192915050565b6020815260006113046020830184612a46565b600060208284031215612a9757600080fd5b5035919050565b6001600160a01b03811681146119a057600080fd5b600060208284031215612ac557600080fd5b813561130481612a9e565b60008060408385031215612ae357600080fd5b8235612aee81612a9e565b946020939093013593505050565b600080600060608486031215612b1157600080fd5b8335612b1c81612a9e565b92506020840135612b2c81612a9e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715612b7657612b76612b3d565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ba557612ba5612b3d565b604052919050565b600067ffffffffffffffff831115612bc757612bc7612b3d565b612bda6020601f19601f86011601612b7c565b9050828152838383011115612bee57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612c1757600080fd5b813567ffffffffffffffff811115612c2e57600080fd5b8201601f81018413612c3f57600080fd5b611c5084823560208401612bad565b80151581146119a057600080fd5b60008060408385031215612c6f57600080fd5b8235612c7a81612a9e565b91506020830135612c8a81612c4e565b809150509250929050565b60008060008060808587031215612cab57600080fd5b8435612cb681612a9e565b93506020850135612cc681612a9e565b925060408501359150606085013567ffffffffffffffff811115612ce957600080fd5b8501601f81018713612cfa57600080fd5b612d0987823560208401612bad565b91505092959194509250565b600080600060408486031215612d2a57600080fd5b833567ffffffffffffffff80821115612d4257600080fd5b818601915086601f830112612d5657600080fd5b813581811115612d6557600080fd5b8760208260051b8501011115612d7a57600080fd5b6020928301955093505084013560ff81168114612d9657600080fd5b809150509250925092565b60008060408385031215612db457600080fd5b8235612dbf81612a9e565b91506020830135612c8a81612a9e565b600181811c90821680612de357607f821691505b602082108103612e0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612e3257612e32612e09565b500190565b6000816000190483118215151615612e5157612e51612e09565b500290565b60006000198203612e6957612e69612e09565b5060010190565b600082821015612e8257612e82612e09565b500390565b601f821115610b7457600081815260208120601f850160051c81016020861015612eae5750805b601f850160051c820191505b81811015612ecd57828155600101612eba565b505050505050565b815167ffffffffffffffff811115612eef57612eef612b3d565b612f0381612efd8454612dcf565b84612e87565b602080601f831160018114612f385760008415612f205750858301515b600019600386901b1c1916600185901b178555612ecd565b600085815260208120601f198616915b82811015612f6757888601518255948401946001909101908401612f48565b5085821015612f855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612fbd57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80516118d081612a9e565b600060208284031215612ff757600080fd5b815161130481612a9e565b60008351613014818460208801612a1a565b835190830190613028818360208801612a1a565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261305657613056613031565b500490565b60008261306a5761306a613031565b500690565b80516118d081612c4e565b600082601f83011261308b57600080fd5b8151602067ffffffffffffffff8211156130a7576130a7612b3d565b8160051b6130b6828201612b7c565b92835284810182019282810190878511156130d057600080fd5b83870192505b848310156130ef578251825291830191908301906130d6565b979650505050505050565b60006020828403121561310c57600080fd5b815167ffffffffffffffff8082111561312457600080fd5b9083019060e0828603121561313857600080fd5b613140612b53565b8251815260208301516020820152604083015160408201526060830151606082015261316e60808401612fda565b608082015261317f60a0840161306f565b60a082015260c08301518281111561319657600080fd5b6131a28782860161307a565b60c08301525095945050505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526131e36080830184612a46565b9695505050505050565b6000602082840312156131ff57600080fd5b8151611304816129cf56fe697066733a2f2f516d503170614b366356656b505043764d4748364a484b56753151597534744d425a4471625973354c576f4d334161723a2f2f7a6d63315754737049684679565938326277664149634945784c4648356c55634848554e307758673457382fa26469706673582212205be0e4dff08e1732d05101ee0a80ae3fea7e136be58b172d11296d0217a5d3de64736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f000000000000000000000000bcc664b1e6848caba2eb2f3de6e21f81b9276dd8000000000000000000000000eeca64ea9fcf99a22806cd99b3d29cf6e8d5492500000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000065540a00000000000000000000000000000000000000000000000000000000006553fbf0000000000000000000000000c8cb403435c955ef7a4587e948880d0c58a54add0000000000000000000000000000000000000000000000000000000000000010446973747261637465642044756465730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044455444500000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061030c5760003560e01c8063715018a61161019a578063c2b75a35116100e1578063e76d89521161008a578063f129fc2d11610064578063f129fc2d146108ec578063f29e6a891461090c578063f2fde38b1461092257600080fd5b8063e76d895214610863578063e985e9c514610883578063ed9152c8146108cc57600080fd5b8063c87b56dd116100bb578063c87b56dd146107db578063cabadaa0146107fb578063e456b01c1461082f57600080fd5b8063c2b75a351461079d578063c45e70df146107b0578063c7db2893146107c657600080fd5b8063a035b1fe11610143578063a9c24fb61161011d578063a9c24fb614610729578063b88d4fde1461075d578063bf492b591461077d57600080fd5b8063a035b1fe146106de578063a22cb465146106f4578063a341793b1461071457600080fd5b80638da5cb5b116101745780638da5cb5b1461068b57806391b7f5ed146106a957806395d89b41146106c957600080fd5b8063715018a614610622578063786a198b1461063757806388c64f781461066b57600080fd5b80633bd649681161025e578063548e26f7116102075780636352211e116101e15780636352211e146105b75780636c0360eb146105d757806370a08231146105ec57600080fd5b8063548e26f71461052f5780635500d1701461056357806355f804b31461059757600080fd5b80633da70257116102385780633da70257146104be57806342842e0e146104f95780634ea37fec1461051957600080fd5b80633bd649681461047e5780633c276d86146104935780633ccfd60b146104a957600080fd5b806309e76777116102c05780631e84c4131161029a5780631e84c413146104345780631eb899b61461044957806323b872dd1461045e57600080fd5b806309e76777146103e95780630bc3319c146103fe57806318160ddd1461041157600080fd5b8063081812fc116102f1578063081812fc1461036f5780630927ffd6146103a7578063095ea7b3146103c957600080fd5b806301ffc9a71461031857806306fdde031461034d57600080fd5b3661031357005b600080fd5b34801561032457600080fd5b506103386103333660046129fd565b610942565b60405190151581526020015b60405180910390f35b34801561035957600080fd5b50610362610953565b6040516103449190612a72565b34801561037b57600080fd5b5061038f61038a366004612a85565b6109e5565b6040516001600160a01b039091168152602001610344565b3480156103b357600080fd5b506103c76103c2366004612ab3565b610a0c565b005b3480156103d557600080fd5b506103c76103e4366004612ad0565b610a43565b3480156103f557600080fd5b50610338610b79565b6103c761040c366004612a85565b610b8b565b34801561041d57600080fd5b50610426610dce565b604051908152602001610344565b34801561044057600080fd5b50610338610e14565b34801561045557600080fd5b50610426610e21565b34801561046a57600080fd5b506103c7610479366004612afc565b610e80565b34801561048a57600080fd5b506103c7610f07565b34801561049f57600080fd5b5061042660085481565b3480156104b557600080fd5b506103c7610f3f565b3480156104ca57600080fd5b506103386104d9366004612ad0565b600d60209081526000928352604080842090915290825290205460ff1681565b34801561050557600080fd5b506103c7610514366004612afc565b611034565b34801561052557600080fd5b5061042660095481565b34801561053b57600080fd5b5061038f7f00000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f81565b34801561056f57600080fd5b5061038f7f000000000000000000000000bcc664b1e6848caba2eb2f3de6e21f81b9276dd881565b3480156105a357600080fd5b506103c76105b2366004612c05565b61104f565b3480156105c357600080fd5b5061038f6105d2366004612a85565b611063565b3480156105e357600080fd5b506103626110c8565b3480156105f857600080fd5b50610426610607366004612ab3565b6001600160a01b031660009081526003602052604090205490565b34801561062e57600080fd5b506103c7611156565b34801561064357600080fd5b5061038f7f000000000000000000000000eeca64ea9fcf99a22806cd99b3d29cf6e8d5492581565b34801561067757600080fd5b506103c7610686366004612ad0565b61116a565b34801561069757600080fd5b506006546001600160a01b031661038f565b3480156106b557600080fd5b506103c76106c4366004612a85565b611214565b3480156106d557600080fd5b50610362611221565b3480156106ea57600080fd5b5061042660075481565b34801561070057600080fd5b506103c761070f366004612c5c565b611230565b34801561072057600080fd5b5061036261123b565b34801561073557600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000000781565b34801561076957600080fd5b506103c7610778366004612c95565b611254565b34801561078957600080fd5b50610338610798366004612ad0565b6112dc565b6103c76107ab366004612d15565b61130b565b3480156107bc57600080fd5b50610426600b5481565b3480156107d257600080fd5b5061036261182c565b3480156107e757600080fd5b506103626107f6366004612a85565b611893565b34801561080757600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000000a81565b34801561083b57600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000271081565b34801561086f57600080fd5b506103c761087e366004612ab3565b6118d5565b34801561088f57600080fd5b5061033861089e366004612da1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108d857600080fd5b50600e5461038f906001600160a01b031681565b3480156108f857600080fd5b506103c7610907366004612a85565b61190c565b34801561091857600080fd5b50610426600a5481565b34801561092e57600080fd5b506103c761093d366004612ab3565b6119a3565b600061094d82611a30565b92915050565b60606000805461096290612dcf565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90612dcf565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050905090565b60006109f082611a86565b506000908152600460205260409020546001600160a01b031690565b610a14611aea565b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a4e82611063565b9050806001600160a01b0316836001600160a01b031603610adc5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610af85750610af8813361089e565b610b6a5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610ad3565b610b748383611b44565b505050565b6000610b86600954421190565b905090565b6008544211610bdc5760405162461bcd60e51b815260206004820152601360248201527f44756465733a73616c652d696e616374697665000000000000000000000000006044820152606401610ad3565b60008111610c2c5760405162461bcd60e51b815260206004820152600960248201527f44756465733a77746600000000000000000000000000000000000000000000006044820152606401610ad3565b600a547f0000000000000000000000000000000000000000000000000000000000002710610c5a8383612e1f565b1115610ca85760405162461bcd60e51b815260206004820152600e60248201527f44756465733a736f6c642d6f75740000000000000000000000000000000000006044820152606401610ad3565b7f000000000000000000000000000000000000000000000000000000000000000a821115610d185760405162461bcd60e51b815260206004820152601d60248201527f44756465733a657863656564732d6d61782d6d696e742d7065722d74780000006044820152606401610ad3565b600060075483610d289190612e37565b905080341015610d7a5760405162461bcd60e51b815260206004820152601860248201527f44756465733a696e73756666696369656e742d66756e647300000000000000006044820152606401610ad3565b82600a6000828254610d8c9190612e1f565b90915550600090505b83811015610dc8576000610da98285612e1f565b9050610db53382611bbf565b5080610dc081612e56565b915050610d95565b50505050565b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff54600b54600a54610e0a9190612e1f565b610b869190612e70565b6000610b86600854421190565b60007f0000000000000000000000000000000000000000000000000000000000000007600b541015610e7a57600b54610b86907f0000000000000000000000000000000000000000000000000000000000002710612e1f565b50600090565b610e8a3382611bd9565b610efc5760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610ad3565b610b74838383611c58565b610f0f611aea565b600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b4780610f8d5760405162461bcd60e51b815260206004820152601d60248201527f44756465733a77697468647261772d616d6f756e742d67742d7a65726f0000006044820152606401610ad3565b600f546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610fda576040519150601f19603f3d011682016040523d82523d6000602084013e610fdf565b606091505b50509050806110305760405162461bcd60e51b815260206004820152601c60248201527f44756465733a6661696c65642d746f2d77697468647261772d657468000000006044820152606401610ad3565b5050565b610b7483838360405180602001604052806000815250611254565b611057611aea565b600c6110308282612ed5565b6000818152600260205260408120546001600160a01b03168061094d5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ad3565b600c80546110d590612dcf565b80601f016020809104026020016040519081016040528092919081815260200182805461110190612dcf565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b505050505081565b61115e611aea565b6111686000611e3d565b565b33158015906111835750600e546001600160a01b031633145b6111f55760405162461bcd60e51b815260206004820152602160248201527f44756465733a63616c6c65722d69732d6e6f742d61756374696f6e2d686f757360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610ad3565b600b805490600061120583612e56565b91905055506110308282611bbf565b61121c611aea565b600755565b60606001805461096290612dcf565b611030338383611e9c565b600654606090610b8690600160a01b900460ff16611f6a565b61125e3383611bd9565b6112d05760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610ad3565b610dc884848484612161565b6001600160a01b0382166000908152600d6020908152604080832084845290915281205460ff165b9392505050565b600954421161135c5760405162461bcd60e51b815260206004820152601860248201527f44756465733a7072656d696e742d6e6f742d61637469766500000000000000006044820152606401610ad3565b6008544211156113ae5760405162461bcd60e51b815260206004820152601560248201527f44756465733a7072656d696e742d69732d6f76657200000000000000000000006044820152606401610ad3565b81806113fc5760405162461bcd60e51b815260206004820152601960248201527f44756465733a7072656d696e742d6964732d67742d7a65726f000000000000006044820152606401610ad3565b600060ff831661142d57507f00000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f6114f9565b60001960ff84160161146057507f000000000000000000000000bcc664b1e6848caba2eb2f3de6e21f81b9276dd86114f9565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8416016114b157507f000000000000000000000000eeca64ea9fcf99a22806cd99b3d29cf6e8d549256114f9565b60405162461bcd60e51b815260206004820152601d60248201527f44756465733a696e76616c69642d6163636573732d6e66742d747970650000006044820152606401610ad3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015282906001600160a01b038316906370a0823190602401602060405180830381865afa158015611558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157c9190612fab565b10156115ca5760405162461bcd60e51b815260206004820152601760248201527f44756465733a6e6f742d656e6f7567682d746f6b656e730000000000000000006044820152606401610ad3565b600a547f00000000000000000000000000000000000000000000000000000000000027106115f88483612e1f565b11156116465760405162461bcd60e51b815260206004820152601660248201527f44756465733a7072656d696e742d736f6c642d6f7574000000000000000000006044820152606401610ad3565b60005b8381101561180c57600087878381811061166557611665612fc4565b905060200201359050336001600160a01b0316846001600160a01b0316636352211e836040518263ffffffff1660e01b81526004016116a691815260200190565b602060405180830381865afa1580156116c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e79190612fe5565b6001600160a01b03161461173d5760405162461bcd60e51b815260206004820152601760248201527f44756465733a7072656d696e742d6e6f742d6f776e65720000000000000000006044820152606401610ad3565b6001600160a01b0384166000908152600d6020908152604080832084845290915290205460ff16156117b15760405162461bcd60e51b815260206004820152601a60248201527f44756465733a7072656d696e742d616c72656164792d757365640000000000006044820152606401610ad3565b60006117bd8385612e1f565b6001600160a01b0386166000908152600d602090815260408083208684529091529020805460ff1916600117905590506117f73382611bbf565b5050808061180490612e56565b915050611649565b5082600a600082825461181f9190612e1f565b9091555050505050505050565b60606040518060600160405280603181526020016132406031913960065461186e90600160a01b900460ff16600581111561186957611869612f95565b6121ea565b60405160200161187f929190613002565b604051602081830303815290604052905090565b600e54606090600160a01b900460ff16156118b15761094d8261231f565b60405180606001604052806035815260200161320b6035913992915050565b919050565b6118dd611aea565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b33158015906119255750600e546001600160a01b031633145b6119975760405162461bcd60e51b815260206004820152602160248201527f44756465733a63616c6c65722d69732d6e6f742d61756374696f6e2d686f757360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610ad3565b6119a081612385565b50565b6119ab611aea565b6001600160a01b038116611a275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad3565b6119a081611e3d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f649a51a800000000000000000000000000000000000000000000000000000000148061094d575061094d82612439565b6000818152600260205260409020546001600160a01b03166119a05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ad3565b6006546001600160a01b031633146111685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad3565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091558190611b8682611063565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61103082826040518060200160405280600081525061251c565b600080611be583611063565b9050806001600160a01b0316846001600160a01b03161480611c2c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80611c505750836001600160a01b0316611c45846109e5565b6001600160a01b0316145b949350505050565b826001600160a01b0316611c6b82611063565b6001600160a01b031614611ce75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610ad3565b6001600160a01b038216611d625760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad3565b611d6d8383836125a5565b611d78600082611b44565b6001600160a01b0383166000908152600360205260408120805460019290611da1908490612e70565b90915550506001600160a01b0382166000908152600360205260408120805460019290611dcf908490612e1f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611efd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ad3565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606006826005811115611f8057611f80612f95565b60ff161115611f8e57600080fd5b816005811115611fa057611fa0612f95565b600003611fe057505060408051808201909152600681527f5055424c49430000000000000000000000000000000000000000000000000000602082015290565b816005811115611ff257611ff2612f95565b60010361203257505060408051808201909152600981527f4558434c55534956450000000000000000000000000000000000000000000000602082015290565b81600581111561204457612044612f95565b60020361208457505060408051808201909152600a81527f434f4d4d45524349414c00000000000000000000000000000000000000000000602082015290565b81600581111561209657612096612f95565b6003036120d657505060408051808201909152601281527f434f4d4d45524349414c5f4e4f5f484154450000000000000000000000000000602082015290565b8160058111156120e8576120e8612f95565b60040361212857505060408051808201909152600881527f504552534f4e414c000000000000000000000000000000000000000000000000602082015290565b505060408051808201909152601081527f504552534f4e414c5f4e4f5f4841544500000000000000000000000000000000602082015290565b61216c848484611c58565b612178848484846126c4565b610dc85760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ad3565b60608160000361222d57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612257578061224181612e56565b91506122509050600a83613047565b9150612231565b60008167ffffffffffffffff81111561227257612272612b3d565b6040519080825280601f01601f19166020018201604052801561229c576020820181803683370190505b5090505b8415611c50576122b1600183612e70565b91506122be600a8661305b565b6122c9906030612e1f565b60f81b8183815181106122de576122de612fc4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612318600a86613047565b94506122a0565b606061232a82611a86565b6000612334612865565b905060008151116123545760405180602001604052806000815250611304565b8061235e846121ea565b60405160200161236f929190613002565b6040516020818303038152906040529392505050565b600061239082611063565b905061239e816000846125a5565b6123a9600083611b44565b6001600160a01b03811660009081526003602052604081208054600192906123d2908490612e70565b9091555050600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806124cc57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061094d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461094d565b6125268383612874565b61253360008484846126c4565b610b745760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ad3565b600e546001600160a01b031615610b7457600e54604080517f6bc416bb00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691636bc416bb91600480830192869291908290030181865afa158015612618573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261264091908101906130fa565b60808101519091506001600160a01b031615610dc8578060a00151610dc857836001600160a01b031681608001516001600160a01b031603610dc85760405162461bcd60e51b815260206004820152601d60248201527f44756465733a7472616e736665722d61756374696f6e2d6269646465720000006044820152606401610ad3565b60006001600160a01b0384163b1561285a576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906127219033908990889088906004016131b1565b6020604051808303816000875af192505050801561275c575060408051601f3d908101601f19168201909252612759918101906131ed565b60015b61280f573d80801561278a576040519150601f19603f3d011682016040523d82523d6000602084013e61278f565b606091505b5080516000036128075760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ad3565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611c50565b506001949350505050565b6060600c805461096290612dcf565b6001600160a01b0382166128ca5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ad3565b6000818152600260205260409020546001600160a01b03161561292f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ad3565b61293b600083836125a5565b6001600160a01b0382166000908152600360205260408120805460019290612964908490612e1f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146119a057600080fd5b600060208284031215612a0f57600080fd5b8135611304816129cf565b60005b83811015612a35578181015183820152602001612a1d565b83811115610dc85750506000910152565b60008151808452612a5e816020860160208601612a1a565b601f01601f19169290920160200192915050565b6020815260006113046020830184612a46565b600060208284031215612a9757600080fd5b5035919050565b6001600160a01b03811681146119a057600080fd5b600060208284031215612ac557600080fd5b813561130481612a9e565b60008060408385031215612ae357600080fd5b8235612aee81612a9e565b946020939093013593505050565b600080600060608486031215612b1157600080fd5b8335612b1c81612a9e565b92506020840135612b2c81612a9e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715612b7657612b76612b3d565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ba557612ba5612b3d565b604052919050565b600067ffffffffffffffff831115612bc757612bc7612b3d565b612bda6020601f19601f86011601612b7c565b9050828152838383011115612bee57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612c1757600080fd5b813567ffffffffffffffff811115612c2e57600080fd5b8201601f81018413612c3f57600080fd5b611c5084823560208401612bad565b80151581146119a057600080fd5b60008060408385031215612c6f57600080fd5b8235612c7a81612a9e565b91506020830135612c8a81612c4e565b809150509250929050565b60008060008060808587031215612cab57600080fd5b8435612cb681612a9e565b93506020850135612cc681612a9e565b925060408501359150606085013567ffffffffffffffff811115612ce957600080fd5b8501601f81018713612cfa57600080fd5b612d0987823560208401612bad565b91505092959194509250565b600080600060408486031215612d2a57600080fd5b833567ffffffffffffffff80821115612d4257600080fd5b818601915086601f830112612d5657600080fd5b813581811115612d6557600080fd5b8760208260051b8501011115612d7a57600080fd5b6020928301955093505084013560ff81168114612d9657600080fd5b809150509250925092565b60008060408385031215612db457600080fd5b8235612dbf81612a9e565b91506020830135612c8a81612a9e565b600181811c90821680612de357607f821691505b602082108103612e0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612e3257612e32612e09565b500190565b6000816000190483118215151615612e5157612e51612e09565b500290565b60006000198203612e6957612e69612e09565b5060010190565b600082821015612e8257612e82612e09565b500390565b601f821115610b7457600081815260208120601f850160051c81016020861015612eae5750805b601f850160051c820191505b81811015612ecd57828155600101612eba565b505050505050565b815167ffffffffffffffff811115612eef57612eef612b3d565b612f0381612efd8454612dcf565b84612e87565b602080601f831160018114612f385760008415612f205750858301515b600019600386901b1c1916600185901b178555612ecd565b600085815260208120601f198616915b82811015612f6757888601518255948401946001909101908401612f48565b5085821015612f855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612fbd57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80516118d081612a9e565b600060208284031215612ff757600080fd5b815161130481612a9e565b60008351613014818460208801612a1a565b835190830190613028818360208801612a1a565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261305657613056613031565b500490565b60008261306a5761306a613031565b500690565b80516118d081612c4e565b600082601f83011261308b57600080fd5b8151602067ffffffffffffffff8211156130a7576130a7612b3d565b8160051b6130b6828201612b7c565b92835284810182019282810190878511156130d057600080fd5b83870192505b848310156130ef578251825291830191908301906130d6565b979650505050505050565b60006020828403121561310c57600080fd5b815167ffffffffffffffff8082111561312457600080fd5b9083019060e0828603121561313857600080fd5b613140612b53565b8251815260208301516020820152604083015160408201526060830151606082015261316e60808401612fda565b608082015261317f60a0840161306f565b60a082015260c08301518281111561319657600080fd5b6131a28782860161307a565b60c08301525095945050505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526131e36080830184612a46565b9695505050505050565b6000602082840312156131ff57600080fd5b8151611304816129cf56fe697066733a2f2f516d503170614b366356656b505043764d4748364a484b56753151597534744d425a4471625973354c576f4d334161723a2f2f7a6d63315754737049684679565938326277664149634945784c4648356c55634848554e307758673457382fa26469706673582212205be0e4dff08e1732d05101ee0a80ae3fea7e136be58b172d11296d0217a5d3de64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f000000000000000000000000bcc664b1e6848caba2eb2f3de6e21f81b9276dd8000000000000000000000000eeca64ea9fcf99a22806cd99b3d29cf6e8d5492500000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000065540a00000000000000000000000000000000000000000000000000000000006553fbf0000000000000000000000000c8cb403435c955ef7a4587e948880d0c58a54add0000000000000000000000000000000000000000000000000000000000000010446973747261637465642044756465730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044455444500000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Distracted Dudes
Arg [1] : _symbol (string): DUDE
Arg [2] : _contractData (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [2] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [3] : 00000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f
Arg [4] : 000000000000000000000000bcc664b1e6848caba2eb2f3de6e21f81b9276dd8
Arg [5] : 000000000000000000000000eeca64ea9fcf99a22806cd99b3d29cf6e8d54925
Arg [6] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [9] : 0000000000000000000000000000000000000000000000000000000065540a00
Arg [10] : 000000000000000000000000000000000000000000000000000000006553fbf0
Arg [11] : 000000000000000000000000c8cb403435c955ef7a4587e948880d0c58a54add
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [13] : 4469737472616374656420447564657300000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [15] : 4455444500000000000000000000000000000000000000000000000000000000
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.