ETH Price: $2,043.65 (+0.46%)

Contract

0xa956ed355f7BB2dF7eb230194A03acBB8dcCd0a0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...220384962025-03-13 14:18:47362 days ago1741875527IN
0xa956ed35...B8dcCd0a0
0 ETH0.000094062.0418683
Set Approval For...201784192024-06-26 21:03:23621 days ago1719435803IN
0xa956ed35...B8dcCd0a0
0 ETH0.000335147.26387235
Safe Transfer Fr...180167492023-08-29 0:35:11924 days ago1693269311IN
0xa956ed35...B8dcCd0a0
0 ETH0.0012777318.32484399
Mint180167412023-08-29 0:33:35924 days ago1693269215IN
0xa956ed35...B8dcCd0a0
0 ETH0.0012526820.58304644
Set URI180167372023-08-29 0:32:47924 days ago1693269167IN
0xa956ed35...B8dcCd0a0
0 ETH0.0007634820.31151969
Transfer From177319332023-07-20 4:15:35964 days ago1689826535IN
0xa956ed35...B8dcCd0a0
0 ETH0.0014210221.43419014
Safe Transfer Fr...177299532023-07-19 21:35:59964 days ago1689802559IN
0xa956ed35...B8dcCd0a0
0 ETH0.0021766731.27175389
Safe Transfer Fr...177299512023-07-19 21:35:35964 days ago1689802535IN
0xa956ed35...B8dcCd0a0
0 ETH0.0023299933.4745777
Safe Transfer Fr...177299482023-07-19 21:34:59964 days ago1689802499IN
0xa956ed35...B8dcCd0a0
0 ETH0.0024560934.12613668
Safe Transfer Fr...177299452023-07-19 21:34:23964 days ago1689802463IN
0xa956ed35...B8dcCd0a0
0 ETH0.0032316535.93964627
Safe Transfer Fr...177299432023-07-19 21:33:59964 days ago1689802439IN
0xa956ed35...B8dcCd0a0
0 ETH0.0034259138.09996742
Set Approval For...177299192023-07-19 21:29:11964 days ago1689802151IN
0xa956ed35...B8dcCd0a0
0 ETH0.0014017230.42793853
Mint176817392023-07-13 2:50:35971 days ago1689216635IN
0xa956ed35...B8dcCd0a0
0 ETH0.0011643119.13111048
Mint176816512023-07-13 2:32:23971 days ago1689215543IN
0xa956ed35...B8dcCd0a0
0 ETH0.0012006915.28843264
Set URI176816432023-07-13 2:30:47971 days ago1689215447IN
0xa956ed35...B8dcCd0a0
0 ETH0.0006245616.61563196
Set Approval For...171466002023-04-28 19:06:591047 days ago1682708819IN
0xa956ed35...B8dcCd0a0
0 ETH0.0018675740.54031253
Transfer From170689922023-04-17 20:55:591057 days ago1681764959IN
0xa956ed35...B8dcCd0a0
0 ETH0.002302934.7361937
Transfer From170689912023-04-17 20:55:471057 days ago1681764947IN
0xa956ed35...B8dcCd0a0
0 ETH0.0023276135.04436184
Transfer From170689902023-04-17 20:55:351057 days ago1681764935IN
0xa956ed35...B8dcCd0a0
0 ETH0.003148536.3522731
Transfer From170689892023-04-17 20:55:231057 days ago1681764923IN
0xa956ed35...B8dcCd0a0
0 ETH0.0033192138.32329911
Transfer From170689882023-04-17 20:55:111057 days ago1681764911IN
0xa956ed35...B8dcCd0a0
0 ETH0.0024443836.87025257
Transfer From170689852023-04-17 20:54:351057 days ago1681764875IN
0xa956ed35...B8dcCd0a0
0 ETH0.002603539.27025635
Transfer From170689842023-04-17 20:54:231057 days ago1681764863IN
0xa956ed35...B8dcCd0a0
0 ETH0.0033968439.21952312
Transfer From170689822023-04-17 20:53:591057 days ago1681764839IN
0xa956ed35...B8dcCd0a0
0 ETH0.0038554536.34577137
Transfer From170689812023-04-17 20:53:471057 days ago1681764827IN
0xa956ed35...B8dcCd0a0
0 ETH0.0040231537.92673507
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DooggiesFrens

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-04-18
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

//  ______   _____   _____   ______  ______ _____ _______ _______      _______  ______ _______ __   _ _______
//  |     \ |     | |     | |  ____ |  ____   |   |______ |______      |______ |_____/ |______ | \  | |______
//  |_____/ |_____| |_____| |_____| |_____| __|__ |______ ______|      |       |    \_ |______ |  \_| ______|
//                                                                                 

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
    function tokenByIndex(uint256 index) external view returns (uint256);
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    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);
    }

    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);
    }

    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);
    }
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 1, e.g. 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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 overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement 
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex != end);

            _currentIndex = updatedIndex;
        }
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }
}


