ETH Price: $3,094.09 (+2.01%)
Gas: 2 Gwei

Contract

0xB4e62D6363f82E0E74E8963828815f907Eab2C66
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Wrap Many And St...202729582024-07-10 1:57:3522 hrs ago1720576655IN
0xB4e62D63...07Eab2C66
0 ETH0.00095875.686165
Wrap Many And St...202586302024-07-08 1:52:112 days ago1720403531IN
0xB4e62D63...07Eab2C66
0 ETH0.000634065.71374769
Wrap Many And St...202586122024-07-08 1:48:232 days ago1720403303IN
0xB4e62D63...07Eab2C66
0 ETH0.000652535.88021694
Wrap Many And St...202586082024-07-08 1:47:352 days ago1720403255IN
0xB4e62D63...07Eab2C66
0 ETH0.000673866.07238062
Un Stake Many202333602024-07-04 13:10:236 days ago1720098623IN
0xB4e62D63...07Eab2C66
0 ETH0.0011129716.16585787
Safe Transfer Fr...201713972024-06-25 21:31:2315 days ago1719351083IN
0xB4e62D63...07Eab2C66
0 ETH0.00040767.85374147
Wrap Many And St...201673152024-06-25 7:50:4715 days ago1719301847IN
0xB4e62D63...07Eab2C66
0 ETH0.001603367.08721689
Set Approval For...201594862024-06-24 5:34:2316 days ago1719207263IN
0xB4e62D63...07Eab2C66
0 ETH0.000115372.5
Wrap Many201594572024-06-24 5:28:3516 days ago1719206915IN
0xB4e62D63...07Eab2C66
0 ETH0.001434593
Wrap Many201484002024-06-22 16:21:2318 days ago1719073283IN
0xB4e62D63...07Eab2C66
0 ETH0.000669535.32947454
Set Approval For...201441622024-06-22 2:07:1118 days ago1719022031IN
0xB4e62D63...07Eab2C66
0 ETH0.00012542.71753463
Wrap Many201408882024-06-21 15:07:2319 days ago1718982443IN
0xB4e62D63...07Eab2C66
0 ETH0.0014118210.98483629
Wrap Many201392682024-06-21 9:42:1119 days ago1718962931IN
0xB4e62D63...07Eab2C66
0 ETH0.0019264411
Stake Many201359362024-06-20 22:32:1120 days ago1718922731IN
0xB4e62D63...07Eab2C66
0 ETH0.000495926.42600409
Stake Many201359302024-06-20 22:30:5920 days ago1718922659IN
0xB4e62D63...07Eab2C66
0 ETH0.000516876.69754445
Wrap Many201359242024-06-20 22:29:4720 days ago1718922587IN
0xB4e62D63...07Eab2C66
0 ETH0.00190726.34756218
Wrap Many And St...201227602024-06-19 2:17:3521 days ago1718763455IN
0xB4e62D63...07Eab2C66
0 ETH0.002487158.76176358
Stake Many201143212024-06-17 21:55:1123 days ago1718661311IN
0xB4e62D63...07Eab2C66
0 ETH0.000471566.51566137
Wrap Many201143122024-06-17 21:53:2323 days ago1718661203IN
0xB4e62D63...07Eab2C66
0 ETH0.000835696.6521469
Un Stake Many201134412024-06-17 18:58:3523 days ago1718650715IN
0xB4e62D63...07Eab2C66
0 ETH0.0010131814.71641783
Z Mint New New200459582024-06-08 8:36:3532 days ago1717835795IN
0xB4e62D63...07Eab2C66
0 ETH0.003926818
Wrap Many200360222024-06-06 23:18:5934 days ago1717715939IN
0xB4e62D63...07Eab2C66
0 ETH0.000547410.06905937
Wrap Many200360222024-06-06 23:18:5934 days ago1717715939IN
0xB4e62D63...07Eab2C66
0 ETH0.0021304610
Wrap Many200022152024-06-02 6:02:1138 days ago1717308131IN
0xB4e62D63...07Eab2C66
0 ETH0.000879397
Z Mint New New199547442024-05-26 14:48:1145 days ago1716734891IN
0xB4e62D63...07Eab2C66
0 ETH0.0020300813
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
149455422022-06-11 17:39:16760 days ago1654969156
0xB4e62D63...07Eab2C66
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WrapYourDooggies

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-11
*/

// 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 IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC1155 is IERC165 {
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

