ETH Price: $3,471.54 (+0.58%)

Token

504.xyz (504)
 

Overview

Max Total Supply

269 504

Holders

108

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 504
0xc1491119314d67455f50ab9799d7bec54ea681da
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Nft504

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 15 : Nft504.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

// 504 - IYKYK / KMWTW
// www.504.xyz

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Nft504 is ERC721, ERC721Enumerable, ERC721Burnable, Ownable {
    IERC20 public immutable BIGSB;
    uint256 internal constant START_PRICE = 2000 ether;
    uint256 internal constant MAX_SUPPLY = 5040;
    uint256 public minted;
    mapping(address => uint256) public lastMintTimestamp;
    string internal bUri = "https://data.504.xyz/nft/";
    bool public isMintingDisabled;
    
    constructor(IERC20 bigSBAddress, address receiver) ERC721("504.xyz", "504") {
        BIGSB = bigSBAddress;
        for(uint256 i = 1; i <= 10; i++){
            _mint(receiver, i);
        }
        transferOwnership(receiver);
        minted = 10;
    }

    function _baseURI() internal view override returns (string memory) {
        return bUri;
    }

    function baseTokenURI() public view returns (string memory) {
        return bUri;
    }

    function editBaseUri(string memory newUri) external onlyOwner{
        bUri = newUri;
    }

    function setStatus(bool disableMinting) external onlyOwner{
        isMintingDisabled = disableMinting;
    }
    
    function actualPrice() external view returns(uint256){
        return _actualPrice(minted);
    }

    function _actualPrice(uint256 _minted) internal pure returns(uint256){
        return START_PRICE + _minted * 1 ether;
    }

    function mint() external {
        require(!isMintingDisabled, "Mint: Minting disabled");
        require((lastMintTimestamp[msg.sender]+24 hours)<block.timestamp, "Mint: Daily mint limit exceeded");
        lastMintTimestamp[msg.sender] = block.timestamp;
        uint256 _minted = minted+1;
        require(_minted<=MAX_SUPPLY, "Mint: Maximum supply reached");
        minted++;
        BIGSB.transferFrom(msg.sender, address(this), _actualPrice(_minted-1));
        _mint(msg.sender, _minted);
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }

    function withdrowTokens() external onlyOwner{
        uint256 amount = BIGSB.balanceOf(address(this));
        BIGSB.transfer(msg.sender, amount);
    }
}

// 504 - IYKYK / KMWTW
// www.504.xyz

File 2 of 15 : ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = 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);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 3 of 15 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

File 4 of 15 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 5 of 15 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 6 of 15 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 7 of 15 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 8 of 15 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 9 of 15 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 10 of 15 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 11 of 15 : ERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 12 of 15 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 13 of 15 : ERC721Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;

import "../ERC721.sol";
import "../../../utils/Context.sol";

/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}