contract DooggiesFrens is ERC721A {
    address private owner;
    string private baseURIForNewNew = "ipfs://QmeVSExd9pazLeFFNEt5vawRj6de8iWNhsEbajK1zDDsUX/";
    string private baseExt = ".json";

    constructor(address owner_) ERC721A("Dooggies Frens", "DF") {
        owner = owner_;
    }

    receive() external payable {
        (bool sent, ) = payable(owner).call{value: msg.value}("");
        require(sent, "Failed to send Ether");
    }

    function mint(uint256 numberOfTokens) external {
        require(msg.sender == owner, "You are not the owner");
        require(
            numberOfTokens + totalSupply() <= 420,
            "Not enough supply"
        );
        _safeMint(owner, numberOfTokens);
    }

    function setURI(string calldata _baseURI) external {
        require(msg.sender == owner, "You are not the owner");
        baseURIForNewNew = _baseURI;
    }

    function setExtension(string calldata _baseExt) external {
        require(msg.sender == owner, "You are not the owner");
        baseExt = _baseExt;
    }

    function updateOwner(address owner_) external {
        require(msg.sender == owner, "You are not the owner");
        owner = owner_;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        return string(abi.encodePacked(baseURIForNewNew, Strings.toString(tokenId), baseExt));
    }

    function zgetTokens(address tokenAddress) external {
        require(msg.sender == owner, "You are not the owner");
        IERC20 found = IERC20(tokenAddress);
        uint256 contract_token_balance = found.balanceOf(address(this));
        require(contract_token_balance != 0);
        require(found.transfer(owner, contract_token_balance));
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","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":[{"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":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseExt","type":"string"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","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":"owner_","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"zgetTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052603660808181529062001a9e60a0398051620000299160099160209091019062000127565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200005891600a9162000127565b503480156200006657600080fd5b5060405162001ad438038062001ad48339810160408190526200008991620001cd565b6040518060400160405280600e81526020016d446f6f6767696573204672656e7360901b81525060405180604001604052806002815260200161222360f11b8152508160029080519060200190620000e392919062000127565b508051620000f990600390602084019062000127565b5060016000555050600880546001600160a01b0319166001600160a01b03929092169190911790556200023c565b8280546200013590620001ff565b90600052602060002090601f016020900481019282620001595760008555620001a4565b82601f106200017457805160ff1916838001178555620001a4565b82800160010185558215620001a4579182015b82811115620001a457825182559160200191906001019062000187565b50620001b2929150620001b6565b5090565b5b80821115620001b25760008155600101620001b7565b600060208284031215620001e057600080fd5b81516001600160a01b0381168114620001f857600080fd5b9392505050565b600181811c908216806200021457607f821691505b602082108114156200023657634e487b7160e01b600052602260045260246000fd5b50919050565b611852806200024c6000396000f3fe6080604052600436106101185760003560e01c806370a08231116100a0578063a22cb46511610064578063a22cb465146103b1578063b88d4fde146103d1578063c56161c0146103f1578063c87b56dd14610411578063e985e9c51461043157600080fd5b806370a082311461031c5780637e2285aa1461033c578063880cdc311461035c57806395d89b411461037c578063a0712d681461039157600080fd5b8063095ea7b3116100e7578063095ea7b31461027557806318160ddd1461029557806323b872dd146102bc57806342842e0e146102dc5780636352211e146102fc57600080fd5b806301ffc9a7146101c457806302fe5305146101f957806306fdde031461021b578063081812fc1461023d57600080fd5b366101bf576008546040516000916001600160a01b03169034908381818185875af1925050503d806000811461016a576040519150601f19603f3d011682016040523d82523d6000602084013e61016f565b606091505b50509050806101bc5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b3480156101d057600080fd5b506101e46101df366004611280565b61047a565b60405190151581526020015b60405180910390f35b34801561020557600080fd5b506102196102143660046112a4565b6104cc565b005b34801561022757600080fd5b50610230610507565b6040516101f0919061136e565b34801561024957600080fd5b5061025d610258366004611381565b610599565b6040516001600160a01b0390911681526020016101f0565b34801561028157600080fd5b506102196102903660046113b6565b6105dd565b3480156102a157600080fd5b5060015460005403600019015b6040519081526020016101f0565b3480156102c857600080fd5b506102196102d73660046113e0565b610666565b3480156102e857600080fd5b506102196102f73660046113e0565b610671565b34801561030857600080fd5b5061025d610317366004611381565b61068c565b34801561032857600080fd5b506102ae61033736600461141c565b61069e565b34801561034857600080fd5b506102196103573660046112a4565b6106ed565b34801561036857600080fd5b5061021961037736600461141c565b610723565b34801561038857600080fd5b5061023061076f565b34801561039d57600080fd5b506102196103ac366004611381565b61077e565b3480156103bd57600080fd5b506102196103cc366004611445565b61081d565b3480156103dd57600080fd5b506102196103ec366004611492565b6108b3565b3480156103fd57600080fd5b5061021961040c36600461141c565b610904565b34801561041d57600080fd5b5061023061042c366004611381565b610a27565b34801561043d57600080fd5b506101e461044c36600461156e565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b14806104ab57506001600160e01b03198216635b5e139f60e01b145b806104c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146104f65760405162461bcd60e51b81526004016101b3906115a1565b610502600983836111d1565b505050565b606060028054610516906115d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610542906115d0565b801561058f5780601f106105645761010080835404028352916020019161058f565b820191906000526020600020905b81548152906001019060200180831161057257829003601f168201915b5050505050905090565b60006105a482610a5e565b6105c1576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006105e88261068c565b9050806001600160a01b0316836001600160a01b0316141561061d5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161480159061063d575061063b813361044c565b155b1561065b576040516367d9dca160e11b815260040160405180910390fd5b610502838383610a97565b610502838383610af3565b610502838383604051806020016040528060008152506108b3565b600061069782610ce2565b5192915050565b60006001600160a01b0382166106c7576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107175760405162461bcd60e51b81526004016101b3906115a1565b610502600a83836111d1565b6008546001600160a01b0316331461074d5760405162461bcd60e51b81526004016101b3906115a1565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610516906115d0565b6008546001600160a01b031633146107a85760405162461bcd60e51b81526004016101b3906115a1565b6001546000546101a4919003600019016107c29083611621565b11156108045760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101b3565b60085461081a906001600160a01b031682610e0b565b50565b6001600160a01b0382163314156108475760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6108be848484610af3565b6001600160a01b0383163b151580156108e057506108de84848484610e29565b155b156108fe576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b0316331461092e5760405162461bcd60e51b81526004016101b3906115a1565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b9190611639565b9050806109a757600080fd5b60085460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156109fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1e9190611652565b61050257600080fd5b60606009610a3483610f12565b600a604051602001610a4893929190611709565b6040516020818303038152906040529050919050565b600081600111158015610a72575060005482105b80156104c6575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610afe82610ce2565b9050836001600160a01b031681600001516001600160a01b031614610b355760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610b535750610b53853361044c565b80610b6e575033610b6384610599565b6001600160a01b0316145b905080610b8e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610bb557604051633a954ecd60e21b815260040160405180910390fd5b610bc160008487610a97565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610c97576000548214610c97578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051606081018252600080825260208201819052918101919091528180600111158015610d12575060005481105b15610df257600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610df05780516001600160a01b031615610d86579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215610deb579392505050565b610d86565b505b604051636f96cda160e11b815260040160405180910390fd5b610e25828260405180602001604052806000815250611010565b5050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610e5e90339089908890889060040161173c565b6020604051808303816000875af1925050508015610e99575060408051601f3d908101601f19168201909252610e9691810190611779565b60015b610ef4573d808015610ec7576040519150601f19603f3d011682016040523d82523d6000602084013e610ecc565b606091505b508051610eec576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610f365750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f605780610f4a81611796565b9150610f599050600a836117c7565b9150610f3a565b60008167ffffffffffffffff811115610f7b57610f7b61147c565b6040519080825280601f01601f191660200182016040528015610fa5576020820181803683370190505b5090505b8415610f0a57610fba6001836117db565b9150610fc7600a866117f2565b610fd2906030611621565b60f81b818381518110610fe757610fe7611806565b60200101906001600160f81b031916908160001a905350611009600a866117c7565b9450610fa9565b6000546001600160a01b03841661103957604051622e076360e81b815260040160405180910390fd5b826110575760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15611181575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46111496000878480600101955087610e29565b611166576040516368d2bf6b60e11b815260040160405180910390fd5b808214156110fe57826000541461117c57600080fd5b6111c7565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611182575b5060005550505050565b8280546111dd906115d0565b90600052602060002090601f0160209004810192826111ff5760008555611245565b82601f106112185782800160ff19823516178555611245565b82800160010185558215611245579182015b8281111561124557823582559160200191906001019061122a565b50611251929150611255565b5090565b5b808211156112515760008155600101611256565b6001600160e01b03198116811461081a57600080fd5b60006020828403121561129257600080fd5b813561129d8161126a565b9392505050565b600080602083850312156112b757600080fd5b823567ffffffffffffffff808211156112cf57600080fd5b818501915085601f8301126112e357600080fd5b8135818111156112f257600080fd5b86602082850101111561130457600080fd5b60209290920196919550909350505050565b60005b83811015611331578181015183820152602001611319565b838111156108fe5750506000910152565b6000815180845261135a816020860160208601611316565b601f01601f19169290920160200192915050565b60208152600061129d6020830184611342565b60006020828403121561139357600080fd5b5035919050565b80356001600160a01b03811681146113b157600080fd5b919050565b600080604083850312156113c957600080fd5b6113d28361139a565b946020939093013593505050565b6000806000606084860312156113f557600080fd5b6113fe8461139a565b925061140c6020850161139a565b9150604084013590509250925092565b60006020828403121561142e57600080fd5b61129d8261139a565b801515811461081a57600080fd5b6000806040838503121561145857600080fd5b6114618361139a565b9150602083013561147181611437565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156114a857600080fd5b6114b18561139a565b93506114bf6020860161139a565b925060408501359150606085013567ffffffffffffffff808211156114e357600080fd5b818701915087601f8301126114f757600080fd5b8135818111156115095761150961147c565b604051601f8201601f19908116603f011681019083821181831017156115315761153161147c565b816040528281528a602084870101111561154a57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561158157600080fd5b61158a8361139a565b91506115986020840161139a565b90509250929050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600181811c908216806115e457607f821691505b6020821081141561160557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156116345761163461160b565b500190565b60006020828403121561164b57600080fd5b5051919050565b60006020828403121561166457600080fd5b815161129d81611437565b8054600090600181811c908083168061168957607f831692505b60208084108214156116ab57634e487b7160e01b600052602260045260246000fd5b8180156116bf57600181146116d0576116fd565b60ff198616895284890196506116fd565b60008881526020902060005b868110156116f55781548b8201529085019083016116dc565b505084890196505b50505050505092915050565b6000611715828661166f565b8451611725818360208901611316565b6117318183018661166f565b979650505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061176f90830184611342565b9695505050505050565b60006020828403121561178b57600080fd5b815161129d8161126a565b60006000198214156117aa576117aa61160b565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826117d6576117d66117b1565b500490565b6000828210156117ed576117ed61160b565b500390565b600082611801576118016117b1565b500690565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205d739e608e02bd92dc5f82c8c69d64dec87935d84f11a1f0e039d8896f2cb2d264736f6c634300080a0033697066733a2f2f516d6556534578643970617a4c6546464e457435766177526a3664653869574e68734562616a4b317a44447355582f0000000000000000000000001f914637e8304dd9022f0f21f34b7e3a7b69bb09

Deployed Bytecode

0x6080604052600436106101185760003560e01c806370a08231116100a0578063a22cb46511610064578063a22cb465146103b1578063b88d4fde146103d1578063c56161c0146103f1578063c87b56dd14610411578063e985e9c51461043157600080fd5b806370a082311461031c5780637e2285aa1461033c578063880cdc311461035c57806395d89b411461037c578063a0712d681461039157600080fd5b8063095ea7b3116100e7578063095ea7b31461027557806318160ddd1461029557806323b872dd146102bc57806342842e0e146102dc5780636352211e146102fc57600080fd5b806301ffc9a7146101c457806302fe5305146101f957806306fdde031461021b578063081812fc1461023d57600080fd5b366101bf576008546040516000916001600160a01b03169034908381818185875af1925050503d806000811461016a576040519150601f19603f3d011682016040523d82523d6000602084013e61016f565b606091505b50509050806101bc5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b3480156101d057600080fd5b506101e46101df366004611280565b61047a565b60405190151581526020015b60405180910390f35b34801561020557600080fd5b506102196102143660046112a4565b6104cc565b005b34801561022757600080fd5b50610230610507565b6040516101f0919061136e565b34801561024957600080fd5b5061025d610258366004611381565b610599565b6040516001600160a01b0390911681526020016101f0565b34801561028157600080fd5b506102196102903660046113b6565b6105dd565b3480156102a157600080fd5b5060015460005403600019015b6040519081526020016101f0565b3480156102c857600080fd5b506102196102d73660046113e0565b610666565b3480156102e857600080fd5b506102196102f73660046113e0565b610671565b34801561030857600080fd5b5061025d610317366004611381565b61068c565b34801561032857600080fd5b506102ae61033736600461141c565b61069e565b34801561034857600080fd5b506102196103573660046112a4565b6106ed565b34801561036857600080fd5b5061021961037736600461141c565b610723565b34801561038857600080fd5b5061023061076f565b34801561039d57600080fd5b506102196103ac366004611381565b61077e565b3480156103bd57600080fd5b506102196103cc366004611445565b61081d565b3480156103dd57600080fd5b506102196103ec366004611492565b6108b3565b3480156103fd57600080fd5b5061021961040c36600461141c565b610904565b34801561041d57600080fd5b5061023061042c366004611381565b610a27565b34801561043d57600080fd5b506101e461044c36600461156e565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b14806104ab57506001600160e01b03198216635b5e139f60e01b145b806104c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146104f65760405162461bcd60e51b81526004016101b3906115a1565b610502600983836111d1565b505050565b606060028054610516906115d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610542906115d0565b801561058f5780601f106105645761010080835404028352916020019161058f565b820191906000526020600020905b81548152906001019060200180831161057257829003601f168201915b5050505050905090565b60006105a482610a5e565b6105c1576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006105e88261068c565b9050806001600160a01b0316836001600160a01b0316141561061d5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161480159061063d575061063b813361044c565b155b1561065b576040516367d9dca160e11b815260040160405180910390fd5b610502838383610a97565b610502838383610af3565b610502838383604051806020016040528060008152506108b3565b600061069782610ce2565b5192915050565b60006001600160a01b0382166106c7576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107175760405162461bcd60e51b81526004016101b3906115a1565b610502600a83836111d1565b6008546001600160a01b0316331461074d5760405162461bcd60e51b81526004016101b3906115a1565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610516906115d0565b6008546001600160a01b031633146107a85760405162461bcd60e51b81526004016101b3906115a1565b6001546000546101a4919003600019016107c29083611621565b11156108045760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101b3565b60085461081a906001600160a01b031682610e0b565b50565b6001600160a01b0382163314156108475760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6108be848484610af3565b6001600160a01b0383163b151580156108e057506108de84848484610e29565b155b156108fe576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b0316331461092e5760405162461bcd60e51b81526004016101b3906115a1565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b9190611639565b9050806109a757600080fd5b60085460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156109fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1e9190611652565b61050257600080fd5b60606009610a3483610f12565b600a604051602001610a4893929190611709565b6040516020818303038152906040529050919050565b600081600111158015610a72575060005482105b80156104c6575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610afe82610ce2565b9050836001600160a01b031681600001516001600160a01b031614610b355760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610b535750610b53853361044c565b80610b6e575033610b6384610599565b6001600160a01b0316145b905080610b8e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610bb557604051633a954ecd60e21b815260040160405180910390fd5b610bc160008487610a97565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610c97576000548214610c97578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051606081018252600080825260208201819052918101919091528180600111158015610d12575060005481105b15610df257600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610df05780516001600160a01b031615610d86579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215610deb579392505050565b610d86565b505b604051636f96cda160e11b815260040160405180910390fd5b610e25828260405180602001604052806000815250611010565b5050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610e5e90339089908890889060040161173c565b6020604051808303816000875af1925050508015610e99575060408051601f3d908101601f19168201909252610e9691810190611779565b60015b610ef4573d808015610ec7576040519150601f19603f3d011682016040523d82523d6000602084013e610ecc565b606091505b508051610eec576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610f365750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f605780610f4a81611796565b9150610f599050600a836117c7565b9150610f3a565b60008167ffffffffffffffff811115610f7b57610f7b61147c565b6040519080825280601f01601f191660200182016040528015610fa5576020820181803683370190505b5090505b8415610f0a57610fba6001836117db565b9150610fc7600a866117f2565b610fd2906030611621565b60f81b818381518110610fe757610fe7611806565b60200101906001600160f81b031916908160001a905350611009600a866117c7565b9450610fa9565b6000546001600160a01b03841661103957604051622e076360e81b815260040160405180910390fd5b826110575760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15611181575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46111496000878480600101955087610e29565b611166576040516368d2bf6b60e11b815260040160405180910390fd5b808214156110fe57826000541461117c57600080fd5b6111c7565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611182575b5060005550505050565b8280546111dd906115d0565b90600052602060002090601f0160209004810192826111ff5760008555611245565b82601f106112185782800160ff19823516178555611245565b82800160010185558215611245579182015b8281111561124557823582559160200191906001019061122a565b50611251929150611255565b5090565b5b808211156112515760008155600101611256565b6001600160e01b03198116811461081a57600080fd5b60006020828403121561129257600080fd5b813561129d8161126a565b9392505050565b600080602083850312156112b757600080fd5b823567ffffffffffffffff808211156112cf57600080fd5b818501915085601f8301126112e357600080fd5b8135818111156112f257600080fd5b86602082850101111561130457600080fd5b60209290920196919550909350505050565b60005b83811015611331578181015183820152602001611319565b838111156108fe5750506000910152565b6000815180845261135a816020860160208601611316565b601f01601f19169290920160200192915050565b60208152600061129d6020830184611342565b60006020828403121561139357600080fd5b5035919050565b80356001600160a01b03811681146113b157600080fd5b919050565b600080604083850312156113c957600080fd5b6113d28361139a565b946020939093013593505050565b6000806000606084860312156113f557600080fd5b6113fe8461139a565b925061140c6020850161139a565b9150604084013590509250925092565b60006020828403121561142e57600080fd5b61129d8261139a565b801515811461081a57600080fd5b6000806040838503121561145857600080fd5b6114618361139a565b9150602083013561147181611437565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156114a857600080fd5b6114b18561139a565b93506114bf6020860161139a565b925060408501359150606085013567ffffffffffffffff808211156114e357600080fd5b818701915087601f8301126114f757600080fd5b8135818111156115095761150961147c565b604051601f8201601f19908116603f011681019083821181831017156115315761153161147c565b816040528281528a602084870101111561154a57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561158157600080fd5b61158a8361139a565b91506115986020840161139a565b90509250929050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600181811c908216806115e457607f821691505b6020821081141561160557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156116345761163461160b565b500190565b60006020828403121561164b57600080fd5b5051919050565b60006020828403121561166457600080fd5b815161129d81611437565b8054600090600181811c908083168061168957607f831692505b60208084108214156116ab57634e487b7160e01b600052602260045260246000fd5b8180156116bf57600181146116d0576116fd565b60ff198616895284890196506116fd565b60008881526020902060005b868110156116f55781548b8201529085019083016116dc565b505084890196505b50505050505092915050565b6000611715828661166f565b8451611725818360208901611316565b6117318183018661166f565b979650505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061176f90830184611342565b9695505050505050565b60006020828403121561178b57600080fd5b815161129d8161126a565b60006000198214156117aa576117aa61160b565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826117d6576117d66117b1565b500490565b6000828210156117ed576117ed61160b565b500390565b600082611801576118016117b1565b500690565b634e487b7160e01b600052603260045260246000fdfea26469706673582212205d739e608e02bd92dc5f82c8c69d64dec87935d84f11a1f0e039d8896f2cb2d264736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001f914637e8304dd9022f0f21f34b7e3a7b69bb09

-----Decoded View---------------
Arg [0] : owner_ (address): 0x1f914637e8304DD9022F0f21f34B7e3A7B69bb09

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001f914637e8304dd9022f0f21f34b7e3a7b69bb09


Deployed Bytecode Sourcemap

26624:1846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26994:5;;26986:41;;26971:9;;-1:-1:-1;;;;;26994:5:0;;27013:9;;26971;26986:41;26971:9;26986:41;27013:9;26994:5;26986:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26970:57;;;27046:4;27038:37;;;;-1:-1:-1;;;27038:37:0;;426:2:1;27038:37:0;;;408:21:1;465:2;445:18;;;438:30;-1:-1:-1;;;484:18:1;;;477:50;544:18;;27038:37:0;;;;;;;;;26959:124;26624:1846;;;;;9956:305;;;;;;;;;;-1:-1:-1;9956:305:0;;;;;:::i;:::-;;:::i;:::-;;;1124:14:1;;1117:22;1099:41;;1087:2;1072:18;9956:305:0;;;;;;;;27376:161;;;;;;;;;;-1:-1:-1;27376:161:0;;;;;:::i;:::-;;:::i;:::-;;13069:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14572:204::-;;;;;;;;;;-1:-1:-1;14572:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2848:32:1;;;2830:51;;2818:2;2803:18;14572:204:0;2684:203:1;14135:371:0;;;;;;;;;;-1:-1:-1;14135:371:0;;;;;:::i;:::-;;:::i;9205:303::-;;;;;;;;;;-1:-1:-1;9062:1:0;9459:12;9249:7;9443:13;:28;-1:-1:-1;;9443:46:0;9205:303;;;3475:25:1;;;3463:2;3448:18;9205:303:0;3329:177:1;15437:170:0;;;;;;;;;;-1:-1:-1;15437:170:0;;;;;:::i;:::-;;:::i;15678:185::-;;;;;;;;;;-1:-1:-1;15678:185:0;;;;;:::i;:::-;;:::i;12877:125::-;;;;;;;;;;-1:-1:-1;12877:125:0;;;;;:::i;:::-;;:::i;10325:206::-;;;;;;;;;;-1:-1:-1;10325:206:0;;;;;:::i;:::-;;:::i;27545:158::-;;;;;;;;;;-1:-1:-1;27545:158:0;;;;;:::i;:::-;;:::i;27711:143::-;;;;;;;;;;-1:-1:-1;27711:143:0;;;;;:::i;:::-;;:::i;13238:104::-;;;;;;;;;;;;;:::i;27091:277::-;;;;;;;;;;-1:-1:-1;27091:277:0;;;;;:::i;:::-;;:::i;14848:287::-;;;;;;;;;;-1:-1:-1;14848:287:0;;;;;:::i;:::-;;:::i;15934:369::-;;;;;;;;;;-1:-1:-1;15934:369:0;;;;;:::i;:::-;;:::i;28112:355::-;;;;;;;;;;-1:-1:-1;28112:355:0;;;;;:::i;:::-;;:::i;27862:242::-;;;;;;;;;;-1:-1:-1;27862:242:0;;;;;:::i;:::-;;:::i;15206:164::-;;;;;;;;;;-1:-1:-1;15206:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;15327:25:0;;;15303:4;15327:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;15206:164;9956:305;10058:4;-1:-1:-1;;;;;;10095:40:0;;-1:-1:-1;;;10095:40:0;;:105;;-1:-1:-1;;;;;;;10152:48:0;;-1:-1:-1;;;10152:48:0;10095:105;:158;;;-1:-1:-1;;;;;;;;;;5745:40:0;;;10217:36;10075:178;9956:305;-1:-1:-1;;9956:305:0:o;27376:161::-;27460:5;;-1:-1:-1;;;;;27460:5:0;27446:10;:19;27438:53;;;;-1:-1:-1;;;27438:53:0;;;;;;;:::i;:::-;27502:27;:16;27521:8;;27502:27;:::i;:::-;;27376:161;;:::o;13069:100::-;13123:13;13156:5;13149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13069:100;:::o;14572:204::-;14640:7;14665:16;14673:7;14665;:16::i;:::-;14660:64;;14690:34;;-1:-1:-1;;;14690:34:0;;;;;;;;;;;14660:64;-1:-1:-1;14744:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;14744:24:0;;14572:204::o;14135:371::-;14208:13;14224:24;14240:7;14224:15;:24::i;:::-;14208:40;;14269:5;-1:-1:-1;;;;;14263:11:0;:2;-1:-1:-1;;;;;14263:11:0;;14259:48;;;14283:24;;-1:-1:-1;;;14283:24:0;;;;;;;;;;;14259:48;3695:10;-1:-1:-1;;;;;14324:21:0;;;;;;:63;;-1:-1:-1;14350:37:0;14367:5;3695:10;15206:164;:::i;14350:37::-;14349:38;14324:63;14320:138;;;14411:35;;-1:-1:-1;;;14411:35:0;;;;;;;;;;;14320:138;14470:28;14479:2;14483:7;14492:5;14470:8;:28::i;15437:170::-;15571:28;15581:4;15587:2;15591:7;15571:9;:28::i;15678:185::-;15816:39;15833:4;15839:2;15843:7;15816:39;;;;;;;;;;;;:16;:39::i;12877:125::-;12941:7;12968:21;12981:7;12968:12;:21::i;:::-;:26;;12877:125;-1:-1:-1;;12877:125:0:o;10325:206::-;10389:7;-1:-1:-1;;;;;10413:19:0;;10409:60;;10441:28;;-1:-1:-1;;;10441:28:0;;;;;;;;;;;10409:60;-1:-1:-1;;;;;;10495:19:0;;;;;:12;:19;;;;;:27;;;;10325:206::o;27545:158::-;27635:5;;-1:-1:-1;;;;;27635:5:0;27621:10;:19;27613:53;;;;-1:-1:-1;;;27613:53:0;;;;;;;:::i;:::-;27677:18;:7;27687:8;;27677:18;:::i;27711:143::-;27790:5;;-1:-1:-1;;;;;27790:5:0;27776:10;:19;27768:53;;;;-1:-1:-1;;;27768:53:0;;;;;;;:::i;:::-;27832:5;:14;;-1:-1:-1;;;;;;27832:14:0;-1:-1:-1;;;;;27832:14:0;;;;;;;;;;27711:143::o;13238:104::-;13294:13;13327:7;13320:14;;;;;:::i;27091:277::-;27171:5;;-1:-1:-1;;;;;27171:5:0;27157:10;:19;27149:53;;;;-1:-1:-1;;;27149:53:0;;;;;;;:::i;:::-;9062:1;9459:12;9249:7;9443:13;27269:3;;9443:28;;-1:-1:-1;;9443:46:0;27235:30;;:14;:30;:::i;:::-;:37;;27213:104;;;;-1:-1:-1;;;27213:104:0;;7220:2:1;27213:104:0;;;7202:21:1;7259:2;7239:18;;;7232:30;-1:-1:-1;;;7278:18:1;;;7271:47;7335:18;;27213:104:0;7018:341:1;27213:104:0;27338:5;;27328:32;;-1:-1:-1;;;;;27338:5:0;27345:14;27328:9;:32::i;:::-;27091:277;:::o;14848:287::-;-1:-1:-1;;;;;14947:24:0;;3695:10;14947:24;14943:54;;;14980:17;;-1:-1:-1;;;14980:17:0;;;;;;;;;;;14943:54;3695:10;15010:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;15010:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;15010:53:0;;;;;;;;;;15079:48;;1099:41:1;;;15010:42:0;;3695:10;15079:48;;1072:18:1;15079:48:0;;;;;;;14848:287;;:::o;15934:369::-;16101:28;16111:4;16117:2;16121:7;16101:9;:28::i;:::-;-1:-1:-1;;;;;16144:13:0;;3544:19;:23;;16144:76;;;;;16164:56;16195:4;16201:2;16205:7;16214:5;16164:30;:56::i;:::-;16163:57;16144:76;16140:156;;;16244:40;;-1:-1:-1;;;16244:40:0;;;;;;;;;;;16140:156;15934:369;;;;:::o;28112:355::-;28196:5;;-1:-1:-1;;;;;28196:5:0;28182:10;:19;28174:53;;;;-1:-1:-1;;;28174:53:0;;;;;;;:::i;:::-;28317:30;;-1:-1:-1;;;28317:30:0;;28341:4;28317:30;;;2830:51:1;28260:12:0;;28238;;-1:-1:-1;;;;;28317:15:0;;;;;2803:18:1;;28317:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28284:63;-1:-1:-1;28366:27:0;28358:36;;;;;;28428:5;;28413:45;;-1:-1:-1;;;28413:45:0;;-1:-1:-1;;;;;28428:5:0;;;28413:45;;;7727:51:1;7794:18;;;7787:34;;;28413:14:0;;;;;;7700:18:1;;28413:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28405:54;;;;;27862:242;27980:13;28042:16;28060:25;28077:7;28060:16;:25::i;:::-;28087:7;28025:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28011:85;;27862:242;;;:::o;16558:174::-;16615:4;16658:7;9062:1;16639:26;;:53;;;;;16679:13;;16669:7;:23;16639:53;:85;;;;-1:-1:-1;;16697:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;16697:27:0;;;;16696:28;;16558:174::o;25260:196::-;25375:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;25375:29:0;-1:-1:-1;;;;;25375:29:0;;;;;;;;;25420:28;;25375:24;;25420:28;;;;;;;25260:196;;;:::o;20442:2021::-;20557:35;20595:21;20608:7;20595:12;:21::i;:::-;20557:59;;20655:4;-1:-1:-1;;;;;20633:26:0;:13;:18;;;-1:-1:-1;;;;;20633:26:0;;20629:67;;20668:28;;-1:-1:-1;;;20668:28:0;;;;;;;;;;;20629:67;20709:22;3695:10;-1:-1:-1;;;;;20735:20:0;;;;:73;;-1:-1:-1;20772:36:0;20789:4;3695:10;15206:164;:::i;20772:36::-;20735:126;;;-1:-1:-1;3695:10:0;20825:20;20837:7;20825:11;:20::i;:::-;-1:-1:-1;;;;;20825:36:0;;20735:126;20709:153;;20880:17;20875:66;;20906:35;;-1:-1:-1;;;20906:35:0;;;;;;;;;;;20875:66;-1:-1:-1;;;;;20956:16:0;;20952:52;;20981:23;;-1:-1:-1;;;20981:23:0;;;;;;;;;;;20952:52;21069:35;21086:1;21090:7;21099:4;21069:8;:35::i;:::-;-1:-1:-1;;;;;21400:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;21400:31:0;;;;;;;-1:-1:-1;;21400:31:0;;;;;;;21446:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;21446:29:0;;;;;;;;;;;21526:20;;;:11;:20;;;;;;21561:18;;-1:-1:-1;;;;;;21594:49:0;;;;-1:-1:-1;;;21627:15:0;21594:49;;;;;;;;;;21917:11;;21977:24;;;;;22020:13;;21526:20;;21977:24;;22020:13;22016:384;;22230:13;;22215:11;:28;22211:174;;22268:20;;22337:28;;;;22311:54;;-1:-1:-1;;;22311:54:0;-1:-1:-1;;;;;;22311:54:0;;;-1:-1:-1;;;;;22268:20:0;;22311:54;;;;22211:174;21375:1036;;;22447:7;22443:2;-1:-1:-1;;;;;22428:27:0;22437:4;-1:-1:-1;;;;;22428:27:0;;;;;;;;;;;20546:1917;;20442:2021;;;:::o;11706:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;11817:7:0;;9062:1;11866:23;;:47;;;;;11900:13;;11893:4;:20;11866:47;11862:886;;;11934:31;11968:17;;;:11;:17;;;;;;;;;11934:51;;;;;;;;;-1:-1:-1;;;;;11934:51:0;;;;-1:-1:-1;;;11934:51:0;;;;;;;;;;;-1:-1:-1;;;11934:51:0;;;;;;;;;;;;;;12004:729;;12054:14;;-1:-1:-1;;;;;12054:28:0;;12050:101;;12118:9;11706:1109;-1:-1:-1;;;11706:1109:0:o;12050:101::-;-1:-1:-1;;;12493:6:0;12538:17;;;;:11;:17;;;;;;;;;12526:29;;;;;;;;;-1:-1:-1;;;;;12526:29:0;;;;;-1:-1:-1;;;12526:29:0;;;;;;;;;;;-1:-1:-1;;;12526:29:0;;;;;;;;;;;;;12586:28;12582:109;;12654:9;11706:1109;-1:-1:-1;;;11706:1109:0:o;12582:109::-;12453:261;;;11915:833;11862:886;12776:31;;-1:-1:-1;;;12776:31:0;;;;;;;;;;;16816:104;16885:27;16895:2;16899:8;16885:27;;;;;;;;;;;;:9;:27::i;:::-;16816:104;;:::o;25948:667::-;26132:72;;-1:-1:-1;;;26132:72:0;;26111:4;;-1:-1:-1;;;;;26132:36:0;;;;;:72;;3695:10;;26183:4;;26189:7;;26198:5;;26132:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26132:72:0;;;;;;;;-1:-1:-1;;26132:72:0;;;;;;;;;;;;:::i;:::-;;;26128:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26366:13:0;;26362:235;;26412:40;;-1:-1:-1;;;26412:40:0;;;;;;;;;;;26362:235;26555:6;26549:13;26540:6;26536:2;26532:15;26525:38;26128:480;-1:-1:-1;;;;;;26251:55:0;-1:-1:-1;;;26251:55:0;;-1:-1:-1;26128:480:0;25948:667;;;;;;:::o;3810:723::-;3866:13;4087:10;4083:53;;-1:-1:-1;;4114:10:0;;;;;;;;;;;;-1:-1:-1;;;4114:10:0;;;;;3810:723::o;4083:53::-;4161:5;4146:12;4202:78;4209:9;;4202:78;;4235:8;;;;:::i;:::-;;-1:-1:-1;4258:10:0;;-1:-1:-1;4266:2:0;4258:10;;:::i;:::-;;;4202:78;;;4290:19;4322:6;4312:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4312:17:0;;4290:39;;4340:154;4347:10;;4340:154;;4374:11;4384:1;4374:11;;:::i;:::-;;-1:-1:-1;4443:10:0;4451:2;4443:5;:10;:::i;:::-;4430:24;;:2;:24;:::i;:::-;4417:39;;4400:6;4407;4400:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4400:56:0;;;;;;;;-1:-1:-1;4471:11:0;4480:2;4471:11;;:::i;:::-;;;4340:154;;17294:1606;17417:20;17440:13;-1:-1:-1;;;;;17468:16:0;;17464:48;;17493:19;;-1:-1:-1;;;17493:19:0;;;;;;;;;;;17464:48;17527:13;17523:44;;17549:18;;-1:-1:-1;;;17549:18:0;;;;;;;;;;;17523:44;-1:-1:-1;;;;;17844:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;17903:49:0;;17844:44;;;;;;;;17903:49;;;;-1:-1:-1;;17844:44:0;;;;;;17903:49;;;;;;;;;;;;;;;;17969:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;18019:66:0;;;-1:-1:-1;;;18069:15:0;18019:66;;;;;;;;;;;;;17969:25;;18166:23;;;;3544:19;:23;18206:633;;18246:314;18277:38;;18302:12;;-1:-1:-1;;;;;18277:38:0;;;18294:1;;18277:38;;18294:1;;18277:38;18343:69;18382:1;18386:2;18390:14;;;;;;18406:5;18343:30;:69::i;:::-;18338:174;;18448:40;;-1:-1:-1;;;18448:40:0;;;;;;;;;;;18338:174;18555:3;18539:12;:19;;18246:314;;18641:12;18624:13;;:29;18620:43;;18655:8;;;18620:43;18206:633;;;18704:120;18735:40;;18760:14;;;;;-1:-1:-1;;;;;18735:40:0;;;18752:1;;18735:40;;18752:1;;18735:40;18819:3;18803:12;:19;;18704:120;;18206:633;-1:-1:-1;18853:13:0;:28;-1:-1:-1;;;;17294:1606:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;573:131:1;-1:-1:-1;;;;;;647:32:1;;637:43;;627:71;;694:1;691;684:12;709:245;767:6;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:30;918:5;894:30;:::i;:::-;943:5;709:245;-1:-1:-1;;;709:245:1:o;1151:592::-;1222:6;1230;1283:2;1271:9;1262:7;1258:23;1254:32;1251:52;;;1299:1;1296;1289:12;1251:52;1339:9;1326:23;1368:18;1409:2;1401:6;1398:14;1395:34;;;1425:1;1422;1415:12;1395:34;1463:6;1452:9;1448:22;1438:32;;1508:7;1501:4;1497:2;1493:13;1489:27;1479:55;;1530:1;1527;1520:12;1479:55;1570:2;1557:16;1596:2;1588:6;1585:14;1582:34;;;1612:1;1609;1602:12;1582:34;1657:7;1652:2;1643:6;1639:2;1635:15;1631:24;1628:37;1625:57;;;1678:1;1675;1668:12;1625:57;1709:2;1701:11;;;;;1731:6;;-1:-1:-1;1151:592:1;;-1:-1:-1;;;;1151:592:1:o;1748:258::-;1820:1;1830:113;1844:6;1841:1;1838:13;1830:113;;;1920:11;;;1914:18;1901:11;;;1894:39;1866:2;1859:10;1830:113;;;1961:6;1958:1;1955:13;1952:48;;;-1:-1:-1;;1996:1:1;1978:16;;1971:27;1748:258::o;2011:::-;2053:3;2091:5;2085:12;2118:6;2113:3;2106:19;2134:63;2190:6;2183:4;2178:3;2174:14;2167:4;2160:5;2156:16;2134:63;:::i;:::-;2251:2;2230:15;-1:-1:-1;;2226:29:1;2217:39;;;;2258:4;2213:50;;2011:258;-1:-1:-1;;2011:258:1:o;2274:220::-;2423:2;2412:9;2405:21;2386:4;2443:45;2484:2;2473:9;2469:18;2461:6;2443:45;:::i;2499:180::-;2558:6;2611:2;2599:9;2590:7;2586:23;2582:32;2579:52;;;2627:1;2624;2617:12;2579:52;-1:-1:-1;2650:23:1;;2499:180;-1:-1:-1;2499:180:1:o;2892:173::-;2960:20;;-1:-1:-1;;;;;3009:31:1;;2999:42;;2989:70;;3055:1;3052;3045:12;2989:70;2892:173;;;:::o;3070:254::-;3138:6;3146;3199:2;3187:9;3178:7;3174:23;3170:32;3167:52;;;3215:1;3212;3205:12;3167:52;3238:29;3257:9;3238:29;:::i;:::-;3228:39;3314:2;3299:18;;;;3286:32;;-1:-1:-1;;;3070:254:1:o;3511:328::-;3588:6;3596;3604;3657:2;3645:9;3636:7;3632:23;3628:32;3625:52;;;3673:1;3670;3663:12;3625:52;3696:29;3715:9;3696:29;:::i;:::-;3686:39;;3744:38;3778:2;3767:9;3763:18;3744:38;:::i;:::-;3734:48;;3829:2;3818:9;3814:18;3801:32;3791:42;;3511:328;;;;;:::o;3844:186::-;3903:6;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;3995:29;4014:9;3995:29;:::i;4035:118::-;4121:5;4114:13;4107:21;4100:5;4097:32;4087:60;;4143:1;4140;4133:12;4158:315;4223:6;4231;4284:2;4272:9;4263:7;4259:23;4255:32;4252:52;;;4300:1;4297;4290:12;4252:52;4323:29;4342:9;4323:29;:::i;:::-;4313:39;;4402:2;4391:9;4387:18;4374:32;4415:28;4437:5;4415:28;:::i;:::-;4462:5;4452:15;;;4158:315;;;;;:::o;4478:127::-;4539:10;4534:3;4530:20;4527:1;4520:31;4570:4;4567:1;4560:15;4594:4;4591:1;4584:15;4610:1138;4705:6;4713;4721;4729;4782:3;4770:9;4761:7;4757:23;4753:33;4750:53;;;4799:1;4796;4789:12;4750:53;4822:29;4841:9;4822:29;:::i;:::-;4812:39;;4870:38;4904:2;4893:9;4889:18;4870:38;:::i;:::-;4860:48;;4955:2;4944:9;4940:18;4927:32;4917:42;;5010:2;4999:9;4995:18;4982:32;5033:18;5074:2;5066:6;5063:14;5060:34;;;5090:1;5087;5080:12;5060:34;5128:6;5117:9;5113:22;5103:32;;5173:7;5166:4;5162:2;5158:13;5154:27;5144:55;;5195:1;5192;5185:12;5144:55;5231:2;5218:16;5253:2;5249;5246:10;5243:36;;;5259:18;;:::i;:::-;5334:2;5328:9;5302:2;5388:13;;-1:-1:-1;;5384:22:1;;;5408:2;5380:31;5376:40;5364:53;;;5432:18;;;5452:22;;;5429:46;5426:72;;;5478:18;;:::i;:::-;5518:10;5514:2;5507:22;5553:2;5545:6;5538:18;5593:7;5588:2;5583;5579;5575:11;5571:20;5568:33;5565:53;;;5614:1;5611;5604:12;5565:53;5670:2;5665;5661;5657:11;5652:2;5644:6;5640:15;5627:46;5715:1;5710:2;5705;5697:6;5693:15;5689:24;5682:35;5736:6;5726:16;;;;;;;4610:1138;;;;;;;:::o;5753:260::-;5821:6;5829;5882:2;5870:9;5861:7;5857:23;5853:32;5850:52;;;5898:1;5895;5888:12;5850:52;5921:29;5940:9;5921:29;:::i;:::-;5911:39;;5969:38;6003:2;5992:9;5988:18;5969:38;:::i;:::-;5959:48;;5753:260;;;;;:::o;6018:345::-;6220:2;6202:21;;;6259:2;6239:18;;;6232:30;-1:-1:-1;;;6293:2:1;6278:18;;6271:51;6354:2;6339:18;;6018:345::o;6368:380::-;6447:1;6443:12;;;;6490;;;6511:61;;6565:4;6557:6;6553:17;6543:27;;6511:61;6618:2;6610:6;6607:14;6587:18;6584:38;6581:161;;;6664:10;6659:3;6655:20;6652:1;6645:31;6699:4;6696:1;6689:15;6727:4;6724:1;6717:15;6581:161;;6368:380;;;:::o;6753:127::-;6814:10;6809:3;6805:20;6802:1;6795:31;6845:4;6842:1;6835:15;6869:4;6866:1;6859:15;6885:128;6925:3;6956:1;6952:6;6949:1;6946:13;6943:39;;;6962:18;;:::i;:::-;-1:-1:-1;6998:9:1;;6885:128::o;7364:184::-;7434:6;7487:2;7475:9;7466:7;7462:23;7458:32;7455:52;;;7503:1;7500;7493:12;7455:52;-1:-1:-1;7526:16:1;;7364:184;-1:-1:-1;7364:184:1:o;7832:245::-;7899:6;7952:2;7940:9;7931:7;7927:23;7923:32;7920:52;;;7968:1;7965;7958:12;7920:52;8000:9;7994:16;8019:28;8041:5;8019:28;:::i;8208:973::-;8293:12;;8258:3;;8348:1;8368:18;;;;8421;;;;8448:61;;8502:4;8494:6;8490:17;8480:27;;8448:61;8528:2;8576;8568:6;8565:14;8545:18;8542:38;8539:161;;;8622:10;8617:3;8613:20;8610:1;8603:31;8657:4;8654:1;8647:15;8685:4;8682:1;8675:15;8539:161;8716:18;8743:104;;;;8861:1;8856:319;;;;8709:466;;8743:104;-1:-1:-1;;8776:24:1;;8764:37;;8821:16;;;;-1:-1:-1;8743:104:1;;8856:319;8155:1;8148:14;;;8192:4;8179:18;;8950:1;8964:165;8978:6;8975:1;8972:13;8964:165;;;9056:14;;9043:11;;;9036:35;9099:16;;;;8993:10;;8964:165;;;8968:3;;9158:6;9153:3;9149:16;9142:23;;8709:466;;;;;;;8208:973;;;;:::o;9186:456::-;9407:3;9435:38;9469:3;9461:6;9435:38;:::i;:::-;9502:6;9496:13;9518:52;9563:6;9559:2;9552:4;9544:6;9540:17;9518:52;:::i;:::-;9586:50;9628:6;9624:2;9620:15;9612:6;9586:50;:::i;:::-;9579:57;9186:456;-1:-1:-1;;;;;;;9186:456:1:o;9647:489::-;-1:-1:-1;;;;;9916:15:1;;;9898:34;;9968:15;;9963:2;9948:18;;9941:43;10015:2;10000:18;;9993:34;;;10063:3;10058:2;10043:18;;10036:31;;;9841:4;;10084:46;;10110:19;;10102:6;10084:46;:::i;:::-;10076:54;9647:489;-1:-1:-1;;;;;;9647:489:1:o;10141:249::-;10210:6;10263:2;10251:9;10242:7;10238:23;10234:32;10231:52;;;10279:1;10276;10269:12;10231:52;10311:9;10305:16;10330:30;10354:5;10330:30;:::i;10395:135::-;10434:3;-1:-1:-1;;10455:17:1;;10452:43;;;10475:18;;:::i;:::-;-1:-1:-1;10522:1:1;10511:13;;10395:135::o;10535:127::-;10596:10;10591:3;10587:20;10584:1;10577:31;10627:4;10624:1;10617:15;10651:4;10648:1;10641:15;10667:120;10707:1;10733;10723:35;;10738:18;;:::i;:::-;-1:-1:-1;10772:9:1;;10667:120::o;10792:125::-;10832:4;10860:1;10857;10854:8;10851:34;;;10865:18;;:::i;:::-;-1:-1:-1;10902:9:1;;10792:125::o;10922:112::-;10954:1;10980;10970:35;;10985:18;;:::i;:::-;-1:-1:-1;11019:9:1;;10922:112::o;11039:127::-;11100:10;11095:3;11091:20;11088:1;11081:31;11131:4;11128:1;11121:15;11155:4;11152:1;11145:15

Swarm Source

ipfs://5d739e608e02bd92dc5f82c8c69d64dec87935d84f11a1f0e039d8896f2cb2d2

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.