library Strings {
    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);
    }
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    IERC1155 internal dooggies;
    bool internal _isMintedOut = false;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) internal _owners;
    mapping(address => uint256) internal _balances;
    mapping(uint => uint) internal idStakeLockTimes;
    mapping(uint => bool) internal OGDooggiesMintedNewNew;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_, address dooggiesContract) {
        _name = name_;
        _symbol = symbol_;
        dooggies = IERC1155(dooggiesContract);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) external view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        if(_isMintedOut == false && idStakeLockTimes[tokenId] != 0 && OGDooggiesMintedNewNew[tokenId] == false) {
            return address(this);
        }
        return owner;
    }

    function name() external view virtual override returns (string memory) {
        return _name;
    }

    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) external view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    function approve(address to, uint256 tokenId) external virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) external virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

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

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender || owner == address(this));
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        if(_isMintedOut == false) {
            require(idStakeLockTimes[tokenId] == 0 || OGDooggiesMintedNewNew[tokenId], "NFT Cant currently be sent cause its staked");
        }
        require(ERC721.ownerOf(tokenId) == from || from == address(this), "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

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

    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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
}

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

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

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

    uint256 internal _currentIndex;
    string private _name;
    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();
    }

    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) external view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    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.addr != address(0)) {
                    return ownership;
                }
                while (true) {
                    curr--;
                    ownership = _ownerships[curr];
                    if (ownership.addr != address(0)) {
                            return ownership;
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    function name() external view virtual override returns (string memory) {
        return _name;
    }

    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) external 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())) : '';
    }

    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    function approve(address to, uint256 tokenId) external override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _approve(to, tokenId, owner);
    }

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) external virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external virtual override {
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

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

    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) 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 (safe && 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;
        }
    }

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

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    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 DooggiesSnack is ERC721A, Ownable {
    address private devOwner;
    address private whoCanMint;
    bool internal _revealed = false;
    bool internal mintEnabled = true;

    string private baseURIForNewNew = "ipfs://QmUtKHbiThL5FikUuUgvLrH7HdNzQ9KmfUtDsE6o3hUKTp";
    string private baseExt = "";

    constructor(address owner_, address whoCanMint_) ERC721A("DooggiesSnack", "DooggiesSnack") { // not the real name ;)
        devOwner = owner_;
        whoCanMint = whoCanMint_;
    }

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

    function mint(uint256 numberOfTokens, address user) external {
        require(mintEnabled, "Cant mint yet");
        require(whoCanMint == msg.sender, "You cant mint");
        require(
            numberOfTokens + totalSupply() <= 5000,
            "Not enough supply"
        );
        _safeMint(user, numberOfTokens);
    }

    function reveal(bool revealed, string calldata _baseURI) external {
        require(msg.sender == devOwner, "You are not the owner");
        _revealed = revealed;
        baseURIForNewNew = _baseURI;
    }

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

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

    function toggleMint() external {
        require(msg.sender == devOwner, "You are not the owner");
        mintEnabled = !mintEnabled;
    }

    function isMintEnabled() external view returns (bool) {
        return mintEnabled;
    }

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

contract WrapYourDooggies is ERC721, ReentrancyGuard, IERC721Receiver, IERC1155Receiver, Ownable {
    address private devOwner;
    bool private lockMintForever = false;
    uint private totalAmount = 0;

    uint constant private dayCount = 60 days;
    uint constant private mintOutLock = 365 days;
    uint private whenDidWeDeploy;

    string private baseURIForOGDooggies = "ipfs://QmSRPvb4E4oT8J73QoWGyvdFizWzpMkkSozAnCEMjT5K7G/";
    string private baseExt = "";

    DooggiesSnack dooggiesSnack; // Hmm you curious what this could be if youre a reader of the github???

    constructor(address dooggiesContract) ERC721("Dooggies", "Dooggies", dooggiesContract) {
        devOwner = address(0xf8c45B2375a574BecA18224C47353969C044a9EC);
        dooggiesSnack = new DooggiesSnack(devOwner, address(this));
        whenDidWeDeploy = block.timestamp;
    }

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

    function wrapMany(uint[] calldata tokenIds) nonReentrant external {
        require(
            dooggies.isApprovedForAll(msg.sender, address(this)),
            "You need approval"
        );
        require(tokenIds.length > 0, "Must have something");

        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, "");

            for(uint i = 0; i < count; i++) {
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                safeTransferFrom(address(this), msg.sender, tokenIds[i]);
            }
        }
    }

    function unwrapMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that");
                safeTransferFrom(msg.sender, address(this), tokenIds[i]);
            }

            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(address(this), msg.sender, tokenIds, qty, "");
        }
    }

    function wrapManyAndStake(uint[] calldata tokenIds) nonReentrant external {
        require(
            dooggies.isApprovedForAll(msg.sender, address(this)),
            "You need approval"
        );
        require(tokenIds.length > 0, "Must have something");
        require(_isMintedOut == false, "Already minted out");

        unchecked {
            uint count = tokenIds.length;
            uint[] memory qty = new uint[](count);
            for(uint i = 0; i < count; i++) {
                qty[i] = 1;
            }

            dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, "");

            for(uint i = 0; i < count; i++) {
                require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked");
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                _owners[tokenIds[i]] = msg.sender;
                idStakeLockTimes[tokenIds[i]] = block.timestamp;
                // lol so it shows up on Opensea xD
                // since we want to funnel people here on first wrap :)
                // This will put it in the users wallet on opensea but not allow
                // them to sell since they dont own the asset
                emit Transfer(msg.sender, address(this), tokenIds[i]);
            }
        }
    }

    function stakeMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        require(_isMintedOut == false, "Already minted out");
        unchecked {
            uint count = tokenIds.length;
            for(uint i = 0; i < count; i++) {
                require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that");
                safeTransferFrom(msg.sender, address(this), tokenIds[i]);
            }

            for(uint i = 0; i < count; i++) {
                require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked");
                require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                _owners[tokenIds[i]] = msg.sender;
                idStakeLockTimes[tokenIds[i]] = block.timestamp;
            }
        }
    }

    function unStakeMany(uint[] calldata tokenIds) nonReentrant external {
        require(tokenIds.length > 0, "Must have something");
        unchecked {
            uint count = tokenIds.length;

            for(uint i = 0; i < count; i++) {
                require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that");
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once");
                require(idStakeLockTimes[tokenIds[i]] != 0, "Bruh.. this is not staked");
                idStakeLockTimes[tokenIds[i]] = 0;
                safeTransferFrom(address(this), msg.sender, tokenIds[i]);
            }
        }
    }

    function zMintNewNew(uint[] calldata tokenIds) nonReentrant external {
        require(_isMintedOut == false, "Already minted out");
        unchecked {
            uint count = tokenIds.length;
            require(count >= 2, "You need at least two dooggies to mint");

            uint amountToMint = 0;
            uint8 localCounter = 0;
            for(uint i = 0; i < count; i++) {
                require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only mint once.");
                require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that");
                if(block.timestamp - idStakeLockTimes[tokenIds[i]] >= dayCount) {
                    OGDooggiesMintedNewNew[tokenIds[i]] = true;
                    localCounter += 1;
                    if(localCounter >= 2) {
                        localCounter = 0;
                        amountToMint += 1;
                    }
                    safeTransferFrom(address(this), msg.sender, tokenIds[i]);
                }
            }
            require(amountToMint > 0, "Need to have some to mint");

            dooggiesSnack.mint(amountToMint, msg.sender);
        }
    }

    function zzMintOutMystery(uint amount) external {
        require(msg.sender == devOwner, "You are not the owner");
        
        // give people time to wrap for the mystery mint. 
        // they will always be able to wrap but not be able to mint out
        require(block.timestamp - whenDidWeDeploy >= mintOutLock);
        
        dooggiesSnack.mint(amount, msg.sender);

        if(dooggiesSnack.totalSupply() > 4999) {
            _isMintedOut = true;
        }
    }

    function zzLockMint() external {
        require(msg.sender == devOwner, "You are not the owner");
        require(lockMintForever == false, "Mint is already locked");
        lockMintForever = true;
    }

    function zzinitialise(uint256[] calldata tokenIds) external {
        require(lockMintForever == false, "You can no longer mint");
        require(msg.sender == devOwner, "You are not the owner");

        uint count = tokenIds.length;
        require(count > 0, "Must have something");
        _balances[address(this)] += count;

        emit Transfer(address(this), address(this), tokenIds[0]);

        unchecked {
            totalAmount += count;
        }

        // update the balances so that on wrapping the contract logic works
        for (uint256 i = 0; i < count; i++) {
            require(_owners[tokenIds[i]] == address(0), "You cant mint twice");
            _owners[tokenIds[i]] = address(this);
        }
    }

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

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

    function onERC721Received(address, address, uint256, bytes calldata) pure external returns(bytes4) {
        return WrapYourDooggies.onERC721Received.selector;
    }

    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) pure external returns (bytes4) {
        return WrapYourDooggies.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) pure external returns (bytes4) {
        return WrapYourDooggies.onERC1155BatchReceived.selector;
    }

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

    function setURIOG(string calldata _baseURI) external {
        require(msg.sender == devOwner, "Step off brah");
        baseURIForOGDooggies = _baseURI;
    }

    function totalSupply() external view returns (uint256) {
        return totalAmount;
    }

    function newnewAddress() external view returns (address) {
        return address(dooggiesSnack);
    }

    function timeLeftForID(uint tokenID) external view returns (uint) {
        if((block.timestamp - idStakeLockTimes[tokenID]) < dayCount) {
            return dayCount - (block.timestamp - idStakeLockTimes[tokenID]);
        } else {
            return 0;
        }
    }

    function hasIDBeenMinted(uint tokenID) external view returns (bool) {
        return OGDooggiesMintedNewNew[tokenID];
    }

    function isStaked(uint tokenID) external view returns (bool) {
        return idStakeLockTimes[tokenID] != 0 && OGDooggiesMintedNewNew[tokenID] == false;
    }

    function isMintLocked() external view returns (bool) {
        return lockMintForever;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dooggiesContract","type":"address"}],"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":"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":"uint256","name":"tokenID","type":"uint256"}],"name":"hasIDBeenMinted","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":"isMintLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"isStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newnewAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","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":[{"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":"setURIOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeMany","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":"timeLeftForID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unStakeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unwrapMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"wrapMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"wrapManyAndStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"zMintNewNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zzLockMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zzMintOutMystery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"zzinitialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000805460ff60a01b199081168255600b80549091169055600c5560e06040526036608081815290620054ad60a03980516200004491600e9160209091019062000217565b506040805160208101918290526000908190526200006591600f9162000217565b503480156200007357600080fd5b50604051620054e3380380620054e38339810160408190526200009691620002cb565b604080518082018252600880825267446f6f676769657360c01b6020808401828152855180870190965292855284015281519192918491620000dc916001919062000217565b508151620000f290600290602085019062000217565b50600080546001600160a01b0319166001600160a01b0392909216919091179055505060016009556200012c620001263390565b620001c5565b600b80546001600160a01b03191673f8c45b2375a574beca18224c47353969c044a9ec90811790915560405130906200016590620002a6565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000199573d6000803e3d6000fd5b50601080546001600160a01b0319166001600160a01b03929092169190911790555042600d556200033a565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200022590620002fd565b90600052602060002090601f01602090048101928262000249576000855562000294565b82601f106200026457805160ff191683800117855562000294565b8280016001018555821562000294579182015b828111156200029457825182559160200191906001019062000277565b50620002a2929150620002b4565b5090565b611cdc80620037d183390190565b5b80821115620002a25760008155600101620002b5565b600060208284031215620002de57600080fd5b81516001600160a01b0381168114620002f657600080fd5b9392505050565b600181811c908216806200031257607f821691505b602082108114156200033457634e487b7160e01b600052602260045260246000fd5b50919050565b613487806200034a6000396000f3fe6080604052600436106102135760003560e01c80638b4ca17811610118578063bfd97f7f116100a0578063e985e9c51161006f578063e985e9c514610709578063ef7441a414610752578063f23a6e6114610772578063f2fde38b1461079f578063fe939afc146107bf57600080fd5b8063bfd97f7f1461068a578063c1dcd138146106aa578063c87b56dd146106ca578063df10580a146106ea57600080fd5b8063a22cb465116100e7578063a22cb465146105dd578063b81ec87d146105fd578063b88d4fde1461061b578063baa51f861461063b578063bc197c811461065b57600080fd5b80638b4ca1781461055a5780638da5cb5b1461058a57806393ee670c146105a857806395d89b41146105c857600080fd5b806323b872dd1161019b57806370a082311161016a57806370a08231146104c55780637b32b19c146104e55780637e2285aa146104fa578063880cdc311461051a578063884e07411461053a57600080fd5b806323b872dd146104455780633afd48611461046557806342842e0e146104855780636352211e146104a557600080fd5b8063095ea7b3116101e2578063095ea7b3146103815780630ea2d79e146103a1578063150b7a02146103c15780631782ba911461040657806318160ddd1461042657600080fd5b806301b7bb75146102d057806301ffc9a7146102f257806306fdde0314610327578063081812fc1461034957600080fd5b366102cb57600061022c600a546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610276576040519150601f19603f3d011682016040523d82523d6000602084013e61027b565b606091505b50509050806102c85760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b3480156102dc57600080fd5b506102f06102eb366004612a22565b6107df565b005b3480156102fe57600080fd5b5061031261030d366004612a7a565b610b06565b60405190151581526020015b60405180910390f35b34801561033357600080fd5b5061033c610b58565b60405161031e9190612af6565b34801561035557600080fd5b50610369610364366004612b09565b610bea565b6040516001600160a01b03909116815260200161031e565b34801561038d57600080fd5b506102f061039c366004612b39565b610c7f565b3480156103ad57600080fd5b506102f06103bc366004612a22565b610d95565b3480156103cd57600080fd5b506103ed6103dc366004612ba5565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161031e565b34801561041257600080fd5b506102f0610421366004612b09565b610fa6565b34801561043257600080fd5b50600c545b60405190815260200161031e565b34801561045157600080fd5b506102f0610460366004612c14565b6110e9565b34801561047157600080fd5b506102f0610480366004612a22565b61111a565b34801561049157600080fd5b506102f06104a0366004612c14565b6112e9565b3480156104b157600080fd5b506103696104c0366004612b09565b611304565b3480156104d157600080fd5b506104376104e0366004612c50565b6113ca565b3480156104f157600080fd5b506102f0611450565b34801561050657600080fd5b506102f0610515366004612c6b565b6114e2565b34801561052657600080fd5b506102f0610535366004612c50565b611518565b34801561054657600080fd5b50610437610555366004612b09565b611577565b34801561056657600080fd5b50610312610575366004612b09565b60009081526006602052604090205460ff1690565b34801561059657600080fd5b50600a546001600160a01b0316610369565b3480156105b457600080fd5b506102f06105c3366004612c6b565b6115ce565b3480156105d457600080fd5b5061033c611624565b3480156105e957600080fd5b506102f06105f8366004612caf565b611633565b34801561060957600080fd5b506010546001600160a01b0316610369565b34801561062757600080fd5b506102f0610636366004612cfc565b611642565b34801561064757600080fd5b50610312610656366004612b09565b611674565b34801561066757600080fd5b506103ed610676366004612dd8565b63bc197c8160e01b98975050505050505050565b34801561069657600080fd5b506102f06106a5366004612a22565b6116a3565b3480156106b657600080fd5b506102f06106c5366004612a22565b611ab6565b3480156106d657600080fd5b5061033c6106e5366004612b09565b611c5b565b3480156106f657600080fd5b50600b54600160a01b900460ff16610312565b34801561071557600080fd5b50610312610724366004612e93565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561075e57600080fd5b506102f061076d366004612a22565b611c92565b34801561077e57600080fd5b506103ed61078d366004612ec6565b63f23a6e6160e01b9695505050505050565b3480156107ab57600080fd5b506102f06107ba366004612c50565b611edd565b3480156107cb57600080fd5b506102f06107da366004612a22565b611f53565b600260095414156108025760405162461bcd60e51b81526004016102bf90612f3e565b6002600955600054600160a01b900460ff16156108315760405162461bcd60e51b81526004016102bf90612f75565b8060028110156108925760405162461bcd60e51b815260206004820152602660248201527f596f75206e656564206174206c656173742074776f20646f6f676769657320746044820152651bc81b5a5b9d60d21b60648201526084016102bf565b60008060005b83811015610a4557600660008787848181106108b6576108b6612fa1565b602090810292909201358352508101919091526040016000205460ff161561092c5760405162461bcd60e51b815260206004820152602360248201527f427275682e2e2074686973204e46542063616e206f6e6c79206d696e74206f6e60448201526231b29760e91b60648201526084016102bf565b6003600087878481811061094257610942612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146109835760405162461bcd60e51b81526004016102bf90612fb7565b624f1a006005600088888581811061099d5761099d612fa1565b90506020020135815260200190815260200160002054420310610a3d576001600660008888858181106109d2576109d2612fa1565b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555060018201915060028260ff1610610a1a57600091506001830192505b610a3d3033888885818110610a3157610a31612fa1565b905060200201356112e9565b600101610898565b5060008211610a965760405162461bcd60e51b815260206004820152601960248201527f4e65656420746f206861766520736f6d6520746f206d696e740000000000000060448201526064016102bf565b6010546040516394bf804d60e01b8152600481018490523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b5050600160095550505050505050565b60006001600160e01b031982166380ac58cd60e01b1480610b3757506001600160e01b03198216635b5e139f60e01b145b80610b5257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610b6790612fee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390612fee565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610c635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b506000908152600760205260409020546001600160a01b031690565b6000610c8a82611304565b9050806001600160a01b0316836001600160a01b03161415610cf85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016102bf565b336001600160a01b0382161480610d145750610d148133610724565b610d865760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016102bf565b610d9083836121d0565b505050565b600b54600160a01b900460ff1615610de85760405162461bcd60e51b8152602060048201526016602482015275165bdd4818d85b881b9bc81b1bdb99d95c881b5a5b9d60521b60448201526064016102bf565b600b546001600160a01b03163314610e125760405162461bcd60e51b81526004016102bf90613029565b8080610e305760405162461bcd60e51b81526004016102bf90613058565b3060009081526004602052604081208054839290610e4f90849061309b565b9091555083905082600081610e6657610e66612fa1565b90506020020135306001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600c80548201905560005b81811015610fa0576000600381868685818110610ed757610ed7612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031614610f3d5760405162461bcd60e51b8152602060048201526013602482015272596f752063616e74206d696e7420747769636560681b60448201526064016102bf565b3060036000868685818110610f5457610f54612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508080610f98906130b3565b915050610eb8565b50505050565b600b546001600160a01b03163314610fd05760405162461bcd60e51b81526004016102bf90613029565b6301e13380600d5442610fe391906130ce565b1015610fee57600080fd5b6010546040516394bf804d60e01b8152600481018390523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50505050611387601060009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906130e5565b11156110e6576000805460ff60a01b1916600160a01b1790555b50565b6110f3338261223e565b61110f5760405162461bcd60e51b81526004016102bf906130fe565b610d90838383612348565b6002600954141561113d5760405162461bcd60e51b81526004016102bf90612f3e565b60026009558061115f5760405162461bcd60e51b81526004016102bf90613058565b8060005b818110156112de576003600085858481811061118157611181612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146111c25760405162461bcd60e51b81526004016102bf90612fb7565b600660008585848181106111d8576111d8612fa1565b602090810292909201358352508101919091526040016000205460ff16156112125760405162461bcd60e51b81526004016102bf9061314f565b6005600085858481811061122857611228612fa1565b905060200201358152602001908152602001600020546000141561128e5760405162461bcd60e51b815260206004820152601960248201527f427275682e2e2074686973206973206e6f74207374616b65640000000000000060448201526064016102bf565b6000600560008686858181106112a6576112a6612fa1565b905060200201358152602001908152602001600020819055506112d63033868685818110610a3157610a31612fa1565b600101611163565b505060016009555050565b610d9083838360405180602001604052806000815250611642565b6000818152600360205260408120546001600160a01b03168061137b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016102bf565b600054600160a01b900460ff161580156113a2575060008381526005602052604090205415155b80156113bd575060008381526006602052604090205460ff16155b15610b5257503092915050565b60006001600160a01b0382166114345760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016102bf565b506001600160a01b031660009081526004602052604090205490565b600b546001600160a01b0316331461147a5760405162461bcd60e51b81526004016102bf90613029565b600b54600160a01b900460ff16156114cd5760405162461bcd60e51b8152602060048201526016602482015275135a5b9d081a5cc8185b1c9958591e481b1bd8dad95960521b60448201526064016102bf565b600b805460ff60a01b1916600160a01b179055565b600b546001600160a01b0316331461150c5760405162461bcd60e51b81526004016102bf90613029565b610d90600f838361293d565b600b546001600160a01b031633146115425760405162461bcd60e51b81526004016102bf90613029565b6001600160a01b03811661155557600080fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260056020526040812054624f1a009061159590426130ce565b10156115c1576000828152600560205260409020546115b490426130ce565b610b5290624f1a006130ce565b506000919050565b919050565b600b546001600160a01b031633146116185760405162461bcd60e51b815260206004820152600d60248201526c0a6e8cae040decccc40c4e4c2d609b1b60448201526064016102bf565b610d90600e838361293d565b606060028054610b6790612fee565b61163e338383612591565b5050565b61164c338361223e565b6116685760405162461bcd60e51b81526004016102bf906130fe565b610fa084848484612660565b60008181526005602052604081205415801590610b5257505060009081526006602052604090205460ff161590565b600260095414156116c65760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173d9190613192565b61177d5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b8061179a5760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff16156117c45760405162461bcd60e51b81526004016102bf90612f75565b8060008167ffffffffffffffff8111156117e0576117e0612ce6565b604051908082528060200260200182016040528015611809578160200160208202803683370190505b50905060005b8281101561183e57600182828151811061182b5761182b612fa1565b602090810291909101015260010161180f565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d69061187790339030908990899088906004016131af565b600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b5050505060005b82811015611aaa57600560008686848181106118ca576118ca612fa1565b905060200201358152602001908152602001600020546000146119285760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b61194985858381811061193d5761193d612fa1565b90506020020135611304565b6001600160a01b0316306001600160a01b0316146119795760405162461bcd60e51b81526004016102bf90613263565b6006600086868481811061198f5761198f612fa1565b602090810292909201358352508101919091526040016000205460ff16156119c95760405162461bcd60e51b81526004016102bf9061314f565b33600360008787858181106119e0576119e0612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055504260056000878785818110611a3057611a30612fa1565b90506020020135815260200190815260200160002081905550848482818110611a5b57611a5b612fa1565b90506020020135306001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46001016118ac565b50506001600955505050565b60026009541415611ad95760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611afb5760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611b1757611b17612ce6565b604051908082528060200260200182016040528015611b40578160200160208202803683370190505b50905060005b82811015611bb257611b6385858381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b031614611b935760405162461bcd60e51b81526004016102bf90612fb7565b611baa3330878785818110610a3157610a31612fa1565b600101611b46565b5060005b82811015611be5576001828281518110611bd257611bd2612fa1565b6020908102919091010152600101611bb6565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611c1e90309033908990899088906004016131af565b600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50506001600955505050505050565b6060600e611c6883612693565b600f604051602001611c7c93929190613334565b6040516020818303038152906040529050919050565b60026009541415611cb55760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2c9190613192565b611d6c5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b80611d895760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611da557611da5612ce6565b604051908082528060200260200182016040528015611dce578160200160208202803683370190505b50905060005b82811015611e03576001828281518110611df057611df0612fa1565b6020908102919091010152600101611dd4565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611e3c90339030908990899088906004016131af565b600060405180830381600087803b158015611e5657600080fd5b505af1158015611e6a573d6000803e3d6000fd5b5050505060005b82811015611aaa57611e8e85858381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b031614611ebe5760405162461bcd60e51b81526004016102bf90613263565b611ed53033878785818110610a3157610a31612fa1565b600101611e71565b611ee5612791565b6001600160a01b038116611f4a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102bf565b6110e6816127ed565b60026009541415611f765760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611f985760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff1615611fc25760405162461bcd60e51b81526004016102bf90612f75565b8060005b8181101561203257611fe384848381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b0316146120135760405162461bcd60e51b81526004016102bf90612fb7565b61202a3330868685818110610a3157610a31612fa1565b600101611fc6565b5060005b818110156112de576005600085858481811061205457612054612fa1565b905060200201358152602001908152602001600020546000146120b25760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b6120c784848381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b0316146120f75760405162461bcd60e51b81526004016102bf90613263565b6006600085858481811061210d5761210d612fa1565b602090810292909201358352508101919091526040016000205460ff16156121475760405162461bcd60e51b81526004016102bf9061314f565b336003600086868581811061215e5761215e612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555042600560008686858181106121ae576121ae612fa1565b6020908102929092013583525081019190915260400160002055600101612036565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061220582611304565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166122b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b60006122c283611304565b9050806001600160a01b0316846001600160a01b0316148061230957506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b8061232d5750836001600160a01b031661232284610bea565b6001600160a01b0316145b8061234057506001600160a01b03811630145b949350505050565b600054600160a01b900460ff166123e2576000818152600560205260409020541580612382575060008181526006602052604090205460ff165b6123e25760405162461bcd60e51b815260206004820152602b60248201527f4e46542043616e742063757272656e746c792062652073656e7420636175736560448201526a081a5d1cc81cdd185ad95960aa1b60648201526084016102bf565b826001600160a01b03166123f582611304565b6001600160a01b0316148061241257506001600160a01b03831630145b61246c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016102bf565b6001600160a01b0382166124ce5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016102bf565b6124d96000826121d0565b6001600160a01b03831660009081526004602052604081208054600192906125029084906130ce565b90915550506001600160a01b038216600090815260046020526040812080546001929061253090849061309b565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b031614156125f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016102bf565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61266b848484612348565b6126778484848461283f565b610fa05760405162461bcd60e51b81526004016102bf90613367565b6060816126b75750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126e157806126cb816130b3565b91506126da9050600a836133cf565b91506126bb565b60008167ffffffffffffffff8111156126fc576126fc612ce6565b6040519080825280601f01601f191660200182016040528015612726576020820181803683370190505b5090505b84156123405761273b6001836130ce565b9150612748600a866133e3565b61275390603061309b565b60f81b81838151811061276857612768612fa1565b60200101906001600160f81b031916908160001a90535061278a600a866133cf565b945061272a565b600a546001600160a01b031633146127eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bf565b565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561293257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128839033908990889088906004016133f7565b6020604051808303816000875af19250505080156128be575060408051601f3d908101601f191682019092526128bb91810190613434565b60015b612918573d8080156128ec576040519150601f19603f3d011682016040523d82523d6000602084013e6128f1565b606091505b5080516129105760405162461bcd60e51b81526004016102bf90613367565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612340565b506001949350505050565b82805461294990612fee565b90600052602060002090601f01602090048101928261296b57600085556129b1565b82601f106129845782800160ff198235161785556129b1565b828001600101855582156129b1579182015b828111156129b1578235825591602001919060010190612996565b506129bd9291506129c1565b5090565b5b808211156129bd57600081556001016129c2565b60008083601f8401126129e857600080fd5b50813567ffffffffffffffff811115612a0057600080fd5b6020830191508360208260051b8501011115612a1b57600080fd5b9250929050565b60008060208385031215612a3557600080fd5b823567ffffffffffffffff811115612a4c57600080fd5b612a58858286016129d6565b90969095509350505050565b6001600160e01b0319811681146110e657600080fd5b600060208284031215612a8c57600080fd5b8135612a9781612a64565b9392505050565b60005b83811015612ab9578181015183820152602001612aa1565b83811115610fa05750506000910152565b60008151808452612ae2816020860160208601612a9e565b601f01601f19169290920160200192915050565b602081526000612a976020830184612aca565b600060208284031215612b1b57600080fd5b5035919050565b80356001600160a01b03811681146115c957600080fd5b60008060408385031215612b4c57600080fd5b612b5583612b22565b946020939093013593505050565b60008083601f840112612b7557600080fd5b50813567ffffffffffffffff811115612b8d57600080fd5b602083019150836020828501011115612a1b57600080fd5b600080600080600060808688031215612bbd57600080fd5b612bc686612b22565b9450612bd460208701612b22565b935060408601359250606086013567ffffffffffffffff811115612bf757600080fd5b612c0388828901612b63565b969995985093965092949392505050565b600080600060608486031215612c2957600080fd5b612c3284612b22565b9250612c4060208501612b22565b9150604084013590509250925092565b600060208284031215612c6257600080fd5b612a9782612b22565b60008060208385031215612c7e57600080fd5b823567ffffffffffffffff811115612c9557600080fd5b612a5885828601612b63565b80151581146110e657600080fd5b60008060408385031215612cc257600080fd5b612ccb83612b22565b91506020830135612cdb81612ca1565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215612d1257600080fd5b612d1b85612b22565b9350612d2960208601612b22565b925060408501359150606085013567ffffffffffffffff80821115612d4d57600080fd5b818701915087601f830112612d6157600080fd5b813581811115612d7357612d73612ce6565b604051601f8201601f19908116603f01168101908382118183101715612d9b57612d9b612ce6565b816040528281528a6020848701011115612db457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060008060008060008060a0898b031215612df457600080fd5b612dfd89612b22565b9750612e0b60208a01612b22565b9650604089013567ffffffffffffffff80821115612e2857600080fd5b612e348c838d016129d6565b909850965060608b0135915080821115612e4d57600080fd5b612e598c838d016129d6565b909650945060808b0135915080821115612e7257600080fd5b50612e7f8b828c01612b63565b999c989b5096995094979396929594505050565b60008060408385031215612ea657600080fd5b612eaf83612b22565b9150612ebd60208401612b22565b90509250929050565b60008060008060008060a08789031215612edf57600080fd5b612ee887612b22565b9550612ef660208801612b22565b94506040870135935060608701359250608087013567ffffffffffffffff811115612f2057600080fd5b612f2c89828a01612b63565b979a9699509497509295939492505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260129082015271105b1c9958591e481b5a5b9d1959081bdd5d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526018908201527f427275682e2e20796f7520646f6e74206f776e20746861740000000000000000604082015260600190565b600181811c9082168061300257607f821691505b6020821081141561302357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b6020808252601390820152724d757374206861766520736f6d657468696e6760681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156130ae576130ae613085565b500190565b60006000198214156130c7576130c7613085565b5060010190565b6000828210156130e0576130e0613085565b500390565b6000602082840312156130f757600080fd5b5051919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526023908201527f427275682e2e2074686973204e46542063616e206f6e6c79207374616b65206f6040820152626e636560e81b606082015260800190565b6000602082840312156131a457600080fd5b8151612a9781612ca1565b6001600160a01b03868116825285811660208084019190915260a0604084018190528301859052600091906001600160fb1b038611156131ee57600080fd5b8560051b9150818760c0860137600091840160c08181018481528683039091016060870152865190819052828701939160e001905b808310156132435784518252938301936001929092019190830190613223565b50858103608087015260008152602081019b9a5050505050505050505050565b60208082526017908201527f427275682e2e20776520646f6e74206f776e2074686174000000000000000000604082015260600190565b8054600090600181811c90808316806132b457607f831692505b60208084108214156132d657634e487b7160e01b600052602260045260246000fd5b8180156132ea57600181146132fb57613328565b60ff19861689528489019650613328565b60008881526020902060005b868110156133205781548b820152908501908301613307565b505084890196505b50505050505092915050565b6000613340828661329a565b8451613350818360208901612a9e565b61335c8183018661329a565b979650505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826133de576133de6133b9565b500490565b6000826133f2576133f26133b9565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061342a90830184612aca565b9695505050505050565b60006020828403121561344657600080fd5b8151612a9781612a6456fea264697066735822122067d00aaeffd93c000a5672aba6960bd2550f7b6c31e6cc840047eb000c8be9cf64736f6c634300080a00336009805461ffff60a01b1916600160a81b17905560e0604052603560808181529062001ca760a03980516200003d91600a9160209091019062000184565b506040805160208101918290526000908190526200005e91600b9162000184565b503480156200006c57600080fd5b5060405162001cdc38038062001cdc8339810160408190526200008f9162000247565b604080518082018252600d8082526c446f6f6767696573536e61636b60981b602080840182815285518087019096529285528401528151919291620000d79160019162000184565b508051620000ed90600290602084019062000184565b5050600160005550620001003362000132565b600880546001600160a01b039384166001600160a01b03199182161790915560098054929093169116179055620002bc565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000192906200027f565b90600052602060002090601f016020900481019282620001b6576000855562000201565b82601f10620001d157805160ff191683800117855562000201565b8280016001018555821562000201579182015b8281111562000201578251825591602001919060010190620001e4565b506200020f92915062000213565b5090565b5b808211156200020f576000815560010162000214565b80516001600160a01b03811681146200024257600080fd5b919050565b600080604083850312156200025b57600080fd5b62000266836200022a565b915062000276602084016200022a565b90509250929050565b600181811c908216806200029457607f821691505b60208210811415620002b657634e487b7160e01b600052602260045260246000fd5b50919050565b6119db80620002cc6000396000f3fe6080604052600436106101395760003560e01c8063880cdc31116100ab578063a22cb4651161006f578063a22cb4651461041c578063b88d4fde1461043c578063c87b56dd1461045c578063d3dd5fe01461047c578063e985e9c514610491578063f2fde38b146104da57600080fd5b8063880cdc31146103895780638da5cb5b146103a957806394bf804d146103c757806395d89b41146103e7578063a101ff6d146103fc57600080fd5b806323b872dd116100fd57806323b872dd146102ca578063346de50a146102ea57806342842e0e146103095780636352211e1461032957806370a08231146103495780637e2285aa1461036957600080fd5b806301ffc9a7146101f657806306fdde031461022b578063081812fc1461024d578063095ea7b31461028557806318160ddd146102a757600080fd5b366101f15760006101526007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d806000811461019c576040519150601f19603f3d011682016040523d82523d6000602084013e6101a1565b606091505b50509050806101ee5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b34801561020257600080fd5b506102166102113660046113b4565b6104fa565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b5061024061054c565b6040516102229190611430565b34801561025957600080fd5b5061026d610268366004611443565b6105de565b6040516001600160a01b039091168152602001610222565b34801561029157600080fd5b506102a56102a0366004611473565b610622565b005b3480156102b357600080fd5b50600054600019015b604051908152602001610222565b3480156102d657600080fd5b506102a56102e536600461149d565b6106b0565b3480156102f657600080fd5b50600954600160a81b900460ff16610216565b34801561031557600080fd5b506102a561032436600461149d565b6106bb565b34801561033557600080fd5b5061026d610344366004611443565b6106d6565b34801561035557600080fd5b506102bc6103643660046114d9565b6106e8565b34801561037557600080fd5b506102a561038436600461153d565b610737565b34801561039557600080fd5b506102a56103a43660046114d9565b61076d565b3480156103b557600080fd5b506007546001600160a01b031661026d565b3480156103d357600080fd5b506102a56103e236600461157f565b6107cc565b3480156103f357600080fd5b506102406108c9565b34801561040857600080fd5b506102a56104173660046115bb565b6108d8565b34801561042857600080fd5b506102a561043736600461160e565b61092b565b34801561044857600080fd5b506102a561045736600461164e565b6109c1565b34801561046857600080fd5b50610240610477366004611443565b610a0c565b34801561048857600080fd5b506102a5610a6d565b34801561049d57600080fd5b506102166104ac36600461172a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156104e657600080fd5b506102a56104f53660046114d9565b610ab8565b60006001600160e01b031982166380ac58cd60e01b148061052b57506001600160e01b03198216635b5e139f60e01b145b8061054657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461055b90611754565b80601f016020809104026020016040519081016040528092919081815260200182805461058790611754565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b5050505050905090565b60006105e982610b31565b610606576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061062d826106d6565b9050806001600160a01b0316836001600160a01b031614156106625760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610682575061068081336104ac565b155b156106a0576040516367d9dca160e11b815260040160405180910390fd5b6106ab838383610b47565b505050565b6106ab838383610ba3565b6106ab838383604051806020016040528060008152506109c1565b60006106e182610d92565b5192915050565b60006001600160a01b038216610711576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107615760405162461bcd60e51b81526004016101e59061178f565b6106ab600b8383611305565b6008546001600160a01b031633146107975760405162461bcd60e51b81526004016101e59061178f565b6001600160a01b0381166107aa57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600160a81b900460ff166108155760405162461bcd60e51b815260206004820152600d60248201526c10d85b9d081b5a5b9d081e595d609a1b60448201526064016101e5565b6009546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820152600d60248201526c165bdd4818d85b9d081b5a5b9d609a1b60448201526064016101e5565b61138861086f6000546000190190565b61087990846117d4565b11156108bb5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101e5565b6108c58183610e7b565b5050565b60606002805461055b90611754565b6008546001600160a01b031633146109025760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a01b1916600160a01b85151502179055610925600a8383611305565b50505050565b6001600160a01b0382163314156109555760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109cc848484610ba3565b6001600160a01b0383163b151580156109ee57506109ec84848484610e95565b155b15610925576040516368d2bf6b60e11b815260040160405180910390fd5b600954606090600160a01b900460ff1615610a5657600a610a2c83610f7e565b600b604051602001610a4093929190611886565b6040516020818303038152906040529050919050565b600a604051602001610a4091906118b9565b919050565b6008546001600160a01b03163314610a975760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610ac061107c565b6001600160a01b038116610b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101e5565b610b2e816110d8565b50565b6000816001111580156105465750506000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610bae82610d92565b9050836001600160a01b031681600001516001600160a01b031614610be55760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610c035750610c0385336104ac565b80610c1e575033610c13846105de565b6001600160a01b0316145b905080610c3e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610c6557604051633a954ecd60e21b815260040160405180910390fd5b610c7160008487610b47565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610d47576000548214610d47578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051808201909152600080825260208201528180600111158015610db9575060005481105b15610e62576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e0b579392505050565b50600019016000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e5d579392505050565b610e0b565b604051636f96cda160e11b815260040160405180910390fd5b6108c582826040518060200160405280600081525061112a565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610eca9033908990889088906004016118c5565b6020604051808303816000875af1925050508015610f05575060408051601f3d908101601f19168201909252610f0291810190611902565b60015b610f60573d808015610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b508051610f58576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610fa25750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fcc5780610fb68161191f565b9150610fc59050600a83611950565b9150610fa6565b60008167ffffffffffffffff811115610fe757610fe7611638565b6040519080825280601f01601f191660200182016040528015611011576020820181803683370190505b5090505b8415610f7657611026600183611964565b9150611033600a8661197b565b61103e9060306117d4565b60f81b8183815181106110535761105361198f565b60200101906001600160f81b031916908160001a905350611075600a86611950565b9450611015565b6007546001600160a01b031633146110d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101e5565b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106ab83838360016000546001600160a01b03851661115b57604051622e076360e81b815260040160405180910390fd5b836111795760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600390925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561122b57506001600160a01b0387163b15155b156112b4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461127c6000888480600101955088610e95565b611299576040516368d2bf6b60e11b815260040160405180910390fd5b808214156112315782600054146112af57600080fd5b6112fa565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156112b5575b506000555050505050565b82805461131190611754565b90600052602060002090601f0160209004810192826113335760008555611379565b82601f1061134c5782800160ff19823516178555611379565b82800160010185558215611379579182015b8281111561137957823582559160200191906001019061135e565b50611385929150611389565b5090565b5b80821115611385576000815560010161138a565b6001600160e01b031981168114610b2e57600080fd5b6000602082840312156113c657600080fd5b81356113d18161139e565b9392505050565b60005b838110156113f35781810151838201526020016113db565b838111156109255750506000910152565b6000815180845261141c8160208601602086016113d8565b601f01601f19169290920160200192915050565b6020815260006113d16020830184611404565b60006020828403121561145557600080fd5b5035919050565b80356001600160a01b0381168114610a6857600080fd5b6000806040838503121561148657600080fd5b61148f8361145c565b946020939093013593505050565b6000806000606084860312156114b257600080fd5b6114bb8461145c565b92506114c96020850161145c565b9150604084013590509250925092565b6000602082840312156114eb57600080fd5b6113d18261145c565b60008083601f84011261150657600080fd5b50813567ffffffffffffffff81111561151e57600080fd5b60208301915083602082850101111561153657600080fd5b9250929050565b6000806020838503121561155057600080fd5b823567ffffffffffffffff81111561156757600080fd5b611573858286016114f4565b90969095509350505050565b6000806040838503121561159257600080fd5b823591506115a26020840161145c565b90509250929050565b80358015158114610a6857600080fd5b6000806000604084860312156115d057600080fd5b6115d9846115ab565b9250602084013567ffffffffffffffff8111156115f557600080fd5b611601868287016114f4565b9497909650939450505050565b6000806040838503121561162157600080fd5b61162a8361145c565b91506115a2602084016115ab565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561166457600080fd5b61166d8561145c565b935061167b6020860161145c565b925060408501359150606085013567ffffffffffffffff8082111561169f57600080fd5b818701915087601f8301126116b357600080fd5b8135818111156116c5576116c5611638565b604051601f8201601f19908116603f011681019083821181831017156116ed576116ed611638565b816040528281528a602084870101111561170657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561173d57600080fd5b6117468361145c565b91506115a26020840161145c565b600181811c9082168061176857607f821691505b6020821081141561178957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156117e7576117e76117be565b500190565b8054600090600181811c908083168061180657607f831692505b602080841082141561182857634e487b7160e01b600052602260045260246000fd5b81801561183c576001811461184d5761187a565b60ff1986168952848901965061187a565b60008881526020902060005b868110156118725781548b820152908501908301611859565b505084890196505b50505050505092915050565b600061189282866117ec565b84516118a28183602089016113d8565b6118ae818301866117ec565b979650505050505050565b60006113d182846117ec565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118f890830184611404565b9695505050505050565b60006020828403121561191457600080fd5b81516113d18161139e565b6000600019821415611933576119336117be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261195f5761195f61193a565b500490565b600082821015611976576119766117be565b500390565b60008261198a5761198a61193a565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af64736f6c634300080a0033697066733a2f2f516d55744b48626954684c3546696b55755567764c72483748644e7a51394b6d665574447345366f3368554b5470697066733a2f2f516d53525076623445346f54384a3733516f574779766446697a577a704d6b6b536f7a416e43454d6a54354b37472f000000000000000000000000495f947276749ce646f68ac8c248420045cb7b5e

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638b4ca17811610118578063bfd97f7f116100a0578063e985e9c51161006f578063e985e9c514610709578063ef7441a414610752578063f23a6e6114610772578063f2fde38b1461079f578063fe939afc146107bf57600080fd5b8063bfd97f7f1461068a578063c1dcd138146106aa578063c87b56dd146106ca578063df10580a146106ea57600080fd5b8063a22cb465116100e7578063a22cb465146105dd578063b81ec87d146105fd578063b88d4fde1461061b578063baa51f861461063b578063bc197c811461065b57600080fd5b80638b4ca1781461055a5780638da5cb5b1461058a57806393ee670c146105a857806395d89b41146105c857600080fd5b806323b872dd1161019b57806370a082311161016a57806370a08231146104c55780637b32b19c146104e55780637e2285aa146104fa578063880cdc311461051a578063884e07411461053a57600080fd5b806323b872dd146104455780633afd48611461046557806342842e0e146104855780636352211e146104a557600080fd5b8063095ea7b3116101e2578063095ea7b3146103815780630ea2d79e146103a1578063150b7a02146103c15780631782ba911461040657806318160ddd1461042657600080fd5b806301b7bb75146102d057806301ffc9a7146102f257806306fdde0314610327578063081812fc1461034957600080fd5b366102cb57600061022c600a546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610276576040519150601f19603f3d011682016040523d82523d6000602084013e61027b565b606091505b50509050806102c85760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b3480156102dc57600080fd5b506102f06102eb366004612a22565b6107df565b005b3480156102fe57600080fd5b5061031261030d366004612a7a565b610b06565b60405190151581526020015b60405180910390f35b34801561033357600080fd5b5061033c610b58565b60405161031e9190612af6565b34801561035557600080fd5b50610369610364366004612b09565b610bea565b6040516001600160a01b03909116815260200161031e565b34801561038d57600080fd5b506102f061039c366004612b39565b610c7f565b3480156103ad57600080fd5b506102f06103bc366004612a22565b610d95565b3480156103cd57600080fd5b506103ed6103dc366004612ba5565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161031e565b34801561041257600080fd5b506102f0610421366004612b09565b610fa6565b34801561043257600080fd5b50600c545b60405190815260200161031e565b34801561045157600080fd5b506102f0610460366004612c14565b6110e9565b34801561047157600080fd5b506102f0610480366004612a22565b61111a565b34801561049157600080fd5b506102f06104a0366004612c14565b6112e9565b3480156104b157600080fd5b506103696104c0366004612b09565b611304565b3480156104d157600080fd5b506104376104e0366004612c50565b6113ca565b3480156104f157600080fd5b506102f0611450565b34801561050657600080fd5b506102f0610515366004612c6b565b6114e2565b34801561052657600080fd5b506102f0610535366004612c50565b611518565b34801561054657600080fd5b50610437610555366004612b09565b611577565b34801561056657600080fd5b50610312610575366004612b09565b60009081526006602052604090205460ff1690565b34801561059657600080fd5b50600a546001600160a01b0316610369565b3480156105b457600080fd5b506102f06105c3366004612c6b565b6115ce565b3480156105d457600080fd5b5061033c611624565b3480156105e957600080fd5b506102f06105f8366004612caf565b611633565b34801561060957600080fd5b506010546001600160a01b0316610369565b34801561062757600080fd5b506102f0610636366004612cfc565b611642565b34801561064757600080fd5b50610312610656366004612b09565b611674565b34801561066757600080fd5b506103ed610676366004612dd8565b63bc197c8160e01b98975050505050505050565b34801561069657600080fd5b506102f06106a5366004612a22565b6116a3565b3480156106b657600080fd5b506102f06106c5366004612a22565b611ab6565b3480156106d657600080fd5b5061033c6106e5366004612b09565b611c5b565b3480156106f657600080fd5b50600b54600160a01b900460ff16610312565b34801561071557600080fd5b50610312610724366004612e93565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561075e57600080fd5b506102f061076d366004612a22565b611c92565b34801561077e57600080fd5b506103ed61078d366004612ec6565b63f23a6e6160e01b9695505050505050565b3480156107ab57600080fd5b506102f06107ba366004612c50565b611edd565b3480156107cb57600080fd5b506102f06107da366004612a22565b611f53565b600260095414156108025760405162461bcd60e51b81526004016102bf90612f3e565b6002600955600054600160a01b900460ff16156108315760405162461bcd60e51b81526004016102bf90612f75565b8060028110156108925760405162461bcd60e51b815260206004820152602660248201527f596f75206e656564206174206c656173742074776f20646f6f676769657320746044820152651bc81b5a5b9d60d21b60648201526084016102bf565b60008060005b83811015610a4557600660008787848181106108b6576108b6612fa1565b602090810292909201358352508101919091526040016000205460ff161561092c5760405162461bcd60e51b815260206004820152602360248201527f427275682e2e2074686973204e46542063616e206f6e6c79206d696e74206f6e60448201526231b29760e91b60648201526084016102bf565b6003600087878481811061094257610942612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146109835760405162461bcd60e51b81526004016102bf90612fb7565b624f1a006005600088888581811061099d5761099d612fa1565b90506020020135815260200190815260200160002054420310610a3d576001600660008888858181106109d2576109d2612fa1565b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555060018201915060028260ff1610610a1a57600091506001830192505b610a3d3033888885818110610a3157610a31612fa1565b905060200201356112e9565b600101610898565b5060008211610a965760405162461bcd60e51b815260206004820152601960248201527f4e65656420746f206861766520736f6d6520746f206d696e740000000000000060448201526064016102bf565b6010546040516394bf804d60e01b8152600481018490523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b158015610ae257600080fd5b505af1158015610af6573d6000803e3d6000fd5b5050600160095550505050505050565b60006001600160e01b031982166380ac58cd60e01b1480610b3757506001600160e01b03198216635b5e139f60e01b145b80610b5257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060018054610b6790612fee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9390612fee565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610c635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b506000908152600760205260409020546001600160a01b031690565b6000610c8a82611304565b9050806001600160a01b0316836001600160a01b03161415610cf85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016102bf565b336001600160a01b0382161480610d145750610d148133610724565b610d865760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016102bf565b610d9083836121d0565b505050565b600b54600160a01b900460ff1615610de85760405162461bcd60e51b8152602060048201526016602482015275165bdd4818d85b881b9bc81b1bdb99d95c881b5a5b9d60521b60448201526064016102bf565b600b546001600160a01b03163314610e125760405162461bcd60e51b81526004016102bf90613029565b8080610e305760405162461bcd60e51b81526004016102bf90613058565b3060009081526004602052604081208054839290610e4f90849061309b565b9091555083905082600081610e6657610e66612fa1565b90506020020135306001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600c80548201905560005b81811015610fa0576000600381868685818110610ed757610ed7612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031614610f3d5760405162461bcd60e51b8152602060048201526013602482015272596f752063616e74206d696e7420747769636560681b60448201526064016102bf565b3060036000868685818110610f5457610f54612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508080610f98906130b3565b915050610eb8565b50505050565b600b546001600160a01b03163314610fd05760405162461bcd60e51b81526004016102bf90613029565b6301e13380600d5442610fe391906130ce565b1015610fee57600080fd5b6010546040516394bf804d60e01b8152600481018390523360248201526001600160a01b03909116906394bf804d90604401600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b50505050611387601060009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906130e5565b11156110e6576000805460ff60a01b1916600160a01b1790555b50565b6110f3338261223e565b61110f5760405162461bcd60e51b81526004016102bf906130fe565b610d90838383612348565b6002600954141561113d5760405162461bcd60e51b81526004016102bf90612f3e565b60026009558061115f5760405162461bcd60e51b81526004016102bf90613058565b8060005b818110156112de576003600085858481811061118157611181612fa1565b60209081029290920135835250810191909152604001600020546001600160a01b031633146111c25760405162461bcd60e51b81526004016102bf90612fb7565b600660008585848181106111d8576111d8612fa1565b602090810292909201358352508101919091526040016000205460ff16156112125760405162461bcd60e51b81526004016102bf9061314f565b6005600085858481811061122857611228612fa1565b905060200201358152602001908152602001600020546000141561128e5760405162461bcd60e51b815260206004820152601960248201527f427275682e2e2074686973206973206e6f74207374616b65640000000000000060448201526064016102bf565b6000600560008686858181106112a6576112a6612fa1565b905060200201358152602001908152602001600020819055506112d63033868685818110610a3157610a31612fa1565b600101611163565b505060016009555050565b610d9083838360405180602001604052806000815250611642565b6000818152600360205260408120546001600160a01b03168061137b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016102bf565b600054600160a01b900460ff161580156113a2575060008381526005602052604090205415155b80156113bd575060008381526006602052604090205460ff16155b15610b5257503092915050565b60006001600160a01b0382166114345760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016102bf565b506001600160a01b031660009081526004602052604090205490565b600b546001600160a01b0316331461147a5760405162461bcd60e51b81526004016102bf90613029565b600b54600160a01b900460ff16156114cd5760405162461bcd60e51b8152602060048201526016602482015275135a5b9d081a5cc8185b1c9958591e481b1bd8dad95960521b60448201526064016102bf565b600b805460ff60a01b1916600160a01b179055565b600b546001600160a01b0316331461150c5760405162461bcd60e51b81526004016102bf90613029565b610d90600f838361293d565b600b546001600160a01b031633146115425760405162461bcd60e51b81526004016102bf90613029565b6001600160a01b03811661155557600080fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260056020526040812054624f1a009061159590426130ce565b10156115c1576000828152600560205260409020546115b490426130ce565b610b5290624f1a006130ce565b506000919050565b919050565b600b546001600160a01b031633146116185760405162461bcd60e51b815260206004820152600d60248201526c0a6e8cae040decccc40c4e4c2d609b1b60448201526064016102bf565b610d90600e838361293d565b606060028054610b6790612fee565b61163e338383612591565b5050565b61164c338361223e565b6116685760405162461bcd60e51b81526004016102bf906130fe565b610fa084848484612660565b60008181526005602052604081205415801590610b5257505060009081526006602052604090205460ff161590565b600260095414156116c65760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173d9190613192565b61177d5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b8061179a5760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff16156117c45760405162461bcd60e51b81526004016102bf90612f75565b8060008167ffffffffffffffff8111156117e0576117e0612ce6565b604051908082528060200260200182016040528015611809578160200160208202803683370190505b50905060005b8281101561183e57600182828151811061182b5761182b612fa1565b602090810291909101015260010161180f565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d69061187790339030908990899088906004016131af565b600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b5050505060005b82811015611aaa57600560008686848181106118ca576118ca612fa1565b905060200201358152602001908152602001600020546000146119285760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b61194985858381811061193d5761193d612fa1565b90506020020135611304565b6001600160a01b0316306001600160a01b0316146119795760405162461bcd60e51b81526004016102bf90613263565b6006600086868481811061198f5761198f612fa1565b602090810292909201358352508101919091526040016000205460ff16156119c95760405162461bcd60e51b81526004016102bf9061314f565b33600360008787858181106119e0576119e0612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055504260056000878785818110611a3057611a30612fa1565b90506020020135815260200190815260200160002081905550848482818110611a5b57611a5b612fa1565b90506020020135306001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46001016118ac565b50506001600955505050565b60026009541415611ad95760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611afb5760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611b1757611b17612ce6565b604051908082528060200260200182016040528015611b40578160200160208202803683370190505b50905060005b82811015611bb257611b6385858381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b031614611b935760405162461bcd60e51b81526004016102bf90612fb7565b611baa3330878785818110610a3157610a31612fa1565b600101611b46565b5060005b82811015611be5576001828281518110611bd257611bd2612fa1565b6020908102919091010152600101611bb6565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611c1e90309033908990899088906004016131af565b600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50506001600955505050505050565b6060600e611c6883612693565b600f604051602001611c7c93929190613334565b6040516020818303038152906040529050919050565b60026009541415611cb55760405162461bcd60e51b81526004016102bf90612f3e565b600260095560005460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa158015611d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2c9190613192565b611d6c5760405162461bcd60e51b8152602060048201526011602482015270165bdd481b99595908185c1c1c9bdd985b607a1b60448201526064016102bf565b80611d895760405162461bcd60e51b81526004016102bf90613058565b8060008167ffffffffffffffff811115611da557611da5612ce6565b604051908082528060200260200182016040528015611dce578160200160208202803683370190505b50905060005b82811015611e03576001828281518110611df057611df0612fa1565b6020908102919091010152600101611dd4565b50600054604051631759616b60e11b81526001600160a01b0390911690632eb2c2d690611e3c90339030908990899088906004016131af565b600060405180830381600087803b158015611e5657600080fd5b505af1158015611e6a573d6000803e3d6000fd5b5050505060005b82811015611aaa57611e8e85858381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b031614611ebe5760405162461bcd60e51b81526004016102bf90613263565b611ed53033878785818110610a3157610a31612fa1565b600101611e71565b611ee5612791565b6001600160a01b038116611f4a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102bf565b6110e6816127ed565b60026009541415611f765760405162461bcd60e51b81526004016102bf90612f3e565b600260095580611f985760405162461bcd60e51b81526004016102bf90613058565b600054600160a01b900460ff1615611fc25760405162461bcd60e51b81526004016102bf90612f75565b8060005b8181101561203257611fe384848381811061193d5761193d612fa1565b6001600160a01b0316336001600160a01b0316146120135760405162461bcd60e51b81526004016102bf90612fb7565b61202a3330868685818110610a3157610a31612fa1565b600101611fc6565b5060005b818110156112de576005600085858481811061205457612054612fa1565b905060200201358152602001908152602001600020546000146120b25760405162461bcd60e51b8152602060048201526016602482015275151a1a5cc81a5cc8185b1c9958591e481cdd185ad95960521b60448201526064016102bf565b6120c784848381811061193d5761193d612fa1565b6001600160a01b0316306001600160a01b0316146120f75760405162461bcd60e51b81526004016102bf90613263565b6006600085858481811061210d5761210d612fa1565b602090810292909201358352508101919091526040016000205460ff16156121475760405162461bcd60e51b81526004016102bf9061314f565b336003600086868581811061215e5761215e612fa1565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555042600560008686858181106121ae576121ae612fa1565b6020908102929092013583525081019190915260400160002055600101612036565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061220582611304565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166122b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102bf565b60006122c283611304565b9050806001600160a01b0316846001600160a01b0316148061230957506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b8061232d5750836001600160a01b031661232284610bea565b6001600160a01b0316145b8061234057506001600160a01b03811630145b949350505050565b600054600160a01b900460ff166123e2576000818152600560205260409020541580612382575060008181526006602052604090205460ff165b6123e25760405162461bcd60e51b815260206004820152602b60248201527f4e46542043616e742063757272656e746c792062652073656e7420636175736560448201526a081a5d1cc81cdd185ad95960aa1b60648201526084016102bf565b826001600160a01b03166123f582611304565b6001600160a01b0316148061241257506001600160a01b03831630145b61246c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016102bf565b6001600160a01b0382166124ce5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016102bf565b6124d96000826121d0565b6001600160a01b03831660009081526004602052604081208054600192906125029084906130ce565b90915550506001600160a01b038216600090815260046020526040812080546001929061253090849061309b565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b816001600160a01b0316836001600160a01b031614156125f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016102bf565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61266b848484612348565b6126778484848461283f565b610fa05760405162461bcd60e51b81526004016102bf90613367565b6060816126b75750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126e157806126cb816130b3565b91506126da9050600a836133cf565b91506126bb565b60008167ffffffffffffffff8111156126fc576126fc612ce6565b6040519080825280601f01601f191660200182016040528015612726576020820181803683370190505b5090505b84156123405761273b6001836130ce565b9150612748600a866133e3565b61275390603061309b565b60f81b81838151811061276857612768612fa1565b60200101906001600160f81b031916908160001a90535061278a600a866133cf565b945061272a565b600a546001600160a01b031633146127eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bf565b565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561293257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128839033908990889088906004016133f7565b6020604051808303816000875af19250505080156128be575060408051601f3d908101601f191682019092526128bb91810190613434565b60015b612918573d8080156128ec576040519150601f19603f3d011682016040523d82523d6000602084013e6128f1565b606091505b5080516129105760405162461bcd60e51b81526004016102bf90613367565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612340565b506001949350505050565b82805461294990612fee565b90600052602060002090601f01602090048101928261296b57600085556129b1565b82601f106129845782800160ff198235161785556129b1565b828001600101855582156129b1579182015b828111156129b1578235825591602001919060010190612996565b506129bd9291506129c1565b5090565b5b808211156129bd57600081556001016129c2565b60008083601f8401126129e857600080fd5b50813567ffffffffffffffff811115612a0057600080fd5b6020830191508360208260051b8501011115612a1b57600080fd5b9250929050565b60008060208385031215612a3557600080fd5b823567ffffffffffffffff811115612a4c57600080fd5b612a58858286016129d6565b90969095509350505050565b6001600160e01b0319811681146110e657600080fd5b600060208284031215612a8c57600080fd5b8135612a9781612a64565b9392505050565b60005b83811015612ab9578181015183820152602001612aa1565b83811115610fa05750506000910152565b60008151808452612ae2816020860160208601612a9e565b601f01601f19169290920160200192915050565b602081526000612a976020830184612aca565b600060208284031215612b1b57600080fd5b5035919050565b80356001600160a01b03811681146115c957600080fd5b60008060408385031215612b4c57600080fd5b612b5583612b22565b946020939093013593505050565b60008083601f840112612b7557600080fd5b50813567ffffffffffffffff811115612b8d57600080fd5b602083019150836020828501011115612a1b57600080fd5b600080600080600060808688031215612bbd57600080fd5b612bc686612b22565b9450612bd460208701612b22565b935060408601359250606086013567ffffffffffffffff811115612bf757600080fd5b612c0388828901612b63565b969995985093965092949392505050565b600080600060608486031215612c2957600080fd5b612c3284612b22565b9250612c4060208501612b22565b9150604084013590509250925092565b600060208284031215612c6257600080fd5b612a9782612b22565b60008060208385031215612c7e57600080fd5b823567ffffffffffffffff811115612c9557600080fd5b612a5885828601612b63565b80151581146110e657600080fd5b60008060408385031215612cc257600080fd5b612ccb83612b22565b91506020830135612cdb81612ca1565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215612d1257600080fd5b612d1b85612b22565b9350612d2960208601612b22565b925060408501359150606085013567ffffffffffffffff80821115612d4d57600080fd5b818701915087601f830112612d6157600080fd5b813581811115612d7357612d73612ce6565b604051601f8201601f19908116603f01168101908382118183101715612d9b57612d9b612ce6565b816040528281528a6020848701011115612db457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060008060008060008060a0898b031215612df457600080fd5b612dfd89612b22565b9750612e0b60208a01612b22565b9650604089013567ffffffffffffffff80821115612e2857600080fd5b612e348c838d016129d6565b909850965060608b0135915080821115612e4d57600080fd5b612e598c838d016129d6565b909650945060808b0135915080821115612e7257600080fd5b50612e7f8b828c01612b63565b999c989b5096995094979396929594505050565b60008060408385031215612ea657600080fd5b612eaf83612b22565b9150612ebd60208401612b22565b90509250929050565b60008060008060008060a08789031215612edf57600080fd5b612ee887612b22565b9550612ef660208801612b22565b94506040870135935060608701359250608087013567ffffffffffffffff811115612f2057600080fd5b612f2c89828a01612b63565b979a9699509497509295939492505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260129082015271105b1c9958591e481b5a5b9d1959081bdd5d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526018908201527f427275682e2e20796f7520646f6e74206f776e20746861740000000000000000604082015260600190565b600181811c9082168061300257607f821691505b6020821081141561302357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b6020808252601390820152724d757374206861766520736f6d657468696e6760681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156130ae576130ae613085565b500190565b60006000198214156130c7576130c7613085565b5060010190565b6000828210156130e0576130e0613085565b500390565b6000602082840312156130f757600080fd5b5051919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526023908201527f427275682e2e2074686973204e46542063616e206f6e6c79207374616b65206f6040820152626e636560e81b606082015260800190565b6000602082840312156131a457600080fd5b8151612a9781612ca1565b6001600160a01b03868116825285811660208084019190915260a0604084018190528301859052600091906001600160fb1b038611156131ee57600080fd5b8560051b9150818760c0860137600091840160c08181018481528683039091016060870152865190819052828701939160e001905b808310156132435784518252938301936001929092019190830190613223565b50858103608087015260008152602081019b9a5050505050505050505050565b60208082526017908201527f427275682e2e20776520646f6e74206f776e2074686174000000000000000000604082015260600190565b8054600090600181811c90808316806132b457607f831692505b60208084108214156132d657634e487b7160e01b600052602260045260246000fd5b8180156132ea57600181146132fb57613328565b60ff19861689528489019650613328565b60008881526020902060005b868110156133205781548b820152908501908301613307565b505084890196505b50505050505092915050565b6000613340828661329a565b8451613350818360208901612a9e565b61335c8183018661329a565b979650505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826133de576133de6133b9565b500490565b6000826133f2576133f26133b9565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061342a90830184612aca565b9695505050505050565b60006020828403121561344657600080fd5b8151612a9781612a6456fea264697066735822122067d00aaeffd93c000a5672aba6960bd2550f7b6c31e6cc840047eb000c8be9cf64736f6c634300080a0033

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

000000000000000000000000495f947276749ce646f68ac8c248420045cb7b5e

-----Decoded View---------------
Arg [0] : dooggiesContract (address): 0x495f947276749Ce646f68AC8c248420045cb7b5e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000495f947276749ce646f68ac8c248420045cb7b5e


Deployed Bytecode Sourcemap

29827:10766:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30751:9;30774:7;6169:6;;-1:-1:-1;;;;;6169:6:0;;6096:87;30774:7;-1:-1:-1;;;;;30766:21:0;30795:9;30766:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30750:59;;;30828:4;30820:37;;;;-1:-1:-1;;;30820:37:0;;568:2:1;30820:37:0;;;550:21:1;607:2;587:18;;;580:30;-1:-1:-1;;;626:18:1;;;619:50;686:18;;30820:37:0;;;;;;;;;30739:126;29827:10766;;;;;35539:1200;;;;;;;;;;-1:-1:-1;35539:1200:0;;;;;:::i;:::-;;:::i;:::-;;10021:305;;;;;;;;;;-1:-1:-1;10021:305:0;;;;;:::i;:::-;;:::i;:::-;;;2080:14:1;;2073:22;2055:41;;2043:2;2028:18;10021:305:0;;;;;;;;10959:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12050:221::-;;;;;;;;;;-1:-1:-1;12050:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3207:32:1;;;3189:51;;3177:2;3162:18;12050:221:0;3043:203:1;11629:413:0;;;;;;;;;;-1:-1:-1;11629:413:0;;;;;:::i;:::-;;:::i;37462:749::-;;;;;;;;;;-1:-1:-1;37462:749:0;;;;;:::i;:::-;;:::i;38585:167::-;;;;;;;;;;-1:-1:-1;38585:167:0;;;;;:::i;:::-;-1:-1:-1;;;38585:167:0;;;;;;;;;;;-1:-1:-1;;;;;;4833:33:1;;;4815:52;;4803:2;4788:18;38585:167:0;4671:202:1;36747:490:0;;;;;;;;;;-1:-1:-1;36747:490:0;;;;;:::i;:::-;;:::i;39697:92::-;;;;;;;;;;-1:-1:-1;39770:11:0;;39697:92;;;5024:25:1;;;5012:2;4997:18;39697:92:0;4878:177:1;12616:286:0;;;;;;;;;;-1:-1:-1;12616:286:0;;;;;:::i;:::-;;:::i;34834:697::-;;;;;;;;;;-1:-1:-1;34834:697:0;;;;;:::i;:::-;;:::i;12910:185::-;;;;;;;;;;-1:-1:-1;12910:185:0;;;;;:::i;:::-;;:::i;10551:400::-;;;;;;;;;;-1:-1:-1;10551:400:0;;;;;:::i;:::-;;:::i;10334:209::-;;;;;;;;;;-1:-1:-1;10334:209:0;;;;;:::i;:::-;;:::i;37245:::-;;;;;;;;;;;;;:::i;38416:161::-;;;;;;;;;;-1:-1:-1;38416:161:0;;;;;:::i;:::-;;:::i;38219:189::-;;;;;;;;;;-1:-1:-1;38219:189:0;;;;;:::i;:::-;;:::i;39910:276::-;;;;;;;;;;-1:-1:-1;39910:276:0;;;;;:::i;:::-;;:::i;40194:125::-;;;;;;;;;;-1:-1:-1;40194:125:0;;;;;:::i;:::-;40256:4;40280:31;;;:22;:31;;;;;;;;;40194:125;6096:87;;;;;;;;;;-1:-1:-1;6169:6:0;;-1:-1:-1;;;;;6169:6:0;6096:87;;39527:162;;;;;;;;;;-1:-1:-1;39527:162:0;;;;;:::i;:::-;;:::i;11069:106::-;;;;;;;;;;;;;:::i;12279:157::-;;;;;;;;;;-1:-1:-1;12279:157:0;;;;;:::i;:::-;;:::i;39797:105::-;;;;;;;;;;-1:-1:-1;39880:13:0;;-1:-1:-1;;;;;39880:13:0;39797:105;;13103:328;;;;;;;;;;-1:-1:-1;13103:328:0;;;;;:::i;:::-;;:::i;40327:161::-;;;;;;;;;;-1:-1:-1;40327:161:0;;;;;:::i;:::-;;:::i;38999:263::-;;;;;;;;;;-1:-1:-1;38999:263:0;;;;;:::i;:::-;-1:-1:-1;;;38999:263:0;;;;;;;;;;;32377:1466;;;;;;;;;;-1:-1:-1;32377:1466:0;;;;;:::i;:::-;;:::i;31691:678::-;;;;;;;;;;-1:-1:-1;31691:678:0;;;;;:::i;:::-;;:::i;39270:249::-;;;;;;;;;;-1:-1:-1;39270:249:0;;;;;:::i;:::-;;:::i;40496:94::-;;;;;;;;;;-1:-1:-1;40567:15:0;;-1:-1:-1;;;40567:15:0;;;;40496:94;;12444:164;;;;;;;;;;-1:-1:-1;12444:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12565:25:0;;;12541:4;12565:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12444:164;30873:810;;;;;;;;;;-1:-1:-1;30873:810:0;;;;;:::i;:::-;;:::i;38760:231::-;;;;;;;;;;-1:-1:-1;38760:231:0;;;;;:::i;:::-;-1:-1:-1;;;38760:231:0;;;;;;;;;6331:201;;;;;;;;;;-1:-1:-1;6331:201:0;;;;;:::i;:::-;;:::i;33851:975::-;;;;;;;;;;-1:-1:-1;33851:975:0;;;;;:::i;:::-;;:::i;35539:1200::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;35627:12:::1;::::0;-1:-1:-1;;;35627:12:0;::::1;;;:21;35619:52;;;;-1:-1:-1::0;;;35619:52:0::1;;;;;;;:::i;:::-;35720:8:::0;35767:1:::1;35758:10:::0;::::1;;35750:61;;;::::0;-1:-1:-1;;;35750:61:0;;10806:2:1;35750:61:0::1;::::0;::::1;10788:21:1::0;10845:2;10825:18;;;10818:30;10884:34;10864:18;;;10857:62;-1:-1:-1;;;10935:18:1;;;10928:36;10981:19;;35750:61:0::1;10604:402:1::0;35750:61:0::1;35828:17;35864:18:::0;35905:6:::1;35901:690;35921:5;35917:1;:9;35901:690;;;35960:22;:35;35983:8;;35992:1;35983:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;35960:35:::0;;-1:-1:-1;35960:35:0;::::1;::::0;;;;;;-1:-1:-1;35960:35:0;;::::1;;:44;35952:92;;;::::0;-1:-1:-1;;;35952:92:0;;11345:2:1;35952:92:0::1;::::0;::::1;11327:21:1::0;11384:2;11364:18;;;11357:30;11423:34;11403:18;;;11396:62;-1:-1:-1;;;11474:18:1;;;11467:33;11517:19;;35952:92:0::1;11143:399:1::0;35952:92:0::1;36085:7;:20;36093:8;;36102:1;36093:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;36085:20:::0;;-1:-1:-1;36085:20:0;::::1;::::0;;;;;;-1:-1:-1;36085:20:0;;-1:-1:-1;;;;;36085:20:0::1;36071:10;:34;36063:71;;;;-1:-1:-1::0;;;36063:71:0::1;;;;;;;:::i;:::-;30075:7;36174:16;:29;36191:8;;36200:1;36191:11;;;;;;;:::i;:::-;;;;;;;36174:29;;;;;;;;;;;;36156:15;:47;:59;36153:423;;36278:4;36240:22;:35;36263:8;;36272:1;36263:11;;;;;;;:::i;:::-;;;;;;;36240:35;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;36321:1;36305:17;;;;36364:1;36348:12;:17;;;36345:133;;36409:1;36394:16;;36453:1;36437:17;;;;36345:133;36500:56;36525:4;36532:10;36544:8;;36553:1;36544:11;;;;;;;:::i;:::-;;;;;;;36500:16;:56::i;:::-;35928:3;;35901:690;;;;36628:1;36613:12;:16;36605:54;;;::::0;-1:-1:-1;;;36605:54:0;;12102:2:1;36605:54:0::1;::::0;::::1;12084:21:1::0;12141:2;12121:18;;;12114:30;12180:27;12160:18;;;12153:55;12225:18;;36605:54:0::1;11900:349:1::0;36605:54:0::1;36676:13;::::0;:44:::1;::::0;-1:-1:-1;;;36676:44:0;;::::1;::::0;::::1;12428:25:1::0;;;36709:10:0::1;12469:18:1::0;;;12462:60;-1:-1:-1;;;;;36676:13:0;;::::1;::::0;:18:::1;::::0;12401::1;;36676:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;;;;;;35539:1200:0:o;10021:305::-;10123:4;-1:-1:-1;;;;;;10160:40:0;;-1:-1:-1;;;10160:40:0;;:105;;-1:-1:-1;;;;;;;10217:48:0;;-1:-1:-1;;;10217:48:0;10160:105;:158;;;-1:-1:-1;;;;;;;;;;9144:40:0;;;10282:36;10140:178;10021:305;-1:-1:-1;;10021:305:0:o;10959:102::-;11015:13;11048:5;11041:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10959:102;:::o;12050:221::-;12126:7;13851:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13851:16:0;12146:73;;;;-1:-1:-1;;;12146:73:0;;13120:2:1;12146:73:0;;;13102:21:1;13159:2;13139:18;;;13132:30;13198:34;13178:18;;;13171:62;-1:-1:-1;;;13249:18:1;;;13242:42;13301:19;;12146:73:0;12918:408:1;12146:73:0;-1:-1:-1;12239:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;12239:24:0;;12050:221::o;11629:413::-;11712:13;11728:23;11743:7;11728:14;:23::i;:::-;11712:39;;11776:5;-1:-1:-1;;;;;11770:11:0;:2;-1:-1:-1;;;;;11770:11:0;;;11762:57;;;;-1:-1:-1;;;11762:57:0;;13533:2:1;11762:57:0;;;13515:21:1;13572:2;13552:18;;;13545:30;13611:34;13591:18;;;13584:62;-1:-1:-1;;;13662:18:1;;;13655:31;13703:19;;11762:57:0;13331:397:1;11762:57:0;5758:10;-1:-1:-1;;;;;11854:21:0;;;;:62;;-1:-1:-1;11879:37:0;11896:5;5758:10;12444:164;:::i;11879:37::-;11832:168;;;;-1:-1:-1;;;11832:168:0;;13935:2:1;11832:168:0;;;13917:21:1;13974:2;13954:18;;;13947:30;14013:34;13993:18;;;13986:62;14084:26;14064:18;;;14057:54;14128:19;;11832:168:0;13733:420:1;11832:168:0;12013:21;12022:2;12026:7;12013:8;:21::i;:::-;11701:341;11629:413;;:::o;37462:749::-;37541:15;;-1:-1:-1;;;37541:15:0;;;;:24;37533:59;;;;-1:-1:-1;;;37533:59:0;;14360:2:1;37533:59:0;;;14342:21:1;14399:2;14379:18;;;14372:30;-1:-1:-1;;;14418:18:1;;;14411:52;14480:18;;37533:59:0;14158:346:1;37533:59:0;37625:8;;-1:-1:-1;;;;;37625:8:0;37611:10;:22;37603:56;;;;-1:-1:-1;;;37603:56:0;;;;;;;:::i;:::-;37685:8;37719:9;37711:41;;;;-1:-1:-1;;;37711:41:0;;;;;;;:::i;:::-;37781:4;37763:24;;;;:9;:24;;;;;:33;;37791:5;;37763:24;:33;;37791:5;;37763:33;:::i;:::-;;;;-1:-1:-1;37853:8:0;;-1:-1:-1;37853:8:0;37862:1;37853:11;;;;;:::i;:::-;;;;;;;37846:4;-1:-1:-1;;;;;37814:51:0;37831:4;-1:-1:-1;;;;;37814:51:0;;;;;;;;;;;37903:11;:20;;;;;;:11;38024:180;38048:5;38044:1;:9;38024:180;;;38115:1;38083:7;38115:1;38091:8;;38100:1;38091:11;;;;;;;:::i;:::-;;;;;;;;;;38083:20;;-1:-1:-1;38083:20:0;;;;;;;;-1:-1:-1;38083:20:0;;-1:-1:-1;;;;;38083:20:0;:34;38075:66;;;;-1:-1:-1;;;38075:66:0;;15674:2:1;38075:66:0;;;15656:21:1;15713:2;15693:18;;;15686:30;-1:-1:-1;;;15732:18:1;;;15725:49;15791:18;;38075:66:0;15472:343:1;38075:66:0;38187:4;38156:7;:20;38164:8;;38173:1;38164:11;;;;;;;:::i;:::-;;;;;;;38156:20;;;;;;;;;;;;:36;;;;;-1:-1:-1;;;;;38156:36:0;;;;;-1:-1:-1;;;;;38156:36:0;;;;;;38055:3;;;;;:::i;:::-;;;;38024:180;;;;37522:689;37462:749;;:::o;36747:490::-;36828:8;;-1:-1:-1;;;;;36828:8:0;36814:10;:22;36806:56;;;;-1:-1:-1;;;36806:56:0;;;;;;;:::i;:::-;30125:8;37042:15;;37024;:33;;;;:::i;:::-;:48;;37016:57;;;;;;37094:13;;:38;;-1:-1:-1;;;37094:38:0;;;;;12428:25:1;;;37121:10:0;12469:18:1;;;12462:60;-1:-1:-1;;;;;37094:13:0;;;;:18;;12401::1;;37094:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37178:4;37148:13;;;;;;;;;-1:-1:-1;;;;;37148:13:0;-1:-1:-1;;;;;37148:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;37145:85;;;37199:12;:19;;-1:-1:-1;;;;37199:19:0;-1:-1:-1;;;37199:19:0;;;37145:85;36747:490;:::o;12616:286::-;12760:41;5758:10;12793:7;12760:18;:41::i;:::-;12752:103;;;;-1:-1:-1;;;12752:103:0;;;;;;;:::i;:::-;12866:28;12876:4;12882:2;12886:7;12866:9;:28::i;34834:697::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;34922:19;34914:51:::1;;;;-1:-1:-1::0;;;34914:51:0::1;;;;;;;:::i;:::-;35014:8:::0;35001:10:::1;35046:467;35066:5;35062:1;:9;35046:467;;;35119:7;:20;35127:8;;35136:1;35127:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;35119:20:::0;;-1:-1:-1;35119:20:0;::::1;::::0;;;;;;-1:-1:-1;35119:20:0;;-1:-1:-1;;;;;35119:20:0::1;35105:10;:34;35097:71;;;;-1:-1:-1::0;;;35097:71:0::1;;;;;;;:::i;:::-;35195:22;:35;35218:8;;35227:1;35218:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;35195:35:::0;;-1:-1:-1;35195:35:0;::::1;::::0;;;;;;-1:-1:-1;35195:35:0;;::::1;;:44;35187:92;;;;-1:-1:-1::0;;;35187:92:0::1;;;;;;;:::i;:::-;35306:16;:29;35323:8;;35332:1;35323:11;;;;;;;:::i;:::-;;;;;;;35306:29;;;;;;;;;;;;35339:1;35306:34;;35298:72;;;::::0;-1:-1:-1;;;35298:72:0;;17303:2:1;35298:72:0::1;::::0;::::1;17285:21:1::0;17342:2;17322:18;;;17315:30;17381:27;17361:18;;;17354:55;17426:18;;35298:72:0::1;17101:349:1::0;35298:72:0::1;35421:1;35389:16;:29;35406:8;;35415:1;35406:11;;;;;;;:::i;:::-;;;;;;;35389:29;;;;;;;;;;;:33;;;;35441:56;35466:4;35473:10;35485:8;;35494:1;35485:11;;;;;;;:::i;35441:56::-;35073:3;;35046:467;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;34834:697:0:o;12910:185::-;13048:39;13065:4;13071:2;13075:7;13048:39;;;;;;;;;;;;:16;:39::i;10551:400::-;10623:7;10659:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10659:16:0;10694:19;10686:73;;;;-1:-1:-1;;;10686:73:0;;17657:2:1;10686:73:0;;;17639:21:1;17696:2;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;-1:-1:-1;;;17786:18:1;;;17779:39;17835:19;;10686:73:0;17455:405:1;10686:73:0;10773:12;;-1:-1:-1;;;10773:12:0;;;;:21;;;:55;;-1:-1:-1;10798:25:0;;;;:16;:25;;;;;;:30;;10773:55;:99;;;;-1:-1:-1;10832:31:0;;;;:22;:31;;;;;;;;:40;10773:99;10770:151;;;-1:-1:-1;10904:4:0;;10551:400;-1:-1:-1;;10551:400:0:o;10334:209::-;10408:7;-1:-1:-1;;;;;10436:19:0;;10428:73;;;;-1:-1:-1;;;10428:73:0;;18067:2:1;10428:73:0;;;18049:21:1;18106:2;18086:18;;;18079:30;18145:34;18125:18;;;18118:62;-1:-1:-1;;;18196:18:1;;;18189:39;18245:19;;10428:73:0;17865:405:1;10428:73:0;-1:-1:-1;;;;;;10519:16:0;;;;;:9;:16;;;;;;;10334:209::o;37245:::-;37309:8;;-1:-1:-1;;;;;37309:8:0;37295:10;:22;37287:56;;;;-1:-1:-1;;;37287:56:0;;;;;;;:::i;:::-;37362:15;;-1:-1:-1;;;37362:15:0;;;;:24;37354:59;;;;-1:-1:-1;;;37354:59:0;;18477:2:1;37354:59:0;;;18459:21:1;18516:2;18496:18;;;18489:30;-1:-1:-1;;;18535:18:1;;;18528:52;18597:18;;37354:59:0;18275:346:1;37354:59:0;37424:15;:22;;-1:-1:-1;;;;37424:22:0;-1:-1:-1;;;37424:22:0;;;37245:209::o;38416:161::-;38506:8;;-1:-1:-1;;;;;38506:8:0;38492:10;:22;38484:56;;;;-1:-1:-1;;;38484:56:0;;;;;;;:::i;:::-;38551:18;:7;38561:8;;38551:18;:::i;38219:189::-;38298:8;;-1:-1:-1;;;;;38298:8:0;38284:10;:22;38276:56;;;;-1:-1:-1;;;38276:56:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38351:20:0;;38343:29;;;;;;38383:8;:17;;-1:-1:-1;;;;;;38383:17:0;-1:-1:-1;;;;;38383:17:0;;;;;;;;;;38219:189::o;39910:276::-;39970:4;40009:25;;;:16;:25;;;;;;30075:7;;39991:43;;:15;:43;:::i;:::-;39990:56;39987:192;;;40100:25;;;;:16;:25;;;;;;40082:43;;:15;:43;:::i;:::-;40070:56;;30075:7;40070:56;:::i;39987:192::-;-1:-1:-1;40166:1:0;;39910:276;-1:-1:-1;39910:276:0:o;39987:192::-;39910:276;;;:::o;39527:162::-;39613:8;;-1:-1:-1;;;;;39613:8:0;39599:10;:22;39591:48;;;;-1:-1:-1;;;39591:48:0;;18828:2:1;39591:48:0;;;18810:21:1;18867:2;18847:18;;;18840:30;-1:-1:-1;;;18886:18:1;;;18879:43;18939:18;;39591:48:0;18626:337:1;39591:48:0;39650:31;:20;39673:8;;39650:31;:::i;11069:106::-;11127:13;11160:7;11153:14;;;;;:::i;12279:157::-;12376:52;5758:10;12409:8;12419;12376:18;:52::i;:::-;12279:157;;:::o;13103:328::-;13278:41;5758:10;13311:7;13278:18;:41::i;:::-;13270:103;;;;-1:-1:-1;;;13270:103:0;;;;;;;:::i;:::-;13384:39;13398:4;13404:2;13408:7;13417:5;13384:13;:39::i;40327:161::-;40382:4;40406:25;;;:16;:25;;;;;;:30;;;;:74;;-1:-1:-1;;40440:31:0;;;;:22;:31;;;;;;;;:40;;40327:161::o;32377:1466::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;32484:8:::1;::::0;:52:::1;::::0;-1:-1:-1;;;32484:52:0;;32510:10:::1;32484:52;::::0;::::1;19180:34:1::0;32530:4:0::1;19230:18:1::0;;;19223:43;-1:-1:-1;;;;;32484:8:0;;::::1;::::0;:25:::1;::::0;19115:18:1;;32484:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32462:119;;;::::0;-1:-1:-1;;;32462:119:0;;19729:2:1;32462:119:0::1;::::0;::::1;19711:21:1::0;19768:2;19748:18;;;19741:30;-1:-1:-1;;;19787:18:1;;;19780:47;19844:18;;32462:119:0::1;19527:341:1::0;32462:119:0::1;32600:19:::0;32592:51:::1;;;;-1:-1:-1::0;;;32592:51:0::1;;;;;;;:::i;:::-;32662:12;::::0;-1:-1:-1;;;32662:12:0;::::1;;;:21;32654:52;;;;-1:-1:-1::0;;;32654:52:0::1;;;;;;;:::i;:::-;32757:8:::0;32744:10:::1;32757:8:::0;32807:17:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;32807:17:0::1;;32787:37;;32843:6;32839:77;32859:5;32855:1;:9;32839:77;;;32899:1;32890:3;32894:1;32890:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:10;32866:3:::1;;32839:77;;;-1:-1:-1::0;32932:8:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;32932:76:0;;-1:-1:-1;;;;;32932:8:0;;::::1;::::0;:30:::1;::::0;:76:::1;::::0;32963:10:::1;::::0;32983:4:::1;::::0;32990:8;;;;33000:3;;32932:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33029:6;33025:800;33045:5;33041:1;:9;33025:800;;;33084:16;:29;33101:8;;33110:1;33101:11;;;;;;;:::i;:::-;;;;;;;33084:29;;;;;;;;;;;;33117:1;33084:34;33076:69;;;::::0;-1:-1:-1;;;33076:69:0;;21502:2:1;33076:69:0::1;::::0;::::1;21484:21:1::0;21541:2;21521:18;;;21514:30;-1:-1:-1;;;21560:18:1;;;21553:52;21622:18;;33076:69:0::1;21300:346:1::0;33076:69:0::1;33189:20;33197:8;;33206:1;33197:11;;;;;;;:::i;:::-;;;;;;;33189:7;:20::i;:::-;-1:-1:-1::0;;;;;33172:37:0::1;33180:4;-1:-1:-1::0;;;;;33172:37:0::1;;33164:73;;;;-1:-1:-1::0;;;33164:73:0::1;;;;;;;:::i;:::-;33264:22;:35;33287:8;;33296:1;33287:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;33264:35:::0;;-1:-1:-1;33264:35:0;::::1;::::0;;;;;;-1:-1:-1;33264:35:0;;::::1;;:44;33256:92;;;;-1:-1:-1::0;;;33256:92:0::1;;;;;;;:::i;:::-;33390:10;33367:7;:20;33375:8;;33384:1;33375:11;;;;;;;:::i;:::-;;;;;;;33367:20;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;33367:33:0::1;;;;;-1:-1:-1::0;;;;;33367:33:0::1;;;;;;33451:15;33419:16;:29;33436:8;;33445:1;33436:11;;;;;;;:::i;:::-;;;;;;;33419:29;;;;;;;;;;;:47;;;;33797:8;;33806:1;33797:11;;;;;;;:::i;:::-;;;;;;;33790:4;-1:-1:-1::0;;;;;33761:48:0::1;33770:10;-1:-1:-1::0;;;;;33761:48:0::1;;;;;;;;;;;33052:3;;33025:800;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;;32377:1466:0:o;31691:678::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;31778:19;31770:51:::1;;;;-1:-1:-1::0;;;31770:51:0::1;;;;;;;:::i;:::-;31870:8:::0;31857:10:::1;31870:8:::0;31920:17:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;31920:17:0::1;;31900:37;;31956:6;31952:213;31972:5;31968:1;:9;31952:213;;;32025:20;32033:8;;32042:1;32033:11;;;;;;;:::i;32025:20::-;-1:-1:-1::0;;;;;32011:34:0::1;:10;-1:-1:-1::0;;;;;32011:34:0::1;;32003:71;;;;-1:-1:-1::0;;;32003:71:0::1;;;;;;;:::i;:::-;32093:56;32110:10;32130:4;32137:8;;32146:1;32137:11;;;;;;;:::i;32093:56::-;31979:3;;31952:213;;;;32185:6;32181:77;32201:5;32197:1;:9;32181:77;;;32241:1;32232:3;32236:1;32232:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:10;32208:3:::1;;32181:77;;;-1:-1:-1::0;32274:8:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;32274:76:0;;-1:-1:-1;;;;;32274:8:0;;::::1;::::0;:30:::1;::::0;:76:::1;::::0;32313:4:::1;::::0;32320:10:::1;::::0;32332:8;;;;32342:3;;32274:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2555:1:0;2919:7;:22;-1:-1:-1;;;;;;31691:678:0:o;39270:249::-;39390:13;39452:20;39474:25;39491:7;39474:16;:25::i;:::-;39501:7;39435:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39421:89;;39270:249;;;:::o;30873:810::-;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;30972:8:::1;::::0;:52:::1;::::0;-1:-1:-1;;;30972:52:0;;30998:10:::1;30972:52;::::0;::::1;19180:34:1::0;31018:4:0::1;19230:18:1::0;;;19223:43;-1:-1:-1;;;;;30972:8:0;;::::1;::::0;:25:::1;::::0;19115:18:1;;30972:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30950:119;;;::::0;-1:-1:-1;;;30950:119:0;;19729:2:1;30950:119:0::1;::::0;::::1;19711:21:1::0;19768:2;19748:18;;;19741:30;-1:-1:-1;;;19787:18:1;;;19780:47;19844:18;;30950:119:0::1;19527:341:1::0;30950:119:0::1;31088:19:::0;31080:51:::1;;;;-1:-1:-1::0;;;31080:51:0::1;;;;;;;:::i;:::-;31182:8:::0;31169:10:::1;31182:8:::0;31232:17:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;31232:17:0::1;;31212:37;;31268:6;31264:77;31284:5;31280:1;:9;31264:77;;;31324:1;31315:3;31319:1;31315:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:10;31291:3:::1;;31264:77;;;-1:-1:-1::0;31357:8:0::1;::::0;:76:::1;::::0;-1:-1:-1;;;31357:76:0;;-1:-1:-1;;;;;31357:8:0;;::::1;::::0;:30:::1;::::0;:76:::1;::::0;31388:10:::1;::::0;31408:4:::1;::::0;31415:8;;;;31425:3;;31357:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31454:6;31450:215;31470:5;31466:1;:9;31450:215;;;31526:20;31534:8;;31543:1;31534:11;;;;;;;:::i;31526:20::-;-1:-1:-1::0;;;;;31509:37:0::1;31517:4;-1:-1:-1::0;;;;;31509:37:0::1;;31501:73;;;;-1:-1:-1::0;;;31501:73:0::1;;;;;;;:::i;:::-;31593:56;31618:4;31625:10;31637:8;;31646:1;31637:11;;;;;;;:::i;31593:56::-;31477:3;;31450:215;;6331:201:::0;6055:13;:11;:13::i;:::-;-1:-1:-1;;;;;6420:22:0;::::1;6412:73;;;::::0;-1:-1:-1;;;6412:73:0;;23770:2:1;6412:73:0::1;::::0;::::1;23752:21:1::0;23809:2;23789:18;;;23782:30;23848:34;23828:18;;;23821:62;-1:-1:-1;;;23899:18:1;;;23892:36;23945:19;;6412:73:0::1;23568:402:1::0;6412:73:0::1;6496:28;6515:8;6496:18;:28::i;33851:975::-:0;2599:1;2747:7;;:19;;2739:63;;;;-1:-1:-1;;;2739:63:0;;;;;;;:::i;:::-;2599:1;2878:7;:18;33937:19;33929:51:::1;;;;-1:-1:-1::0;;;33929:51:0::1;;;;;;;:::i;:::-;33999:12;::::0;-1:-1:-1;;;33999:12:0;::::1;;;:21;33991:52;;;;-1:-1:-1::0;;;33991:52:0::1;;;;;;;:::i;:::-;34092:8:::0;34079:10:::1;34122:213;34142:5;34138:1;:9;34122:213;;;34195:20;34203:8;;34212:1;34203:11;;;;;;;:::i;34195:20::-;-1:-1:-1::0;;;;;34181:34:0::1;:10;-1:-1:-1::0;;;;;34181:34:0::1;;34173:71;;;;-1:-1:-1::0;;;34173:71:0::1;;;;;;;:::i;:::-;34263:56;34280:10;34300:4;34307:8;;34316:1;34307:11;;;;;;;:::i;34263:56::-;34149:3;;34122:213;;;;34355:6;34351:457;34371:5;34367:1;:9;34351:457;;;34410:16;:29;34427:8;;34436:1;34427:11;;;;;;;:::i;:::-;;;;;;;34410:29;;;;;;;;;;;;34443:1;34410:34;34402:69;;;::::0;-1:-1:-1;;;34402:69:0;;21502:2:1;34402:69:0::1;::::0;::::1;21484:21:1::0;21541:2;21521:18;;;21514:30;-1:-1:-1;;;21560:18:1;;;21553:52;21622:18;;34402:69:0::1;21300:346:1::0;34402:69:0::1;34515:20;34523:8;;34532:1;34523:11;;;;;;;:::i;34515:20::-;-1:-1:-1::0;;;;;34498:37:0::1;34506:4;-1:-1:-1::0;;;;;34498:37:0::1;;34490:73;;;;-1:-1:-1::0;;;34490:73:0::1;;;;;;;:::i;:::-;34590:22;:35;34613:8;;34622:1;34613:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;34590:35:::0;;-1:-1:-1;34590:35:0;::::1;::::0;;;;;;-1:-1:-1;34590:35:0;;::::1;;:44;34582:92;;;;-1:-1:-1::0;;;34582:92:0::1;;;;;;;:::i;:::-;34716:10;34693:7;:20;34701:8;;34710:1;34701:11;;;;;;;:::i;:::-;;;;;;;34693:20;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;34693:33:0::1;;;;;-1:-1:-1::0;;;;;34693:33:0::1;;;;;;34777:15;34745:16;:29;34762:8;;34771:1;34762:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;34745:29:::0;;-1:-1:-1;34745:29:0;::::1;::::0;;;;;;-1:-1:-1;34745:29:0;:47;34378:3:::1;;34351:457;;15018:174:::0;15093:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15093:29:0;-1:-1:-1;;;;;15093:29:0;;;;;;;;:24;;15147:23;15093:24;15147:14;:23::i;:::-;-1:-1:-1;;;;;15138:46:0;;;;;;;;;;;15018:174;;:::o;13897:374::-;13990:4;13851:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13851:16:0;14007:73;;;;-1:-1:-1;;;14007:73:0;;24177:2:1;14007:73:0;;;24159:21:1;24216:2;24196:18;;;24189:30;24255:34;24235:18;;;24228:62;-1:-1:-1;;;24306:18:1;;;24299:42;24358:19;;14007:73:0;23975:408:1;14007:73:0;14091:13;14107:23;14122:7;14107:14;:23::i;:::-;14091:39;;14160:5;-1:-1:-1;;;;;14149:16:0;:7;-1:-1:-1;;;;;14149:16:0;;:52;;;-1:-1:-1;;;;;;12565:25:0;;;12541:4;12565:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;14169:32;14149:87;;;;14229:7;-1:-1:-1;;;;;14205:31:0;:20;14217:7;14205:11;:20::i;:::-;-1:-1:-1;;;;;14205:31:0;;14149:87;:113;;;-1:-1:-1;;;;;;14240:22:0;;14257:4;14240:22;14149:113;14141:122;13897:374;-1:-1:-1;;;;13897:374:0:o;14279:731::-;14406:12;;-1:-1:-1;;;14406:12:0;;;;14403:174;;14452:25;;;;:16;:25;;;;;;:30;;:65;;-1:-1:-1;14486:31:0;;;;:22;:31;;;;;;;;14452:65;14444:121;;;;-1:-1:-1;;;14444:121:0;;24590:2:1;14444:121:0;;;24572:21:1;24629:2;24609:18;;;24602:30;24668:34;24648:18;;;24641:62;-1:-1:-1;;;24719:18:1;;;24712:41;24770:19;;14444:121:0;24388:407:1;14444:121:0;14622:4;-1:-1:-1;;;;;14595:31:0;:23;14610:7;14595:14;:23::i;:::-;-1:-1:-1;;;;;14595:31:0;;:56;;;-1:-1:-1;;;;;;14630:21:0;;14646:4;14630:21;14595:56;14587:106;;;;-1:-1:-1;;;14587:106:0;;25002:2:1;14587:106:0;;;24984:21:1;25041:2;25021:18;;;25014:30;25080:34;25060:18;;;25053:62;-1:-1:-1;;;25131:18:1;;;25124:35;25176:19;;14587:106:0;24800:401:1;14587:106:0;-1:-1:-1;;;;;14712:16:0;;14704:65;;;;-1:-1:-1;;;14704:65:0;;25408:2:1;14704:65:0;;;25390:21:1;25447:2;25427:18;;;25420:30;25486:34;25466:18;;;25459:62;-1:-1:-1;;;25537:18:1;;;25530:34;25581:19;;14704:65:0;25206:400:1;14704:65:0;14834:29;14851:1;14855:7;14834:8;:29::i;:::-;-1:-1:-1;;;;;14876:15:0;;;;;;:9;:15;;;;;:20;;14895:1;;14876:15;:20;;14895:1;;14876:20;:::i;:::-;;;;-1:-1:-1;;;;;;;14907:13:0;;;;;;:9;:13;;;;;:18;;14924:1;;14907:13;:18;;14924:1;;14907:18;:::i;:::-;;;;-1:-1:-1;;14936:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;14936:21:0;-1:-1:-1;;;;;14936:21:0;;;;;;;;;14975:27;;14936:16;;14975:27;;;;;;;14279:731;;;:::o;15200:315::-;15355:8;-1:-1:-1;;;;;15346:17:0;:5;-1:-1:-1;;;;;15346:17:0;;;15338:55;;;;-1:-1:-1;;;15338:55:0;;25813:2:1;15338:55:0;;;25795:21:1;25852:2;25832:18;;;25825:30;25891:27;25871:18;;;25864:55;25936:18;;15338:55:0;25611:349:1;15338:55:0;-1:-1:-1;;;;;15404:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15404:46:0;;;;;;;;;;15466:41;;2055::1;;;15466::0;;2028:18:1;15466:41:0;;;;;;;15200:315;;;:::o;13439:::-;13596:28;13606:4;13612:2;13616:7;13596:9;:28::i;:::-;13643:48;13666:4;13672:2;13676:7;13685:5;13643:22;:48::i;:::-;13635:111;;;;-1:-1:-1;;;13635:111:0;;;;;;;:::i;8016:723::-;8072:13;8293:10;8289:53;;-1:-1:-1;;8320:10:0;;;;;;;;;;;;-1:-1:-1;;;8320:10:0;;;;;8016:723::o;8289:53::-;8367:5;8352:12;8408:78;8415:9;;8408:78;;8441:8;;;;:::i;:::-;;-1:-1:-1;8464:10:0;;-1:-1:-1;8472:2:0;8464:10;;:::i;:::-;;;8408:78;;;8496:19;8528:6;8518:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8518:17:0;;8496:39;;8546:154;8553:10;;8546:154;;8580:11;8590:1;8580:11;;:::i;:::-;;-1:-1:-1;8649:10:0;8657:2;8649:5;:10;:::i;:::-;8636:24;;:2;:24;:::i;:::-;8623:39;;8606:6;8613;8606:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8606:56:0;;;;;;;;-1:-1:-1;8677:11:0;8686:2;8677:11;;:::i;:::-;;;8546:154;;6191:132;6169:6;;-1:-1:-1;;;;;6169:6:0;5758:10;6255:23;6247:68;;;;-1:-1:-1;;;6247:68:0;;26960:2:1;6247:68:0;;;26942:21:1;;;26979:18;;;26972:30;27038:34;27018:18;;;27011:62;27090:18;;6247:68:0;26758:356:1;6247:68:0;6191:132::o;6540:191::-;6633:6;;;-1:-1:-1;;;;;6650:17:0;;;-1:-1:-1;;;;;;6650:17:0;;;;;;;6683:40;;6633:6;;;6650:17;6633:6;;6683:40;;6614:16;;6683:40;6603:128;6540:191;:::o;15523:799::-;15678:4;-1:-1:-1;;;;;15699:13:0;;5607:19;:23;15695:620;;15735:72;;-1:-1:-1;;;15735:72:0;;-1:-1:-1;;;;;15735:36:0;;;;;:72;;5758:10;;15786:4;;15792:7;;15801:5;;15735:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15735:72:0;;;;;;;;-1:-1:-1;;15735:72:0;;;;;;;;;;;;:::i;:::-;;;15731:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15977:13:0;;15973:272;;16020:60;;-1:-1:-1;;;16020:60:0;;;;;;;:::i;15973:272::-;16195:6;16189:13;16180:6;16176:2;16172:15;16165:38;15731:529;-1:-1:-1;;;;;;15858:51:0;-1:-1:-1;;;15858:51:0;;-1:-1:-1;15851:58:0;;15695:620;-1:-1:-1;16299:4:0;15523:799;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;715:367:1;778:8;788:6;842:3;835:4;827:6;823:17;819:27;809:55;;860:1;857;850:12;809:55;-1:-1:-1;883:20:1;;926:18;915:30;;912:50;;;958:1;955;948:12;912:50;995:4;987:6;983:17;971:29;;1055:3;1048:4;1038:6;1035:1;1031:14;1023:6;1019:27;1015:38;1012:47;1009:67;;;1072:1;1069;1062:12;1009:67;715:367;;;;;:::o;1087:437::-;1173:6;1181;1234:2;1222:9;1213:7;1209:23;1205:32;1202:52;;;1250:1;1247;1240:12;1202:52;1290:9;1277:23;1323:18;1315:6;1312:30;1309:50;;;1355:1;1352;1345:12;1309:50;1394:70;1456:7;1447:6;1436:9;1432:22;1394:70;:::i;:::-;1483:8;;1368:96;;-1:-1:-1;1087:437:1;-1:-1:-1;;;;1087:437:1:o;1529:131::-;-1:-1:-1;;;;;;1603:32:1;;1593:43;;1583:71;;1650:1;1647;1640:12;1665:245;1723:6;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;1831:9;1818:23;1850:30;1874:5;1850:30;:::i;:::-;1899:5;1665:245;-1:-1:-1;;;1665:245:1:o;2107:258::-;2179:1;2189:113;2203:6;2200:1;2197:13;2189:113;;;2279:11;;;2273:18;2260:11;;;2253:39;2225:2;2218:10;2189:113;;;2320:6;2317:1;2314:13;2311:48;;;-1:-1:-1;;2355:1:1;2337:16;;2330:27;2107:258::o;2370:::-;2412:3;2450:5;2444:12;2477:6;2472:3;2465:19;2493:63;2549:6;2542:4;2537:3;2533:14;2526:4;2519:5;2515:16;2493:63;:::i;:::-;2610:2;2589:15;-1:-1:-1;;2585:29:1;2576:39;;;;2617:4;2572:50;;2370:258;-1:-1:-1;;2370:258:1:o;2633:220::-;2782:2;2771:9;2764:21;2745:4;2802:45;2843:2;2832:9;2828:18;2820:6;2802:45;:::i;2858:180::-;2917:6;2970:2;2958:9;2949:7;2945:23;2941:32;2938:52;;;2986:1;2983;2976:12;2938:52;-1:-1:-1;3009:23:1;;2858:180;-1:-1:-1;2858:180:1:o;3251:173::-;3319:20;;-1:-1:-1;;;;;3368:31:1;;3358:42;;3348:70;;3414:1;3411;3404:12;3429:254;3497:6;3505;3558:2;3546:9;3537:7;3533:23;3529:32;3526:52;;;3574:1;3571;3564:12;3526:52;3597:29;3616:9;3597:29;:::i;:::-;3587:39;3673:2;3658:18;;;;3645:32;;-1:-1:-1;;;3429:254:1:o;3688:347::-;3739:8;3749:6;3803:3;3796:4;3788:6;3784:17;3780:27;3770:55;;3821:1;3818;3811:12;3770:55;-1:-1:-1;3844:20:1;;3887:18;3876:30;;3873:50;;;3919:1;3916;3909:12;3873:50;3956:4;3948:6;3944:17;3932:29;;4008:3;4001:4;3992:6;3984;3980:19;3976:30;3973:39;3970:59;;;4025:1;4022;4015:12;4040:626;4137:6;4145;4153;4161;4169;4222:3;4210:9;4201:7;4197:23;4193:33;4190:53;;;4239:1;4236;4229:12;4190:53;4262:29;4281:9;4262:29;:::i;:::-;4252:39;;4310:38;4344:2;4333:9;4329:18;4310:38;:::i;:::-;4300:48;;4395:2;4384:9;4380:18;4367:32;4357:42;;4450:2;4439:9;4435:18;4422:32;4477:18;4469:6;4466:30;4463:50;;;4509:1;4506;4499:12;4463:50;4548:58;4598:7;4589:6;4578:9;4574:22;4548:58;:::i;:::-;4040:626;;;;-1:-1:-1;4040:626:1;;-1:-1:-1;4625:8:1;;4522:84;4040:626;-1:-1:-1;;;4040:626:1:o;5060:328::-;5137:6;5145;5153;5206:2;5194:9;5185:7;5181:23;5177:32;5174:52;;;5222:1;5219;5212:12;5174:52;5245:29;5264:9;5245:29;:::i;:::-;5235:39;;5293:38;5327:2;5316:9;5312:18;5293:38;:::i;:::-;5283:48;;5378:2;5367:9;5363:18;5350:32;5340:42;;5060:328;;;;;:::o;5393:186::-;5452:6;5505:2;5493:9;5484:7;5480:23;5476:32;5473:52;;;5521:1;5518;5511:12;5473:52;5544:29;5563:9;5544:29;:::i;5584:410::-;5655:6;5663;5716:2;5704:9;5695:7;5691:23;5687:32;5684:52;;;5732:1;5729;5722:12;5684:52;5772:9;5759:23;5805:18;5797:6;5794:30;5791:50;;;5837:1;5834;5827:12;5791:50;5876:58;5926:7;5917:6;5906:9;5902:22;5876:58;:::i;5999:118::-;6085:5;6078:13;6071:21;6064:5;6061:32;6051:60;;6107:1;6104;6097:12;6122:315;6187:6;6195;6248:2;6236:9;6227:7;6223:23;6219:32;6216:52;;;6264:1;6261;6254:12;6216:52;6287:29;6306:9;6287:29;:::i;:::-;6277:39;;6366:2;6355:9;6351:18;6338:32;6379:28;6401:5;6379:28;:::i;:::-;6426:5;6416:15;;;6122:315;;;;;:::o;6442:127::-;6503:10;6498:3;6494:20;6491:1;6484:31;6534:4;6531:1;6524:15;6558:4;6555:1;6548:15;6574:1138;6669:6;6677;6685;6693;6746:3;6734:9;6725:7;6721:23;6717:33;6714:53;;;6763:1;6760;6753:12;6714:53;6786:29;6805:9;6786:29;:::i;:::-;6776:39;;6834:38;6868:2;6857:9;6853:18;6834:38;:::i;:::-;6824:48;;6919:2;6908:9;6904:18;6891:32;6881:42;;6974:2;6963:9;6959:18;6946:32;6997:18;7038:2;7030:6;7027:14;7024:34;;;7054:1;7051;7044:12;7024:34;7092:6;7081:9;7077:22;7067:32;;7137:7;7130:4;7126:2;7122:13;7118:27;7108:55;;7159:1;7156;7149:12;7108:55;7195:2;7182:16;7217:2;7213;7210:10;7207:36;;;7223:18;;:::i;:::-;7298:2;7292:9;7266:2;7352:13;;-1:-1:-1;;7348:22:1;;;7372:2;7344:31;7340:40;7328:53;;;7396:18;;;7416:22;;;7393:46;7390:72;;;7442:18;;:::i;:::-;7482:10;7478:2;7471:22;7517:2;7509:6;7502:18;7557:7;7552:2;7547;7543;7539:11;7535:20;7532:33;7529:53;;;7578:1;7575;7568:12;7529:53;7634:2;7629;7625;7621:11;7616:2;7608:6;7604:15;7591:46;7679:1;7674:2;7669;7661:6;7657:15;7653:24;7646:35;7700:6;7690:16;;;;;;;6574:1138;;;;;;;:::o;7717:1210::-;7877:6;7885;7893;7901;7909;7917;7925;7933;7986:3;7974:9;7965:7;7961:23;7957:33;7954:53;;;8003:1;8000;7993:12;7954:53;8026:29;8045:9;8026:29;:::i;:::-;8016:39;;8074:38;8108:2;8097:9;8093:18;8074:38;:::i;:::-;8064:48;;8163:2;8152:9;8148:18;8135:32;8186:18;8227:2;8219:6;8216:14;8213:34;;;8243:1;8240;8233:12;8213:34;8282:70;8344:7;8335:6;8324:9;8320:22;8282:70;:::i;:::-;8371:8;;-1:-1:-1;8256:96:1;-1:-1:-1;8459:2:1;8444:18;;8431:32;;-1:-1:-1;8475:16:1;;;8472:36;;;8504:1;8501;8494:12;8472:36;8543:72;8607:7;8596:8;8585:9;8581:24;8543:72;:::i;:::-;8634:8;;-1:-1:-1;8517:98:1;-1:-1:-1;8722:3:1;8707:19;;8694:33;;-1:-1:-1;8739:16:1;;;8736:36;;;8768:1;8765;8758:12;8736:36;;8807:60;8859:7;8848:8;8837:9;8833:24;8807:60;:::i;:::-;7717:1210;;;;-1:-1:-1;7717:1210:1;;-1:-1:-1;7717:1210:1;;;;;;8886:8;-1:-1:-1;;;7717:1210:1:o;8932:260::-;9000:6;9008;9061:2;9049:9;9040:7;9036:23;9032:32;9029:52;;;9077:1;9074;9067:12;9029:52;9100:29;9119:9;9100:29;:::i;:::-;9090:39;;9148:38;9182:2;9171:9;9167:18;9148:38;:::i;:::-;9138:48;;8932:260;;;;;:::o;9197:695::-;9303:6;9311;9319;9327;9335;9343;9396:3;9384:9;9375:7;9371:23;9367:33;9364:53;;;9413:1;9410;9403:12;9364:53;9436:29;9455:9;9436:29;:::i;:::-;9426:39;;9484:38;9518:2;9507:9;9503:18;9484:38;:::i;:::-;9474:48;;9569:2;9558:9;9554:18;9541:32;9531:42;;9620:2;9609:9;9605:18;9592:32;9582:42;;9675:3;9664:9;9660:19;9647:33;9703:18;9695:6;9692:30;9689:50;;;9735:1;9732;9725:12;9689:50;9774:58;9824:7;9815:6;9804:9;9800:22;9774:58;:::i;:::-;9197:695;;;;-1:-1:-1;9197:695:1;;-1:-1:-1;9197:695:1;;9851:8;;9197:695;-1:-1:-1;;;9197:695:1:o;9897:355::-;10099:2;10081:21;;;10138:2;10118:18;;;10111:30;10177:33;10172:2;10157:18;;10150:61;10243:2;10228:18;;9897:355::o;10257:342::-;10459:2;10441:21;;;10498:2;10478:18;;;10471:30;-1:-1:-1;;;10532:2:1;10517:18;;10510:48;10590:2;10575:18;;10257:342::o;11011:127::-;11072:10;11067:3;11063:20;11060:1;11053:31;11103:4;11100:1;11093:15;11127:4;11124:1;11117:15;11547:348;11749:2;11731:21;;;11788:2;11768:18;;;11761:30;11827:26;11822:2;11807:18;;11800:54;11886:2;11871:18;;11547:348::o;12533:380::-;12612:1;12608:12;;;;12655;;;12676:61;;12730:4;12722:6;12718:17;12708:27;;12676:61;12783:2;12775:6;12772:14;12752:18;12749:38;12746:161;;;12829:10;12824:3;12820:20;12817:1;12810:31;12864:4;12861:1;12854:15;12892:4;12889:1;12882:15;12746:161;;12533:380;;;:::o;14509:345::-;14711:2;14693:21;;;14750:2;14730:18;;;14723:30;-1:-1:-1;;;14784:2:1;14769:18;;14762:51;14845:2;14830:18;;14509:345::o;14859:343::-;15061:2;15043:21;;;15100:2;15080:18;;;15073:30;-1:-1:-1;;;15134:2:1;15119:18;;15112:49;15193:2;15178:18;;14859:343::o;15207:127::-;15268:10;15263:3;15259:20;15256:1;15249:31;15299:4;15296:1;15289:15;15323:4;15320:1;15313:15;15339:128;15379:3;15410:1;15406:6;15403:1;15400:13;15397:39;;;15416:18;;:::i;:::-;-1:-1:-1;15452:9:1;;15339:128::o;15820:135::-;15859:3;-1:-1:-1;;15880:17:1;;15877:43;;;15900:18;;:::i;:::-;-1:-1:-1;15947:1:1;15936:13;;15820:135::o;15960:125::-;16000:4;16028:1;16025;16022:8;16019:34;;;16033:18;;:::i;:::-;-1:-1:-1;16070:9:1;;15960:125::o;16090:184::-;16160:6;16213:2;16201:9;16192:7;16188:23;16184:32;16181:52;;;16229:1;16226;16219:12;16181:52;-1:-1:-1;16252:16:1;;16090:184;-1:-1:-1;16090:184:1:o;16279:413::-;16481:2;16463:21;;;16520:2;16500:18;;;16493:30;16559:34;16554:2;16539:18;;16532:62;-1:-1:-1;;;16625:2:1;16610:18;;16603:47;16682:3;16667:19;;16279:413::o;16697:399::-;16899:2;16881:21;;;16938:2;16918:18;;;16911:30;16977:34;16972:2;16957:18;;16950:62;-1:-1:-1;;;17043:2:1;17028:18;;17021:33;17086:3;17071:19;;16697:399::o;19277:245::-;19344:6;19397:2;19385:9;19376:7;19372:23;19368:32;19365:52;;;19413:1;19410;19403:12;19365:52;19445:9;19439:16;19464:28;19486:5;19464:28;:::i;19873:1422::-;-1:-1:-1;;;;;20334:15:1;;;20316:34;;20407:15;;;20369:2;20387:18;;;20380:43;;;;20296:3;20454:2;20439:18;;20432:31;;;20479:19;;20472:35;;;20259:4;;20288:19;-1:-1:-1;;;;;20519:31:1;;20516:51;;;20563:1;20560;20553:12;20516:51;20597:6;20594:1;20590:14;20576:28;;20655:6;20647;20641:3;20630:9;20626:19;20613:49;20754:1;20681:22;;;20730:3;20722:12;;;20743:13;;;20796:18;;;20792:28;;;20787:2;20772:18;;20765:56;20868:13;;20890:20;;;;20961:15;;;;20754:1;20934:3;20926:12;;21004:171;21018:8;21015:1;21012:15;21004:171;;;21081:13;;21069:26;;21150:15;;;;21042:1;21035:9;;;;;21115:12;;;;21004:171;;;-1:-1:-1;21212:19:1;;;21206:3;21191:19;;21184:48;315:1;303:14;;350:4;341:14;;21241:48;19873:1422;-1:-1:-1;;;;;;;;;;;19873:1422:1:o;21651:347::-;21853:2;21835:21;;;21892:2;21872:18;;;21865:30;21931:25;21926:2;21911:18;;21904:53;21989:2;21974:18;;21651:347::o;22129:973::-;22214:12;;22179:3;;22269:1;22289:18;;;;22342;;;;22369:61;;22423:4;22415:6;22411:17;22401:27;;22369:61;22449:2;22497;22489:6;22486:14;22466:18;22463:38;22460:161;;;22543:10;22538:3;22534:20;22531:1;22524:31;22578:4;22575:1;22568:15;22606:4;22603:1;22596:15;22460:161;22637:18;22664:104;;;;22782:1;22777:319;;;;22630:466;;22664:104;-1:-1:-1;;22697:24:1;;22685:37;;22742:16;;;;-1:-1:-1;22664:104:1;;22777:319;22076:1;22069:14;;;22113:4;22100:18;;22871:1;22885:165;22899:6;22896:1;22893:13;22885:165;;;22977:14;;22964:11;;;22957:35;23020:16;;;;22914:10;;22885:165;;;22889:3;;23079:6;23074:3;23070:16;23063:23;;22630:466;;;;;;;22129:973;;;;:::o;23107:456::-;23328:3;23356:38;23390:3;23382:6;23356:38;:::i;:::-;23423:6;23417:13;23439:52;23484:6;23480:2;23473:4;23465:6;23461:17;23439:52;:::i;:::-;23507:50;23549:6;23545:2;23541:15;23533:6;23507:50;:::i;:::-;23500:57;23107:456;-1:-1:-1;;;;;;;23107:456:1:o;25965:414::-;26167:2;26149:21;;;26206:2;26186:18;;;26179:30;26245:34;26240:2;26225:18;;26218:62;-1:-1:-1;;;26311:2:1;26296:18;;26289:48;26369:3;26354:19;;25965:414::o;26384:127::-;26445:10;26440:3;26436:20;26433:1;26426:31;26476:4;26473:1;26466:15;26500:4;26497:1;26490:15;26516:120;26556:1;26582;26572:35;;26587:18;;:::i;:::-;-1:-1:-1;26621:9:1;;26516:120::o;26641:112::-;26673:1;26699;26689:35;;26704:18;;:::i;:::-;-1:-1:-1;26738:9:1;;26641:112::o;27119:489::-;-1:-1:-1;;;;;27388:15:1;;;27370:34;;27440:15;;27435:2;27420:18;;27413:43;27487:2;27472:18;;27465:34;;;27535:3;27530:2;27515:18;;27508:31;;;27313:4;;27556:46;;27582:19;;27574:6;27556:46;:::i;:::-;27548:54;27119:489;-1:-1:-1;;;;;;27119:489:1:o;27613:249::-;27682:6;27735:2;27723:9;27714:7;27710:23;27706:32;27703:52;;;27751:1;27748;27741:12;27703:52;27783:9;27777:16;27802:30;27826:5;27802:30;:::i

Swarm Source

ipfs://df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.