File 14 of 15 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 15 of 15 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Settings
{
  "metadata": {
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"bigSBAddress","type":"address"},{"internalType":"address","name":"receiver","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":[],"name":"BIGSB","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"actualPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"editBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintingDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastMintTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disableMinting","type":"bool"}],"name":"setStatus","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","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":[],"name":"withdrowTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526040518060400160405280601981526020017f68747470733a2f2f646174612e3530342e78797a2f6e66742f00000000000000815250600d90805190602001906200005192919062000ba1565b503480156200005f57600080fd5b50604051620053e2380380620053e2833981810160405281019062000085919062000c7f565b6040518060400160405280600781526020017f3530342e78797a000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f353034000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010992919062000ba1565b5080600190805190602001906200012292919062000ba1565b5050506200014562000139620001d660201b60201c565b620001de60201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506000600190505b600a8111620001b4576200019e8282620002a460201b60201c565b8080620001ab9062000f64565b91505062000183565b50620001c6816200049e60201b60201c565b600a600b819055505050620011c0565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000317576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030e9062000def565b60405180910390fd5b6200032881620005b460201b60201c565b156200036b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003629062000dab565b60405180910390fd5b6200037f600083836200062060201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003d1919062000e44565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200049a600083836200063d60201b60201c565b5050565b620004ae620001d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004d46200064260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200052d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005249062000e11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620005a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005979062000d89565b60405180910390fd5b620005b181620001de60201b60201c565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620006388383836200066c60201b620015b61760201c565b505050565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000684838383620007b360201b620016ca1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620006d157620006cb81620007b860201b60201c565b62000719565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000718576200071783826200080160201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007665762000760816200097e60201b60201c565b620007ae565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620007ad57620007ac828262000a5a60201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200081b8462000ae660201b62000f991760201c565b62000827919062000ea1565b90506000600760008481526020019081526020016000205490508181146200090d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000994919062000ea1565b9050600060096000848152602001908152602001600020549050600060088381548110620009c757620009c66200103f565b5b906000526020600020015490508060088381548110620009ec57620009eb6200103f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000a3e5762000a3d62001010565b5b6001900381819060005260206000200160009055905550505050565b600062000a728362000ae660201b62000f991760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b519062000dcd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000baf9062000f2e565b90600052602060002090601f01602090048101928262000bd3576000855562000c1f565b82601f1062000bee57805160ff191683800117855562000c1f565b8280016001018555821562000c1f579182015b8281111562000c1e57825182559160200191906001019062000c01565b5b50905062000c2e919062000c32565b5090565b5b8082111562000c4d57600081600090555060010162000c33565b5090565b60008151905062000c62816200118c565b92915050565b60008151905062000c7981620011a6565b92915050565b6000806040838503121562000c995762000c986200106e565b5b600062000ca98582860162000c68565b925050602062000cbc8582860162000c51565b9150509250929050565b600062000cd560268362000e33565b915062000ce28262001073565b604082019050919050565b600062000cfc601c8362000e33565b915062000d0982620010c2565b602082019050919050565b600062000d23602a8362000e33565b915062000d3082620010eb565b604082019050919050565b600062000d4a60208362000e33565b915062000d57826200113a565b602082019050919050565b600062000d7160208362000e33565b915062000d7e8262001163565b602082019050919050565b6000602082019050818103600083015262000da48162000cc6565b9050919050565b6000602082019050818103600083015262000dc68162000ced565b9050919050565b6000602082019050818103600083015262000de88162000d14565b9050919050565b6000602082019050818103600083015262000e0a8162000d3b565b9050919050565b6000602082019050818103600083015262000e2c8162000d62565b9050919050565b600082825260208201905092915050565b600062000e518262000f24565b915062000e5e8362000f24565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e965762000e9562000fb2565b5b828201905092915050565b600062000eae8262000f24565b915062000ebb8362000f24565b92508282101562000ed15762000ed062000fb2565b5b828203905092915050565b600062000ee98262000f04565b9050919050565b600062000efd8262000edc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000f4757607f821691505b6020821081141562000f5e5762000f5d62000fe1565b5b50919050565b600062000f718262000f24565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000fa75762000fa662000fb2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620011978162000edc565b8114620011a357600080fd5b50565b620011b18162000ef0565b8114620011bd57600080fd5b50565b60805160601c6141ee620011f46000396000818161098d01528181610e3f01528181610eea015261137201526141ee6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636cb1630f11610104578063b88d4fde116100a2578063e5bcf35b11610071578063e5bcf35b14610531578063e985e9c51461054f578063ece4132e1461057f578063f2fde38b1461059b576101da565b8063b88d4fde14610497578063be13197b146104b3578063c87b56dd146104e3578063d547cfb714610513576101da565b80638c648117116100de5780638c648117146104215780638da5cb5b1461043f57806395d89b411461045d578063a22cb4651461047b576101da565b80636cb1630f146103dd57806370a08231146103e7578063715018a614610417576101da565b80632f745c591161017c5780634f6ccce71161014b5780634f6ccce7146103435780635c40f6f4146103735780635fbef1451461038f5780636352211e146103ad576101da565b80632f745c59146102bd57806342842e0e146102ed57806342966c68146103095780634f02c42014610325576101da565b8063095ea7b3116101b8578063095ea7b31461025d5780631249c58b1461027957806318160ddd1461028357806323b872dd146102a1576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612db9565b6105b7565b6040516102069190613382565b60405180910390f35b6102176105c9565b60405161022491906133b8565b60405180910390f35b61024760048036038101906102429190612e5c565b61065b565b60405161025491906132bb565b60405180910390f35b61027760048036038101906102729190612d1f565b6106e0565b005b6102816107f8565b005b61028b610a5c565b604051610298919061369a565b60405180910390f35b6102bb60048036038101906102b69190612c09565b610a69565b005b6102d760048036038101906102d29190612d1f565b610ac9565b6040516102e4919061369a565b60405180910390f35b61030760048036038101906103029190612c09565b610b6e565b005b610323600480360381019061031e9190612e5c565b610b8e565b005b61032d610bea565b60405161033a919061369a565b60405180910390f35b61035d60048036038101906103589190612e5c565b610bf0565b60405161036a919061369a565b60405180910390f35b61038d60048036038101906103889190612d5f565b610c61565b005b610397610cfa565b6040516103a49190613382565b60405180910390f35b6103c760048036038101906103c29190612e5c565b610d0d565b6040516103d491906132bb565b60405180910390f35b6103e5610dbf565b005b61040160048036038101906103fc9190612b9c565b610f99565b60405161040e919061369a565b60405180910390f35b61041f611051565b005b6104296110d9565b604051610436919061369a565b60405180910390f35b6104476110eb565b60405161045491906132bb565b60405180910390f35b610465611115565b60405161047291906133b8565b60405180910390f35b61049560048036038101906104909190612cdf565b6111a7565b005b6104b160048036038101906104ac9190612c5c565b6111bd565b005b6104cd60048036038101906104c89190612b9c565b61121f565b6040516104da919061369a565b60405180910390f35b6104fd60048036038101906104f89190612e5c565b611237565b60405161050a91906133b8565b60405180910390f35b61051b6112de565b60405161052891906133b8565b60405180910390f35b610539611370565b604051610546919061339d565b60405180910390f35b61056960048036038101906105649190612bc9565b611394565b6040516105769190613382565b60405180910390f35b61059960048036038101906105949190612e13565b611428565b005b6105b560048036038101906105b09190612b9c565b6114be565b005b60006105c2826116cf565b9050919050565b6060600080546105d890613980565b80601f016020809104026020016040519081016040528092919081815260200182805461060490613980565b80156106515780601f1061062657610100808354040283529160200191610651565b820191906000526020600020905b81548152906001019060200180831161063457829003601f168201915b5050505050905090565b600061066682611749565b6106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069c9061357a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106eb82610d0d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610753906135fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661077b6117b5565b73ffffffffffffffffffffffffffffffffffffffff1614806107aa57506107a9816107a46117b5565b611394565b5b6107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e0906134da565b60405180910390fd5b6107f383836117bd565b505050565b600e60009054906101000a900460ff1615610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f906135da565b60405180910390fd5b4262015180600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610897919061377f565b106108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce9061361a565b60405180910390fd5b42600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006001600b5461092c919061377f565b90506113b0811115610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a9061355a565b60405180910390fd5b600b6000815480929190610986906139e3565b91905055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306109de6001866109d99190613860565b611876565b6040518463ffffffff1660e01b81526004016109fc939291906132d6565b602060405180830381600087803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190612d8c565b50610a5933826118a7565b50565b6000600880549050905090565b610a7a610a746117b5565b82611a81565b610ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab09061363a565b60405180910390fd5b610ac4838383611b5f565b505050565b6000610ad483610f99565b8210610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c906133da565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b89838383604051806020016040528060008152506111bd565b505050565b610b9f610b996117b5565b82611a81565b610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd59061367a565b60405180910390fd5b610be781611dc6565b50565b600b5481565b6000610bfa610a5c565b8210610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061365a565b60405180910390fd5b60088281548110610c4f57610c4e613b19565b5b90600052602060002001549050919050565b610c696117b5565b73ffffffffffffffffffffffffffffffffffffffff16610c876110eb565b73ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061359a565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad9061351a565b60405180910390fd5b80915050919050565b610dc76117b5565b73ffffffffffffffffffffffffffffffffffffffff16610de56110eb565b73ffffffffffffffffffffffffffffffffffffffff1614610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e329061359a565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e9691906132bb565b60206040518083038186803b158015610eae57600080fd5b505afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190612e89565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f43929190613359565b602060405180830381600087803b158015610f5d57600080fd5b505af1158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190612d8c565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561100a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611001906134fa565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110596117b5565b73ffffffffffffffffffffffffffffffffffffffff166110776110eb565b73ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c49061359a565b60405180910390fd5b6110d76000611ee3565b565b60006110e6600b54611876565b905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461112490613980565b80601f016020809104026020016040519081016040528092919081815260200182805461115090613980565b801561119d5780601f106111725761010080835404028352916020019161119d565b820191906000526020600020905b81548152906001019060200180831161118057829003601f168201915b5050505050905090565b6111b96111b26117b5565b8383611fa9565b5050565b6111ce6111c86117b5565b83611a81565b61120d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112049061363a565b60405180910390fd5b61121984848484612116565b50505050565b600c6020528060005260406000206000915090505481565b606061124282611749565b611281576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611278906135ba565b60405180910390fd5b600061128b612172565b905060008151116112ab57604051806020016040528060008152506112d6565b806112b584612204565b6040516020016112c6929190613297565b6040516020818303038152906040525b915050919050565b6060600d80546112ed90613980565b80601f016020809104026020016040519081016040528092919081815260200182805461131990613980565b80156113665780601f1061133b57610100808354040283529160200191611366565b820191906000526020600020905b81548152906001019060200180831161134957829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114306117b5565b73ffffffffffffffffffffffffffffffffffffffff1661144e6110eb565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b9061359a565b60405180910390fd5b80600d90805190602001906114ba929190612986565b5050565b6114c66117b5565b73ffffffffffffffffffffffffffffffffffffffff166114e46110eb565b73ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115319061359a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a19061341a565b60405180910390fd5b6115b381611ee3565b50565b6115c18383836116ca565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611604576115ff81612365565b611643565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146116425761164183826123ae565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611686576116818161251b565b6116c5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146116c4576116c382826125ec565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061174257506117418261266b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661183083610d0d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000670de0b6b3a76400008261188c9190613806565b686c6b935b8bbd4000006118a0919061377f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e9061353a565b60405180910390fd5b61192081611749565b15611960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119579061345a565b60405180910390fd5b61196c6000838361274d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119bc919061377f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a7d6000838361275d565b5050565b6000611a8c82611749565b611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac2906134ba565b60405180910390fd5b6000611ad683610d0d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b185750611b178185611394565b5b80611b5657508373ffffffffffffffffffffffffffffffffffffffff16611b3e8461065b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b7f82610d0d565b73ffffffffffffffffffffffffffffffffffffffff1614611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc9061343a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c9061347a565b60405180910390fd5b611c5083838361274d565b611c5b6000826117bd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cab9190613860565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d02919061377f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dc183838361275d565b505050565b6000611dd182610d0d565b9050611ddf8160008461274d565b611dea6000836117bd565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e3a9190613860565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611edf8160008461275d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f9061349a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121099190613382565b60405180910390a3505050565b612121848484611b5f565b61212d84848484612762565b61216c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612163906133fa565b60405180910390fd5b50505050565b6060600d805461218190613980565b80601f01602080910402602001604051908101604052809291908181526020018280546121ad90613980565b80156121fa5780601f106121cf576101008083540402835291602001916121fa565b820191906000526020600020905b8154815290600101906020018083116121dd57829003601f168201915b5050505050905090565b6060600082141561224c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612360565b600082905060005b6000821461227e578080612267906139e3565b915050600a8261227791906137d5565b9150612254565b60008167ffffffffffffffff81111561229a57612299613b48565b5b6040519080825280601f01601f1916602001820160405280156122cc5781602001600182028036833780820191505090505b5090505b60008514612359576001826122e59190613860565b9150600a856122f49190613a2c565b6030612300919061377f565b60f81b81838151811061231657612315613b19565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561235291906137d5565b94506122d0565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016123bb84610f99565b6123c59190613860565b90506000600760008481526020019081526020016000205490508181146124aa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061252f9190613860565b905060006009600084815260200190815260200160002054905060006008838154811061255f5761255e613b19565b5b90600052602060002001549050806008838154811061258157612580613b19565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125d0576125cf613aea565b5b6001900381819060005260206000200160009055905550505050565b60006125f783610f99565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061273657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127465750612745826128f9565b5b9050919050565b6127588383836115b6565b505050565b505050565b60006127838473ffffffffffffffffffffffffffffffffffffffff16612963565b156128ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127ac6117b5565b8786866040518563ffffffff1660e01b81526004016127ce949392919061330d565b602060405180830381600087803b1580156127e857600080fd5b505af192505050801561281957506040513d601f19601f820116820180604052508101906128169190612de6565b60015b61289c573d8060008114612849576040519150601f19603f3d011682016040523d82523d6000602084013e61284e565b606091505b50600081511415612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b906133fa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128f1565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461299290613980565b90600052602060002090601f0160209004810192826129b457600085556129fb565b82601f106129cd57805160ff19168380011785556129fb565b828001600101855582156129fb579182015b828111156129fa5782518255916020019190600101906129df565b5b509050612a089190612a0c565b5090565b5b80821115612a25576000816000905550600101612a0d565b5090565b6000612a3c612a37846136da565b6136b5565b905082815260208101848484011115612a5857612a57613b7c565b5b612a6384828561393e565b509392505050565b6000612a7e612a798461370b565b6136b5565b905082815260208101848484011115612a9a57612a99613b7c565b5b612aa584828561393e565b509392505050565b600081359050612abc8161415c565b92915050565b600081359050612ad181614173565b92915050565b600081519050612ae681614173565b92915050565b600081359050612afb8161418a565b92915050565b600081519050612b108161418a565b92915050565b600082601f830112612b2b57612b2a613b77565b5b8135612b3b848260208601612a29565b91505092915050565b600082601f830112612b5957612b58613b77565b5b8135612b69848260208601612a6b565b91505092915050565b600081359050612b81816141a1565b92915050565b600081519050612b96816141a1565b92915050565b600060208284031215612bb257612bb1613b86565b5b6000612bc084828501612aad565b91505092915050565b60008060408385031215612be057612bdf613b86565b5b6000612bee85828601612aad565b9250506020612bff85828601612aad565b9150509250929050565b600080600060608486031215612c2257612c21613b86565b5b6000612c3086828701612aad565b9350506020612c4186828701612aad565b9250506040612c5286828701612b72565b9150509250925092565b60008060008060808587031215612c7657612c75613b86565b5b6000612c8487828801612aad565b9450506020612c9587828801612aad565b9350506040612ca687828801612b72565b925050606085013567ffffffffffffffff811115612cc757612cc6613b81565b5b612cd387828801612b16565b91505092959194509250565b60008060408385031215612cf657612cf5613b86565b5b6000612d0485828601612aad565b9250506020612d1585828601612ac2565b9150509250929050565b60008060408385031215612d3657612d35613b86565b5b6000612d4485828601612aad565b9250506020612d5585828601612b72565b9150509250929050565b600060208284031215612d7557612d74613b86565b5b6000612d8384828501612ac2565b91505092915050565b600060208284031215612da257612da1613b86565b5b6000612db084828501612ad7565b91505092915050565b600060208284031215612dcf57612dce613b86565b5b6000612ddd84828501612aec565b91505092915050565b600060208284031215612dfc57612dfb613b86565b5b6000612e0a84828501612b01565b91505092915050565b600060208284031215612e2957612e28613b86565b5b600082013567ffffffffffffffff811115612e4757612e46613b81565b5b612e5384828501612b44565b91505092915050565b600060208284031215612e7257612e71613b86565b5b6000612e8084828501612b72565b91505092915050565b600060208284031215612e9f57612e9e613b86565b5b6000612ead84828501612b87565b91505092915050565b612ebf81613894565b82525050565b612ece816138a6565b82525050565b6000612edf8261373c565b612ee98185613752565b9350612ef981856020860161394d565b612f0281613b8b565b840191505092915050565b612f1681613908565b82525050565b6000612f2782613747565b612f318185613763565b9350612f4181856020860161394d565b612f4a81613b8b565b840191505092915050565b6000612f6082613747565b612f6a8185613774565b9350612f7a81856020860161394d565b80840191505092915050565b6000612f93602b83613763565b9150612f9e82613b9c565b604082019050919050565b6000612fb6603283613763565b9150612fc182613beb565b604082019050919050565b6000612fd9602683613763565b9150612fe482613c3a565b604082019050919050565b6000612ffc602583613763565b915061300782613c89565b604082019050919050565b600061301f601c83613763565b915061302a82613cd8565b602082019050919050565b6000613042602483613763565b915061304d82613d01565b604082019050919050565b6000613065601983613763565b915061307082613d50565b602082019050919050565b6000613088602c83613763565b915061309382613d79565b604082019050919050565b60006130ab603883613763565b91506130b682613dc8565b604082019050919050565b60006130ce602a83613763565b91506130d982613e17565b604082019050919050565b60006130f1602983613763565b91506130fc82613e66565b604082019050919050565b6000613114602083613763565b915061311f82613eb5565b602082019050919050565b6000613137601c83613763565b915061314282613ede565b602082019050919050565b600061315a602c83613763565b915061316582613f07565b604082019050919050565b600061317d602083613763565b915061318882613f56565b602082019050919050565b60006131a0602f83613763565b91506131ab82613f7f565b604082019050919050565b60006131c3601683613763565b91506131ce82613fce565b602082019050919050565b60006131e6602183613763565b91506131f182613ff7565b604082019050919050565b6000613209601f83613763565b915061321482614046565b602082019050919050565b600061322c603183613763565b91506132378261406f565b604082019050919050565b600061324f602c83613763565b915061325a826140be565b604082019050919050565b6000613272603083613763565b915061327d8261410d565b604082019050919050565b613291816138fe565b82525050565b60006132a38285612f55565b91506132af8284612f55565b91508190509392505050565b60006020820190506132d06000830184612eb6565b92915050565b60006060820190506132eb6000830186612eb6565b6132f86020830185612eb6565b6133056040830184613288565b949350505050565b60006080820190506133226000830187612eb6565b61332f6020830186612eb6565b61333c6040830185613288565b818103606083015261334e8184612ed4565b905095945050505050565b600060408201905061336e6000830185612eb6565b61337b6020830184613288565b9392505050565b60006020820190506133976000830184612ec5565b92915050565b60006020820190506133b26000830184612f0d565b92915050565b600060208201905081810360008301526133d28184612f1c565b905092915050565b600060208201905081810360008301526133f381612f86565b9050919050565b6000602082019050818103600083015261341381612fa9565b9050919050565b6000602082019050818103600083015261343381612fcc565b9050919050565b6000602082019050818103600083015261345381612fef565b9050919050565b6000602082019050818103600083015261347381613012565b9050919050565b6000602082019050818103600083015261349381613035565b9050919050565b600060208201905081810360008301526134b381613058565b9050919050565b600060208201905081810360008301526134d38161307b565b9050919050565b600060208201905081810360008301526134f38161309e565b9050919050565b60006020820190508181036000830152613513816130c1565b9050919050565b60006020820190508181036000830152613533816130e4565b9050919050565b6000602082019050818103600083015261355381613107565b9050919050565b600060208201905081810360008301526135738161312a565b9050919050565b600060208201905081810360008301526135938161314d565b9050919050565b600060208201905081810360008301526135b381613170565b9050919050565b600060208201905081810360008301526135d381613193565b9050919050565b600060208201905081810360008301526135f3816131b6565b9050919050565b60006020820190508181036000830152613613816131d9565b9050919050565b60006020820190508181036000830152613633816131fc565b9050919050565b600060208201905081810360008301526136538161321f565b9050919050565b6000602082019050818103600083015261367381613242565b9050919050565b6000602082019050818103600083015261369381613265565b9050919050565b60006020820190506136af6000830184613288565b92915050565b60006136bf6136d0565b90506136cb82826139b2565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f5576136f4613b48565b5b6136fe82613b8b565b9050602081019050919050565b600067ffffffffffffffff82111561372657613725613b48565b5b61372f82613b8b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061378a826138fe565b9150613795836138fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ca576137c9613a5d565b5b828201905092915050565b60006137e0826138fe565b91506137eb836138fe565b9250826137fb576137fa613a8c565b5b828204905092915050565b6000613811826138fe565b915061381c836138fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561385557613854613a5d565b5b828202905092915050565b600061386b826138fe565b9150613876836138fe565b92508282101561388957613888613a5d565b5b828203905092915050565b600061389f826138de565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006139138261391a565b9050919050565b60006139258261392c565b9050919050565b6000613937826138de565b9050919050565b82818337600083830152505050565b60005b8381101561396b578082015181840152602081019050613950565b8381111561397a576000848401525b50505050565b6000600282049050600182168061399857607f821691505b602082108114156139ac576139ab613abb565b5b50919050565b6139bb82613b8b565b810181811067ffffffffffffffff821117156139da576139d9613b48565b5b80604052505050565b60006139ee826138fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a2157613a20613a5d565b5b600182019050919050565b6000613a37826138fe565b9150613a42836138fe565b925082613a5257613a51613a8c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d696e743a204d6178696d756d20737570706c79207265616368656400000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e743a204d696e74696e672064697361626c656400000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e743a204461696c79206d696e74206c696d697420657863656564656400600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b61416581613894565b811461417057600080fd5b50565b61417c816138a6565b811461418757600080fd5b50565b614193816138b2565b811461419e57600080fd5b50565b6141aa816138fe565b81146141b557600080fd5b5056fea2646970667358221220e17f7553730b7becbb19cdc817a904ee6814427056658f252f1754305b17e8b164736f6c63430008070033000000000000000000000000131157c6760f78f7ddf877c0019eba175ba4b6f600000000000000000000000068c246505aff01d21d460d7cf2aab7ce3d7e7d5f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80636cb1630f11610104578063b88d4fde116100a2578063e5bcf35b11610071578063e5bcf35b14610531578063e985e9c51461054f578063ece4132e1461057f578063f2fde38b1461059b576101da565b8063b88d4fde14610497578063be13197b146104b3578063c87b56dd146104e3578063d547cfb714610513576101da565b80638c648117116100de5780638c648117146104215780638da5cb5b1461043f57806395d89b411461045d578063a22cb4651461047b576101da565b80636cb1630f146103dd57806370a08231146103e7578063715018a614610417576101da565b80632f745c591161017c5780634f6ccce71161014b5780634f6ccce7146103435780635c40f6f4146103735780635fbef1451461038f5780636352211e146103ad576101da565b80632f745c59146102bd57806342842e0e146102ed57806342966c68146103095780634f02c42014610325576101da565b8063095ea7b3116101b8578063095ea7b31461025d5780631249c58b1461027957806318160ddd1461028357806323b872dd146102a1576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612db9565b6105b7565b6040516102069190613382565b60405180910390f35b6102176105c9565b60405161022491906133b8565b60405180910390f35b61024760048036038101906102429190612e5c565b61065b565b60405161025491906132bb565b60405180910390f35b61027760048036038101906102729190612d1f565b6106e0565b005b6102816107f8565b005b61028b610a5c565b604051610298919061369a565b60405180910390f35b6102bb60048036038101906102b69190612c09565b610a69565b005b6102d760048036038101906102d29190612d1f565b610ac9565b6040516102e4919061369a565b60405180910390f35b61030760048036038101906103029190612c09565b610b6e565b005b610323600480360381019061031e9190612e5c565b610b8e565b005b61032d610bea565b60405161033a919061369a565b60405180910390f35b61035d60048036038101906103589190612e5c565b610bf0565b60405161036a919061369a565b60405180910390f35b61038d60048036038101906103889190612d5f565b610c61565b005b610397610cfa565b6040516103a49190613382565b60405180910390f35b6103c760048036038101906103c29190612e5c565b610d0d565b6040516103d491906132bb565b60405180910390f35b6103e5610dbf565b005b61040160048036038101906103fc9190612b9c565b610f99565b60405161040e919061369a565b60405180910390f35b61041f611051565b005b6104296110d9565b604051610436919061369a565b60405180910390f35b6104476110eb565b60405161045491906132bb565b60405180910390f35b610465611115565b60405161047291906133b8565b60405180910390f35b61049560048036038101906104909190612cdf565b6111a7565b005b6104b160048036038101906104ac9190612c5c565b6111bd565b005b6104cd60048036038101906104c89190612b9c565b61121f565b6040516104da919061369a565b60405180910390f35b6104fd60048036038101906104f89190612e5c565b611237565b60405161050a91906133b8565b60405180910390f35b61051b6112de565b60405161052891906133b8565b60405180910390f35b610539611370565b604051610546919061339d565b60405180910390f35b61056960048036038101906105649190612bc9565b611394565b6040516105769190613382565b60405180910390f35b61059960048036038101906105949190612e13565b611428565b005b6105b560048036038101906105b09190612b9c565b6114be565b005b60006105c2826116cf565b9050919050565b6060600080546105d890613980565b80601f016020809104026020016040519081016040528092919081815260200182805461060490613980565b80156106515780601f1061062657610100808354040283529160200191610651565b820191906000526020600020905b81548152906001019060200180831161063457829003601f168201915b5050505050905090565b600061066682611749565b6106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069c9061357a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106eb82610d0d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610753906135fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661077b6117b5565b73ffffffffffffffffffffffffffffffffffffffff1614806107aa57506107a9816107a46117b5565b611394565b5b6107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e0906134da565b60405180910390fd5b6107f383836117bd565b505050565b600e60009054906101000a900460ff1615610848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083f906135da565b60405180910390fd5b4262015180600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610897919061377f565b106108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce9061361a565b60405180910390fd5b42600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006001600b5461092c919061377f565b90506113b0811115610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a9061355a565b60405180910390fd5b600b6000815480929190610986906139e3565b91905055507f000000000000000000000000131157c6760f78f7ddf877c0019eba175ba4b6f673ffffffffffffffffffffffffffffffffffffffff166323b872dd33306109de6001866109d99190613860565b611876565b6040518463ffffffff1660e01b81526004016109fc939291906132d6565b602060405180830381600087803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190612d8c565b50610a5933826118a7565b50565b6000600880549050905090565b610a7a610a746117b5565b82611a81565b610ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab09061363a565b60405180910390fd5b610ac4838383611b5f565b505050565b6000610ad483610f99565b8210610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c906133da565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b89838383604051806020016040528060008152506111bd565b505050565b610b9f610b996117b5565b82611a81565b610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd59061367a565b60405180910390fd5b610be781611dc6565b50565b600b5481565b6000610bfa610a5c565b8210610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061365a565b60405180910390fd5b60088281548110610c4f57610c4e613b19565b5b90600052602060002001549050919050565b610c696117b5565b73ffffffffffffffffffffffffffffffffffffffff16610c876110eb565b73ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061359a565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad9061351a565b60405180910390fd5b80915050919050565b610dc76117b5565b73ffffffffffffffffffffffffffffffffffffffff16610de56110eb565b73ffffffffffffffffffffffffffffffffffffffff1614610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e329061359a565b60405180910390fd5b60007f000000000000000000000000131157c6760f78f7ddf877c0019eba175ba4b6f673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e9691906132bb565b60206040518083038186803b158015610eae57600080fd5b505afa158015610ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee69190612e89565b90507f000000000000000000000000131157c6760f78f7ddf877c0019eba175ba4b6f673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610f43929190613359565b602060405180830381600087803b158015610f5d57600080fd5b505af1158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190612d8c565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561100a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611001906134fa565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110596117b5565b73ffffffffffffffffffffffffffffffffffffffff166110776110eb565b73ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c49061359a565b60405180910390fd5b6110d76000611ee3565b565b60006110e6600b54611876565b905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461112490613980565b80601f016020809104026020016040519081016040528092919081815260200182805461115090613980565b801561119d5780601f106111725761010080835404028352916020019161119d565b820191906000526020600020905b81548152906001019060200180831161118057829003601f168201915b5050505050905090565b6111b96111b26117b5565b8383611fa9565b5050565b6111ce6111c86117b5565b83611a81565b61120d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112049061363a565b60405180910390fd5b61121984848484612116565b50505050565b600c6020528060005260406000206000915090505481565b606061124282611749565b611281576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611278906135ba565b60405180910390fd5b600061128b612172565b905060008151116112ab57604051806020016040528060008152506112d6565b806112b584612204565b6040516020016112c6929190613297565b6040516020818303038152906040525b915050919050565b6060600d80546112ed90613980565b80601f016020809104026020016040519081016040528092919081815260200182805461131990613980565b80156113665780601f1061133b57610100808354040283529160200191611366565b820191906000526020600020905b81548152906001019060200180831161134957829003601f168201915b5050505050905090565b7f000000000000000000000000131157c6760f78f7ddf877c0019eba175ba4b6f681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114306117b5565b73ffffffffffffffffffffffffffffffffffffffff1661144e6110eb565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b9061359a565b60405180910390fd5b80600d90805190602001906114ba929190612986565b5050565b6114c66117b5565b73ffffffffffffffffffffffffffffffffffffffff166114e46110eb565b73ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115319061359a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a19061341a565b60405180910390fd5b6115b381611ee3565b50565b6115c18383836116ca565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611604576115ff81612365565b611643565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146116425761164183826123ae565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611686576116818161251b565b6116c5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146116c4576116c382826125ec565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061174257506117418261266b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661183083610d0d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000670de0b6b3a76400008261188c9190613806565b686c6b935b8bbd4000006118a0919061377f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e9061353a565b60405180910390fd5b61192081611749565b15611960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119579061345a565b60405180910390fd5b61196c6000838361274d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119bc919061377f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a7d6000838361275d565b5050565b6000611a8c82611749565b611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac2906134ba565b60405180910390fd5b6000611ad683610d0d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b185750611b178185611394565b5b80611b5657508373ffffffffffffffffffffffffffffffffffffffff16611b3e8461065b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b7f82610d0d565b73ffffffffffffffffffffffffffffffffffffffff1614611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc9061343a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c9061347a565b60405180910390fd5b611c5083838361274d565b611c5b6000826117bd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cab9190613860565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d02919061377f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611dc183838361275d565b505050565b6000611dd182610d0d565b9050611ddf8160008461274d565b611dea6000836117bd565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e3a9190613860565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611edf8160008461275d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f9061349a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121099190613382565b60405180910390a3505050565b612121848484611b5f565b61212d84848484612762565b61216c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612163906133fa565b60405180910390fd5b50505050565b6060600d805461218190613980565b80601f01602080910402602001604051908101604052809291908181526020018280546121ad90613980565b80156121fa5780601f106121cf576101008083540402835291602001916121fa565b820191906000526020600020905b8154815290600101906020018083116121dd57829003601f168201915b5050505050905090565b6060600082141561224c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612360565b600082905060005b6000821461227e578080612267906139e3565b915050600a8261227791906137d5565b9150612254565b60008167ffffffffffffffff81111561229a57612299613b48565b5b6040519080825280601f01601f1916602001820160405280156122cc5781602001600182028036833780820191505090505b5090505b60008514612359576001826122e59190613860565b9150600a856122f49190613a2c565b6030612300919061377f565b60f81b81838151811061231657612315613b19565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561235291906137d5565b94506122d0565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016123bb84610f99565b6123c59190613860565b90506000600760008481526020019081526020016000205490508181146124aa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061252f9190613860565b905060006009600084815260200190815260200160002054905060006008838154811061255f5761255e613b19565b5b90600052602060002001549050806008838154811061258157612580613b19565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125d0576125cf613aea565b5b6001900381819060005260206000200160009055905550505050565b60006125f783610f99565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061273657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127465750612745826128f9565b5b9050919050565b6127588383836115b6565b505050565b505050565b60006127838473ffffffffffffffffffffffffffffffffffffffff16612963565b156128ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127ac6117b5565b8786866040518563ffffffff1660e01b81526004016127ce949392919061330d565b602060405180830381600087803b1580156127e857600080fd5b505af192505050801561281957506040513d601f19601f820116820180604052508101906128169190612de6565b60015b61289c573d8060008114612849576040519150601f19603f3d011682016040523d82523d6000602084013e61284e565b606091505b50600081511415612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b906133fa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128f1565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461299290613980565b90600052602060002090601f0160209004810192826129b457600085556129fb565b82601f106129cd57805160ff19168380011785556129fb565b828001600101855582156129fb579182015b828111156129fa5782518255916020019190600101906129df565b5b509050612a089190612a0c565b5090565b5b80821115612a25576000816000905550600101612a0d565b5090565b6000612a3c612a37846136da565b6136b5565b905082815260208101848484011115612a5857612a57613b7c565b5b612a6384828561393e565b509392505050565b6000612a7e612a798461370b565b6136b5565b905082815260208101848484011115612a9a57612a99613b7c565b5b612aa584828561393e565b509392505050565b600081359050612abc8161415c565b92915050565b600081359050612ad181614173565b92915050565b600081519050612ae681614173565b92915050565b600081359050612afb8161418a565b92915050565b600081519050612b108161418a565b92915050565b600082601f830112612b2b57612b2a613b77565b5b8135612b3b848260208601612a29565b91505092915050565b600082601f830112612b5957612b58613b77565b5b8135612b69848260208601612a6b565b91505092915050565b600081359050612b81816141a1565b92915050565b600081519050612b96816141a1565b92915050565b600060208284031215612bb257612bb1613b86565b5b6000612bc084828501612aad565b91505092915050565b60008060408385031215612be057612bdf613b86565b5b6000612bee85828601612aad565b9250506020612bff85828601612aad565b9150509250929050565b600080600060608486031215612c2257612c21613b86565b5b6000612c3086828701612aad565b9350506020612c4186828701612aad565b9250506040612c5286828701612b72565b9150509250925092565b60008060008060808587031215612c7657612c75613b86565b5b6000612c8487828801612aad565b9450506020612c9587828801612aad565b9350506040612ca687828801612b72565b925050606085013567ffffffffffffffff811115612cc757612cc6613b81565b5b612cd387828801612b16565b91505092959194509250565b60008060408385031215612cf657612cf5613b86565b5b6000612d0485828601612aad565b9250506020612d1585828601612ac2565b9150509250929050565b60008060408385031215612d3657612d35613b86565b5b6000612d4485828601612aad565b9250506020612d5585828601612b72565b9150509250929050565b600060208284031215612d7557612d74613b86565b5b6000612d8384828501612ac2565b91505092915050565b600060208284031215612da257612da1613b86565b5b6000612db084828501612ad7565b91505092915050565b600060208284031215612dcf57612dce613b86565b5b6000612ddd84828501612aec565b91505092915050565b600060208284031215612dfc57612dfb613b86565b5b6000612e0a84828501612b01565b91505092915050565b600060208284031215612e2957612e28613b86565b5b600082013567ffffffffffffffff811115612e4757612e46613b81565b5b612e5384828501612b44565b91505092915050565b600060208284031215612e7257612e71613b86565b5b6000612e8084828501612b72565b91505092915050565b600060208284031215612e9f57612e9e613b86565b5b6000612ead84828501612b87565b91505092915050565b612ebf81613894565b82525050565b612ece816138a6565b82525050565b6000612edf8261373c565b612ee98185613752565b9350612ef981856020860161394d565b612f0281613b8b565b840191505092915050565b612f1681613908565b82525050565b6000612f2782613747565b612f318185613763565b9350612f4181856020860161394d565b612f4a81613b8b565b840191505092915050565b6000612f6082613747565b612f6a8185613774565b9350612f7a81856020860161394d565b80840191505092915050565b6000612f93602b83613763565b9150612f9e82613b9c565b604082019050919050565b6000612fb6603283613763565b9150612fc182613beb565b604082019050919050565b6000612fd9602683613763565b9150612fe482613c3a565b604082019050919050565b6000612ffc602583613763565b915061300782613c89565b604082019050919050565b600061301f601c83613763565b915061302a82613cd8565b602082019050919050565b6000613042602483613763565b915061304d82613d01565b604082019050919050565b6000613065601983613763565b915061307082613d50565b602082019050919050565b6000613088602c83613763565b915061309382613d79565b604082019050919050565b60006130ab603883613763565b91506130b682613dc8565b604082019050919050565b60006130ce602a83613763565b91506130d982613e17565b604082019050919050565b60006130f1602983613763565b91506130fc82613e66565b604082019050919050565b6000613114602083613763565b915061311f82613eb5565b602082019050919050565b6000613137601c83613763565b915061314282613ede565b602082019050919050565b600061315a602c83613763565b915061316582613f07565b604082019050919050565b600061317d602083613763565b915061318882613f56565b602082019050919050565b60006131a0602f83613763565b91506131ab82613f7f565b604082019050919050565b60006131c3601683613763565b91506131ce82613fce565b602082019050919050565b60006131e6602183613763565b91506131f182613ff7565b604082019050919050565b6000613209601f83613763565b915061321482614046565b602082019050919050565b600061322c603183613763565b91506132378261406f565b604082019050919050565b600061324f602c83613763565b915061325a826140be565b604082019050919050565b6000613272603083613763565b915061327d8261410d565b604082019050919050565b613291816138fe565b82525050565b60006132a38285612f55565b91506132af8284612f55565b91508190509392505050565b60006020820190506132d06000830184612eb6565b92915050565b60006060820190506132eb6000830186612eb6565b6132f86020830185612eb6565b6133056040830184613288565b949350505050565b60006080820190506133226000830187612eb6565b61332f6020830186612eb6565b61333c6040830185613288565b818103606083015261334e8184612ed4565b905095945050505050565b600060408201905061336e6000830185612eb6565b61337b6020830184613288565b9392505050565b60006020820190506133976000830184612ec5565b92915050565b60006020820190506133b26000830184612f0d565b92915050565b600060208201905081810360008301526133d28184612f1c565b905092915050565b600060208201905081810360008301526133f381612f86565b9050919050565b6000602082019050818103600083015261341381612fa9565b9050919050565b6000602082019050818103600083015261343381612fcc565b9050919050565b6000602082019050818103600083015261345381612fef565b9050919050565b6000602082019050818103600083015261347381613012565b9050919050565b6000602082019050818103600083015261349381613035565b9050919050565b600060208201905081810360008301526134b381613058565b9050919050565b600060208201905081810360008301526134d38161307b565b9050919050565b600060208201905081810360008301526134f38161309e565b9050919050565b60006020820190508181036000830152613513816130c1565b9050919050565b60006020820190508181036000830152613533816130e4565b9050919050565b6000602082019050818103600083015261355381613107565b9050919050565b600060208201905081810360008301526135738161312a565b9050919050565b600060208201905081810360008301526135938161314d565b9050919050565b600060208201905081810360008301526135b381613170565b9050919050565b600060208201905081810360008301526135d381613193565b9050919050565b600060208201905081810360008301526135f3816131b6565b9050919050565b60006020820190508181036000830152613613816131d9565b9050919050565b60006020820190508181036000830152613633816131fc565b9050919050565b600060208201905081810360008301526136538161321f565b9050919050565b6000602082019050818103600083015261367381613242565b9050919050565b6000602082019050818103600083015261369381613265565b9050919050565b60006020820190506136af6000830184613288565b92915050565b60006136bf6136d0565b90506136cb82826139b2565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f5576136f4613b48565b5b6136fe82613b8b565b9050602081019050919050565b600067ffffffffffffffff82111561372657613725613b48565b5b61372f82613b8b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061378a826138fe565b9150613795836138fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ca576137c9613a5d565b5b828201905092915050565b60006137e0826138fe565b91506137eb836138fe565b9250826137fb576137fa613a8c565b5b828204905092915050565b6000613811826138fe565b915061381c836138fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561385557613854613a5d565b5b828202905092915050565b600061386b826138fe565b9150613876836138fe565b92508282101561388957613888613a5d565b5b828203905092915050565b600061389f826138de565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006139138261391a565b9050919050565b60006139258261392c565b9050919050565b6000613937826138de565b9050919050565b82818337600083830152505050565b60005b8381101561396b578082015181840152602081019050613950565b8381111561397a576000848401525b50505050565b6000600282049050600182168061399857607f821691505b602082108114156139ac576139ab613abb565b5b50919050565b6139bb82613b8b565b810181811067ffffffffffffffff821117156139da576139d9613b48565b5b80604052505050565b60006139ee826138fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a2157613a20613a5d565b5b600182019050919050565b6000613a37826138fe565b9150613a42836138fe565b925082613a5257613a51613a8c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d696e743a204d6178696d756d20737570706c79207265616368656400000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e743a204d696e74696e672064697361626c656400000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e743a204461696c79206d696e74206c696d697420657863656564656400600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b61416581613894565b811461417057600080fd5b50565b61417c816138a6565b811461418757600080fd5b50565b614193816138b2565b811461419e57600080fd5b50565b6141aa816138fe565b81146141b557600080fd5b5056fea2646970667358221220e17f7553730b7becbb19cdc817a904ee6814427056658f252f1754305b17e8b164736f6c63430008070033

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

