ETH Price: $2,390.23 (+1.84%)

Token

mfers cn 420 (MFERCN)
 

Overview

Max Total Supply

117 MFERCN

Holders

115

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
zeroi.eth
Balance
1 MFERCN
0x2C677B4414F293b170E1c1f5503Dc4cEF83Ff9B7
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:
mfercn420

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 13 : cnmfer.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

contract mfercn420 is ERC721, ERC721Enumerable, Ownable{

    // mfers mainnet contract address
    address public constant MFERS_ADDRESS = 0x79FCDEF22feeD20eDDacbB2587640e45491b757f;
    uint256 public constant MAX_SUPPLY = 420;
    bool public freeMintActive = false;
    string private _baseURIextended;

    IERC721 internal mfersContract = IERC721(MFERS_ADDRESS);

    constructor() ERC721("mfers cn 420", "MFERCN"){}

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

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

    function airdropMfercn(
        address[] calldata to
    ) external onlyOwner {
        require(to.length + totalSupply() <= MAX_SUPPLY, "Airdrop addresses too many");
        for (uint256 i=0;i<to.length;i++) {
            require(balanceOf(to[i]) < 1, "One address only airdrop one MFERCN");
            _safeMint(to[i], totalSupply() + 1);
        }
    }

    function freeMint() external {
        require(freeMintActive, "Free mint closed");
        require(balanceOf(msg.sender) < 1, "You can only mint one MFERCN");
        require(mfersContract.balanceOf(msg.sender) > 0, "Free mint is currently for mfer holders only");
        require(totalSupply() < MAX_SUPPLY, "Sold out");

        _safeMint(msg.sender, totalSupply() + 1);
    }

    function setFreeMintActive(bool newActive) external onlyOwner {
        freeMintActive = newActive;
    }

    function setBaseURI(string memory baseURI) external onlyOwner {
        _baseURIextended = baseURI;
    }

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

    function isFreeMintActive() external view returns (bool) {
        return freeMintActive;
    }
}