000000000000000000000000131157c6760f78f7ddf877c0019eba175ba4b6f600000000000000000000000068c246505aff01d21d460d7cf2aab7ce3d7e7d5f

-----Decoded View---------------
Arg [0] : bigSBAddress (address): 0x131157c6760f78f7dDF877C0019Eba175BA4b6F6
Arg [1] : receiver (address): 0x68c246505aFF01D21d460d7CF2Aab7Ce3D7E7D5F

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000131157c6760f78f7ddf877c0019eba175ba4b6f6
Arg [1] : 00000000000000000000000068c246505aff01d21d460d7cf2aab7ce3d7e7d5f


Deployed Bytecode Sourcemap

421:2379:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2488:98:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4000:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3538:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1722:502:0;;;:::i;:::-;;1615:111:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4727:330:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1291:253:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5123:179:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;529:241:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;636:21:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1798:230:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1370:109:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;777:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2191:235:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2646:152:0;;;:::i;:::-;;1929:205:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:1;;;:::i;:::-;;1489:97:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1036:85:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2650:102:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4284:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5368:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;663:52:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2818:329:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1179:88:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;496:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4503:162:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1273:91:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1918:198:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2435:205:0;2570:4;2597:36;2621:11;2597:23;:36::i;:::-;2590:43;;2435:205;;;:::o;2488:98:3:-;2542:13;2574:5;2567:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2488:98;:::o;4000:217::-;4076:7;4103:16;4111:7;4103;:16::i;:::-;4095:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4186:15;:24;4202:7;4186:24;;;;;;;;;;;;;;;;;;;;;4179:31;;4000:217;;;:::o;3538:401::-;3618:13;3634:23;3649:7;3634:14;:23::i;:::-;3618:39;;3681:5;3675:11;;:2;:11;;;;3667:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3772:5;3756:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3781:37;3798:5;3805:12;:10;:12::i;:::-;3781:16;:37::i;:::-;3756:62;3735:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3911:21;3920:2;3924:7;3911:8;:21::i;:::-;3608:331;3538:401;;:::o;1722:502:0:-;1766:17;;;;;;;;;;;1765:18;1757:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;1869:15;1859:8;1829:17;:29;1847:10;1829:29;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;1828:56;1820:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;1962:15;1930:17;:29;1948:10;1930:29;;;;;;;;;;;;;;;:47;;;;1987:15;2012:1;2005:6;;:8;;;;:::i;:::-;1987:26;;626:4;2031:7;:19;;2023:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2093:6;;:8;;;;;;;;;:::i;:::-;;;;;;2111:5;:18;;;2130:10;2150:4;2157:23;2178:1;2170:7;:9;;;;:::i;:::-;2157:12;:23::i;:::-;2111:70;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2191:26;2197:10;2209:7;2191:5;:26::i;:::-;1747:477;1722:502::o;1615:111:7:-;1676:7;1702:10;:17;;;;1695:24;;1615:111;:::o;4727:330:3:-;4916:41;4935:12;:10;:12::i;:::-;4949:7;4916:18;:41::i;:::-;4908:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5022:28;5032:4;5038:2;5042:7;5022:9;:28::i;:::-;4727:330;;;:::o;1291:253:7:-;1388:7;1423:23;1440:5;1423:16;:23::i;:::-;1415:5;:31;1407:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1511:12;:19;1524:5;1511:19;;;;;;;;;;;;;;;:26;1531:5;1511:26;;;;;;;;;;;;1504:33;;1291:253;;;;:::o;5123:179:3:-;5256:39;5273:4;5279:2;5283:7;5256:39;;;;;;;;;;;;:16;:39::i;:::-;5123:179;;;:::o;529:241:6:-;645:41;664:12;:10;:12::i;:::-;678:7;645:18;:41::i;:::-;637:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;749:14;755:7;749:5;:14::i;:::-;529:241;:::o;636:21:0:-;;;;:::o;1798:230:7:-;1873:7;1908:30;:28;:30::i;:::-;1900:5;:38;1892:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2004:10;2015:5;2004:17;;;;;;;;:::i;:::-;;;;;;;;;;1997:24;;1798:230;;;:::o;1370:109:0:-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1458:14:0::1;1438:17;;:34;;;;;;;;;;;;;;;;;;1370:109:::0;:::o;777:29::-;;;;;;;;;;;;;:::o;2191:235:3:-;2263:7;2282:13;2298:7;:16;2306:7;2298:16;;;;;;;;;;;;;;;;;;;;;2282:32;;2349:1;2332:19;;:5;:19;;;;2324:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2414:5;2407:12;;;2191:235;;;:::o;2646:152:0:-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2700:14:0::1;2717:5;:15;;;2741:4;2717:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2700:47;;2757:5;:14;;;2772:10;2784:6;2757:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2690:108;2646:152::o:0;1929:205:3:-;2001:7;2045:1;2028:19;;:5;:19;;;;2020:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2111:9;:16;2121:5;2111:16;;;;;;;;;;;;;;;;2104:23;;1929:205;;;:::o;1668:101:1:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;1489:97:0:-;1534:7;1559:20;1572:6;;1559:12;:20::i;:::-;1552:27;;1489:97;:::o;1036:85:1:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;2650:102:3:-;2706:13;2738:7;2731:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:102;:::o;4284:153::-;4378:52;4397:12;:10;:12::i;:::-;4411:8;4421;4378:18;:52::i;:::-;4284:153;;:::o;5368:320::-;5537:41;5556:12;:10;:12::i;:::-;5570:7;5537:18;:41::i;:::-;5529:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5642:39;5656:4;5662:2;5666:7;5675:5;5642:13;:39::i;:::-;5368:320;;;;:::o;663:52:0:-;;;;;;;;;;;;;;;;;:::o;2818:329:3:-;2891:13;2924:16;2932:7;2924;:16::i;:::-;2916:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3003:21;3027:10;:8;:10::i;:::-;3003:34;;3078:1;3060:7;3054:21;:25;:86;;;;;;;;;;;;;;;;;3106:7;3115:18;:7;:16;:18::i;:::-;3089:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3054:86;3047:93;;;2818:329;;;:::o;1179:88:0:-;1224:13;1256:4;1249:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1179:88;:::o;496:29::-;;;:::o;4503:162:3:-;4600:4;4623:18;:25;4642:5;4623:25;;;;;;;;;;;;;;;:35;4649:8;4623:35;;;;;;;;;;;;;;;;;;;;;;;;;4616:42;;4503:162;;;;:::o;1273:91:0:-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1351:6:0::1;1344:4;:13;;;;;;;;;;;;:::i;:::-;;1273:91:::0;:::o;1918:198:1:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;2624:572:7:-;2763:45;2790:4;2796:2;2800:7;2763:26;:45::i;:::-;2839:1;2823:18;;:4;:18;;;2819:183;;;2857:40;2889:7;2857:31;:40::i;:::-;2819:183;;;2926:2;2918:10;;:4;:10;;;2914:88;;2944:47;2977:4;2983:7;2944:32;:47::i;:::-;2914:88;2819:183;3029:1;3015:16;;:2;:16;;;3011:179;;;3047:45;3084:7;3047:36;:45::i;:::-;3011:179;;;3119:4;3113:10;;:2;:10;;;3109:81;;3139:40;3167:2;3171:7;3139:27;:40::i;:::-;3109:81;3011:179;2624:572;;;:::o;13669:122:3:-;;;;:::o;990:222:7:-;1092:4;1130:35;1115:50;;;:11;:50;;;;:90;;;;1169:36;1193:11;1169:23;:36::i;:::-;1115:90;1108:97;;990:222;;;:::o;7160:125:3:-;7225:4;7276:1;7248:30;;:7;:16;7256:7;7248:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7241:37;;7160:125;;;:::o;640:96:11:-;693:7;719:10;712:17;;640:96;:::o;11169:171:3:-;11270:2;11243:15;:24;11259:7;11243:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11325:7;11321:2;11287:46;;11296:23;11311:7;11296:14;:23::i;:::-;11287:46;;;;;;;;;;;;11169:171;;:::o;1592:124:0:-;1653:7;1702;1692;:17;;;;:::i;:::-;571:10;1678:31;;;;:::i;:::-;1671:38;;1592:124;;;:::o;9079:427:3:-;9172:1;9158:16;;:2;:16;;;;9150:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9230:16;9238:7;9230;:16::i;:::-;9229:17;9221:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9290:45;9319:1;9323:2;9327:7;9290:20;:45::i;:::-;9363:1;9346:9;:13;9356:2;9346:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9393:2;9374:7;:16;9382:7;9374:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9436:7;9432:2;9411:33;;9428:1;9411:33;;;;;;;;;;;;9455:44;9483:1;9487:2;9491:7;9455:19;:44::i;:::-;9079:427;;:::o;7443:344::-;7536:4;7560:16;7568:7;7560;:16::i;:::-;7552:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7635:13;7651:23;7666:7;7651:14;:23::i;:::-;7635:39;;7703:5;7692:16;;:7;:16;;;:52;;;;7712:32;7729:5;7736:7;7712:16;:32::i;:::-;7692:52;:87;;;;7772:7;7748:31;;:20;7760:7;7748:11;:20::i;:::-;:31;;;7692:87;7684:96;;;7443:344;;;;:::o;10453:605::-;10607:4;10580:31;;:23;10595:7;10580:14;:23::i;:::-;:31;;;10572:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10685:1;10671:16;;:2;:16;;;;10663:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10739:39;10760:4;10766:2;10770:7;10739:20;:39::i;:::-;10840:29;10857:1;10861:7;10840:8;:29::i;:::-;10899:1;10880:9;:15;10890:4;10880:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10927:1;10910:9;:13;10920:2;10910:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10957:2;10938:7;:16;10946:7;10938:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10994:7;10990:2;10975:27;;10984:4;10975:27;;;;;;;;;;;;11013:38;11033:4;11039:2;11043:7;11013:19;:38::i;:::-;10453:605;;;:::o;9723:406::-;9782:13;9798:23;9813:7;9798:14;:23::i;:::-;9782:39;;9832:48;9853:5;9868:1;9872:7;9832:20;:48::i;:::-;9918:29;9935:1;9939:7;9918:8;:29::i;:::-;9978:1;9958:9;:16;9968:5;9958:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;9996:7;:16;10004:7;9996:16;;;;;;;;;;;;9989:23;;;;;;;;;;;10056:7;10052:1;10028:36;;10037:5;10028:36;;;;;;;;;;;;10075:47;10095:5;10110:1;10114:7;10075:19;:47::i;:::-;9772:357;9723:406;:::o;2270:187:1:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;11475:307:3:-;11625:8;11616:17;;:5;:17;;;;11608:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11711:8;11673:18;:25;11692:5;11673:25;;;;;;;;;;;;;;;:35;11699:8;11673:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11756:8;11734:41;;11749:5;11734:41;;;11766:8;11734:41;;;;;;:::i;:::-;;;;;;;;11475:307;;;:::o;6550:::-;6701:28;6711:4;6717:2;6721:7;6701:9;:28::i;:::-;6747:48;6770:4;6776:2;6780:7;6789:5;6747:22;:48::i;:::-;6739:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6550:307;;;;:::o;1078:95:0:-;1130:13;1162:4;1155:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1078:95;:::o;328:703:12:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;3902:161:7:-;4005:10;:17;;;;3978:15;:24;3994:7;3978:24;;;;;;;;;;;:44;;;;4032:10;4048:7;4032:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3902:161;:::o;4680:970::-;4942:22;4992:1;4967:22;4984:4;4967:16;:22::i;:::-;:26;;;;:::i;:::-;4942:51;;5003:18;5024:17;:26;5042:7;5024:26;;;;;;;;;;;;5003:47;;5168:14;5154:10;:28;5150:323;;5198:19;5220:12;:18;5233:4;5220:18;;;;;;;;;;;;;;;:34;5239:14;5220:34;;;;;;;;;;;;5198:56;;5302:11;5269:12;:18;5282:4;5269:18;;;;;;;;;;;;;;;:30;5288:10;5269:30;;;;;;;;;;;:44;;;;5418:10;5385:17;:30;5403:11;5385:30;;;;;;;;;;;:43;;;;5184:289;5150:323;5566:17;:26;5584:7;5566:26;;;;;;;;;;;5559:33;;;5609:12;:18;5622:4;5609:18;;;;;;;;;;;;;;;:34;5628:14;5609:34;;;;;;;;;;;5602:41;;;4761:889;;4680:970;;:::o;5938:1061::-;6187:22;6232:1;6212:10;:17;;;;:21;;;;:::i;:::-;6187:46;;6243:18;6264:15;:24;6280:7;6264:24;;;;;;;;;;;;6243:45;;6610:19;6632:10;6643:14;6632:26;;;;;;;;:::i;:::-;;;;;;;;;;6610:48;;6694:11;6669:10;6680;6669:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6804:10;6773:15;:28;6789:11;6773:28;;;;;;;;;;;:41;;;;6942:15;:24;6958:7;6942:24;;;;;;;;;;;6935:31;;;6976:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6009:990;;;5938:1061;:::o;3490:217::-;3574:14;3591:20;3608:2;3591:16;:20::i;:::-;3574:37;;3648:7;3621:12;:16;3634:2;3621:16;;;;;;;;;;;;;;;:24;3638:6;3621:24;;;;;;;;;;;:34;;;;3694:6;3665:17;:26;3683:7;3665:26;;;;;;;;;;;:35;;;;3564:143;3490:217;;:::o;1570:300:3:-;1672:4;1722:25;1707:40;;;:11;:40;;;;:104;;;;1778:33;1763:48;;;:11;:48;;;;1707:104;:156;;;;1827:36;1851:11;1827:23;:36::i;:::-;1707:156;1688:175;;1570:300;;;:::o;2230:199:0:-;2377:45;2404:4;2410:2;2414:7;2377:26;:45::i;:::-;2230:199;;;:::o;14163:121:3:-;;;;:::o;12335:778::-;12485:4;12505:15;:2;:13;;;:15::i;:::-;12501:606;;;12556:2;12540:36;;;12577:12;:10;:12::i;:::-;12591:4;12597:7;12606:5;12540:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12536:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12796:1;12779:6;:13;:18;12775:266;;;12821:60;;;;;;;;;;:::i;:::-;;;;;;;;12775:266;12993:6;12987:13;12978:6;12974:2;12970:15;12963:38;12536:519;12672:41;;;12662:51;;;:6;:51;;;;12655:58;;;;;12501:606;13092:4;13085:11;;12335:778;;;;;;;:::o;829:155:13:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;1175:320:10:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:15:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:143::-;2477:5;2508:6;2502:13;2493:22;;2524:33;2551:5;2524:33;:::i;:::-;2420:143;;;;:::o;2569:329::-;2628:6;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2569:329;;;;:::o;2904:474::-;2972:6;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;2904:474;;;;;:::o;3384:619::-;3461:6;3469;3477;3526:2;3514:9;3505:7;3501:23;3497:32;3494:119;;;3532:79;;:::i;:::-;3494:119;3652:1;3677:53;3722:7;3713:6;3702:9;3698:22;3677:53;:::i;:::-;3667:63;;3623:117;3779:2;3805:53;3850:7;3841:6;3830:9;3826:22;3805:53;:::i;:::-;3795:63;;3750:118;3907:2;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3878:118;3384:619;;;;;:::o;4009:943::-;4104:6;4112;4120;4128;4177:3;4165:9;4156:7;4152:23;4148:33;4145:120;;;4184:79;;:::i;:::-;4145:120;4304:1;4329:53;4374:7;4365:6;4354:9;4350:22;4329:53;:::i;:::-;4319:63;;4275:117;4431:2;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4402:118;4559:2;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4530:118;4715:2;4704:9;4700:18;4687:32;4746:18;4738:6;4735:30;4732:117;;;4768:79;;:::i;:::-;4732:117;4873:62;4927:7;4918:6;4907:9;4903:22;4873:62;:::i;:::-;4863:72;;4658:287;4009:943;;;;;;;:::o;4958:468::-;5023:6;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:50;5401:7;5392:6;5381:9;5377:22;5359:50;:::i;:::-;5349:60;;5304:115;4958:468;;;;;:::o;5432:474::-;5500:6;5508;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5810:2;5836:53;5881:7;5872:6;5861:9;5857:22;5836:53;:::i;:::-;5826:63;;5781:118;5432:474;;;;;:::o;5912:323::-;5968:6;6017:2;6005:9;5996:7;5992:23;5988:32;5985:119;;;6023:79;;:::i;:::-;5985:119;6143:1;6168:50;6210:7;6201:6;6190:9;6186:22;6168:50;:::i;:::-;6158:60;;6114:114;5912:323;;;;:::o;6241:345::-;6308:6;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:61;6561:7;6552:6;6541:9;6537:22;6508:61;:::i;:::-;6498:71;;6454:125;6241:345;;;;:::o;6592:327::-;6650:6;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:52;6894:7;6885:6;6874:9;6870:22;6850:52;:::i;:::-;6840:62;;6796:116;6592:327;;;;:::o;6925:349::-;6994:6;7043:2;7031:9;7022:7;7018:23;7014:32;7011:119;;;7049:79;;:::i;:::-;7011:119;7169:1;7194:63;7249:7;7240:6;7229:9;7225:22;7194:63;:::i;:::-;7184:73;;7140:127;6925:349;;;;:::o;7280:509::-;7349:6;7398:2;7386:9;7377:7;7373:23;7369:32;7366:119;;;7404:79;;:::i;:::-;7366:119;7552:1;7541:9;7537:17;7524:31;7582:18;7574:6;7571:30;7568:117;;;7604:79;;:::i;:::-;7568:117;7709:63;7764:7;7755:6;7744:9;7740:22;7709:63;:::i;:::-;7699:73;;7495:287;7280:509;;;;:::o;7795:329::-;7854:6;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;7795:329;;;;:::o;8130:351::-;8200:6;8249:2;8237:9;8228:7;8224:23;8220:32;8217:119;;;8255:79;;:::i;:::-;8217:119;8375:1;8400:64;8456:7;8447:6;8436:9;8432:22;8400:64;:::i;:::-;8390:74;;8346:128;8130:351;;;;:::o;8487:118::-;8574:24;8592:5;8574:24;:::i;:::-;8569:3;8562:37;8487:118;;:::o;8611:109::-;8692:21;8707:5;8692:21;:::i;:::-;8687:3;8680:34;8611:109;;:::o;8726:360::-;8812:3;8840:38;8872:5;8840:38;:::i;:::-;8894:70;8957:6;8952:3;8894:70;:::i;:::-;8887:77;;8973:52;9018:6;9013:3;9006:4;8999:5;8995:16;8973:52;:::i;:::-;9050:29;9072:6;9050:29;:::i;:::-;9045:3;9041:39;9034:46;;8816:270;8726:360;;;;:::o;9092:159::-;9193:51;9238:5;9193:51;:::i;:::-;9188:3;9181:64;9092:159;;:::o;9257:364::-;9345:3;9373:39;9406:5;9373:39;:::i;:::-;9428:71;9492:6;9487:3;9428:71;:::i;:::-;9421:78;;9508:52;9553:6;9548:3;9541:4;9534:5;9530:16;9508:52;:::i;:::-;9585:29;9607:6;9585:29;:::i;:::-;9580:3;9576:39;9569:46;;9349:272;9257:364;;;;:::o;9627:377::-;9733:3;9761:39;9794:5;9761:39;:::i;:::-;9816:89;9898:6;9893:3;9816:89;:::i;:::-;9809:96;;9914:52;9959:6;9954:3;9947:4;9940:5;9936:16;9914:52;:::i;:::-;9991:6;9986:3;9982:16;9975:23;;9737:267;9627:377;;;;:::o;10010:366::-;10152:3;10173:67;10237:2;10232:3;10173:67;:::i;:::-;10166:74;;10249:93;10338:3;10249:93;:::i;:::-;10367:2;10362:3;10358:12;10351:19;;10010:366;;;:::o;10382:::-;10524:3;10545:67;10609:2;10604:3;10545:67;:::i;:::-;10538:74;;10621:93;10710:3;10621:93;:::i;:::-;10739:2;10734:3;10730:12;10723:19;;10382:366;;;:::o;10754:::-;10896:3;10917:67;10981:2;10976:3;10917:67;:::i;:::-;10910:74;;10993:93;11082:3;10993:93;:::i;:::-;11111:2;11106:3;11102:12;11095:19;;10754:366;;;:::o;11126:::-;11268:3;11289:67;11353:2;11348:3;11289:67;:::i;:::-;11282:74;;11365:93;11454:3;11365:93;:::i;:::-;11483:2;11478:3;11474:12;11467:19;;11126:366;;;:::o;11498:::-;11640:3;11661:67;11725:2;11720:3;11661:67;:::i;:::-;11654:74;;11737:93;11826:3;11737:93;:::i;:::-;11855:2;11850:3;11846:12;11839:19;;11498:366;;;:::o;11870:::-;12012:3;12033:67;12097:2;12092:3;12033:67;:::i;:::-;12026:74;;12109:93;12198:3;12109:93;:::i;:::-;12227:2;12222:3;12218:12;12211:19;;11870:366;;;:::o;12242:::-;12384:3;12405:67;12469:2;12464:3;12405:67;:::i;:::-;12398:74;;12481:93;12570:3;12481:93;:::i;:::-;12599:2;12594:3;12590:12;12583:19;;12242:366;;;:::o;12614:::-;12756:3;12777:67;12841:2;12836:3;12777:67;:::i;:::-;12770:74;;12853:93;12942:3;12853:93;:::i;:::-;12971:2;12966:3;12962:12;12955:19;;12614:366;;;:::o;12986:::-;13128:3;13149:67;13213:2;13208:3;13149:67;:::i;:::-;13142:74;;13225:93;13314:3;13225:93;:::i;:::-;13343:2;13338:3;13334:12;13327:19;;12986:366;;;:::o;13358:::-;13500:3;13521:67;13585:2;13580:3;13521:67;:::i;:::-;13514:74;;13597:93;13686:3;13597:93;:::i;:::-;13715:2;13710:3;13706:12;13699:19;;13358:366;;;:::o;13730:::-;13872:3;13893:67;13957:2;13952:3;13893:67;:::i;:::-;13886:74;;13969:93;14058:3;13969:93;:::i;:::-;14087:2;14082:3;14078:12;14071:19;;13730:366;;;:::o;14102:::-;14244:3;14265:67;14329:2;14324:3;14265:67;:::i;:::-;14258:74;;14341:93;14430:3;14341:93;:::i;:::-;14459:2;14454:3;14450:12;14443:19;;14102:366;;;:::o;14474:::-;14616:3;14637:67;14701:2;14696:3;14637:67;:::i;:::-;14630:74;;14713:93;14802:3;14713:93;:::i;:::-;14831:2;14826:3;14822:12;14815:19;;14474:366;;;:::o;14846:::-;14988:3;15009:67;15073:2;15068:3;15009:67;:::i;:::-;15002:74;;15085:93;15174:3;15085:93;:::i;:::-;15203:2;15198:3;15194:12;15187:19;;14846:366;;;:::o;15218:::-;15360:3;15381:67;15445:2;15440:3;15381:67;:::i;:::-;15374:74;;15457:93;15546:3;15457:93;:::i;:::-;15575:2;15570:3;15566:12;15559:19;;15218:366;;;:::o;15590:::-;15732:3;15753:67;15817:2;15812:3;15753:67;:::i;:::-;15746:74;;15829:93;15918:3;15829:93;:::i;:::-;15947:2;15942:3;15938:12;15931:19;;15590:366;;;:::o;15962:::-;16104:3;16125:67;16189:2;16184:3;16125:67;:::i;:::-;16118:74;;16201:93;16290:3;16201:93;:::i;:::-;16319:2;16314:3;16310:12;16303:19;;15962:366;;;:::o;16334:::-;16476:3;16497:67;16561:2;16556:3;16497:67;:::i;:::-;16490:74;;16573:93;16662:3;16573:93;:::i;:::-;16691:2;16686:3;16682:12;16675:19;;16334:366;;;:::o;16706:::-;16848:3;16869:67;16933:2;16928:3;16869:67;:::i;:::-;16862:74;;16945:93;17034:3;16945:93;:::i;:::-;17063:2;17058:3;17054:12;17047:19;;16706:366;;;:::o;17078:::-;17220:3;17241:67;17305:2;17300:3;17241:67;:::i;:::-;17234:74;;17317:93;17406:3;17317:93;:::i;:::-;17435:2;17430:3;17426:12;17419:19;;17078:366;;;:::o;17450:::-;17592:3;17613:67;17677:2;17672:3;17613:67;:::i;:::-;17606:74;;17689:93;17778:3;17689:93;:::i;:::-;17807:2;17802:3;17798:12;17791:19;;17450:366;;;:::o;17822:::-;17964:3;17985:67;18049:2;18044:3;17985:67;:::i;:::-;17978:74;;18061:93;18150:3;18061:93;:::i;:::-;18179:2;18174:3;18170:12;18163:19;;17822:366;;;:::o;18194:118::-;18281:24;18299:5;18281:24;:::i;:::-;18276:3;18269:37;18194:118;;:::o;18318:435::-;18498:3;18520:95;18611:3;18602:6;18520:95;:::i;:::-;18513:102;;18632:95;18723:3;18714:6;18632:95;:::i;:::-;18625:102;;18744:3;18737:10;;18318:435;;;;;:::o;18759:222::-;18852:4;18890:2;18879:9;18875:18;18867:26;;18903:71;18971:1;18960:9;18956:17;18947:6;18903:71;:::i;:::-;18759:222;;;;:::o;18987:442::-;19136:4;19174:2;19163:9;19159:18;19151:26;;19187:71;19255:1;19244:9;19240:17;19231:6;19187:71;:::i;:::-;19268:72;19336:2;19325:9;19321:18;19312:6;19268:72;:::i;:::-;19350;19418:2;19407:9;19403:18;19394:6;19350:72;:::i;:::-;18987:442;;;;;;:::o;19435:640::-;19630:4;19668:3;19657:9;19653:19;19645:27;;19682:71;19750:1;19739:9;19735:17;19726:6;19682:71;:::i;:::-;19763:72;19831:2;19820:9;19816:18;19807:6;19763:72;:::i;:::-;19845;19913:2;19902:9;19898:18;19889:6;19845:72;:::i;:::-;19964:9;19958:4;19954:20;19949:2;19938:9;19934:18;19927:48;19992:76;20063:4;20054:6;19992:76;:::i;:::-;19984:84;;19435:640;;;;;;;:::o;20081:332::-;20202:4;20240:2;20229:9;20225:18;20217:26;;20253:71;20321:1;20310:9;20306:17;20297:6;20253:71;:::i;:::-;20334:72;20402:2;20391:9;20387:18;20378:6;20334:72;:::i;:::-;20081:332;;;;;:::o;20419:210::-;20506:4;20544:2;20533:9;20529:18;20521:26;;20557:65;20619:1;20608:9;20604:17;20595:6;20557:65;:::i;:::-;20419:210;;;;:::o;20635:250::-;20742:4;20780:2;20769:9;20765:18;20757:26;;20793:85;20875:1;20864:9;20860:17;20851:6;20793:85;:::i;:::-;20635:250;;;;:::o;20891:313::-;21004:4;21042:2;21031:9;21027:18;21019:26;;21091:9;21085:4;21081:20;21077:1;21066:9;21062:17;21055:47;21119:78;21192:4;21183:6;21119:78;:::i;:::-;21111:86;;20891:313;;;;:::o;21210:419::-;21376:4;21414:2;21403:9;21399:18;21391:26;;21463:9;21457:4;21453:20;21449:1;21438:9;21434:17;21427:47;21491:131;21617:4;21491:131;:::i;:::-;21483:139;;21210:419;;;:::o;21635:::-;21801:4;21839:2;21828:9;21824:18;21816:26;;21888:9;21882:4;21878:20;21874:1;21863:9;21859:17;21852:47;21916:131;22042:4;21916:131;:::i;:::-;21908:139;;21635:419;;;:::o;22060:::-;22226:4;22264:2;22253:9;22249:18;22241:26;;22313:9;22307:4;22303:20;22299:1;22288:9;22284:17;22277:47;22341:131;22467:4;22341:131;:::i;:::-;22333:139;;22060:419;;;:::o;22485:::-;22651:4;22689:2;22678:9;22674:18;22666:26;;22738:9;22732:4;22728:20;22724:1;22713:9;22709:17;22702:47;22766:131;22892:4;22766:131;:::i;:::-;22758:139;;22485:419;;;:::o;22910:::-;23076:4;23114:2;23103:9;23099:18;23091:26;;23163:9;23157:4;23153:20;23149:1;23138:9;23134:17;23127:47;23191:131;23317:4;23191:131;:::i;:::-;23183:139;;22910:419;;;:::o;23335:::-;23501:4;23539:2;23528:9;23524:18;23516:26;;23588:9;23582:4;23578:20;23574:1;23563:9;23559:17;23552:47;23616:131;23742:4;23616:131;:::i;:::-;23608:139;;23335:419;;;:::o;23760:::-;23926:4;23964:2;23953:9;23949:18;23941:26;;24013:9;24007:4;24003:20;23999:1;23988:9;23984:17;23977:47;24041:131;24167:4;24041:131;:::i;:::-;24033:139;;23760:419;;;:::o;24185:::-;24351:4;24389:2;24378:9;24374:18;24366:26;;24438:9;24432:4;24428:20;24424:1;24413:9;24409:17;24402:47;24466:131;24592:4;24466:131;:::i;:::-;24458:139;;24185:419;;;:::o;24610:::-;24776:4;24814:2;24803:9;24799:18;24791:26;;24863:9;24857:4;24853:20;24849:1;24838:9;24834:17;24827:47;24891:131;25017:4;24891:131;:::i;:::-;24883:139;;24610:419;;;:::o;25035:::-;25201:4;25239:2;25228:9;25224:18;25216:26;;25288:9;25282:4;25278:20;25274:1;25263:9;25259:17;25252:47;25316:131;25442:4;25316:131;:::i;:::-;25308:139;;25035:419;;;:::o;25460:::-;25626:4;25664:2;25653:9;25649:18;25641:26;;25713:9;25707:4;25703:20;25699:1;25688:9;25684:17;25677:47;25741:131;25867:4;25741:131;:::i;:::-;25733:139;;25460:419;;;:::o;25885:::-;26051:4;26089:2;26078:9;26074:18;26066:26;;26138:9;26132:4;26128:20;26124:1;26113:9;26109:17;26102:47;26166:131;26292:4;26166:131;:::i;:::-;26158:139;;25885:419;;;:::o;26310:::-;26476:4;26514:2;26503:9;26499:18;26491:26;;26563:9;26557:4;26553:20;26549:1;26538:9;26534:17;26527:47;26591:131;26717:4;26591:131;:::i;:::-;26583:139;;26310:419;;;:::o;26735:::-;26901:4;26939:2;26928:9;26924:18;26916:26;;26988:9;26982:4;26978:20;26974:1;26963:9;26959:17;26952:47;27016:131;27142:4;27016:131;:::i;:::-;27008:139;;26735:419;;;:::o;27160:::-;27326:4;27364:2;27353:9;27349:18;27341:26;;27413:9;27407:4;27403:20;27399:1;27388:9;27384:17;27377:47;27441:131;27567:4;27441:131;:::i;:::-;27433:139;;27160:419;;;:::o;27585:::-;27751:4;27789:2;27778:9;27774:18;27766:26;;27838:9;27832:4;27828:20;27824:1;27813:9;27809:17;27802:47;27866:131;27992:4;27866:131;:::i;:::-;27858:139;;27585:419;;;:::o;28010:::-;28176:4;28214:2;28203:9;28199:18;28191:26;;28263:9;28257:4;28253:20;28249:1;28238:9;28234:17;28227:47;28291:131;28417:4;28291:131;:::i;:::-;28283:139;;28010:419;;;:::o;28435:::-;28601:4;28639:2;28628:9;28624:18;28616:26;;28688:9;28682:4;28678:20;28674:1;28663:9;28659:17;28652:47;28716:131;28842:4;28716:131;:::i;:::-;28708:139;;28435:419;;;:::o;28860:::-;29026:4;29064:2;29053:9;29049:18;29041:26;;29113:9;29107:4;29103:20;29099:1;29088:9;29084:17;29077:47;29141:131;29267:4;29141:131;:::i;:::-;29133:139;;28860:419;;;:::o;29285:::-;29451:4;29489:2;29478:9;29474:18;29466:26;;29538:9;29532:4;29528:20;29524:1;29513:9;29509:17;29502:47;29566:131;29692:4;29566:131;:::i;:::-;29558:139;;29285:419;;;:::o;29710:::-;29876:4;29914:2;29903:9;29899:18;29891:26;;29963:9;29957:4;29953:20;29949:1;29938:9;29934:17;29927:47;29991:131;30117:4;29991:131;:::i;:::-;29983:139;;29710:419;;;:::o;30135:::-;30301:4;30339:2;30328:9;30324:18;30316:26;;30388:9;30382:4;30378:20;30374:1;30363:9;30359:17;30352:47;30416:131;30542:4;30416:131;:::i;:::-;30408:139;;30135:419;;;:::o;30560:222::-;30653:4;30691:2;30680:9;30676:18;30668:26;;30704:71;30772:1;30761:9;30757:17;30748:6;30704:71;:::i;:::-;30560:222;;;;:::o;30788:129::-;30822:6;30849:20;;:::i;:::-;30839:30;;30878:33;30906:4;30898:6;30878:33;:::i;:::-;30788:129;;;:::o;30923:75::-;30956:6;30989:2;30983:9;30973:19;;30923:75;:::o;31004:307::-;31065:4;31155:18;31147:6;31144:30;31141:56;;;31177:18;;:::i;:::-;31141:56;31215:29;31237:6;31215:29;:::i;:::-;31207:37;;31299:4;31293;31289:15;31281:23;;31004:307;;;:::o;31317:308::-;31379:4;31469:18;31461:6;31458:30;31455:56;;;31491:18;;:::i;:::-;31455:56;31529:29;31551:6;31529:29;:::i;:::-;31521:37;;31613:4;31607;31603:15;31595:23;;31317:308;;;:::o;31631:98::-;31682:6;31716:5;31710:12;31700:22;;31631:98;;;:::o;31735:99::-;31787:6;31821:5;31815:12;31805:22;;31735:99;;;:::o;31840:168::-;31923:11;31957:6;31952:3;31945:19;31997:4;31992:3;31988:14;31973:29;;31840:168;;;;:::o;32014:169::-;32098:11;32132:6;32127:3;32120:19;32172:4;32167:3;32163:14;32148:29;;32014:169;;;;:::o;32189:148::-;32291:11;32328:3;32313:18;;32189:148;;;;:::o;32343:305::-;32383:3;32402:20;32420:1;32402:20;:::i;:::-;32397:25;;32436:20;32454:1;32436:20;:::i;:::-;32431:25;;32590:1;32522:66;32518:74;32515:1;32512:81;32509:107;;;32596:18;;:::i;:::-;32509:107;32640:1;32637;32633:9;32626:16;;32343:305;;;;:::o;32654:185::-;32694:1;32711:20;32729:1;32711:20;:::i;:::-;32706:25;;32745:20;32763:1;32745:20;:::i;:::-;32740:25;;32784:1;32774:35;;32789:18;;:::i;:::-;32774:35;32831:1;32828;32824:9;32819:14;;32654:185;;;;:::o;32845:348::-;32885:7;32908:20;32926:1;32908:20;:::i;:::-;32903:25;;32942:20;32960:1;32942:20;:::i;:::-;32937:25;;33130:1;33062:66;33058:74;33055:1;33052:81;33047:1;33040:9;33033:17;33029:105;33026:131;;;33137:18;;:::i;:::-;33026:131;33185:1;33182;33178:9;33167:20;;32845:348;;;;:::o;33199:191::-;33239:4;33259:20;33277:1;33259:20;:::i;:::-;33254:25;;33293:20;33311:1;33293:20;:::i;:::-;33288:25;;33332:1;33329;33326:8;33323:34;;;33337:18;;:::i;:::-;33323:34;33382:1;33379;33375:9;33367:17;;33199:191;;;;:::o;33396:96::-;33433:7;33462:24;33480:5;33462:24;:::i;:::-;33451:35;;33396:96;;;:::o;33498:90::-;33532:7;33575:5;33568:13;33561:21;33550:32;;33498:90;;;:::o;33594:149::-;33630:7;33670:66;33663:5;33659:78;33648:89;;33594:149;;;:::o;33749:126::-;33786:7;33826:42;33819:5;33815:54;33804:65;;33749:126;;;:::o;33881:77::-;33918:7;33947:5;33936:16;;33881:77;;;:::o;33964:140::-;34028:9;34061:37;34092:5;34061:37;:::i;:::-;34048:50;;33964:140;;;:::o;34110:126::-;34160:9;34193:37;34224:5;34193:37;:::i;:::-;34180:50;;34110:126;;;:::o;34242:113::-;34292:9;34325:24;34343:5;34325:24;:::i;:::-;34312:37;;34242:113;;;:::o;34361:154::-;34445:6;34440:3;34435;34422:30;34507:1;34498:6;34493:3;34489:16;34482:27;34361:154;;;:::o;34521:307::-;34589:1;34599:113;34613:6;34610:1;34607:13;34599:113;;;34698:1;34693:3;34689:11;34683:18;34679:1;34674:3;34670:11;34663:39;34635:2;34632:1;34628:10;34623:15;;34599:113;;;34730:6;34727:1;34724:13;34721:101;;;34810:1;34801:6;34796:3;34792:16;34785:27;34721:101;34570:258;34521:307;;;:::o;34834:320::-;34878:6;34915:1;34909:4;34905:12;34895:22;;34962:1;34956:4;34952:12;34983:18;34973:81;;35039:4;35031:6;35027:17;35017:27;;34973:81;35101:2;35093:6;35090:14;35070:18;35067:38;35064:84;;;35120:18;;:::i;:::-;35064:84;34885:269;34834:320;;;:::o;35160:281::-;35243:27;35265:4;35243:27;:::i;:::-;35235:6;35231:40;35373:6;35361:10;35358:22;35337:18;35325:10;35322:34;35319:62;35316:88;;;35384:18;;:::i;:::-;35316:88;35424:10;35420:2;35413:22;35203:238;35160:281;;:::o;35447:233::-;35486:3;35509:24;35527:5;35509:24;:::i;:::-;35500:33;;35555:66;35548:5;35545:77;35542:103;;;35625:18;;:::i;:::-;35542:103;35672:1;35665:5;35661:13;35654:20;;35447:233;;;:::o;35686:176::-;35718:1;35735:20;35753:1;35735:20;:::i;:::-;35730:25;;35769:20;35787:1;35769:20;:::i;:::-;35764:25;;35808:1;35798:35;;35813:18;;:::i;:::-;35798:35;35854:1;35851;35847:9;35842:14;;35686:176;;;;:::o;35868:180::-;35916:77;35913:1;35906:88;36013:4;36010:1;36003:15;36037:4;36034:1;36027:15;36054:180;36102:77;36099:1;36092:88;36199:4;36196:1;36189:15;36223:4;36220:1;36213:15;36240:180;36288:77;36285:1;36278:88;36385:4;36382:1;36375:15;36409:4;36406:1;36399:15;36426:180;36474:77;36471:1;36464:88;36571:4;36568:1;36561:15;36595:4;36592:1;36585:15;36612:180;36660:77;36657:1;36650:88;36757:4;36754:1;36747:15;36781:4;36778:1;36771:15;36798:180;36846:77;36843:1;36836:88;36943:4;36940:1;36933:15;36967:4;36964:1;36957:15;36984:117;37093:1;37090;37083:12;37107:117;37216:1;37213;37206:12;37230:117;37339:1;37336;37329:12;37353:117;37462:1;37459;37452:12;37476:102;37517:6;37568:2;37564:7;37559:2;37552:5;37548:14;37544:28;37534:38;;37476:102;;;:::o;37584:230::-;37724:34;37720:1;37712:6;37708:14;37701:58;37793:13;37788:2;37780:6;37776:15;37769:38;37584:230;:::o;37820:237::-;37960:34;37956:1;37948:6;37944:14;37937:58;38029:20;38024:2;38016:6;38012:15;38005:45;37820:237;:::o;38063:225::-;38203:34;38199:1;38191:6;38187:14;38180:58;38272:8;38267:2;38259:6;38255:15;38248:33;38063:225;:::o;38294:224::-;38434:34;38430:1;38422:6;38418:14;38411:58;38503:7;38498:2;38490:6;38486:15;38479:32;38294:224;:::o;38524:178::-;38664:30;38660:1;38652:6;38648:14;38641:54;38524:178;:::o;38708:223::-;38848:34;38844:1;38836:6;38832:14;38825:58;38917:6;38912:2;38904:6;38900:15;38893:31;38708:223;:::o;38937:175::-;39077:27;39073:1;39065:6;39061:14;39054:51;38937:175;:::o;39118:231::-;39258:34;39254:1;39246:6;39242:14;39235:58;39327:14;39322:2;39314:6;39310:15;39303:39;39118:231;:::o;39355:243::-;39495:34;39491:1;39483:6;39479:14;39472:58;39564:26;39559:2;39551:6;39547:15;39540:51;39355:243;:::o;39604:229::-;39744:34;39740:1;39732:6;39728:14;39721:58;39813:12;39808:2;39800:6;39796:15;39789:37;39604:229;:::o;39839:228::-;39979:34;39975:1;39967:6;39963:14;39956:58;40048:11;40043:2;40035:6;40031:15;40024:36;39839:228;:::o;40073:182::-;40213:34;40209:1;40201:6;40197:14;40190:58;40073:182;:::o;40261:178::-;40401:30;40397:1;40389:6;40385:14;40378:54;40261:178;:::o;40445:231::-;40585:34;40581:1;40573:6;40569:14;40562:58;40654:14;40649:2;40641:6;40637:15;40630:39;40445:231;:::o;40682:182::-;40822:34;40818:1;40810:6;40806:14;40799:58;40682:182;:::o;40870:234::-;41010:34;41006:1;40998:6;40994:14;40987:58;41079:17;41074:2;41066:6;41062:15;41055:42;40870:234;:::o;41110:172::-;41250:24;41246:1;41238:6;41234:14;41227:48;41110:172;:::o;41288:220::-;41428:34;41424:1;41416:6;41412:14;41405:58;41497:3;41492:2;41484:6;41480:15;41473:28;41288:220;:::o;41514:181::-;41654:33;41650:1;41642:6;41638:14;41631:57;41514:181;:::o;41701:236::-;41841:34;41837:1;41829:6;41825:14;41818:58;41910:19;41905:2;41897:6;41893:15;41886:44;41701:236;:::o;41943:231::-;42083:34;42079:1;42071:6;42067:14;42060:58;42152:14;42147:2;42139:6;42135:15;42128:39;41943:231;:::o;42180:235::-;42320:34;42316:1;42308:6;42304:14;42297:58;42389:18;42384:2;42376:6;42372:15;42365:43;42180:235;:::o;42421:122::-;42494:24;42512:5;42494:24;:::i;:::-;42487:5;42484:35;42474:63;;42533:1;42530;42523:12;42474:63;42421:122;:::o;42549:116::-;42619:21;42634:5;42619:21;:::i;:::-;42612:5;42609:32;42599:60;;42655:1;42652;42645:12;42599:60;42549:116;:::o;42671:120::-;42743:23;42760:5;42743:23;:::i;:::-;42736:5;42733:34;42723:62;;42781:1;42778;42771:12;42723:62;42671:120;:::o;42797:122::-;42870:24;42888:5;42870:24;:::i;:::-;42863:5;42860:35;42850:63;;42909:1;42906;42899:12;42850:63;42797:122;:::o

Swarm Source

ipfs://e17f7553730b7becbb19cdc817a904ee6814427056658f252f1754305b17e8b1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.