File 2 of 13 : 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 3 of 13 : ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 overriden 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 || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

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

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

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

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

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

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

    /**
     * @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 of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits 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 {}
}

File 4 of 13 : 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);
    }
}

File 5 of 13 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 tokenId);

    /**
     * @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 6 of 13 : 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 7 of 13 : 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 8 of 13 : 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 13 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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 10 of 13 : 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 11 of 13 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 13 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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 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);

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

File 13 of 13 : 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);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MFERS_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"airdropMfercn","outputs":[],"stateMutability":"nonpayable","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":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFreeMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newActive","type":"bool"}],"name":"setFreeMintActive","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"}]

60806040526000600a60146101000a81548160ff0219169083151502179055507379fcdef22feed20eddacbb2587640e45491b757f600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008157600080fd5b506040518060400160405280600c81526020017f6d6665727320636e2034323000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d464552434e000000000000000000000000000000000000000000000000000081525081600090805190602001906200010692919062000216565b5080600190805190602001906200011f92919062000216565b50505062000142620001366200014860201b60201c565b6200015060201b60201c565b6200032b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022490620002c6565b90600052602060002090601f01602090048101928262000248576000855562000294565b82601f106200026357805160ff191683800117855562000294565b8280016001018555821562000294579182015b828111156200029357825182559160200191906001019062000276565b5b509050620002a39190620002a7565b5090565b5b80821115620002c2576000816000905550600101620002a8565b5090565b60006002820490506001821680620002df57607f821691505b60208210811415620002f657620002f5620002fc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613f62806200033b6000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c806355f804b3116100f957806395d89b4111610097578063c87b56dd11610071578063c87b56dd14610493578063cb5bc2aa146104c3578063e985e9c5146104e1578063f2fde38b14610511576101a8565b806395d89b411461043d578063a22cb4651461045b578063b88d4fde14610477576101a8565b806370a08231116100d357806370a08231146103c7578063715018a6146103f75780637a5b85c1146104015780638da5cb5b1461041f576101a8565b806355f804b3146103715780635b70ea9f1461038d5780636352211e14610397576101a8565b806323b872dd1161016657806342842e0e1161014057806342842e0e146102eb5780634c3a6b77146103075780634f6ccce7146103255780634f9b563c14610355576101a8565b806323b872dd146102815780632f745c591461029d57806332cb6b0c146102cd576101a8565b80625fb66b146101ad57806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217578063095ea7b31461024757806318160ddd14610263575b600080fd5b6101c760048036038101906101c29190612b65565b61052d565b005b6101e360048036038101906101de9190612bd3565b61072b565b6040516101f0919061315b565b60405180910390f35b61020161073d565b60405161020e9190613176565b60405180910390f35b610231600480360381019061022c9190612c66565b6107cf565b60405161023e91906130f4565b60405180910390f35b610261600480360381019061025c9190612b29565b610854565b005b61026b61096c565b6040516102789190613498565b60405180910390f35b61029b60048036038101906102969190612a23565b610979565b005b6102b760048036038101906102b29190612b29565b6109d9565b6040516102c49190613498565b60405180910390f35b6102d5610a7e565b6040516102e29190613498565b60405180910390f35b61030560048036038101906103009190612a23565b610a84565b005b61030f610aa4565b60405161031c91906130f4565b60405180910390f35b61033f600480360381019061033a9190612c66565b610abc565b60405161034c9190613498565b60405180910390f35b61036f600480360381019061036a9190612baa565b610b53565b005b61038b60048036038101906103869190612c25565b610bec565b005b610395610c82565b005b6103b160048036038101906103ac9190612c66565b610e73565b6040516103be91906130f4565b60405180910390f35b6103e160048036038101906103dc91906129be565b610f25565b6040516103ee9190613498565b60405180910390f35b6103ff610fdd565b005b610409611065565b604051610416919061315b565b60405180910390f35b61042761107c565b60405161043491906130f4565b60405180910390f35b6104456110a6565b6040516104529190613176565b60405180910390f35b61047560048036038101906104709190612aed565b611138565b005b610491600480360381019061048c9190612a72565b61114e565b005b6104ad60048036038101906104a89190612c66565b6111b0565b6040516104ba9190613176565b60405180910390f35b6104cb611257565b6040516104d8919061315b565b60405180910390f35b6104fb60048036038101906104f691906129e7565b61126a565b604051610508919061315b565b60405180910390f35b61052b600480360381019061052691906129be565b6112fe565b005b6105356113f6565b73ffffffffffffffffffffffffffffffffffffffff1661055361107c565b73ffffffffffffffffffffffffffffffffffffffff16146105a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a090613378565b60405180910390fd5b6101a46105b461096c565b838390506105c2919061357d565b1115610603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fa90613318565b60405180910390fd5b60005b8282905081101561072657600161066984848481811061064f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061066491906129be565b610f25565b106106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a090613298565b60405180910390fd5b6107138383838181106106e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906106fa91906129be565b600161070461096c565b61070e919061357d565b6113fe565b808061071e90613751565b915050610606565b505050565b60006107368261141c565b9050919050565b60606000805461074c906136ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610778906136ee565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050505050905090565b60006107da82611496565b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090613358565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085f82610e73565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c7906133d8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ef6113f6565b73ffffffffffffffffffffffffffffffffffffffff16148061091e575061091d816109186113f6565b61126a565b5b61095d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610954906132b8565b60405180910390fd5b6109678383611502565b505050565b6000600880549050905090565b61098a6109846113f6565b826115bb565b6109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c090613418565b60405180910390fd5b6109d4838383611699565b505050565b60006109e483610f25565b8210610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613198565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6101a481565b610a9f8383836040518060200160405280600081525061114e565b505050565b7379fcdef22feed20eddacbb2587640e45491b757f81565b6000610ac661096c565b8210610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90613458565b60405180910390fd5b60088281548110610b41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610b5b6113f6565b73ffffffffffffffffffffffffffffffffffffffff16610b7961107c565b73ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc690613378565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b610bf46113f6565b73ffffffffffffffffffffffffffffffffffffffff16610c1261107c565b73ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90613378565b60405180910390fd5b80600b9080519060200190610c7e929190612783565b5050565b600a60149054906101000a900460ff16610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc8906133f8565b60405180910390fd5b6001610cdc33610f25565b10610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390613478565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d7991906130f4565b60206040518083038186803b158015610d9157600080fd5b505afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190612c8f565b11610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e00906131f8565b60405180910390fd5b6101a4610e1461096c565b10610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90613438565b60405180910390fd5b610e71336001610e6261096c565b610e6c919061357d565b6113fe565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906132f8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906132d8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe56113f6565b73ffffffffffffffffffffffffffffffffffffffff1661100361107c565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090613378565b60405180910390fd5b61106360006118f5565b565b6000600a60149054906101000a900460ff16905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110b5906136ee565b80601f01602080910402602001604051908101604052809291908181526020018280546110e1906136ee565b801561112e5780601f106111035761010080835404028352916020019161112e565b820191906000526020600020905b81548152906001019060200180831161111157829003601f168201915b5050505050905090565b61114a6111436113f6565b83836119bb565b5050565b61115f6111596113f6565b836115bb565b61119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613418565b60405180910390fd5b6111aa84848484611b28565b50505050565b60606111bb82611496565b6111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f1906133b8565b60405180910390fd5b6000611204611b84565b90506000815111611224576040518060200160405280600081525061124f565b8061122e84611c16565b60405160200161123f9291906130d0565b6040516020818303038152906040525b915050919050565b600a60149054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113066113f6565b73ffffffffffffffffffffffffffffffffffffffff1661132461107c565b73ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190613378565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906131d8565b60405180910390fd5b6113f3816118f5565b50565b600033905090565b611418828260405180602001604052806000815250611dc3565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061148f575061148e82611e1e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661157583610e73565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115c682611496565b611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613278565b60405180910390fd5b600061161083610e73565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061167f57508373ffffffffffffffffffffffffffffffffffffffff16611667846107cf565b73ffffffffffffffffffffffffffffffffffffffff16145b80611690575061168f818561126a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116b982610e73565b73ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177690613238565b60405180910390fd5b61178a838383611f00565b611795600082611502565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e59190613604565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183c919061357d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613258565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b1b919061315b565b60405180910390a3505050565b611b33848484611699565b611b3f84848484611f10565b611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b75906131b8565b60405180910390fd5b50505050565b6060600b8054611b93906136ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf906136ee565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b5050505050905090565b60606000821415611c5e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611dbe565b600082905060005b60008214611c90578080611c7990613751565b915050600a82611c8991906135d3565b9150611c66565b60008167ffffffffffffffff811115611cd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d045781602001600182028036833780820191505090505b5090505b60008514611db757600182611d1d9190613604565b9150600a85611d2c919061379a565b6030611d38919061357d565b60f81b818381518110611d74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611db091906135d3565b9450611d08565b8093505050505b919050565b611dcd83836120a7565b611dda6000848484611f10565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906131b8565b60405180910390fd5b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ee957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ef95750611ef882612275565b5b9050919050565b611f0b8383836122df565b505050565b6000611f318473ffffffffffffffffffffffffffffffffffffffff166123f3565b1561209a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f5a6113f6565b8786866040518563ffffffff1660e01b8152600401611f7c949392919061310f565b602060405180830381600087803b158015611f9657600080fd5b505af1925050508015611fc757506040513d601f19601f82011682018060405250810190611fc49190612bfc565b60015b61204a573d8060008114611ff7576040519150601f19603f3d011682016040523d82523d6000602084013e611ffc565b606091505b50600081511415612042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612039906131b8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061209f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e90613338565b60405180910390fd5b61212081611496565b15612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613218565b60405180910390fd5b61216c60008383611f00565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bc919061357d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122ea838383612406565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561232d576123288161240b565b61236c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461236b5761236a8382612454565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123af576123aa816125c1565b6123ee565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123ed576123ec8282612704565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161246184610f25565b61246b9190613604565b9050600060076000848152602001908152602001600020549050818114612550576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506125d59190613604565b905060006009600084815260200190815260200160002054905060006008838154811061262b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612673577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806126e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061270f83610f25565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461278f906136ee565b90600052602060002090601f0160209004810192826127b157600085556127f8565b82601f106127ca57805160ff19168380011785556127f8565b828001600101855582156127f8579182015b828111156127f75782518255916020019190600101906127dc565b5b5090506128059190612809565b5090565b5b8082111561282257600081600090555060010161280a565b5090565b6000612839612834846134d8565b6134b3565b90508281526020810184848401111561285157600080fd5b61285c8482856136ac565b509392505050565b600061287761287284613509565b6134b3565b90508281526020810184848401111561288f57600080fd5b61289a8482856136ac565b509392505050565b6000813590506128b181613ed0565b92915050565b60008083601f8401126128c957600080fd5b8235905067ffffffffffffffff8111156128e257600080fd5b6020830191508360208202830111156128fa57600080fd5b9250929050565b60008135905061291081613ee7565b92915050565b60008135905061292581613efe565b92915050565b60008151905061293a81613efe565b92915050565b600082601f83011261295157600080fd5b8135612961848260208601612826565b91505092915050565b600082601f83011261297b57600080fd5b813561298b848260208601612864565b91505092915050565b6000813590506129a381613f15565b92915050565b6000815190506129b881613f15565b92915050565b6000602082840312156129d057600080fd5b60006129de848285016128a2565b91505092915050565b600080604083850312156129fa57600080fd5b6000612a08858286016128a2565b9250506020612a19858286016128a2565b9150509250929050565b600080600060608486031215612a3857600080fd5b6000612a46868287016128a2565b9350506020612a57868287016128a2565b9250506040612a6886828701612994565b9150509250925092565b60008060008060808587031215612a8857600080fd5b6000612a96878288016128a2565b9450506020612aa7878288016128a2565b9350506040612ab887828801612994565b925050606085013567ffffffffffffffff811115612ad557600080fd5b612ae187828801612940565b91505092959194509250565b60008060408385031215612b0057600080fd5b6000612b0e858286016128a2565b9250506020612b1f85828601612901565b9150509250929050565b60008060408385031215612b3c57600080fd5b6000612b4a858286016128a2565b9250506020612b5b85828601612994565b9150509250929050565b60008060208385031215612b7857600080fd5b600083013567ffffffffffffffff811115612b9257600080fd5b612b9e858286016128b7565b92509250509250929050565b600060208284031215612bbc57600080fd5b6000612bca84828501612901565b91505092915050565b600060208284031215612be557600080fd5b6000612bf384828501612916565b91505092915050565b600060208284031215612c0e57600080fd5b6000612c1c8482850161292b565b91505092915050565b600060208284031215612c3757600080fd5b600082013567ffffffffffffffff811115612c5157600080fd5b612c5d8482850161296a565b91505092915050565b600060208284031215612c7857600080fd5b6000612c8684828501612994565b91505092915050565b600060208284031215612ca157600080fd5b6000612caf848285016129a9565b91505092915050565b612cc181613638565b82525050565b612cd08161364a565b82525050565b6000612ce18261353a565b612ceb8185613550565b9350612cfb8185602086016136bb565b612d0481613887565b840191505092915050565b6000612d1a82613545565b612d248185613561565b9350612d348185602086016136bb565b612d3d81613887565b840191505092915050565b6000612d5382613545565b612d5d8185613572565b9350612d6d8185602086016136bb565b80840191505092915050565b6000612d86602b83613561565b9150612d9182613898565b604082019050919050565b6000612da9603283613561565b9150612db4826138e7565b604082019050919050565b6000612dcc602683613561565b9150612dd782613936565b604082019050919050565b6000612def602c83613561565b9150612dfa82613985565b604082019050919050565b6000612e12601c83613561565b9150612e1d826139d4565b602082019050919050565b6000612e35602483613561565b9150612e40826139fd565b604082019050919050565b6000612e58601983613561565b9150612e6382613a4c565b602082019050919050565b6000612e7b602c83613561565b9150612e8682613a75565b604082019050919050565b6000612e9e602383613561565b9150612ea982613ac4565b604082019050919050565b6000612ec1603883613561565b9150612ecc82613b13565b604082019050919050565b6000612ee4602a83613561565b9150612eef82613b62565b604082019050919050565b6000612f07602983613561565b9150612f1282613bb1565b604082019050919050565b6000612f2a601a83613561565b9150612f3582613c00565b602082019050919050565b6000612f4d602083613561565b9150612f5882613c29565b602082019050919050565b6000612f70602c83613561565b9150612f7b82613c52565b604082019050919050565b6000612f93602083613561565b9150612f9e82613ca1565b602082019050919050565b6000612fb6602983613561565b9150612fc182613cca565b604082019050919050565b6000612fd9602f83613561565b9150612fe482613d19565b604082019050919050565b6000612ffc602183613561565b915061300782613d68565b604082019050919050565b600061301f601083613561565b915061302a82613db7565b602082019050919050565b6000613042603183613561565b915061304d82613de0565b604082019050919050565b6000613065600883613561565b915061307082613e2f565b602082019050919050565b6000613088602c83613561565b915061309382613e58565b604082019050919050565b60006130ab601c83613561565b91506130b682613ea7565b602082019050919050565b6130ca816136a2565b82525050565b60006130dc8285612d48565b91506130e88284612d48565b91508190509392505050565b60006020820190506131096000830184612cb8565b92915050565b60006080820190506131246000830187612cb8565b6131316020830186612cb8565b61313e60408301856130c1565b81810360608301526131508184612cd6565b905095945050505050565b60006020820190506131706000830184612cc7565b92915050565b600060208201905081810360008301526131908184612d0f565b905092915050565b600060208201905081810360008301526131b181612d79565b9050919050565b600060208201905081810360008301526131d181612d9c565b9050919050565b600060208201905081810360008301526131f181612dbf565b9050919050565b6000602082019050818103600083015261321181612de2565b9050919050565b6000602082019050818103600083015261323181612e05565b9050919050565b6000602082019050818103600083015261325181612e28565b9050919050565b6000602082019050818103600083015261327181612e4b565b9050919050565b6000602082019050818103600083015261329181612e6e565b9050919050565b600060208201905081810360008301526132b181612e91565b9050919050565b600060208201905081810360008301526132d181612eb4565b9050919050565b600060208201905081810360008301526132f181612ed7565b9050919050565b6000602082019050818103600083015261331181612efa565b9050919050565b6000602082019050818103600083015261333181612f1d565b9050919050565b6000602082019050818103600083015261335181612f40565b9050919050565b6000602082019050818103600083015261337181612f63565b9050919050565b6000602082019050818103600083015261339181612f86565b9050919050565b600060208201905081810360008301526133b181612fa9565b9050919050565b600060208201905081810360008301526133d181612fcc565b9050919050565b600060208201905081810360008301526133f181612fef565b9050919050565b6000602082019050818103600083015261341181613012565b9050919050565b6000602082019050818103600083015261343181613035565b9050919050565b6000602082019050818103600083015261345181613058565b9050919050565b600060208201905081810360008301526134718161307b565b9050919050565b600060208201905081810360008301526134918161309e565b9050919050565b60006020820190506134ad60008301846130c1565b92915050565b60006134bd6134ce565b90506134c98282613720565b919050565b6000604051905090565b600067ffffffffffffffff8211156134f3576134f2613858565b5b6134fc82613887565b9050602081019050919050565b600067ffffffffffffffff82111561352457613523613858565b5b61352d82613887565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613588826136a2565b9150613593836136a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c8576135c76137cb565b5b828201905092915050565b60006135de826136a2565b91506135e9836136a2565b9250826135f9576135f86137fa565b5b828204905092915050565b600061360f826136a2565b915061361a836136a2565b92508282101561362d5761362c6137cb565b5b828203905092915050565b600061364382613682565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136d95780820151818401526020810190506136be565b838111156136e8576000848401525b50505050565b6000600282049050600182168061370657607f821691505b6020821081141561371a57613719613829565b5b50919050565b61372982613887565b810181811067ffffffffffffffff8211171561374857613747613858565b5b80604052505050565b600061375c826136a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561378f5761378e6137cb565b5b600182019050919050565b60006137a5826136a2565b91506137b0836136a2565b9250826137c0576137bf6137fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46726565206d696e742069732063757272656e746c7920666f72206d6665722060008201527f686f6c64657273206f6e6c790000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f6e652061646472657373206f6e6c792061697264726f70206f6e65204d464560008201527f52434e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f41697264726f702061646472657373657320746f6f206d616e79000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f46726565206d696e7420636c6f73656400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79206d696e74206f6e65204d464552434e00000000600082015250565b613ed981613638565b8114613ee457600080fd5b50565b613ef08161364a565b8114613efb57600080fd5b50565b613f0781613656565b8114613f1257600080fd5b50565b613f1e816136a2565b8114613f2957600080fd5b5056fea2646970667358221220681e6508e75a1fa9f31f09f58c0dbe7b83747e80ac19e9065af91684f68ac1a264736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a85760003560e01c806355f804b3116100f957806395d89b4111610097578063c87b56dd11610071578063c87b56dd14610493578063cb5bc2aa146104c3578063e985e9c5146104e1578063f2fde38b14610511576101a8565b806395d89b411461043d578063a22cb4651461045b578063b88d4fde14610477576101a8565b806370a08231116100d357806370a08231146103c7578063715018a6146103f75780637a5b85c1146104015780638da5cb5b1461041f576101a8565b806355f804b3146103715780635b70ea9f1461038d5780636352211e14610397576101a8565b806323b872dd1161016657806342842e0e1161014057806342842e0e146102eb5780634c3a6b77146103075780634f6ccce7146103255780634f9b563c14610355576101a8565b806323b872dd146102815780632f745c591461029d57806332cb6b0c146102cd576101a8565b80625fb66b146101ad57806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217578063095ea7b31461024757806318160ddd14610263575b600080fd5b6101c760048036038101906101c29190612b65565b61052d565b005b6101e360048036038101906101de9190612bd3565b61072b565b6040516101f0919061315b565b60405180910390f35b61020161073d565b60405161020e9190613176565b60405180910390f35b610231600480360381019061022c9190612c66565b6107cf565b60405161023e91906130f4565b60405180910390f35b610261600480360381019061025c9190612b29565b610854565b005b61026b61096c565b6040516102789190613498565b60405180910390f35b61029b60048036038101906102969190612a23565b610979565b005b6102b760048036038101906102b29190612b29565b6109d9565b6040516102c49190613498565b60405180910390f35b6102d5610a7e565b6040516102e29190613498565b60405180910390f35b61030560048036038101906103009190612a23565b610a84565b005b61030f610aa4565b60405161031c91906130f4565b60405180910390f35b61033f600480360381019061033a9190612c66565b610abc565b60405161034c9190613498565b60405180910390f35b61036f600480360381019061036a9190612baa565b610b53565b005b61038b60048036038101906103869190612c25565b610bec565b005b610395610c82565b005b6103b160048036038101906103ac9190612c66565b610e73565b6040516103be91906130f4565b60405180910390f35b6103e160048036038101906103dc91906129be565b610f25565b6040516103ee9190613498565b60405180910390f35b6103ff610fdd565b005b610409611065565b604051610416919061315b565b60405180910390f35b61042761107c565b60405161043491906130f4565b60405180910390f35b6104456110a6565b6040516104529190613176565b60405180910390f35b61047560048036038101906104709190612aed565b611138565b005b610491600480360381019061048c9190612a72565b61114e565b005b6104ad60048036038101906104a89190612c66565b6111b0565b6040516104ba9190613176565b60405180910390f35b6104cb611257565b6040516104d8919061315b565b60405180910390f35b6104fb60048036038101906104f691906129e7565b61126a565b604051610508919061315b565b60405180910390f35b61052b600480360381019061052691906129be565b6112fe565b005b6105356113f6565b73ffffffffffffffffffffffffffffffffffffffff1661055361107c565b73ffffffffffffffffffffffffffffffffffffffff16146105a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a090613378565b60405180910390fd5b6101a46105b461096c565b838390506105c2919061357d565b1115610603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fa90613318565b60405180910390fd5b60005b8282905081101561072657600161066984848481811061064f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061066491906129be565b610f25565b106106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a090613298565b60405180910390fd5b6107138383838181106106e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906106fa91906129be565b600161070461096c565b61070e919061357d565b6113fe565b808061071e90613751565b915050610606565b505050565b60006107368261141c565b9050919050565b60606000805461074c906136ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610778906136ee565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050505050905090565b60006107da82611496565b610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090613358565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085f82610e73565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c7906133d8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108ef6113f6565b73ffffffffffffffffffffffffffffffffffffffff16148061091e575061091d816109186113f6565b61126a565b5b61095d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610954906132b8565b60405180910390fd5b6109678383611502565b505050565b6000600880549050905090565b61098a6109846113f6565b826115bb565b6109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c090613418565b60405180910390fd5b6109d4838383611699565b505050565b60006109e483610f25565b8210610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90613198565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6101a481565b610a9f8383836040518060200160405280600081525061114e565b505050565b7379fcdef22feed20eddacbb2587640e45491b757f81565b6000610ac661096c565b8210610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90613458565b60405180910390fd5b60088281548110610b41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610b5b6113f6565b73ffffffffffffffffffffffffffffffffffffffff16610b7961107c565b73ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc690613378565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b610bf46113f6565b73ffffffffffffffffffffffffffffffffffffffff16610c1261107c565b73ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90613378565b60405180910390fd5b80600b9080519060200190610c7e929190612783565b5050565b600a60149054906101000a900460ff16610cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc8906133f8565b60405180910390fd5b6001610cdc33610f25565b10610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390613478565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d7991906130f4565b60206040518083038186803b158015610d9157600080fd5b505afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190612c8f565b11610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e00906131f8565b60405180910390fd5b6101a4610e1461096c565b10610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90613438565b60405180910390fd5b610e71336001610e6261096c565b610e6c919061357d565b6113fe565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906132f8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906132d8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe56113f6565b73ffffffffffffffffffffffffffffffffffffffff1661100361107c565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090613378565b60405180910390fd5b61106360006118f5565b565b6000600a60149054906101000a900460ff16905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110b5906136ee565b80601f01602080910402602001604051908101604052809291908181526020018280546110e1906136ee565b801561112e5780601f106111035761010080835404028352916020019161112e565b820191906000526020600020905b81548152906001019060200180831161111157829003601f168201915b5050505050905090565b61114a6111436113f6565b83836119bb565b5050565b61115f6111596113f6565b836115bb565b61119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613418565b60405180910390fd5b6111aa84848484611b28565b50505050565b60606111bb82611496565b6111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f1906133b8565b60405180910390fd5b6000611204611b84565b90506000815111611224576040518060200160405280600081525061124f565b8061122e84611c16565b60405160200161123f9291906130d0565b6040516020818303038152906040525b915050919050565b600a60149054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113066113f6565b73ffffffffffffffffffffffffffffffffffffffff1661132461107c565b73ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190613378565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906131d8565b60405180910390fd5b6113f3816118f5565b50565b600033905090565b611418828260405180602001604052806000815250611dc3565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061148f575061148e82611e1e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661157583610e73565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115c682611496565b611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90613278565b60405180910390fd5b600061161083610e73565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061167f57508373ffffffffffffffffffffffffffffffffffffffff16611667846107cf565b73ffffffffffffffffffffffffffffffffffffffff16145b80611690575061168f818561126a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116b982610e73565b73ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177690613238565b60405180910390fd5b61178a838383611f00565b611795600082611502565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e59190613604565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183c919061357d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613258565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b1b919061315b565b60405180910390a3505050565b611b33848484611699565b611b3f84848484611f10565b611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b75906131b8565b60405180910390fd5b50505050565b6060600b8054611b93906136ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbf906136ee565b8015611c0c5780601f10611be157610100808354040283529160200191611c0c565b820191906000526020600020905b815481529060010190602001808311611bef57829003601f168201915b5050505050905090565b60606000821415611c5e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611dbe565b600082905060005b60008214611c90578080611c7990613751565b915050600a82611c8991906135d3565b9150611c66565b60008167ffffffffffffffff811115611cd2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d045781602001600182028036833780820191505090505b5090505b60008514611db757600182611d1d9190613604565b9150600a85611d2c919061379a565b6030611d38919061357d565b60f81b818381518110611d74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611db091906135d3565b9450611d08565b8093505050505b919050565b611dcd83836120a7565b611dda6000848484611f10565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906131b8565b60405180910390fd5b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ee957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ef95750611ef882612275565b5b9050919050565b611f0b8383836122df565b505050565b6000611f318473ffffffffffffffffffffffffffffffffffffffff166123f3565b1561209a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f5a6113f6565b8786866040518563ffffffff1660e01b8152600401611f7c949392919061310f565b602060405180830381600087803b158015611f9657600080fd5b505af1925050508015611fc757506040513d601f19601f82011682018060405250810190611fc49190612bfc565b60015b61204a573d8060008114611ff7576040519150601f19603f3d011682016040523d82523d6000602084013e611ffc565b606091505b50600081511415612042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612039906131b8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061209f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e90613338565b60405180910390fd5b61212081611496565b15612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613218565b60405180910390fd5b61216c60008383611f00565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bc919061357d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122ea838383612406565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561232d576123288161240b565b61236c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461236b5761236a8382612454565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123af576123aa816125c1565b6123ee565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123ed576123ec8282612704565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161246184610f25565b61246b9190613604565b9050600060076000848152602001908152602001600020549050818114612550576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506125d59190613604565b905060006009600084815260200190815260200160002054905060006008838154811061262b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612673577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806126e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061270f83610f25565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461278f906136ee565b90600052602060002090601f0160209004810192826127b157600085556127f8565b82601f106127ca57805160ff19168380011785556127f8565b828001600101855582156127f8579182015b828111156127f75782518255916020019190600101906127dc565b5b5090506128059190612809565b5090565b5b8082111561282257600081600090555060010161280a565b5090565b6000612839612834846134d8565b6134b3565b90508281526020810184848401111561285157600080fd5b61285c8482856136ac565b509392505050565b600061287761287284613509565b6134b3565b90508281526020810184848401111561288f57600080fd5b61289a8482856136ac565b509392505050565b6000813590506128b181613ed0565b92915050565b60008083601f8401126128c957600080fd5b8235905067ffffffffffffffff8111156128e257600080fd5b6020830191508360208202830111156128fa57600080fd5b9250929050565b60008135905061291081613ee7565b92915050565b60008135905061292581613efe565b92915050565b60008151905061293a81613efe565b92915050565b600082601f83011261295157600080fd5b8135612961848260208601612826565b91505092915050565b600082601f83011261297b57600080fd5b813561298b848260208601612864565b91505092915050565b6000813590506129a381613f15565b92915050565b6000815190506129b881613f15565b92915050565b6000602082840312156129d057600080fd5b60006129de848285016128a2565b91505092915050565b600080604083850312156129fa57600080fd5b6000612a08858286016128a2565b9250506020612a19858286016128a2565b9150509250929050565b600080600060608486031215612a3857600080fd5b6000612a46868287016128a2565b9350506020612a57868287016128a2565b9250506040612a6886828701612994565b9150509250925092565b60008060008060808587031215612a8857600080fd5b6000612a96878288016128a2565b9450506020612aa7878288016128a2565b9350506040612ab887828801612994565b925050606085013567ffffffffffffffff811115612ad557600080fd5b612ae187828801612940565b91505092959194509250565b60008060408385031215612b0057600080fd5b6000612b0e858286016128a2565b9250506020612b1f85828601612901565b9150509250929050565b60008060408385031215612b3c57600080fd5b6000612b4a858286016128a2565b9250506020612b5b85828601612994565b9150509250929050565b60008060208385031215612b7857600080fd5b600083013567ffffffffffffffff811115612b9257600080fd5b612b9e858286016128b7565b92509250509250929050565b600060208284031215612bbc57600080fd5b6000612bca84828501612901565b91505092915050565b600060208284031215612be557600080fd5b6000612bf384828501612916565b91505092915050565b600060208284031215612c0e57600080fd5b6000612c1c8482850161292b565b91505092915050565b600060208284031215612c3757600080fd5b600082013567ffffffffffffffff811115612c5157600080fd5b612c5d8482850161296a565b91505092915050565b600060208284031215612c7857600080fd5b6000612c8684828501612994565b91505092915050565b600060208284031215612ca157600080fd5b6000612caf848285016129a9565b91505092915050565b612cc181613638565b82525050565b612cd08161364a565b82525050565b6000612ce18261353a565b612ceb8185613550565b9350612cfb8185602086016136bb565b612d0481613887565b840191505092915050565b6000612d1a82613545565b612d248185613561565b9350612d348185602086016136bb565b612d3d81613887565b840191505092915050565b6000612d5382613545565b612d5d8185613572565b9350612d6d8185602086016136bb565b80840191505092915050565b6000612d86602b83613561565b9150612d9182613898565b604082019050919050565b6000612da9603283613561565b9150612db4826138e7565b604082019050919050565b6000612dcc602683613561565b9150612dd782613936565b604082019050919050565b6000612def602c83613561565b9150612dfa82613985565b604082019050919050565b6000612e12601c83613561565b9150612e1d826139d4565b602082019050919050565b6000612e35602483613561565b9150612e40826139fd565b604082019050919050565b6000612e58601983613561565b9150612e6382613a4c565b602082019050919050565b6000612e7b602c83613561565b9150612e8682613a75565b604082019050919050565b6000612e9e602383613561565b9150612ea982613ac4565b604082019050919050565b6000612ec1603883613561565b9150612ecc82613b13565b604082019050919050565b6000612ee4602a83613561565b9150612eef82613b62565b604082019050919050565b6000612f07602983613561565b9150612f1282613bb1565b604082019050919050565b6000612f2a601a83613561565b9150612f3582613c00565b602082019050919050565b6000612f4d602083613561565b9150612f5882613c29565b602082019050919050565b6000612f70602c83613561565b9150612f7b82613c52565b604082019050919050565b6000612f93602083613561565b9150612f9e82613ca1565b602082019050919050565b6000612fb6602983613561565b9150612fc182613cca565b604082019050919050565b6000612fd9602f83613561565b9150612fe482613d19565b604082019050919050565b6000612ffc602183613561565b915061300782613d68565b604082019050919050565b600061301f601083613561565b915061302a82613db7565b602082019050919050565b6000613042603183613561565b915061304d82613de0565b604082019050919050565b6000613065600883613561565b915061307082613e2f565b602082019050919050565b6000613088602c83613561565b915061309382613e58565b604082019050919050565b60006130ab601c83613561565b91506130b682613ea7565b602082019050919050565b6130ca816136a2565b82525050565b60006130dc8285612d48565b91506130e88284612d48565b91508190509392505050565b60006020820190506131096000830184612cb8565b92915050565b60006080820190506131246000830187612cb8565b6131316020830186612cb8565b61313e60408301856130c1565b81810360608301526131508184612cd6565b905095945050505050565b60006020820190506131706000830184612cc7565b92915050565b600060208201905081810360008301526131908184612d0f565b905092915050565b600060208201905081810360008301526131b181612d79565b9050919050565b600060208201905081810360008301526131d181612d9c565b9050919050565b600060208201905081810360008301526131f181612dbf565b9050919050565b6000602082019050818103600083015261321181612de2565b9050919050565b6000602082019050818103600083015261323181612e05565b9050919050565b6000602082019050818103600083015261325181612e28565b9050919050565b6000602082019050818103600083015261327181612e4b565b9050919050565b6000602082019050818103600083015261329181612e6e565b9050919050565b600060208201905081810360008301526132b181612e91565b9050919050565b600060208201905081810360008301526132d181612eb4565b9050919050565b600060208201905081810360008301526132f181612ed7565b9050919050565b6000602082019050818103600083015261331181612efa565b9050919050565b6000602082019050818103600083015261333181612f1d565b9050919050565b6000602082019050818103600083015261335181612f40565b9050919050565b6000602082019050818103600083015261337181612f63565b9050919050565b6000602082019050818103600083015261339181612f86565b9050919050565b600060208201905081810360008301526133b181612fa9565b9050919050565b600060208201905081810360008301526133d181612fcc565b9050919050565b600060208201905081810360008301526133f181612fef565b9050919050565b6000602082019050818103600083015261341181613012565b9050919050565b6000602082019050818103600083015261343181613035565b9050919050565b6000602082019050818103600083015261345181613058565b9050919050565b600060208201905081810360008301526134718161307b565b9050919050565b600060208201905081810360008301526134918161309e565b9050919050565b60006020820190506134ad60008301846130c1565b92915050565b60006134bd6134ce565b90506134c98282613720565b919050565b6000604051905090565b600067ffffffffffffffff8211156134f3576134f2613858565b5b6134fc82613887565b9050602081019050919050565b600067ffffffffffffffff82111561352457613523613858565b5b61352d82613887565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613588826136a2565b9150613593836136a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c8576135c76137cb565b5b828201905092915050565b60006135de826136a2565b91506135e9836136a2565b9250826135f9576135f86137fa565b5b828204905092915050565b600061360f826136a2565b915061361a836136a2565b92508282101561362d5761362c6137cb565b5b828203905092915050565b600061364382613682565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136d95780820151818401526020810190506136be565b838111156136e8576000848401525b50505050565b6000600282049050600182168061370657607f821691505b6020821081141561371a57613719613829565b5b50919050565b61372982613887565b810181811067ffffffffffffffff8211171561374857613747613858565b5b80604052505050565b600061375c826136a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561378f5761378e6137cb565b5b600182019050919050565b60006137a5826136a2565b91506137b0836136a2565b9250826137c0576137bf6137fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46726565206d696e742069732063757272656e746c7920666f72206d6665722060008201527f686f6c64657273206f6e6c790000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f6e652061646472657373206f6e6c792061697264726f70206f6e65204d464560008201527f52434e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f41697264726f702061646472657373657320746f6f206d616e79000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f46726565206d696e7420636c6f73656400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f752063616e206f6e6c79206d696e74206f6e65204d464552434e00000000600082015250565b613ed981613638565b8114613ee457600080fd5b50565b613ef08161364a565b8114613efb57600080fd5b50565b613f0781613656565b8114613f1257600080fd5b50565b613f1e816136a2565b8114613f2957600080fd5b5056fea2646970667358221220681e6508e75a1fa9f31f09f58c0dbe7b83747e80ac19e9065af91684f68ac1a264736f6c63430008040033

Deployed Bytecode Sourcemap

248:1986:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1044:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;861:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2473:98:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3984:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3522:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1615:111:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4711:330:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1291:253:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;436:40:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5107:179:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;348:82:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1798:230:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1794:105:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1905;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1409:379;;;:::i;:::-;;2176:235:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1914:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;:::i;:::-;;2137:95:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1036:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2635:102:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4268:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5352:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2803:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;482:34:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4487:162:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1044:359:12;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;473:3:12::1;1153:13;:11;:13::i;:::-;1141:2;;:9;;:25;;;;:::i;:::-;:39;;1133:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;1226:9;1221:176;1240:2;;:9;;1238:1;:11;1221:176;;;1296:1;1277:16;1287:2;;1290:1;1287:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1277:9;:16::i;:::-;:20;1269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1351:35;1361:2;;1364:1;1361:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1384:1;1368:13;:11;:13::i;:::-;:17;;;;:::i;:::-;1351:9;:35::i;:::-;1250:3;;;;;:::i;:::-;;;;1221:176;;;;1044:359:::0;;:::o;861:177::-;972:4;995:36;1019:11;995:23;:36::i;:::-;988:43;;861:177;;;:::o;2473:98:1:-;2527:13;2559:5;2552:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2473:98;:::o;3984:217::-;4060:7;4087:16;4095:7;4087;:16::i;:::-;4079:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4170:15;:24;4186:7;4170:24;;;;;;;;;;;;;;;;;;;;;4163:31;;3984:217;;;:::o;3522:401::-;3602:13;3618:23;3633:7;3618:14;:23::i;:::-;3602:39;;3665:5;3659:11;;:2;:11;;;;3651:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3756:5;3740:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3765:37;3782:5;3789:12;:10;:12::i;:::-;3765:16;:37::i;:::-;3740:62;3719:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3895:21;3904:2;3908:7;3895:8;:21::i;:::-;3522:401;;;:::o;1615:111:4:-;1676:7;1702:10;:17;;;;1695:24;;1615:111;:::o;4711:330:1:-;4900:41;4919:12;:10;:12::i;:::-;4933:7;4900:18;:41::i;:::-;4892:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5006:28;5016:4;5022:2;5026:7;5006:9;:28::i;:::-;4711:330;;;:::o;1291:253:4:-;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;436:40:12:-;473:3;436:40;:::o;5107:179:1:-;5240:39;5257:4;5263:2;5267:7;5240:39;;;;;;;;;;;;:16;:39::i;:::-;5107:179;;;:::o;348:82:12:-;388:42;348:82;:::o;1798:230:4:-;1873:7;1908:30;:28;:30::i;:::-;1900:5;:38;1892:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2004:10;2015:5;2004:17;;;;;;;;;;;;;;;;;;;;;;;;1997:24;;1798:230;;;:::o;1794:105:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1883:9:12::1;1866:14;;:26;;;;;;;;;;;;;;;;;;1794:105:::0;:::o;1905:::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1996:7:12::1;1977:16;:26;;;;;;;;;;;;:::i;:::-;;1905:105:::0;:::o;1409:379::-;1456:14;;;;;;;;;;;1448:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;1533:1;1509:21;1519:10;1509:9;:21::i;:::-;:25;1501:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1623:1;1585:13;;;;;;;;;;;:23;;;1609:10;1585:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;1577:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;473:3;1691:13;:11;:13::i;:::-;:26;1683:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1741:40;1751:10;1779:1;1763:13;:11;:13::i;:::-;:17;;;;:::i;:::-;1741:9;:40::i;:::-;1409:379::o;2176:235:1:-;2248:7;2267:13;2283:7;:16;2291:7;2283:16;;;;;;;;;;;;;;;;;;;;;2267:32;;2334:1;2317:19;;:5;:19;;;;2309:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2399:5;2392:12;;;2176:235;;;:::o;1914:205::-;1986:7;2030:1;2013:19;;:5;:19;;;;2005:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2096:9;:16;2106:5;2096:16;;;;;;;;;;;;;;;;2089:23;;1914:205;;;:::o;1668:101:0:-;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;2137:95:12:-;2188:4;2211:14;;;;;;;;;;;2204:21;;2137:95;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;2635:102:1:-;2691:13;2723:7;2716:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2635:102;:::o;4268:153::-;4362:52;4381:12;:10;:12::i;:::-;4395:8;4405;4362:18;:52::i;:::-;4268:153;;:::o;5352:320::-;5521:41;5540:12;:10;:12::i;:::-;5554:7;5521:18;:41::i;:::-;5513:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5626:39;5640:4;5646:2;5650:7;5659:5;5626:13;:39::i;:::-;5352:320;;;;:::o;2803:329::-;2876:13;2909:16;2917:7;2909;:16::i;:::-;2901:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2988:21;3012:10;:8;:10::i;:::-;2988:34;;3063:1;3045:7;3039:21;:25;:86;;;;;;;;;;;;;;;;;3091:7;3100:18;:7;:16;:18::i;:::-;3074:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3039:86;3032:93;;;2803:329;;;:::o;482:34:12:-;;;;;;;;;;;;;:::o;4487:162:1:-;4584:4;4607:18;:25;4626:5;4607:25;;;;;;;;;;;;;;;:35;4633:8;4607:35;;;;;;;;;;;;;;;;;;;;;;;;;4600:42;;4487:162;;;;:::o;1918:198:0:-;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;640:96:8:-;693:7;719:10;712:17;;640:96;:::o;8101:108:1:-;8176:26;8186:2;8190:7;8176:26;;;;;;;;;;;;:9;:26::i;:::-;8101:108;;:::o;990:222:4:-;1092:4;1130:35;1115:50;;;:11;:50;;;;:90;;;;1169:36;1193:11;1169:23;:36::i;:::-;1115:90;1108:97;;990:222;;;:::o;7144:125:1:-;7209:4;7260:1;7232:30;;:7;:16;7240:7;7232:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7225:37;;7144:125;;;:::o;10995:171::-;11096:2;11069:15;:24;11085:7;11069:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11151:7;11147:2;11113:46;;11122:23;11137:7;11122:14;:23::i;:::-;11113:46;;;;;;;;;;;;10995:171;;:::o;7427:344::-;7520:4;7544:16;7552:7;7544;:16::i;:::-;7536:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7619:13;7635:23;7650:7;7635:14;:23::i;:::-;7619:39;;7687:5;7676:16;;:7;:16;;;:51;;;;7720:7;7696:31;;:20;7708:7;7696:11;:20::i;:::-;:31;;;7676:51;:87;;;;7731:32;7748:5;7755:7;7731:16;:32::i;:::-;7676:87;7668:96;;;7427:344;;;;:::o;10324:560::-;10478:4;10451:31;;:23;10466:7;10451:14;:23::i;:::-;:31;;;10443:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10560:1;10546:16;;:2;:16;;;;10538:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10614:39;10635:4;10641:2;10645:7;10614:20;:39::i;:::-;10715:29;10732:1;10736:7;10715:8;:29::i;:::-;10774:1;10755:9;:15;10765:4;10755:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10802:1;10785:9;:13;10795:2;10785:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10832:2;10813:7;:16;10821:7;10813:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10869:7;10865:2;10850:27;;10859:4;10850:27;;;;;;;;;;;;10324:560;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2270:187;;:::o;11301:307:1:-;11451:8;11442:17;;:5;:17;;;;11434:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11537:8;11499:18;:25;11518:5;11499:25;;;;;;;;;;;;;;;:35;11525:8;11499:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11582:8;11560:41;;11575:5;11560:41;;;11592:8;11560:41;;;;;;:::i;:::-;;;;;;;;11301:307;;;:::o;6534:::-;6685:28;6695:4;6701:2;6705:7;6685:9;:28::i;:::-;6731:48;6754:4;6760:2;6764:7;6773:5;6731:22;:48::i;:::-;6723:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6534:307;;;;:::o;2016:115:12:-;2076:13;2108:16;2101:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2016:115;:::o;328:703:9:-;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;8430:311:1:-;8555:18;8561:2;8565:7;8555:5;:18::i;:::-;8604:54;8635:1;8639:2;8643:7;8652:5;8604:22;:54::i;:::-;8583:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8430:311;;;:::o;1555:300::-;1657:4;1707:25;1692:40;;;:11;:40;;;;:104;;;;1763:33;1748:48;;;:11;:48;;;;1692:104;:156;;;;1812:36;1836:11;1812:23;:36::i;:::-;1692:156;1673:175;;1555:300;;;:::o;676:179:12:-;803:45;830:4;836:2;840:7;803:26;:45::i;:::-;676:179;;;:::o;12161:778:1:-;12311:4;12331:15;:2;:13;;;:15::i;:::-;12327:606;;;12382:2;12366:36;;;12403:12;:10;:12::i;:::-;12417:4;12423:7;12432:5;12366:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12362:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12622:1;12605:6;:13;:18;12601:266;;;12647:60;;;;;;;;;;:::i;:::-;;;;;;;;12601:266;12819:6;12813:13;12804:6;12800:2;12796:15;12789:38;12362:519;12498:41;;;12488:51;;;:6;:51;;;;12481:58;;;;;12327:606;12918:4;12911:11;;12161:778;;;;;;;:::o;9063:372::-;9156:1;9142:16;;:2;:16;;;;9134:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9214:16;9222:7;9214;:16::i;:::-;9213:17;9205:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9274:45;9303:1;9307:2;9311:7;9274:20;:45::i;:::-;9347:1;9330:9;:13;9340:2;9330:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9377:2;9358:7;:16;9366:7;9358:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9420:7;9416:2;9395:33;;9412:1;9395:33;;;;;;;;;;;;9063:372;;:::o;829:155:10:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;2624:572:4:-;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;771:377:7:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;13495:122:1:-;;;;:::o;3902:161:4:-;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;;;;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;;;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;;;;;;;;;;;;;;;;;;;;;;;;6610:48;;6694:11;6669:10;6680;6669:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;6804:10;6773:15;:28;6789:11;6773:28;;;;;;;;;;;:41;;;;6942:15;:24;6958:7;6942:24;;;;;;;;;;;6935:31;;;6976:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;3490:217;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:13:-;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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:137::-;1426:5;1464:6;1451:20;1442:29;;1480:32;1506:5;1480:32;:::i;:::-;1432:86;;;;:::o;1524:141::-;1580:5;1611:6;1605:13;1596:22;;1627:32;1653:5;1627:32;:::i;:::-;1586:79;;;;:::o;1684:271::-;1739:5;1788:3;1781:4;1773:6;1769:17;1765:27;1755:2;;1806:1;1803;1796:12;1755:2;1846:6;1833:20;1871:78;1945:3;1937:6;1930:4;1922:6;1918:17;1871:78;:::i;:::-;1862:87;;1745:210;;;;;:::o;1975:273::-;2031:5;2080:3;2073:4;2065:6;2061:17;2057:27;2047:2;;2098:1;2095;2088:12;2047:2;2138:6;2125:20;2163:79;2238:3;2230:6;2223:4;2215:6;2211:17;2163:79;:::i;:::-;2154:88;;2037:211;;;;;:::o;2254:139::-;2300:5;2338:6;2325:20;2316:29;;2354:33;2381:5;2354:33;:::i;:::-;2306:87;;;;:::o;2399:143::-;2456:5;2487:6;2481:13;2472:22;;2503:33;2530:5;2503:33;:::i;:::-;2462:80;;;;:::o;2548:262::-;2607:6;2656:2;2644:9;2635:7;2631:23;2627:32;2624:2;;;2672:1;2669;2662:12;2624:2;2715:1;2740:53;2785:7;2776:6;2765:9;2761:22;2740:53;:::i;:::-;2730:63;;2686:117;2614:196;;;;:::o;2816:407::-;2884:6;2892;2941:2;2929:9;2920:7;2916:23;2912:32;2909:2;;;2957:1;2954;2947:12;2909:2;3000:1;3025:53;3070:7;3061:6;3050:9;3046:22;3025:53;:::i;:::-;3015:63;;2971:117;3127:2;3153:53;3198:7;3189:6;3178:9;3174:22;3153:53;:::i;:::-;3143:63;;3098:118;2899:324;;;;;:::o;3229:552::-;3306:6;3314;3322;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3685:2;3711:53;3756:7;3747:6;3736:9;3732:22;3711:53;:::i;:::-;3701:63;;3656:118;3329:452;;;;;:::o;3787:809::-;3882:6;3890;3898;3906;3955:3;3943:9;3934:7;3930:23;3926:33;3923:2;;;3972:1;3969;3962:12;3923:2;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;4142:2;4168:53;4213:7;4204:6;4193:9;4189:22;4168:53;:::i;:::-;4158:63;;4113:118;4270:2;4296:53;4341:7;4332:6;4321:9;4317:22;4296:53;:::i;:::-;4286:63;;4241:118;4426:2;4415:9;4411:18;4398:32;4457:18;4449:6;4446:30;4443:2;;;4489:1;4486;4479:12;4443:2;4517:62;4571:7;4562:6;4551:9;4547:22;4517:62;:::i;:::-;4507:72;;4369:220;3913:683;;;;;;;:::o;4602:401::-;4667:6;4675;4724:2;4712:9;4703:7;4699:23;4695:32;4692:2;;;4740:1;4737;4730:12;4692:2;4783:1;4808:53;4853:7;4844:6;4833:9;4829:22;4808:53;:::i;:::-;4798:63;;4754:117;4910:2;4936:50;4978:7;4969:6;4958:9;4954:22;4936:50;:::i;:::-;4926:60;;4881:115;4682:321;;;;;:::o;5009:407::-;5077:6;5085;5134:2;5122:9;5113:7;5109:23;5105:32;5102:2;;;5150:1;5147;5140:12;5102:2;5193:1;5218:53;5263:7;5254:6;5243:9;5239:22;5218:53;:::i;:::-;5208:63;;5164:117;5320:2;5346:53;5391:7;5382:6;5371:9;5367:22;5346:53;:::i;:::-;5336:63;;5291:118;5092:324;;;;;:::o;5422:425::-;5508:6;5516;5565:2;5553:9;5544:7;5540:23;5536:32;5533:2;;;5581:1;5578;5571:12;5533:2;5652:1;5641:9;5637:17;5624:31;5682:18;5674:6;5671:30;5668:2;;;5714:1;5711;5704:12;5668:2;5750:80;5822:7;5813:6;5802:9;5798:22;5750:80;:::i;:::-;5732:98;;;;5595:245;5523:324;;;;;:::o;5853:256::-;5909:6;5958:2;5946:9;5937:7;5933:23;5929:32;5926:2;;;5974:1;5971;5964:12;5926:2;6017:1;6042:50;6084:7;6075:6;6064:9;6060:22;6042:50;:::i;:::-;6032:60;;5988:114;5916:193;;;;:::o;6115:260::-;6173:6;6222:2;6210:9;6201:7;6197:23;6193:32;6190:2;;;6238:1;6235;6228:12;6190:2;6281:1;6306:52;6350:7;6341:6;6330:9;6326:22;6306:52;:::i;:::-;6296:62;;6252:116;6180:195;;;;:::o;6381:282::-;6450:6;6499:2;6487:9;6478:7;6474:23;6470:32;6467:2;;;6515:1;6512;6505:12;6467:2;6558:1;6583:63;6638:7;6629:6;6618:9;6614:22;6583:63;:::i;:::-;6573:73;;6529:127;6457:206;;;;:::o;6669:375::-;6738:6;6787:2;6775:9;6766:7;6762:23;6758:32;6755:2;;;6803:1;6800;6793:12;6755:2;6874:1;6863:9;6859:17;6846:31;6904:18;6896:6;6893:30;6890:2;;;6936:1;6933;6926:12;6890:2;6964:63;7019:7;7010:6;6999:9;6995:22;6964:63;:::i;:::-;6954:73;;6817:220;6745:299;;;;:::o;7050:262::-;7109:6;7158:2;7146:9;7137:7;7133:23;7129:32;7126:2;;;7174:1;7171;7164:12;7126:2;7217:1;7242:53;7287:7;7278:6;7267:9;7263:22;7242:53;:::i;:::-;7232:63;;7188:117;7116:196;;;;:::o;7318:284::-;7388:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:2;;;7453:1;7450;7443:12;7405:2;7496:1;7521:64;7577:7;7568:6;7557:9;7553:22;7521:64;:::i;:::-;7511:74;;7467:128;7395:207;;;;:::o;7608:118::-;7695:24;7713:5;7695:24;:::i;:::-;7690:3;7683:37;7673:53;;:::o;7732:109::-;7813:21;7828:5;7813:21;:::i;:::-;7808:3;7801:34;7791:50;;:::o;7847:360::-;7933:3;7961:38;7993:5;7961:38;:::i;:::-;8015:70;8078:6;8073:3;8015:70;:::i;:::-;8008:77;;8094:52;8139:6;8134:3;8127:4;8120:5;8116:16;8094:52;:::i;:::-;8171:29;8193:6;8171:29;:::i;:::-;8166:3;8162:39;8155:46;;7937:270;;;;;:::o;8213:364::-;8301:3;8329:39;8362:5;8329:39;:::i;:::-;8384:71;8448:6;8443:3;8384:71;:::i;:::-;8377:78;;8464:52;8509:6;8504:3;8497:4;8490:5;8486:16;8464:52;:::i;:::-;8541:29;8563:6;8541:29;:::i;:::-;8536:3;8532:39;8525:46;;8305:272;;;;;:::o;8583:377::-;8689:3;8717:39;8750:5;8717:39;:::i;:::-;8772:89;8854:6;8849:3;8772:89;:::i;:::-;8765:96;;8870:52;8915:6;8910:3;8903:4;8896:5;8892:16;8870:52;:::i;:::-;8947:6;8942:3;8938:16;8931:23;;8693:267;;;;;:::o;8966:366::-;9108:3;9129:67;9193:2;9188:3;9129:67;:::i;:::-;9122:74;;9205:93;9294:3;9205:93;:::i;:::-;9323:2;9318:3;9314:12;9307:19;;9112:220;;;:::o;9338:366::-;9480:3;9501:67;9565:2;9560:3;9501:67;:::i;:::-;9494:74;;9577:93;9666:3;9577:93;:::i;:::-;9695:2;9690:3;9686:12;9679:19;;9484:220;;;:::o;9710:366::-;9852:3;9873:67;9937:2;9932:3;9873:67;:::i;:::-;9866:74;;9949:93;10038:3;9949:93;:::i;:::-;10067:2;10062:3;10058:12;10051:19;;9856:220;;;:::o;10082:366::-;10224:3;10245:67;10309:2;10304:3;10245:67;:::i;:::-;10238:74;;10321:93;10410:3;10321:93;:::i;:::-;10439:2;10434:3;10430:12;10423:19;;10228:220;;;:::o;10454:366::-;10596:3;10617:67;10681:2;10676:3;10617:67;:::i;:::-;10610:74;;10693:93;10782:3;10693:93;:::i;:::-;10811:2;10806:3;10802:12;10795:19;;10600:220;;;:::o;10826:366::-;10968:3;10989:67;11053:2;11048:3;10989:67;:::i;:::-;10982:74;;11065:93;11154:3;11065:93;:::i;:::-;11183:2;11178:3;11174:12;11167:19;;10972:220;;;:::o;11198:366::-;11340:3;11361:67;11425:2;11420:3;11361:67;:::i;:::-;11354:74;;11437:93;11526:3;11437:93;:::i;:::-;11555:2;11550:3;11546:12;11539:19;;11344:220;;;:::o;11570:366::-;11712:3;11733:67;11797:2;11792:3;11733:67;:::i;:::-;11726:74;;11809:93;11898:3;11809:93;:::i;:::-;11927:2;11922:3;11918:12;11911:19;;11716:220;;;:::o;11942:366::-;12084:3;12105:67;12169:2;12164:3;12105:67;:::i;:::-;12098:74;;12181:93;12270:3;12181:93;:::i;:::-;12299:2;12294:3;12290:12;12283:19;;12088:220;;;:::o;12314:366::-;12456:3;12477:67;12541:2;12536:3;12477:67;:::i;:::-;12470:74;;12553:93;12642:3;12553:93;:::i;:::-;12671:2;12666:3;12662:12;12655:19;;12460:220;;;:::o;12686:366::-;12828:3;12849:67;12913:2;12908:3;12849:67;:::i;:::-;12842:74;;12925:93;13014:3;12925:93;:::i;:::-;13043:2;13038:3;13034:12;13027:19;;12832:220;;;:::o;13058:366::-;13200:3;13221:67;13285:2;13280:3;13221:67;:::i;:::-;13214:74;;13297:93;13386:3;13297:93;:::i;:::-;13415:2;13410:3;13406:12;13399:19;;13204:220;;;:::o;13430:366::-;13572:3;13593:67;13657:2;13652:3;13593:67;:::i;:::-;13586:74;;13669:93;13758:3;13669:93;:::i;:::-;13787:2;13782:3;13778:12;13771:19;;13576:220;;;:::o;13802:366::-;13944:3;13965:67;14029:2;14024:3;13965:67;:::i;:::-;13958:74;;14041:93;14130:3;14041:93;:::i;:::-;14159:2;14154:3;14150:12;14143:19;;13948:220;;;:::o;14174:366::-;14316:3;14337:67;14401:2;14396:3;14337:67;:::i;:::-;14330:74;;14413:93;14502:3;14413:93;:::i;:::-;14531:2;14526:3;14522:12;14515:19;;14320:220;;;:::o;14546:366::-;14688:3;14709:67;14773:2;14768:3;14709:67;:::i;:::-;14702:74;;14785:93;14874:3;14785:93;:::i;:::-;14903:2;14898:3;14894:12;14887:19;;14692:220;;;:::o;14918:366::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;15064:220;;;:::o;15290:366::-;15432:3;15453:67;15517:2;15512:3;15453:67;:::i;:::-;15446:74;;15529:93;15618:3;15529:93;:::i;:::-;15647:2;15642:3;15638:12;15631:19;;15436:220;;;:::o;15662:366::-;15804:3;15825:67;15889:2;15884:3;15825:67;:::i;:::-;15818:74;;15901:93;15990:3;15901:93;:::i;:::-;16019:2;16014:3;16010:12;16003:19;;15808:220;;;:::o;16034:366::-;16176:3;16197:67;16261:2;16256:3;16197:67;:::i;:::-;16190:74;;16273:93;16362:3;16273:93;:::i;:::-;16391:2;16386:3;16382:12;16375:19;;16180:220;;;:::o;16406:366::-;16548:3;16569:67;16633:2;16628:3;16569:67;:::i;:::-;16562:74;;16645:93;16734:3;16645:93;:::i;:::-;16763:2;16758:3;16754:12;16747:19;;16552:220;;;:::o;16778:365::-;16920:3;16941:66;17005:1;17000:3;16941:66;:::i;:::-;16934:73;;17016:93;17105:3;17016:93;:::i;:::-;17134:2;17129:3;17125:12;17118:19;;16924:219;;;:::o;17149:366::-;17291:3;17312:67;17376:2;17371:3;17312:67;:::i;:::-;17305:74;;17388:93;17477:3;17388:93;:::i;:::-;17506:2;17501:3;17497:12;17490:19;;17295:220;;;:::o;17521:366::-;17663:3;17684:67;17748:2;17743:3;17684:67;:::i;:::-;17677:74;;17760:93;17849:3;17760:93;:::i;:::-;17878:2;17873:3;17869:12;17862:19;;17667:220;;;:::o;17893:118::-;17980:24;17998:5;17980:24;:::i;:::-;17975:3;17968:37;17958:53;;:::o;18017:435::-;18197:3;18219:95;18310:3;18301:6;18219:95;:::i;:::-;18212:102;;18331:95;18422:3;18413:6;18331:95;:::i;:::-;18324:102;;18443:3;18436:10;;18201:251;;;;;:::o;18458:222::-;18551:4;18589:2;18578:9;18574:18;18566:26;;18602:71;18670:1;18659:9;18655:17;18646:6;18602:71;:::i;:::-;18556:124;;;;:::o;18686:640::-;18881:4;18919:3;18908:9;18904:19;18896:27;;18933:71;19001:1;18990:9;18986:17;18977:6;18933:71;:::i;:::-;19014:72;19082:2;19071:9;19067:18;19058:6;19014:72;:::i;:::-;19096;19164:2;19153:9;19149:18;19140:6;19096:72;:::i;:::-;19215:9;19209:4;19205:20;19200:2;19189:9;19185:18;19178:48;19243:76;19314:4;19305:6;19243:76;:::i;:::-;19235:84;;18886:440;;;;;;;:::o;19332:210::-;19419:4;19457:2;19446:9;19442:18;19434:26;;19470:65;19532:1;19521:9;19517:17;19508:6;19470:65;:::i;:::-;19424:118;;;;:::o;19548:313::-;19661:4;19699:2;19688:9;19684:18;19676:26;;19748:9;19742:4;19738:20;19734:1;19723:9;19719:17;19712:47;19776:78;19849:4;19840:6;19776:78;:::i;:::-;19768:86;;19666:195;;;;:::o;19867:419::-;20033:4;20071:2;20060:9;20056:18;20048:26;;20120:9;20114:4;20110:20;20106:1;20095:9;20091:17;20084:47;20148:131;20274:4;20148:131;:::i;:::-;20140:139;;20038:248;;;:::o;20292:419::-;20458:4;20496:2;20485:9;20481:18;20473:26;;20545:9;20539:4;20535:20;20531:1;20520:9;20516:17;20509:47;20573:131;20699:4;20573:131;:::i;:::-;20565:139;;20463:248;;;:::o;20717:419::-;20883:4;20921:2;20910:9;20906:18;20898:26;;20970:9;20964:4;20960:20;20956:1;20945:9;20941:17;20934:47;20998:131;21124:4;20998:131;:::i;:::-;20990:139;;20888:248;;;:::o;21142:419::-;21308:4;21346:2;21335:9;21331:18;21323:26;;21395:9;21389:4;21385:20;21381:1;21370:9;21366:17;21359:47;21423:131;21549:4;21423:131;:::i;:::-;21415:139;;21313:248;;;:::o;21567:419::-;21733:4;21771:2;21760:9;21756:18;21748:26;;21820:9;21814:4;21810:20;21806:1;21795:9;21791:17;21784:47;21848:131;21974:4;21848:131;:::i;:::-;21840:139;;21738:248;;;:::o;21992:419::-;22158:4;22196:2;22185:9;22181:18;22173:26;;22245:9;22239:4;22235:20;22231:1;22220:9;22216:17;22209:47;22273:131;22399:4;22273:131;:::i;:::-;22265:139;;22163:248;;;:::o;22417:419::-;22583:4;22621:2;22610:9;22606:18;22598:26;;22670:9;22664:4;22660:20;22656:1;22645:9;22641:17;22634:47;22698:131;22824:4;22698:131;:::i;:::-;22690:139;;22588:248;;;:::o;22842:419::-;23008:4;23046:2;23035:9;23031:18;23023:26;;23095:9;23089:4;23085:20;23081:1;23070:9;23066:17;23059:47;23123:131;23249:4;23123:131;:::i;:::-;23115:139;;23013:248;;;:::o;23267:419::-;23433:4;23471:2;23460:9;23456:18;23448:26;;23520:9;23514:4;23510:20;23506:1;23495:9;23491:17;23484:47;23548:131;23674:4;23548:131;:::i;:::-;23540:139;;23438:248;;;:::o;23692:419::-;23858:4;23896:2;23885:9;23881:18;23873:26;;23945:9;23939:4;23935:20;23931:1;23920:9;23916:17;23909:47;23973:131;24099:4;23973:131;:::i;:::-;23965:139;;23863:248;;;:::o;24117:419::-;24283:4;24321:2;24310:9;24306:18;24298:26;;24370:9;24364:4;24360:20;24356:1;24345:9;24341:17;24334:47;24398:131;24524:4;24398:131;:::i;:::-;24390:139;;24288:248;;;:::o;24542:419::-;24708:4;24746:2;24735:9;24731:18;24723:26;;24795:9;24789:4;24785:20;24781:1;24770:9;24766:17;24759:47;24823:131;24949:4;24823:131;:::i;:::-;24815:139;;24713:248;;;:::o;24967:419::-;25133:4;25171:2;25160:9;25156:18;25148:26;;25220:9;25214:4;25210:20;25206:1;25195:9;25191:17;25184:47;25248:131;25374:4;25248:131;:::i;:::-;25240:139;;25138:248;;;:::o;25392:419::-;25558:4;25596:2;25585:9;25581:18;25573:26;;25645:9;25639:4;25635:20;25631:1;25620:9;25616:17;25609:47;25673:131;25799:4;25673:131;:::i;:::-;25665:139;;25563:248;;;:::o;25817:419::-;25983:4;26021:2;26010:9;26006:18;25998:26;;26070:9;26064:4;26060:20;26056:1;26045:9;26041:17;26034:47;26098:131;26224:4;26098:131;:::i;:::-;26090:139;;25988:248;;;:::o;26242:419::-;26408:4;26446:2;26435:9;26431:18;26423:26;;26495:9;26489:4;26485:20;26481:1;26470:9;26466:17;26459:47;26523:131;26649:4;26523:131;:::i;:::-;26515:139;;26413:248;;;:::o;26667:419::-;26833:4;26871:2;26860:9;26856:18;26848:26;;26920:9;26914:4;26910:20;26906:1;26895:9;26891:17;26884:47;26948:131;27074:4;26948:131;:::i;:::-;26940:139;;26838:248;;;:::o;27092:419::-;27258:4;27296:2;27285:9;27281:18;27273:26;;27345:9;27339:4;27335:20;27331:1;27320:9;27316:17;27309:47;27373:131;27499:4;27373:131;:::i;:::-;27365:139;;27263:248;;;:::o;27517:419::-;27683:4;27721:2;27710:9;27706:18;27698:26;;27770:9;27764:4;27760:20;27756:1;27745:9;27741:17;27734:47;27798:131;27924:4;27798:131;:::i;:::-;27790:139;;27688:248;;;:::o;27942:419::-;28108:4;28146:2;28135:9;28131:18;28123:26;;28195:9;28189:4;28185:20;28181:1;28170:9;28166:17;28159:47;28223:131;28349:4;28223:131;:::i;:::-;28215:139;;28113:248;;;:::o;28367:419::-;28533:4;28571:2;28560:9;28556:18;28548:26;;28620:9;28614:4;28610:20;28606:1;28595:9;28591:17;28584:47;28648:131;28774:4;28648:131;:::i;:::-;28640:139;;28538:248;;;:::o;28792:419::-;28958:4;28996:2;28985:9;28981:18;28973:26;;29045:9;29039:4;29035:20;29031:1;29020:9;29016:17;29009:47;29073:131;29199:4;29073:131;:::i;:::-;29065:139;;28963:248;;;:::o;29217:419::-;29383:4;29421:2;29410:9;29406:18;29398:26;;29470:9;29464:4;29460:20;29456:1;29445:9;29441:17;29434:47;29498:131;29624:4;29498:131;:::i;:::-;29490:139;;29388:248;;;:::o;29642:419::-;29808:4;29846:2;29835:9;29831:18;29823:26;;29895:9;29889:4;29885:20;29881:1;29870:9;29866:17;29859:47;29923:131;30049:4;29923:131;:::i;:::-;29915:139;;29813:248;;;:::o;30067:222::-;30160:4;30198:2;30187:9;30183:18;30175:26;;30211:71;30279:1;30268:9;30264:17;30255:6;30211:71;:::i;:::-;30165:124;;;;:::o;30295:129::-;30329:6;30356:20;;:::i;:::-;30346:30;;30385:33;30413:4;30405:6;30385:33;:::i;:::-;30336:88;;;:::o;30430:75::-;30463:6;30496:2;30490:9;30480:19;;30470:35;:::o;30511:307::-;30572:4;30662:18;30654:6;30651:30;30648:2;;;30684:18;;:::i;:::-;30648:2;30722:29;30744:6;30722:29;:::i;:::-;30714:37;;30806:4;30800;30796:15;30788:23;;30577:241;;;:::o;30824:308::-;30886:4;30976:18;30968:6;30965:30;30962:2;;;30998:18;;:::i;:::-;30962:2;31036:29;31058:6;31036:29;:::i;:::-;31028:37;;31120:4;31114;31110:15;31102:23;;30891:241;;;:::o;31138:98::-;31189:6;31223:5;31217:12;31207:22;;31196:40;;;:::o;31242:99::-;31294:6;31328:5;31322:12;31312:22;;31301:40;;;:::o;31347:168::-;31430:11;31464:6;31459:3;31452:19;31504:4;31499:3;31495:14;31480:29;;31442:73;;;;:::o;31521:169::-;31605:11;31639:6;31634:3;31627:19;31679:4;31674:3;31670:14;31655:29;;31617:73;;;;:::o;31696:148::-;31798:11;31835:3;31820:18;;31810:34;;;;:::o;31850:305::-;31890:3;31909:20;31927:1;31909:20;:::i;:::-;31904:25;;31943:20;31961:1;31943:20;:::i;:::-;31938:25;;32097:1;32029:66;32025:74;32022:1;32019:81;32016:2;;;32103:18;;:::i;:::-;32016:2;32147:1;32144;32140:9;32133:16;;31894:261;;;;:::o;32161:185::-;32201:1;32218:20;32236:1;32218:20;:::i;:::-;32213:25;;32252:20;32270:1;32252:20;:::i;:::-;32247:25;;32291:1;32281:2;;32296:18;;:::i;:::-;32281:2;32338:1;32335;32331:9;32326:14;;32203:143;;;;:::o;32352:191::-;32392:4;32412:20;32430:1;32412:20;:::i;:::-;32407:25;;32446:20;32464:1;32446:20;:::i;:::-;32441:25;;32485:1;32482;32479:8;32476:2;;;32490:18;;:::i;:::-;32476:2;32535:1;32532;32528:9;32520:17;;32397:146;;;;:::o;32549:96::-;32586:7;32615:24;32633:5;32615:24;:::i;:::-;32604:35;;32594:51;;;:::o;32651:90::-;32685:7;32728:5;32721:13;32714:21;32703:32;;32693:48;;;:::o;32747:149::-;32783:7;32823:66;32816:5;32812:78;32801:89;;32791:105;;;:::o;32902:126::-;32939:7;32979:42;32972:5;32968:54;32957:65;;32947:81;;;:::o;33034:77::-;33071:7;33100:5;33089:16;;33079:32;;;:::o;33117:154::-;33201:6;33196:3;33191;33178:30;33263:1;33254:6;33249:3;33245:16;33238:27;33168:103;;;:::o;33277:307::-;33345:1;33355:113;33369:6;33366:1;33363:13;33355:113;;;33454:1;33449:3;33445:11;33439:18;33435:1;33430:3;33426:11;33419:39;33391:2;33388:1;33384:10;33379:15;;33355:113;;;33486:6;33483:1;33480:13;33477:2;;;33566:1;33557:6;33552:3;33548:16;33541:27;33477:2;33326:258;;;;:::o;33590:320::-;33634:6;33671:1;33665:4;33661:12;33651:22;;33718:1;33712:4;33708:12;33739:18;33729:2;;33795:4;33787:6;33783:17;33773:27;;33729:2;33857;33849:6;33846:14;33826:18;33823:38;33820:2;;;33876:18;;:::i;:::-;33820:2;33641:269;;;;:::o;33916:281::-;33999:27;34021:4;33999:27;:::i;:::-;33991:6;33987:40;34129:6;34117:10;34114:22;34093:18;34081:10;34078:34;34075:62;34072:2;;;34140:18;;:::i;:::-;34072:2;34180:10;34176:2;34169:22;33959:238;;;:::o;34203:233::-;34242:3;34265:24;34283:5;34265:24;:::i;:::-;34256:33;;34311:66;34304:5;34301:77;34298:2;;;34381:18;;:::i;:::-;34298:2;34428:1;34421:5;34417:13;34410:20;;34246:190;;;:::o;34442:176::-;34474:1;34491:20;34509:1;34491:20;:::i;:::-;34486:25;;34525:20;34543:1;34525:20;:::i;:::-;34520:25;;34564:1;34554:2;;34569:18;;:::i;:::-;34554:2;34610:1;34607;34603:9;34598:14;;34476:142;;;;:::o;34624:180::-;34672:77;34669:1;34662:88;34769:4;34766:1;34759:15;34793:4;34790:1;34783:15;34810:180;34858:77;34855:1;34848:88;34955:4;34952:1;34945:15;34979:4;34976:1;34969:15;34996:180;35044:77;35041:1;35034:88;35141:4;35138:1;35131:15;35165:4;35162:1;35155:15;35182:180;35230:77;35227:1;35220:88;35327:4;35324:1;35317:15;35351:4;35348:1;35341:15;35368:102;35409:6;35460:2;35456:7;35451:2;35444:5;35440:14;35436:28;35426:38;;35416:54;;;:::o;35476:230::-;35616:34;35612:1;35604:6;35600:14;35593:58;35685:13;35680:2;35672:6;35668:15;35661:38;35582:124;:::o;35712:237::-;35852:34;35848:1;35840:6;35836:14;35829:58;35921:20;35916:2;35908:6;35904:15;35897:45;35818:131;:::o;35955:225::-;36095:34;36091:1;36083:6;36079:14;36072:58;36164:8;36159:2;36151:6;36147:15;36140:33;36061:119;:::o;36186:231::-;36326:34;36322:1;36314:6;36310:14;36303:58;36395:14;36390:2;36382:6;36378:15;36371:39;36292:125;:::o;36423:178::-;36563:30;36559:1;36551:6;36547:14;36540:54;36529:72;:::o;36607:223::-;36747:34;36743:1;36735:6;36731:14;36724:58;36816:6;36811:2;36803:6;36799:15;36792:31;36713:117;:::o;36836:175::-;36976:27;36972:1;36964:6;36960:14;36953:51;36942:69;:::o;37017:231::-;37157:34;37153:1;37145:6;37141:14;37134:58;37226:14;37221:2;37213:6;37209:15;37202:39;37123:125;:::o;37254:222::-;37394:34;37390:1;37382:6;37378:14;37371:58;37463:5;37458:2;37450:6;37446:15;37439:30;37360:116;:::o;37482:243::-;37622:34;37618:1;37610:6;37606:14;37599:58;37691:26;37686:2;37678:6;37674:15;37667:51;37588:137;:::o;37731:229::-;37871:34;37867:1;37859:6;37855:14;37848:58;37940:12;37935:2;37927:6;37923:15;37916:37;37837:123;:::o;37966:228::-;38106:34;38102:1;38094:6;38090:14;38083:58;38175:11;38170:2;38162:6;38158:15;38151:36;38072:122;:::o;38200:176::-;38340:28;38336:1;38328:6;38324:14;38317:52;38306:70;:::o;38382:182::-;38522:34;38518:1;38510:6;38506:14;38499:58;38488:76;:::o;38570:231::-;38710:34;38706:1;38698:6;38694:14;38687:58;38779:14;38774:2;38766:6;38762:15;38755:39;38676:125;:::o;38807:182::-;38947:34;38943:1;38935:6;38931:14;38924:58;38913:76;:::o;38995:228::-;39135:34;39131:1;39123:6;39119:14;39112:58;39204:11;39199:2;39191:6;39187:15;39180:36;39101:122;:::o;39229:234::-;39369:34;39365:1;39357:6;39353:14;39346:58;39438:17;39433:2;39425:6;39421:15;39414:42;39335:128;:::o;39469:220::-;39609:34;39605:1;39597:6;39593:14;39586:58;39678:3;39673:2;39665:6;39661:15;39654:28;39575:114;:::o;39695:166::-;39835:18;39831:1;39823:6;39819:14;39812:42;39801:60;:::o;39867:236::-;40007:34;40003:1;39995:6;39991:14;39984:58;40076:19;40071:2;40063:6;40059:15;40052:44;39973:130;:::o;40109:158::-;40249:10;40245:1;40237:6;40233:14;40226:34;40215:52;:::o;40273:231::-;40413:34;40409:1;40401:6;40397:14;40390:58;40482:14;40477:2;40469:6;40465:15;40458:39;40379:125;:::o;40510:178::-;40650:30;40646:1;40638:6;40634:14;40627:54;40616:72;:::o;40694:122::-;40767:24;40785:5;40767:24;:::i;:::-;40760:5;40757:35;40747:2;;40806:1;40803;40796:12;40747:2;40737:79;:::o;40822:116::-;40892:21;40907:5;40892:21;:::i;:::-;40885:5;40882:32;40872:2;;40928:1;40925;40918:12;40872:2;40862:76;:::o;40944:120::-;41016:23;41033:5;41016:23;:::i;:::-;41009:5;41006:34;40996:2;;41054:1;41051;41044:12;40996:2;40986:78;:::o;41070:122::-;41143:24;41161:5;41143:24;:::i;:::-;41136:5;41133:35;41123:2;;41182:1;41179;41172:12;41123:2;41113:79;:::o

Swarm Source

ipfs://681e6508e75a1fa9f31f09f58c0dbe7b83747e80ac19e9065af91684f68ac1a2
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.