ETH Price: $2,433.06 (+4.41%)

Token

echibi (chib)
 

Overview

Max Total Supply

999 chib

Holders

159

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
0 chib
0x9ec93afea63d6c9a33bd6779516f72368a1b0c62
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:
echibi

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-26
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-08
 */

// File: @openzeppelin/contracts/utils/Context.sol
// File: @openzeppelin/contracts/introspection/IERC165.sol
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// File: @openzeppelin/contracts/token/ERC721/IERC721Metadata.sol
// File: @openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// File: @openzeppelin/contracts/introspection/ERC165.sol
// File: @openzeppelin/contracts/utils/Address.sol
// File: @openzeppelin/contracts/utils/EnumerableSet.sol
// File: @openzeppelin/contracts/utils/EnumerableMap.sol
// File: @openzeppelin/contracts/utils/Strings.sol
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// File: @openzeppelin/contracts/access/Ownable.sol

// SPDX-License-Identifier: MIT
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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity ^0.8.0;

/**
 * @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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

/**
 * @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}. 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
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //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 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` 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 {}
}

pragma solidity ^0.8.0;

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

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;
        // solhint-disable-next-line no-inline-assembly
        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"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

contract echibi is ERC721Enumerable, Ownable {
    using Strings for uint256;

    string _baseTokenURI;
    uint256 private _price = 0.005 ether;
    bool public _paused = true;

    // withdraw addresses
    address t1 = 0x021F7a58649dB0b715401eb3a8b1353A667097Bc;

    constructor(string memory baseURI) ERC721("echibi", "chib") {
        setBaseURI(baseURI);
    }

    function mintChibi(uint256 num) public payable {
        uint256 supply = totalSupply();
        require(!_paused, "Sale paused");
        require(num < 6, "You can mint 5 chibis at a time");
        require(supply + num < 1000, "Exceeds chibi supply!");
        require(msg.value >= _price * num, "Ether sent is not correct");

        for (uint256 i; i < num; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    // Mint value change if required.
    function setPrice(uint256 _newPrice) public onlyOwner {
        _price = _newPrice;
    }

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

    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function getPrice() public view returns (uint256) {
        return _price;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }

    function withdrawAll() public payable onlyOwner {
        uint256 _balance = address(this).balance;
        require(payable(t1).send(_balance));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"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":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mintChibi","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526611c37937e08000600c556001600d60006101000a81548160ff02191690831515021790555073021f7a58649db0b715401eb3a8b1353a667097bc600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008c57600080fd5b50604051620047d4380380620047d48339818101604052810190620000b2919062000476565b6040518060400160405280600681526020017f65636869626900000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f636869620000000000000000000000000000000000000000000000000000000081525081600090816200012f919062000712565b50806001908162000141919062000712565b5050506000620001566200020d60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000206816200021560201b60201c565b506200087c565b600033905090565b620002256200020d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200024b620002b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029b906200085a565b60405180910390fd5b80600b9081620002b5919062000712565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034c8262000301565b810181811067ffffffffffffffff821117156200036e576200036d62000312565b5b80604052505050565b600062000383620002e3565b905062000391828262000341565b919050565b600067ffffffffffffffff821115620003b457620003b362000312565b5b620003bf8262000301565b9050602081019050919050565b60005b83811015620003ec578082015181840152602081019050620003cf565b60008484015250505050565b60006200040f620004098462000396565b62000377565b9050828152602081018484840111156200042e576200042d620002fc565b5b6200043b848285620003cc565b509392505050565b600082601f8301126200045b576200045a620002f7565b5b81516200046d848260208601620003f8565b91505092915050565b6000602082840312156200048f576200048e620002ed565b5b600082015167ffffffffffffffff811115620004b057620004af620002f2565b5b620004be8482850162000443565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200051a57607f821691505b60208210810362000530576200052f620004d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200059a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200055b565b620005a686836200055b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005f3620005ed620005e784620005be565b620005c8565b620005be565b9050919050565b6000819050919050565b6200060f83620005d2565b620006276200061e82620005fa565b84845462000568565b825550505050565b600090565b6200063e6200062f565b6200064b81848462000604565b505050565b5b8181101562000673576200066760008262000634565b60018101905062000651565b5050565b601f821115620006c2576200068c8162000536565b62000697846200054b565b81016020851015620006a7578190505b620006bf620006b6856200054b565b83018262000650565b50505b505050565b600082821c905092915050565b6000620006e760001984600802620006c7565b1980831691505092915050565b6000620007028383620006d4565b9150826002028217905092915050565b6200071d82620004c7565b67ffffffffffffffff81111562000739576200073862000312565b5b62000745825462000501565b6200075282828562000677565b600060209050601f8311600181146200078a576000841562000775578287015190505b620007818582620006f4565b865550620007f1565b601f1984166200079a8662000536565b60005b82811015620007c4578489015182556001820191506020850194506020810190506200079d565b86831015620007e45784890151620007e0601f891682620006d4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000842602083620007f9565b91506200084f826200080a565b602082019050919050565b60006020820190508181036000830152620008758162000833565b9050919050565b613f48806200088c6000396000f3fe6080604052600436106101815760003560e01c806370a08231116100d157806398d5fdca1161008a578063c87b56dd11610064578063c87b56dd1461055f578063e985e9c51461059c578063eb7d6d21146105d9578063f2fde38b146105f557610181565b806398d5fdca146104e2578063a22cb4651461050d578063b88d4fde1461053657610181565b806370a0823114610405578063715018a614610442578063853828b6146104595780638da5cb5b1461046357806391b7f5ed1461048e57806395d89b41146104b757610181565b806318160ddd1161013e57806342842e0e1161011857806342842e0e146103395780634f6ccce71461036257806355f804b31461039f5780636352211e146103c857610181565b806318160ddd146102a857806323b872dd146102d35780632f745c59146102fc57610181565b806301ffc9a71461018657806302329a29146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806316c61ccc1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612720565b61061e565b6040516101ba9190612768565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906127af565b610698565b005b3480156101f857600080fd5b50610201610731565b60405161020e919061286c565b60405180910390f35b34801561022357600080fd5b5061023e600480360381019061023991906128c4565b6107c3565b60405161024b9190612932565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612979565b610848565b005b34801561028957600080fd5b5061029261095f565b60405161029f9190612768565b60405180910390f35b3480156102b457600080fd5b506102bd610972565b6040516102ca91906129c8565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f591906129e3565b61097f565b005b34801561030857600080fd5b50610323600480360381019061031e9190612979565b6109df565b60405161033091906129c8565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906129e3565b610a84565b005b34801561036e57600080fd5b50610389600480360381019061038491906128c4565b610aa4565b60405161039691906129c8565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190612b6b565b610b15565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906128c4565b610ba4565b6040516103fc9190612932565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190612bb4565b610c55565b60405161043991906129c8565b60405180910390f35b34801561044e57600080fd5b50610457610d0c565b005b610461610e49565b005b34801561046f57600080fd5b50610478610f2d565b6040516104859190612932565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b091906128c4565b610f57565b005b3480156104c357600080fd5b506104cc610fdd565b6040516104d9919061286c565b60405180910390f35b3480156104ee57600080fd5b506104f761106f565b60405161050491906129c8565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190612be1565b611079565b005b34801561054257600080fd5b5061055d60048036038101906105589190612cc2565b6111f9565b005b34801561056b57600080fd5b50610586600480360381019061058191906128c4565b61125b565b604051610593919061286c565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190612d45565b611302565b6040516105d09190612768565b60405180910390f35b6105f360048036038101906105ee91906128c4565b611396565b005b34801561060157600080fd5b5061061c60048036038101906106179190612bb4565b61150c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106915750610690826116b7565b5b9050919050565b6106a0611799565b73ffffffffffffffffffffffffffffffffffffffff166106be610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070b90612dd1565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60606000805461074090612e20565b80601f016020809104026020016040519081016040528092919081815260200182805461076c90612e20565b80156107b95780601f1061078e576101008083540402835291602001916107b9565b820191906000526020600020905b81548152906001019060200180831161079c57829003601f168201915b5050505050905090565b60006107ce826117a1565b61080d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080490612ec3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085382610ba4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba90612f55565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e2611799565b73ffffffffffffffffffffffffffffffffffffffff16148061091157506109108161090b611799565b611302565b5b610950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094790612fe7565b60405180910390fd5b61095a838361180d565b505050565b600d60009054906101000a900460ff1681565b6000600880549050905090565b61099061098a611799565b826118c6565b6109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690613079565b60405180910390fd5b6109da8383836119a4565b505050565b60006109ea83610c55565b8210610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a229061310b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a9f838383604051806020016040528060008152506111f9565b505050565b6000610aae610972565b8210610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae69061319d565b60405180910390fd5b60088281548110610b0357610b026131bd565b5b90600052602060002001549050919050565b610b1d611799565b73ffffffffffffffffffffffffffffffffffffffff16610b3b610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612dd1565b60405180910390fd5b80600b9081610ba09190613398565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906134dc565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc9061356e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d14611799565b73ffffffffffffffffffffffffffffffffffffffff16610d32610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90612dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610e51611799565b73ffffffffffffffffffffffffffffffffffffffff16610e6f610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612dd1565b60405180910390fd5b6000479050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610f2a57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f5f611799565b73ffffffffffffffffffffffffffffffffffffffff16610f7d610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612dd1565b60405180910390fd5b80600c8190555050565b606060018054610fec90612e20565b80601f016020809104026020016040519081016040528092919081815260200182805461101890612e20565b80156110655780601f1061103a57610100808354040283529160200191611065565b820191906000526020600020905b81548152906001019060200180831161104857829003601f168201915b5050505050905090565b6000600c54905090565b611081611799565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906135da565b60405180910390fd5b80600560006110fb611799565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111a8611799565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111ed9190612768565b60405180910390a35050565b61120a611204611799565b836118c6565b611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090613079565b60405180910390fd5b61125584848484611bff565b50505050565b6060611266826117a1565b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061366c565b60405180910390fd5b60006112af611c5b565b905060008151116112cf57604051806020016040528060008152506112fa565b806112d984611ced565b6040516020016112ea9291906136c8565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006113a0610972565b9050600d60009054906101000a900460ff16156113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e990613738565b60405180910390fd5b60068210611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906137a4565b60405180910390fd5b6103e8828261144491906137f3565b10611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90613873565b60405180910390fd5b81600c546114929190613893565b3410156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90613921565b60405180910390fd5b60005b82811015611507576114f43382846114ef91906137f3565b611e4d565b80806114ff90613941565b9150506114d7565b505050565b611514611799565b73ffffffffffffffffffffffffffffffffffffffff16611532610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90612dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee906139fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061178257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611792575061179182611e6b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661188083610ba4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118d1826117a1565b611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613a8d565b60405180910390fd5b600061191b83610ba4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061198a57508373ffffffffffffffffffffffffffffffffffffffff16611972846107c3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061199b575061199a8185611302565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c482610ba4565b73ffffffffffffffffffffffffffffffffffffffff1614611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190613b1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090613bb1565b60405180910390fd5b611a94838383611ed5565b611a9f60008261180d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aef9190613bd1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4691906137f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611c0a8484846119a4565b611c1684848484611fe7565b611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613c77565b60405180910390fd5b50505050565b6060600b8054611c6a90612e20565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9690612e20565b8015611ce35780601f10611cb857610100808354040283529160200191611ce3565b820191906000526020600020905b815481529060010190602001808311611cc657829003601f168201915b5050505050905090565b606060008203611d34576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e48565b600082905060005b60008214611d66578080611d4f90613941565b915050600a82611d5f9190613cc6565b9150611d3c565b60008167ffffffffffffffff811115611d8257611d81612a40565b5b6040519080825280601f01601f191660200182016040528015611db45781602001600182028036833780820191505090505b5090505b60008514611e4157600182611dcd9190613bd1565b9150600a85611ddc9190613cf7565b6030611de891906137f3565b60f81b818381518110611dfe57611dfd6131bd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e3a9190613cc6565b9450611db8565b8093505050505b919050565b611e6782826040518060200160405280600081525061216e565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ee08383836121c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2257611f1d816121ce565b611f61565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f6057611f5f8382612217565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa357611f9e81612384565b611fe2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fe157611fe08282612455565b5b5b505050565b60006120088473ffffffffffffffffffffffffffffffffffffffff166124d4565b15612161578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612031611799565b8786866040518563ffffffff1660e01b81526004016120539493929190613d7d565b6020604051808303816000875af192505050801561208f57506040513d601f19601f8201168201806040525081019061208c9190613dde565b60015b612111573d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b506000815103612109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210090613c77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612166565b600190505b949350505050565b61217883836124e7565b6121856000848484611fe7565b6121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613c77565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161222484610c55565b61222e9190613bd1565b9050600060076000848152602001908152602001600020549050818114612313576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123989190613bd1565b90506000600960008481526020019081526020016000205490506000600883815481106123c8576123c76131bd565b5b9060005260206000200154905080600883815481106123ea576123e96131bd565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061243957612438613e0b565b5b6001900381819060005260206000200160009055905550505050565b600061246083610c55565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90613e86565b60405180910390fd5b61255f816117a1565b1561259f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259690613ef2565b60405180910390fd5b6125ab60008383611ed5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fb91906137f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126fd816126c8565b811461270857600080fd5b50565b60008135905061271a816126f4565b92915050565b600060208284031215612736576127356126be565b5b60006127448482850161270b565b91505092915050565b60008115159050919050565b6127628161274d565b82525050565b600060208201905061277d6000830184612759565b92915050565b61278c8161274d565b811461279757600080fd5b50565b6000813590506127a981612783565b92915050565b6000602082840312156127c5576127c46126be565b5b60006127d38482850161279a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128165780820151818401526020810190506127fb565b60008484015250505050565b6000601f19601f8301169050919050565b600061283e826127dc565b61284881856127e7565b93506128588185602086016127f8565b61286181612822565b840191505092915050565b600060208201905081810360008301526128868184612833565b905092915050565b6000819050919050565b6128a18161288e565b81146128ac57600080fd5b50565b6000813590506128be81612898565b92915050565b6000602082840312156128da576128d96126be565b5b60006128e8848285016128af565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061291c826128f1565b9050919050565b61292c81612911565b82525050565b60006020820190506129476000830184612923565b92915050565b61295681612911565b811461296157600080fd5b50565b6000813590506129738161294d565b92915050565b600080604083850312156129905761298f6126be565b5b600061299e85828601612964565b92505060206129af858286016128af565b9150509250929050565b6129c28161288e565b82525050565b60006020820190506129dd60008301846129b9565b92915050565b6000806000606084860312156129fc576129fb6126be565b5b6000612a0a86828701612964565b9350506020612a1b86828701612964565b9250506040612a2c868287016128af565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a7882612822565b810181811067ffffffffffffffff82111715612a9757612a96612a40565b5b80604052505050565b6000612aaa6126b4565b9050612ab68282612a6f565b919050565b600067ffffffffffffffff821115612ad657612ad5612a40565b5b612adf82612822565b9050602081019050919050565b82818337600083830152505050565b6000612b0e612b0984612abb565b612aa0565b905082815260208101848484011115612b2a57612b29612a3b565b5b612b35848285612aec565b509392505050565b600082601f830112612b5257612b51612a36565b5b8135612b62848260208601612afb565b91505092915050565b600060208284031215612b8157612b806126be565b5b600082013567ffffffffffffffff811115612b9f57612b9e6126c3565b5b612bab84828501612b3d565b91505092915050565b600060208284031215612bca57612bc96126be565b5b6000612bd884828501612964565b91505092915050565b60008060408385031215612bf857612bf76126be565b5b6000612c0685828601612964565b9250506020612c178582860161279a565b9150509250929050565b600067ffffffffffffffff821115612c3c57612c3b612a40565b5b612c4582612822565b9050602081019050919050565b6000612c65612c6084612c21565b612aa0565b905082815260208101848484011115612c8157612c80612a3b565b5b612c8c848285612aec565b509392505050565b600082601f830112612ca957612ca8612a36565b5b8135612cb9848260208601612c52565b91505092915050565b60008060008060808587031215612cdc57612cdb6126be565b5b6000612cea87828801612964565b9450506020612cfb87828801612964565b9350506040612d0c878288016128af565b925050606085013567ffffffffffffffff811115612d2d57612d2c6126c3565b5b612d3987828801612c94565b91505092959194509250565b60008060408385031215612d5c57612d5b6126be565b5b6000612d6a85828601612964565b9250506020612d7b85828601612964565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612dbb6020836127e7565b9150612dc682612d85565b602082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e3857607f821691505b602082108103612e4b57612e4a612df1565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612ead602c836127e7565b9150612eb882612e51565b604082019050919050565b60006020820190508181036000830152612edc81612ea0565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f3f6021836127e7565b9150612f4a82612ee3565b604082019050919050565b60006020820190508181036000830152612f6e81612f32565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612fd16038836127e7565b9150612fdc82612f75565b604082019050919050565b6000602082019050818103600083015261300081612fc4565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130636031836127e7565b915061306e82613007565b604082019050919050565b6000602082019050818103600083015261309281613056565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006130f5602b836127e7565b915061310082613099565b604082019050919050565b60006020820190508181036000830152613124816130e8565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613187602c836127e7565b91506131928261312b565b604082019050919050565b600060208201905081810360008301526131b68161317a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261324e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613211565b6132588683613211565b95508019841693508086168417925050509392505050565b6000819050919050565b600061329561329061328b8461288e565b613270565b61288e565b9050919050565b6000819050919050565b6132af8361327a565b6132c36132bb8261329c565b84845461321e565b825550505050565b600090565b6132d86132cb565b6132e38184846132a6565b505050565b5b81811015613307576132fc6000826132d0565b6001810190506132e9565b5050565b601f82111561334c5761331d816131ec565b61332684613201565b81016020851015613335578190505b61334961334185613201565b8301826132e8565b50505b505050565b600082821c905092915050565b600061336f60001984600802613351565b1980831691505092915050565b6000613388838361335e565b9150826002028217905092915050565b6133a1826127dc565b67ffffffffffffffff8111156133ba576133b9612a40565b5b6133c48254612e20565b6133cf82828561330b565b600060209050601f83116001811461340257600084156133f0578287015190505b6133fa858261337c565b865550613462565b601f198416613410866131ec565b60005b8281101561343857848901518255600182019150602085019450602081019050613413565b868310156134555784890151613451601f89168261335e565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006134c66029836127e7565b91506134d18261346a565b604082019050919050565b600060208201905081810360008301526134f5816134b9565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613558602a836127e7565b9150613563826134fc565b604082019050919050565b600060208201905081810360008301526135878161354b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006135c46019836127e7565b91506135cf8261358e565b602082019050919050565b600060208201905081810360008301526135f3816135b7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613656602f836127e7565b9150613661826135fa565b604082019050919050565b6000602082019050818103600083015261368581613649565b9050919050565b600081905092915050565b60006136a2826127dc565b6136ac818561368c565b93506136bc8185602086016127f8565b80840191505092915050565b60006136d48285613697565b91506136e08284613697565b91508190509392505050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b6000613722600b836127e7565b915061372d826136ec565b602082019050919050565b6000602082019050818103600083015261375181613715565b9050919050565b7f596f752063616e206d696e7420352063686962697320617420612074696d6500600082015250565b600061378e601f836127e7565b915061379982613758565b602082019050919050565b600060208201905081810360008301526137bd81613781565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137fe8261288e565b91506138098361288e565b9250828201905080821115613821576138206137c4565b5b92915050565b7f4578636565647320636869626920737570706c79210000000000000000000000600082015250565b600061385d6015836127e7565b915061386882613827565b602082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b600061389e8261288e565b91506138a98361288e565b92508282026138b78161288e565b915082820484148315176138ce576138cd6137c4565b5b5092915050565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b600061390b6019836127e7565b9150613916826138d5565b602082019050919050565b6000602082019050818103600083015261393a816138fe565b9050919050565b600061394c8261288e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361397e5761397d6137c4565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139e56026836127e7565b91506139f082613989565b604082019050919050565b60006020820190508181036000830152613a14816139d8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613a77602c836127e7565b9150613a8282613a1b565b604082019050919050565b60006020820190508181036000830152613aa681613a6a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613b096029836127e7565b9150613b1482613aad565b604082019050919050565b60006020820190508181036000830152613b3881613afc565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b9b6024836127e7565b9150613ba682613b3f565b604082019050919050565b60006020820190508181036000830152613bca81613b8e565b9050919050565b6000613bdc8261288e565b9150613be78361288e565b9250828203905081811115613bff57613bfe6137c4565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613c616032836127e7565b9150613c6c82613c05565b604082019050919050565b60006020820190508181036000830152613c9081613c54565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cd18261288e565b9150613cdc8361288e565b925082613cec57613ceb613c97565b5b828204905092915050565b6000613d028261288e565b9150613d0d8361288e565b925082613d1d57613d1c613c97565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000613d4f82613d28565b613d598185613d33565b9350613d698185602086016127f8565b613d7281612822565b840191505092915050565b6000608082019050613d926000830187612923565b613d9f6020830186612923565b613dac60408301856129b9565b8181036060830152613dbe8184613d44565b905095945050505050565b600081519050613dd8816126f4565b92915050565b600060208284031215613df457613df36126be565b5b6000613e0284828501613dc9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613e706020836127e7565b9150613e7b82613e3a565b602082019050919050565b60006020820190508181036000830152613e9f81613e63565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613edc601c836127e7565b9150613ee782613ea6565b602082019050919050565b60006020820190508181036000830152613f0b81613ecf565b905091905056fea2646970667358221220b5167b2b86019f563adb7a3d76d5130e727e2f228f3b521376410e9d1706306464736f6c634300081100330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f656368696269732d6f6e652e76657263656c2e6170702f6170692f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101815760003560e01c806370a08231116100d157806398d5fdca1161008a578063c87b56dd11610064578063c87b56dd1461055f578063e985e9c51461059c578063eb7d6d21146105d9578063f2fde38b146105f557610181565b806398d5fdca146104e2578063a22cb4651461050d578063b88d4fde1461053657610181565b806370a0823114610405578063715018a614610442578063853828b6146104595780638da5cb5b1461046357806391b7f5ed1461048e57806395d89b41146104b757610181565b806318160ddd1161013e57806342842e0e1161011857806342842e0e146103395780634f6ccce71461036257806355f804b31461039f5780636352211e146103c857610181565b806318160ddd146102a857806323b872dd146102d35780632f745c59146102fc57610181565b806301ffc9a71461018657806302329a29146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806316c61ccc1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612720565b61061e565b6040516101ba9190612768565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906127af565b610698565b005b3480156101f857600080fd5b50610201610731565b60405161020e919061286c565b60405180910390f35b34801561022357600080fd5b5061023e600480360381019061023991906128c4565b6107c3565b60405161024b9190612932565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612979565b610848565b005b34801561028957600080fd5b5061029261095f565b60405161029f9190612768565b60405180910390f35b3480156102b457600080fd5b506102bd610972565b6040516102ca91906129c8565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f591906129e3565b61097f565b005b34801561030857600080fd5b50610323600480360381019061031e9190612979565b6109df565b60405161033091906129c8565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906129e3565b610a84565b005b34801561036e57600080fd5b50610389600480360381019061038491906128c4565b610aa4565b60405161039691906129c8565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190612b6b565b610b15565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906128c4565b610ba4565b6040516103fc9190612932565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190612bb4565b610c55565b60405161043991906129c8565b60405180910390f35b34801561044e57600080fd5b50610457610d0c565b005b610461610e49565b005b34801561046f57600080fd5b50610478610f2d565b6040516104859190612932565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b091906128c4565b610f57565b005b3480156104c357600080fd5b506104cc610fdd565b6040516104d9919061286c565b60405180910390f35b3480156104ee57600080fd5b506104f761106f565b60405161050491906129c8565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190612be1565b611079565b005b34801561054257600080fd5b5061055d60048036038101906105589190612cc2565b6111f9565b005b34801561056b57600080fd5b50610586600480360381019061058191906128c4565b61125b565b604051610593919061286c565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190612d45565b611302565b6040516105d09190612768565b60405180910390f35b6105f360048036038101906105ee91906128c4565b611396565b005b34801561060157600080fd5b5061061c60048036038101906106179190612bb4565b61150c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106915750610690826116b7565b5b9050919050565b6106a0611799565b73ffffffffffffffffffffffffffffffffffffffff166106be610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070b90612dd1565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60606000805461074090612e20565b80601f016020809104026020016040519081016040528092919081815260200182805461076c90612e20565b80156107b95780601f1061078e576101008083540402835291602001916107b9565b820191906000526020600020905b81548152906001019060200180831161079c57829003601f168201915b5050505050905090565b60006107ce826117a1565b61080d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080490612ec3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085382610ba4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba90612f55565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e2611799565b73ffffffffffffffffffffffffffffffffffffffff16148061091157506109108161090b611799565b611302565b5b610950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094790612fe7565b60405180910390fd5b61095a838361180d565b505050565b600d60009054906101000a900460ff1681565b6000600880549050905090565b61099061098a611799565b826118c6565b6109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690613079565b60405180910390fd5b6109da8383836119a4565b505050565b60006109ea83610c55565b8210610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a229061310b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a9f838383604051806020016040528060008152506111f9565b505050565b6000610aae610972565b8210610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae69061319d565b60405180910390fd5b60088281548110610b0357610b026131bd565b5b90600052602060002001549050919050565b610b1d611799565b73ffffffffffffffffffffffffffffffffffffffff16610b3b610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612dd1565b60405180910390fd5b80600b9081610ba09190613398565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906134dc565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc9061356e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d14611799565b73ffffffffffffffffffffffffffffffffffffffff16610d32610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90612dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610e51611799565b73ffffffffffffffffffffffffffffffffffffffff16610e6f610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612dd1565b60405180910390fd5b6000479050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610f2a57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f5f611799565b73ffffffffffffffffffffffffffffffffffffffff16610f7d610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612dd1565b60405180910390fd5b80600c8190555050565b606060018054610fec90612e20565b80601f016020809104026020016040519081016040528092919081815260200182805461101890612e20565b80156110655780601f1061103a57610100808354040283529160200191611065565b820191906000526020600020905b81548152906001019060200180831161104857829003601f168201915b5050505050905090565b6000600c54905090565b611081611799565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906135da565b60405180910390fd5b80600560006110fb611799565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111a8611799565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111ed9190612768565b60405180910390a35050565b61120a611204611799565b836118c6565b611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090613079565b60405180910390fd5b61125584848484611bff565b50505050565b6060611266826117a1565b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061366c565b60405180910390fd5b60006112af611c5b565b905060008151116112cf57604051806020016040528060008152506112fa565b806112d984611ced565b6040516020016112ea9291906136c8565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006113a0610972565b9050600d60009054906101000a900460ff16156113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e990613738565b60405180910390fd5b60068210611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906137a4565b60405180910390fd5b6103e8828261144491906137f3565b10611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90613873565b60405180910390fd5b81600c546114929190613893565b3410156114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90613921565b60405180910390fd5b60005b82811015611507576114f43382846114ef91906137f3565b611e4d565b80806114ff90613941565b9150506114d7565b505050565b611514611799565b73ffffffffffffffffffffffffffffffffffffffff16611532610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90612dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee906139fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061178257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611792575061179182611e6b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661188083610ba4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118d1826117a1565b611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613a8d565b60405180910390fd5b600061191b83610ba4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061198a57508373ffffffffffffffffffffffffffffffffffffffff16611972846107c3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061199b575061199a8185611302565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c482610ba4565b73ffffffffffffffffffffffffffffffffffffffff1614611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190613b1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090613bb1565b60405180910390fd5b611a94838383611ed5565b611a9f60008261180d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aef9190613bd1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4691906137f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611c0a8484846119a4565b611c1684848484611fe7565b611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613c77565b60405180910390fd5b50505050565b6060600b8054611c6a90612e20565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9690612e20565b8015611ce35780601f10611cb857610100808354040283529160200191611ce3565b820191906000526020600020905b815481529060010190602001808311611cc657829003601f168201915b5050505050905090565b606060008203611d34576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e48565b600082905060005b60008214611d66578080611d4f90613941565b915050600a82611d5f9190613cc6565b9150611d3c565b60008167ffffffffffffffff811115611d8257611d81612a40565b5b6040519080825280601f01601f191660200182016040528015611db45781602001600182028036833780820191505090505b5090505b60008514611e4157600182611dcd9190613bd1565b9150600a85611ddc9190613cf7565b6030611de891906137f3565b60f81b818381518110611dfe57611dfd6131bd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e3a9190613cc6565b9450611db8565b8093505050505b919050565b611e6782826040518060200160405280600081525061216e565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ee08383836121c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2257611f1d816121ce565b611f61565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f6057611f5f8382612217565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fa357611f9e81612384565b611fe2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fe157611fe08282612455565b5b5b505050565b60006120088473ffffffffffffffffffffffffffffffffffffffff166124d4565b15612161578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612031611799565b8786866040518563ffffffff1660e01b81526004016120539493929190613d7d565b6020604051808303816000875af192505050801561208f57506040513d601f19601f8201168201806040525081019061208c9190613dde565b60015b612111573d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b506000815103612109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210090613c77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612166565b600190505b949350505050565b61217883836124e7565b6121856000848484611fe7565b6121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613c77565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161222484610c55565b61222e9190613bd1565b9050600060076000848152602001908152602001600020549050818114612313576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123989190613bd1565b90506000600960008481526020019081526020016000205490506000600883815481106123c8576123c76131bd565b5b9060005260206000200154905080600883815481106123ea576123e96131bd565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061243957612438613e0b565b5b6001900381819060005260206000200160009055905550505050565b600061246083610c55565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90613e86565b60405180910390fd5b61255f816117a1565b1561259f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259690613ef2565b60405180910390fd5b6125ab60008383611ed5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fb91906137f3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126fd816126c8565b811461270857600080fd5b50565b60008135905061271a816126f4565b92915050565b600060208284031215612736576127356126be565b5b60006127448482850161270b565b91505092915050565b60008115159050919050565b6127628161274d565b82525050565b600060208201905061277d6000830184612759565b92915050565b61278c8161274d565b811461279757600080fd5b50565b6000813590506127a981612783565b92915050565b6000602082840312156127c5576127c46126be565b5b60006127d38482850161279a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128165780820151818401526020810190506127fb565b60008484015250505050565b6000601f19601f8301169050919050565b600061283e826127dc565b61284881856127e7565b93506128588185602086016127f8565b61286181612822565b840191505092915050565b600060208201905081810360008301526128868184612833565b905092915050565b6000819050919050565b6128a18161288e565b81146128ac57600080fd5b50565b6000813590506128be81612898565b92915050565b6000602082840312156128da576128d96126be565b5b60006128e8848285016128af565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061291c826128f1565b9050919050565b61292c81612911565b82525050565b60006020820190506129476000830184612923565b92915050565b61295681612911565b811461296157600080fd5b50565b6000813590506129738161294d565b92915050565b600080604083850312156129905761298f6126be565b5b600061299e85828601612964565b92505060206129af858286016128af565b9150509250929050565b6129c28161288e565b82525050565b60006020820190506129dd60008301846129b9565b92915050565b6000806000606084860312156129fc576129fb6126be565b5b6000612a0a86828701612964565b9350506020612a1b86828701612964565b9250506040612a2c868287016128af565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a7882612822565b810181811067ffffffffffffffff82111715612a9757612a96612a40565b5b80604052505050565b6000612aaa6126b4565b9050612ab68282612a6f565b919050565b600067ffffffffffffffff821115612ad657612ad5612a40565b5b612adf82612822565b9050602081019050919050565b82818337600083830152505050565b6000612b0e612b0984612abb565b612aa0565b905082815260208101848484011115612b2a57612b29612a3b565b5b612b35848285612aec565b509392505050565b600082601f830112612b5257612b51612a36565b5b8135612b62848260208601612afb565b91505092915050565b600060208284031215612b8157612b806126be565b5b600082013567ffffffffffffffff811115612b9f57612b9e6126c3565b5b612bab84828501612b3d565b91505092915050565b600060208284031215612bca57612bc96126be565b5b6000612bd884828501612964565b91505092915050565b60008060408385031215612bf857612bf76126be565b5b6000612c0685828601612964565b9250506020612c178582860161279a565b9150509250929050565b600067ffffffffffffffff821115612c3c57612c3b612a40565b5b612c4582612822565b9050602081019050919050565b6000612c65612c6084612c21565b612aa0565b905082815260208101848484011115612c8157612c80612a3b565b5b612c8c848285612aec565b509392505050565b600082601f830112612ca957612ca8612a36565b5b8135612cb9848260208601612c52565b91505092915050565b60008060008060808587031215612cdc57612cdb6126be565b5b6000612cea87828801612964565b9450506020612cfb87828801612964565b9350506040612d0c878288016128af565b925050606085013567ffffffffffffffff811115612d2d57612d2c6126c3565b5b612d3987828801612c94565b91505092959194509250565b60008060408385031215612d5c57612d5b6126be565b5b6000612d6a85828601612964565b9250506020612d7b85828601612964565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612dbb6020836127e7565b9150612dc682612d85565b602082019050919050565b60006020820190508181036000830152612dea81612dae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e3857607f821691505b602082108103612e4b57612e4a612df1565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612ead602c836127e7565b9150612eb882612e51565b604082019050919050565b60006020820190508181036000830152612edc81612ea0565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f3f6021836127e7565b9150612f4a82612ee3565b604082019050919050565b60006020820190508181036000830152612f6e81612f32565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612fd16038836127e7565b9150612fdc82612f75565b604082019050919050565b6000602082019050818103600083015261300081612fc4565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130636031836127e7565b915061306e82613007565b604082019050919050565b6000602082019050818103600083015261309281613056565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006130f5602b836127e7565b915061310082613099565b604082019050919050565b60006020820190508181036000830152613124816130e8565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613187602c836127e7565b91506131928261312b565b604082019050919050565b600060208201905081810360008301526131b68161317a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261324e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613211565b6132588683613211565b95508019841693508086168417925050509392505050565b6000819050919050565b600061329561329061328b8461288e565b613270565b61288e565b9050919050565b6000819050919050565b6132af8361327a565b6132c36132bb8261329c565b84845461321e565b825550505050565b600090565b6132d86132cb565b6132e38184846132a6565b505050565b5b81811015613307576132fc6000826132d0565b6001810190506132e9565b5050565b601f82111561334c5761331d816131ec565b61332684613201565b81016020851015613335578190505b61334961334185613201565b8301826132e8565b50505b505050565b600082821c905092915050565b600061336f60001984600802613351565b1980831691505092915050565b6000613388838361335e565b9150826002028217905092915050565b6133a1826127dc565b67ffffffffffffffff8111156133ba576133b9612a40565b5b6133c48254612e20565b6133cf82828561330b565b600060209050601f83116001811461340257600084156133f0578287015190505b6133fa858261337c565b865550613462565b601f198416613410866131ec565b60005b8281101561343857848901518255600182019150602085019450602081019050613413565b868310156134555784890151613451601f89168261335e565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006134c66029836127e7565b91506134d18261346a565b604082019050919050565b600060208201905081810360008301526134f5816134b9565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613558602a836127e7565b9150613563826134fc565b604082019050919050565b600060208201905081810360008301526135878161354b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006135c46019836127e7565b91506135cf8261358e565b602082019050919050565b600060208201905081810360008301526135f3816135b7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613656602f836127e7565b9150613661826135fa565b604082019050919050565b6000602082019050818103600083015261368581613649565b9050919050565b600081905092915050565b60006136a2826127dc565b6136ac818561368c565b93506136bc8185602086016127f8565b80840191505092915050565b60006136d48285613697565b91506136e08284613697565b91508190509392505050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b6000613722600b836127e7565b915061372d826136ec565b602082019050919050565b6000602082019050818103600083015261375181613715565b9050919050565b7f596f752063616e206d696e7420352063686962697320617420612074696d6500600082015250565b600061378e601f836127e7565b915061379982613758565b602082019050919050565b600060208201905081810360008301526137bd81613781565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137fe8261288e565b91506138098361288e565b9250828201905080821115613821576138206137c4565b5b92915050565b7f4578636565647320636869626920737570706c79210000000000000000000000600082015250565b600061385d6015836127e7565b915061386882613827565b602082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b600061389e8261288e565b91506138a98361288e565b92508282026138b78161288e565b915082820484148315176138ce576138cd6137c4565b5b5092915050565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b600061390b6019836127e7565b9150613916826138d5565b602082019050919050565b6000602082019050818103600083015261393a816138fe565b9050919050565b600061394c8261288e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361397e5761397d6137c4565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139e56026836127e7565b91506139f082613989565b604082019050919050565b60006020820190508181036000830152613a14816139d8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613a77602c836127e7565b9150613a8282613a1b565b604082019050919050565b60006020820190508181036000830152613aa681613a6a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613b096029836127e7565b9150613b1482613aad565b604082019050919050565b60006020820190508181036000830152613b3881613afc565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b9b6024836127e7565b9150613ba682613b3f565b604082019050919050565b60006020820190508181036000830152613bca81613b8e565b9050919050565b6000613bdc8261288e565b9150613be78361288e565b9250828203905081811115613bff57613bfe6137c4565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613c616032836127e7565b9150613c6c82613c05565b604082019050919050565b60006020820190508181036000830152613c9081613c54565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cd18261288e565b9150613cdc8361288e565b925082613cec57613ceb613c97565b5b828204905092915050565b6000613d028261288e565b9150613d0d8361288e565b925082613d1d57613d1c613c97565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000613d4f82613d28565b613d598185613d33565b9350613d698185602086016127f8565b613d7281612822565b840191505092915050565b6000608082019050613d926000830187612923565b613d9f6020830186612923565b613dac60408301856129b9565b8181036060830152613dbe8184613d44565b905095945050505050565b600081519050613dd8816126f4565b92915050565b600060208284031215613df457613df36126be565b5b6000613e0284828501613dc9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613e706020836127e7565b9150613e7b82613e3a565b602082019050919050565b60006020820190508181036000830152613e9f81613e63565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613edc601c836127e7565b9150613ee782613ea6565b602082019050919050565b60006020820190508181036000830152613f0b81613ecf565b905091905056fea2646970667358221220b5167b2b86019f563adb7a3d76d5130e727e2f228f3b521376410e9d1706306464736f6c63430008110033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f656368696269732d6f6e652e76657263656c2e6170702f6170692f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://echibis-one.vercel.app/api/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [2] : 68747470733a2f2f656368696269732d6f6e652e76657263656c2e6170702f61
Arg [3] : 70692f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45484:1535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30377:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46781:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17619:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19201:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18724:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45640:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31180:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20260:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30761:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20707:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31370:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46581:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17226:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16869:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7249:148;;;;;;;;;;;;;:::i;:::-;;46863:153;;;:::i;:::-;;6598:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46360:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17788:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46691:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19581:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20963:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17963:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19979:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45872:441;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7552:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30377:300;30524:4;30581:35;30566:50;;;:11;:50;;;;:103;;;;30633:36;30657:11;30633:23;:36::i;:::-;30566:103;30546:123;;30377:300;;;:::o;46781:74::-;6829:12;:10;:12::i;:::-;6818:23;;:7;:5;:7::i;:::-;:23;;;6810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46844:3:::1;46834:7;;:13;;;;;;;;;;;;;;;;;;46781:74:::0;:::o;17619:100::-;17673:13;17706:5;17699:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17619:100;:::o;19201:308::-;19322:7;19369:16;19377:7;19369;:16::i;:::-;19347:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;19477:15;:24;19493:7;19477:24;;;;;;;;;;;;;;;;;;;;;19470:31;;19201:308;;;:::o;18724:411::-;18805:13;18821:23;18836:7;18821:14;:23::i;:::-;18805:39;;18869:5;18863:11;;:2;:11;;;18855:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18963:5;18947:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;18972:37;18989:5;18996:12;:10;:12::i;:::-;18972:16;:37::i;:::-;18947:62;18925:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;19106:21;19115:2;19119:7;19106:8;:21::i;:::-;18794:341;18724:411;;:::o;45640:26::-;;;;;;;;;;;;;:::o;31180:113::-;31241:7;31268:10;:17;;;;31261:24;;31180:113;:::o;20260:376::-;20469:41;20488:12;:10;:12::i;:::-;20502:7;20469:18;:41::i;:::-;20447:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20600:28;20610:4;20616:2;20620:7;20600:9;:28::i;:::-;20260:376;;;:::o;30761:343::-;30903:7;30958:23;30975:5;30958:16;:23::i;:::-;30950:5;:31;30928:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;31070:12;:19;31083:5;31070:19;;;;;;;;;;;;;;;:26;31090:5;31070:26;;;;;;;;;;;;31063:33;;30761:343;;;;:::o;20707:185::-;20845:39;20862:4;20868:2;20872:7;20845:39;;;;;;;;;;;;:16;:39::i;:::-;20707:185;;;:::o;31370:320::-;31490:7;31545:30;:28;:30::i;:::-;31537:5;:38;31515:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;31665:10;31676:5;31665:17;;;;;;;;:::i;:::-;;;;;;;;;;31658:24;;31370:320;;;:::o;46581:102::-;6829:12;:10;:12::i;:::-;6818:23;;:7;:5;:7::i;:::-;:23;;;6810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46668:7:::1;46652:13;:23;;;;;;:::i;:::-;;46581:102:::0;:::o;17226:326::-;17343:7;17368:13;17384:7;:16;17392:7;17384:16;;;;;;;;;;;;;;;;;;;;;17368:32;;17450:1;17433:19;;:5;:19;;;17411:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;17539:5;17532:12;;;17226:326;;;:::o;16869:295::-;16986:7;17050:1;17033:19;;:5;:19;;;17011:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17140:9;:16;17150:5;17140:16;;;;;;;;;;;;;;;;17133:23;;16869:295;;;:::o;7249:148::-;6829:12;:10;:12::i;:::-;6818:23;;:7;:5;:7::i;:::-;:23;;;6810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7356:1:::1;7319:40;;7340:6;;;;;;;;;;;7319:40;;;;;;;;;;;;7387:1;7370:6;;:19;;;;;;;;;;;;;;;;;;7249:148::o:0;46863:153::-;6829:12;:10;:12::i;:::-;6818:23;;:7;:5;:7::i;:::-;:23;;;6810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46922:16:::1;46941:21;46922:40;;46989:2;;;;;;;;;;;46981:16;;:26;46998:8;46981:26;;;;;;;;;;;;;;;;;;;;;;;46973:35;;;::::0;::::1;;46911:105;46863:153::o:0;6598:87::-;6644:7;6671:6;;;;;;;;;;;6664:13;;6598:87;:::o;46360:91::-;6829:12;:10;:12::i;:::-;6818:23;;:7;:5;:7::i;:::-;:23;;;6810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46434:9:::1;46425:6;:18;;;;46360:91:::0;:::o;17788:104::-;17844:13;17877:7;17870:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17788:104;:::o;46691:82::-;46732:7;46759:6;;46752:13;;46691:82;:::o;19581:327::-;19728:12;:10;:12::i;:::-;19716:24;;:8;:24;;;19708:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19828:8;19783:18;:32;19802:12;:10;:12::i;:::-;19783:32;;;;;;;;;;;;;;;:42;19816:8;19783:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;19881:8;19852:48;;19867:12;:10;:12::i;:::-;19852:48;;;19891:8;19852:48;;;;;;:::i;:::-;;;;;;;;19581:327;;:::o;20963:365::-;21152:41;21171:12;:10;:12::i;:::-;21185:7;21152:18;:41::i;:::-;21130:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21281:39;21295:4;21301:2;21305:7;21314:5;21281:13;:39::i;:::-;20963:365;;;;:::o;17963:468::-;18081:13;18134:16;18142:7;18134;:16::i;:::-;18112:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;18238:21;18262:10;:8;:10::i;:::-;18238:34;;18327:1;18309:7;18303:21;:25;:120;;;;;;;;;;;;;;;;;18372:7;18381:18;:7;:16;:18::i;:::-;18355:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18303:120;18283:140;;;17963:468;;;:::o;19979:214::-;20121:4;20150:18;:25;20169:5;20150:25;;;;;;;;;;;;;;;:35;20176:8;20150:35;;;;;;;;;;;;;;;;;;;;;;;;;20143:42;;19979:214;;;;:::o;45872:441::-;45930:14;45947:13;:11;:13::i;:::-;45930:30;;45980:7;;;;;;;;;;;45979:8;45971:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;46028:1;46022:3;:7;46014:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46099:4;46093:3;46084:6;:12;;;;:::i;:::-;:19;46076:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46170:3;46161:6;;:12;;;;:::i;:::-;46148:9;:25;;46140:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46221:9;46216:90;46236:3;46232:1;:7;46216:90;;;46261:33;46271:10;46292:1;46283:6;:10;;;;:::i;:::-;46261:9;:33::i;:::-;46241:3;;;;;:::i;:::-;;;;46216:90;;;;45919:394;45872:441;:::o;7552:281::-;6829:12;:10;:12::i;:::-;6818:23;;:7;:5;:7::i;:::-;:23;;;6810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7675:1:::1;7655:22;;:8;:22;;::::0;7633:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7788:8;7759:38;;7780:6;;;;;;;;;;;7759:38;;;;;;;;;;;;7817:8;7808:6;;:17;;;;;;;;;;;;;;;;;;7552:281:::0;:::o;16450:355::-;16597:4;16654:25;16639:40;;;:11;:40;;;;:105;;;;16711:33;16696:48;;;:11;:48;;;;16639:105;:158;;;;16761:36;16785:11;16761:23;:36::i;:::-;16639:158;16619:178;;16450:355;;;:::o;1437:98::-;1490:7;1517:10;1510:17;;1437:98;:::o;22875:127::-;22940:4;22992:1;22964:30;;:7;:16;22972:7;22964:16;;;;;;;;;;;;;;;;;;;;;:30;;;;22957:37;;22875:127;;;:::o;26998:174::-;27100:2;27073:15;:24;27089:7;27073:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27156:7;27152:2;27118:46;;27127:23;27142:7;27127:14;:23::i;:::-;27118:46;;;;;;;;;;;;26998:174;;:::o;23169:452::-;23298:4;23342:16;23350:7;23342;:16::i;:::-;23320:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23441:13;23457:23;23472:7;23457:14;:23::i;:::-;23441:39;;23510:5;23499:16;;:7;:16;;;:64;;;;23556:7;23532:31;;:20;23544:7;23532:11;:20::i;:::-;:31;;;23499:64;:113;;;;23580:32;23597:5;23604:7;23580:16;:32::i;:::-;23499:113;23491:122;;;23169:452;;;;:::o;26265:615::-;26438:4;26411:31;;:23;26426:7;26411:14;:23::i;:::-;:31;;;26389:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;26544:1;26530:16;;:2;:16;;;26522:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26600:39;26621:4;26627:2;26631:7;26600:20;:39::i;:::-;26704:29;26721:1;26725:7;26704:8;:29::i;:::-;26765:1;26746:9;:15;26756:4;26746:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;26794:1;26777:9;:13;26787:2;26777:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26825:2;26806:7;:16;26814:7;26806:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26864:7;26860:2;26845:27;;26854:4;26845:27;;;;;;;;;;;;26265:615;;;:::o;22210:352::-;22367:28;22377:4;22383:2;22387:7;22367:9;:28::i;:::-;22428:48;22451:4;22457:2;22461:7;22470:5;22428:22;:48::i;:::-;22406:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;22210:352;;;;:::o;46459:114::-;46519:13;46552;46545:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46459:114;:::o;3751:723::-;3807:13;4037:1;4028:5;:10;4024:53;;4055:10;;;;;;;;;;;;;;;;;;;;;4024:53;4087:12;4102:5;4087:20;;4118:14;4143:78;4158:1;4150:4;:9;4143:78;;4176:8;;;;;:::i;:::-;;;;4207:2;4199:10;;;;;:::i;:::-;;;4143:78;;;4231:19;4263:6;4253:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4231:39;;4281:154;4297:1;4288:5;:10;4281:154;;4325:1;4315:11;;;;;:::i;:::-;;;4392:2;4384:5;:10;;;;:::i;:::-;4371:2;:24;;;;:::i;:::-;4358:39;;4341:6;4348;4341:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4421:2;4412:11;;;;;:::i;:::-;;;4281:154;;;4459:6;4445:21;;;;;3751:723;;;;:::o;23963:110::-;24039:26;24049:2;24053:7;24039:26;;;;;;;;;;;;:9;:26::i;:::-;23963:110;;:::o;3288:207::-;3418:4;3462:25;3447:40;;;:11;:40;;;;3440:47;;3288:207;;;:::o;32303:589::-;32447:45;32474:4;32480:2;32484:7;32447:26;:45::i;:::-;32525:1;32509:18;;:4;:18;;;32505:187;;32544:40;32576:7;32544:31;:40::i;:::-;32505:187;;;32614:2;32606:10;;:4;:10;;;32602:90;;32633:47;32666:4;32672:7;32633:32;:47::i;:::-;32602:90;32505:187;32720:1;32706:16;;:2;:16;;;32702:183;;32739:45;32776:7;32739:36;:45::i;:::-;32702:183;;;32812:4;32806:10;;:2;:10;;;32802:83;;32833:40;32861:2;32865:7;32833:27;:40::i;:::-;32802:83;32702:183;32303:589;;;:::o;27737:1053::-;27892:4;27913:15;:2;:13;;;:15::i;:::-;27909:874;;;27982:2;27966:36;;;28025:12;:10;:12::i;:::-;28060:4;28087:7;28117:5;27966:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27945:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28345:1;28328:6;:13;:18;28324:389;;28371:108;;;;;;;;;;:::i;:::-;;;;;;;;28324:389;28663:6;28657:13;28648:6;28644:2;28640:15;28633:38;27945:783;28215:45;;;28205:55;;;:6;:55;;;;28198:62;;;;;27909:874;28767:4;28760:11;;27737:1053;;;;;;;:::o;24300:321::-;24430:18;24436:2;24440:7;24430:5;:18::i;:::-;24481:54;24512:1;24516:2;24520:7;24529:5;24481:22;:54::i;:::-;24459:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24300:321;;;:::o;29403:126::-;;;;:::o;33615:164::-;33719:10;:17;;;;33692:15;:24;33708:7;33692:24;;;;;;;;;;;:44;;;;33747:10;33763:7;33747:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33615:164;:::o;34406:1002::-;34686:22;34736:1;34711:22;34728:4;34711:16;:22::i;:::-;:26;;;;:::i;:::-;34686:51;;34748:18;34769:17;:26;34787:7;34769:26;;;;;;;;;;;;34748:47;;34916:14;34902:10;:28;34898:328;;34947:19;34969:12;:18;34982:4;34969:18;;;;;;;;;;;;;;;:34;34988:14;34969:34;;;;;;;;;;;;34947:56;;35053:11;35020:12;:18;35033:4;35020:18;;;;;;;;;;;;;;;:30;35039:10;35020:30;;;;;;;;;;;:44;;;;35170:10;35137:17;:30;35155:11;35137:30;;;;;;;;;;;:43;;;;34932:294;34898:328;35322:17;:26;35340:7;35322:26;;;;;;;;;;;35315:33;;;35366:12;:18;35379:4;35366:18;;;;;;;;;;;;;;;:34;35385:14;35366:34;;;;;;;;;;;35359:41;;;34501:907;;34406:1002;;:::o;35703:1079::-;35956:22;36001:1;35981:10;:17;;;;:21;;;;:::i;:::-;35956:46;;36013:18;36034:15;:24;36050:7;36034:24;;;;;;;;;;;;36013:45;;36385:19;36407:10;36418:14;36407:26;;;;;;;;:::i;:::-;;;;;;;;;;36385:48;;36471:11;36446:10;36457;36446:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;36582:10;36551:15;:28;36567:11;36551:28;;;;;;;;;;;:41;;;;36723:15;:24;36739:7;36723:24;;;;;;;;;;;36716:31;;;36758:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35774:1008;;;35703:1079;:::o;33193:221::-;33278:14;33295:20;33312:2;33295:16;:20::i;:::-;33278:37;;33353:7;33326:12;:16;33339:2;33326:16;;;;;;;;;;;;;;;:24;33343:6;33326:24;;;;;;;;;;;:34;;;;33400:6;33371:17;:26;33389:7;33371:26;;;;;;;;;;;:35;;;;33267:147;33193:221;;:::o;37497:444::-;37557:4;37765:12;37889:7;37877:20;37869:28;;37932:1;37925:4;:8;37918:15;;;37497:444;;;:::o;24957:382::-;25051:1;25037:16;;:2;:16;;;25029:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25110:16;25118:7;25110;:16::i;:::-;25109:17;25101:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25172:45;25201:1;25205:2;25209:7;25172:20;:45::i;:::-;25247:1;25230:9;:13;25240:2;25230:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25278:2;25259:7;:16;25267:7;25259:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25323:7;25319:2;25298:33;;25315:1;25298:33;;;;;;;;;;;;24957:382;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:117::-;6566:1;6563;6556:12;6580:117;6689:1;6686;6679:12;6703:180;6751:77;6748:1;6741:88;6848:4;6845:1;6838:15;6872:4;6869:1;6862:15;6889:281;6972:27;6994:4;6972:27;:::i;:::-;6964:6;6960:40;7102:6;7090:10;7087:22;7066:18;7054:10;7051:34;7048:62;7045:88;;;7113:18;;:::i;:::-;7045:88;7153:10;7149:2;7142:22;6932:238;6889:281;;:::o;7176:129::-;7210:6;7237:20;;:::i;:::-;7227:30;;7266:33;7294:4;7286:6;7266:33;:::i;:::-;7176:129;;;:::o;7311:308::-;7373:4;7463:18;7455:6;7452:30;7449:56;;;7485:18;;:::i;:::-;7449:56;7523:29;7545:6;7523:29;:::i;:::-;7515:37;;7607:4;7601;7597:15;7589:23;;7311:308;;;:::o;7625:146::-;7722:6;7717:3;7712;7699:30;7763:1;7754:6;7749:3;7745:16;7738:27;7625:146;;;:::o;7777:425::-;7855:5;7880:66;7896:49;7938:6;7896:49;:::i;:::-;7880:66;:::i;:::-;7871:75;;7969:6;7962:5;7955:21;8007:4;8000:5;7996:16;8045:3;8036:6;8031:3;8027:16;8024:25;8021:112;;;8052:79;;:::i;:::-;8021:112;8142:54;8189:6;8184:3;8179;8142:54;:::i;:::-;7861:341;7777:425;;;;;:::o;8222:340::-;8278:5;8327:3;8320:4;8312:6;8308:17;8304:27;8294:122;;8335:79;;:::i;:::-;8294:122;8452:6;8439:20;8477:79;8552:3;8544:6;8537:4;8529:6;8525:17;8477:79;:::i;:::-;8468:88;;8284:278;8222:340;;;;:::o;8568:509::-;8637:6;8686:2;8674:9;8665:7;8661:23;8657:32;8654:119;;;8692:79;;:::i;:::-;8654:119;8840:1;8829:9;8825:17;8812:31;8870:18;8862:6;8859:30;8856:117;;;8892:79;;:::i;:::-;8856:117;8997:63;9052:7;9043:6;9032:9;9028:22;8997:63;:::i;:::-;8987:73;;8783:287;8568:509;;;;:::o;9083:329::-;9142:6;9191:2;9179:9;9170:7;9166:23;9162:32;9159:119;;;9197:79;;:::i;:::-;9159:119;9317:1;9342:53;9387:7;9378:6;9367:9;9363:22;9342:53;:::i;:::-;9332:63;;9288:117;9083:329;;;;:::o;9418:468::-;9483:6;9491;9540:2;9528:9;9519:7;9515:23;9511:32;9508:119;;;9546:79;;:::i;:::-;9508:119;9666:1;9691:53;9736:7;9727:6;9716:9;9712:22;9691:53;:::i;:::-;9681:63;;9637:117;9793:2;9819:50;9861:7;9852:6;9841:9;9837:22;9819:50;:::i;:::-;9809:60;;9764:115;9418:468;;;;;:::o;9892:307::-;9953:4;10043:18;10035:6;10032:30;10029:56;;;10065:18;;:::i;:::-;10029:56;10103:29;10125:6;10103:29;:::i;:::-;10095:37;;10187:4;10181;10177:15;10169:23;;9892:307;;;:::o;10205:423::-;10282:5;10307:65;10323:48;10364:6;10323:48;:::i;:::-;10307:65;:::i;:::-;10298:74;;10395:6;10388:5;10381:21;10433:4;10426:5;10422:16;10471:3;10462:6;10457:3;10453:16;10450:25;10447:112;;;10478:79;;:::i;:::-;10447:112;10568:54;10615:6;10610:3;10605;10568:54;:::i;:::-;10288:340;10205:423;;;;;:::o;10647:338::-;10702:5;10751:3;10744:4;10736:6;10732:17;10728:27;10718:122;;10759:79;;:::i;:::-;10718:122;10876:6;10863:20;10901:78;10975:3;10967:6;10960:4;10952:6;10948:17;10901:78;:::i;:::-;10892:87;;10708:277;10647:338;;;;:::o;10991:943::-;11086:6;11094;11102;11110;11159:3;11147:9;11138:7;11134:23;11130:33;11127:120;;;11166:79;;:::i;:::-;11127:120;11286:1;11311:53;11356:7;11347:6;11336:9;11332:22;11311:53;:::i;:::-;11301:63;;11257:117;11413:2;11439:53;11484:7;11475:6;11464:9;11460:22;11439:53;:::i;:::-;11429:63;;11384:118;11541:2;11567:53;11612:7;11603:6;11592:9;11588:22;11567:53;:::i;:::-;11557:63;;11512:118;11697:2;11686:9;11682:18;11669:32;11728:18;11720:6;11717:30;11714:117;;;11750:79;;:::i;:::-;11714:117;11855:62;11909:7;11900:6;11889:9;11885:22;11855:62;:::i;:::-;11845:72;;11640:287;10991:943;;;;;;;:::o;11940:474::-;12008:6;12016;12065:2;12053:9;12044:7;12040:23;12036:32;12033:119;;;12071:79;;:::i;:::-;12033:119;12191:1;12216:53;12261:7;12252:6;12241:9;12237:22;12216:53;:::i;:::-;12206:63;;12162:117;12318:2;12344:53;12389:7;12380:6;12369:9;12365:22;12344:53;:::i;:::-;12334:63;;12289:118;11940:474;;;;;:::o;12420:182::-;12560:34;12556:1;12548:6;12544:14;12537:58;12420:182;:::o;12608:366::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:419::-;13146:4;13184:2;13173:9;13169:18;13161:26;;13233:9;13227:4;13223:20;13219:1;13208:9;13204:17;13197:47;13261:131;13387:4;13261:131;:::i;:::-;13253:139;;12980:419;;;:::o;13405:180::-;13453:77;13450:1;13443:88;13550:4;13547:1;13540:15;13574:4;13571:1;13564:15;13591:320;13635:6;13672:1;13666:4;13662:12;13652:22;;13719:1;13713:4;13709:12;13740:18;13730:81;;13796:4;13788:6;13784:17;13774:27;;13730:81;13858:2;13850:6;13847:14;13827:18;13824:38;13821:84;;13877:18;;:::i;:::-;13821:84;13642:269;13591:320;;;:::o;13917:231::-;14057:34;14053:1;14045:6;14041:14;14034:58;14126:14;14121:2;14113:6;14109:15;14102:39;13917:231;:::o;14154:366::-;14296:3;14317:67;14381:2;14376:3;14317:67;:::i;:::-;14310:74;;14393:93;14482:3;14393:93;:::i;:::-;14511:2;14506:3;14502:12;14495:19;;14154:366;;;:::o;14526:419::-;14692:4;14730:2;14719:9;14715:18;14707:26;;14779:9;14773:4;14769:20;14765:1;14754:9;14750:17;14743:47;14807:131;14933:4;14807:131;:::i;:::-;14799:139;;14526:419;;;:::o;14951:220::-;15091:34;15087:1;15079:6;15075:14;15068:58;15160:3;15155:2;15147:6;15143:15;15136:28;14951:220;:::o;15177:366::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:419::-;15715:4;15753:2;15742:9;15738:18;15730:26;;15802:9;15796:4;15792:20;15788:1;15777:9;15773:17;15766:47;15830:131;15956:4;15830:131;:::i;:::-;15822:139;;15549:419;;;:::o;15974:243::-;16114:34;16110:1;16102:6;16098:14;16091:58;16183:26;16178:2;16170:6;16166:15;16159:51;15974:243;:::o;16223:366::-;16365:3;16386:67;16450:2;16445:3;16386:67;:::i;:::-;16379:74;;16462:93;16551:3;16462:93;:::i;:::-;16580:2;16575:3;16571:12;16564:19;;16223:366;;;:::o;16595:419::-;16761:4;16799:2;16788:9;16784:18;16776:26;;16848:9;16842:4;16838:20;16834:1;16823:9;16819:17;16812:47;16876:131;17002:4;16876:131;:::i;:::-;16868:139;;16595:419;;;:::o;17020:236::-;17160:34;17156:1;17148:6;17144:14;17137:58;17229:19;17224:2;17216:6;17212:15;17205:44;17020:236;:::o;17262:366::-;17404:3;17425:67;17489:2;17484:3;17425:67;:::i;:::-;17418:74;;17501:93;17590:3;17501:93;:::i;:::-;17619:2;17614:3;17610:12;17603:19;;17262:366;;;:::o;17634:419::-;17800:4;17838:2;17827:9;17823:18;17815:26;;17887:9;17881:4;17877:20;17873:1;17862:9;17858:17;17851:47;17915:131;18041:4;17915:131;:::i;:::-;17907:139;;17634:419;;;:::o;18059:230::-;18199:34;18195:1;18187:6;18183:14;18176:58;18268:13;18263:2;18255:6;18251:15;18244:38;18059:230;:::o;18295:366::-;18437:3;18458:67;18522:2;18517:3;18458:67;:::i;:::-;18451:74;;18534:93;18623:3;18534:93;:::i;:::-;18652:2;18647:3;18643:12;18636:19;;18295:366;;;:::o;18667:419::-;18833:4;18871:2;18860:9;18856:18;18848:26;;18920:9;18914:4;18910:20;18906:1;18895:9;18891:17;18884:47;18948:131;19074:4;18948:131;:::i;:::-;18940:139;;18667:419;;;:::o;19092:231::-;19232:34;19228:1;19220:6;19216:14;19209:58;19301:14;19296:2;19288:6;19284:15;19277:39;19092:231;:::o;19329:366::-;19471:3;19492:67;19556:2;19551:3;19492:67;:::i;:::-;19485:74;;19568:93;19657:3;19568:93;:::i;:::-;19686:2;19681:3;19677:12;19670:19;;19329:366;;;:::o;19701:419::-;19867:4;19905:2;19894:9;19890:18;19882:26;;19954:9;19948:4;19944:20;19940:1;19929:9;19925:17;19918:47;19982:131;20108:4;19982:131;:::i;:::-;19974:139;;19701:419;;;:::o;20126:180::-;20174:77;20171:1;20164:88;20271:4;20268:1;20261:15;20295:4;20292:1;20285:15;20312:141;20361:4;20384:3;20376:11;;20407:3;20404:1;20397:14;20441:4;20438:1;20428:18;20420:26;;20312:141;;;:::o;20459:93::-;20496:6;20543:2;20538;20531:5;20527:14;20523:23;20513:33;;20459:93;;;:::o;20558:107::-;20602:8;20652:5;20646:4;20642:16;20621:37;;20558:107;;;;:::o;20671:393::-;20740:6;20790:1;20778:10;20774:18;20813:97;20843:66;20832:9;20813:97;:::i;:::-;20931:39;20961:8;20950:9;20931:39;:::i;:::-;20919:51;;21003:4;20999:9;20992:5;20988:21;20979:30;;21052:4;21042:8;21038:19;21031:5;21028:30;21018:40;;20747:317;;20671:393;;;;;:::o;21070:60::-;21098:3;21119:5;21112:12;;21070:60;;;:::o;21136:142::-;21186:9;21219:53;21237:34;21246:24;21264:5;21246:24;:::i;:::-;21237:34;:::i;:::-;21219:53;:::i;:::-;21206:66;;21136:142;;;:::o;21284:75::-;21327:3;21348:5;21341:12;;21284:75;;;:::o;21365:269::-;21475:39;21506:7;21475:39;:::i;:::-;21536:91;21585:41;21609:16;21585:41;:::i;:::-;21577:6;21570:4;21564:11;21536:91;:::i;:::-;21530:4;21523:105;21441:193;21365:269;;;:::o;21640:73::-;21685:3;21640:73;:::o;21719:189::-;21796:32;;:::i;:::-;21837:65;21895:6;21887;21881:4;21837:65;:::i;:::-;21772:136;21719:189;;:::o;21914:186::-;21974:120;21991:3;21984:5;21981:14;21974:120;;;22045:39;22082:1;22075:5;22045:39;:::i;:::-;22018:1;22011:5;22007:13;21998:22;;21974:120;;;21914:186;;:::o;22106:543::-;22207:2;22202:3;22199:11;22196:446;;;22241:38;22273:5;22241:38;:::i;:::-;22325:29;22343:10;22325:29;:::i;:::-;22315:8;22311:44;22508:2;22496:10;22493:18;22490:49;;;22529:8;22514:23;;22490:49;22552:80;22608:22;22626:3;22608:22;:::i;:::-;22598:8;22594:37;22581:11;22552:80;:::i;:::-;22211:431;;22196:446;22106:543;;;:::o;22655:117::-;22709:8;22759:5;22753:4;22749:16;22728:37;;22655:117;;;;:::o;22778:169::-;22822:6;22855:51;22903:1;22899:6;22891:5;22888:1;22884:13;22855:51;:::i;:::-;22851:56;22936:4;22930;22926:15;22916:25;;22829:118;22778:169;;;;:::o;22952:295::-;23028:4;23174:29;23199:3;23193:4;23174:29;:::i;:::-;23166:37;;23236:3;23233:1;23229:11;23223:4;23220:21;23212:29;;22952:295;;;;:::o;23252:1395::-;23369:37;23402:3;23369:37;:::i;:::-;23471:18;23463:6;23460:30;23457:56;;;23493:18;;:::i;:::-;23457:56;23537:38;23569:4;23563:11;23537:38;:::i;:::-;23622:67;23682:6;23674;23668:4;23622:67;:::i;:::-;23716:1;23740:4;23727:17;;23772:2;23764:6;23761:14;23789:1;23784:618;;;;24446:1;24463:6;24460:77;;;24512:9;24507:3;24503:19;24497:26;24488:35;;24460:77;24563:67;24623:6;24616:5;24563:67;:::i;:::-;24557:4;24550:81;24419:222;23754:887;;23784:618;23836:4;23832:9;23824:6;23820:22;23870:37;23902:4;23870:37;:::i;:::-;23929:1;23943:208;23957:7;23954:1;23951:14;23943:208;;;24036:9;24031:3;24027:19;24021:26;24013:6;24006:42;24087:1;24079:6;24075:14;24065:24;;24134:2;24123:9;24119:18;24106:31;;23980:4;23977:1;23973:12;23968:17;;23943:208;;;24179:6;24170:7;24167:19;24164:179;;;24237:9;24232:3;24228:19;24222:26;24280:48;24322:4;24314:6;24310:17;24299:9;24280:48;:::i;:::-;24272:6;24265:64;24187:156;24164:179;24389:1;24385;24377:6;24373:14;24369:22;24363:4;24356:36;23791:611;;;23754:887;;23344:1303;;;23252:1395;;:::o;24653:228::-;24793:34;24789:1;24781:6;24777:14;24770:58;24862:11;24857:2;24849:6;24845:15;24838:36;24653:228;:::o;24887:366::-;25029:3;25050:67;25114:2;25109:3;25050:67;:::i;:::-;25043:74;;25126:93;25215:3;25126:93;:::i;:::-;25244:2;25239:3;25235:12;25228:19;;24887:366;;;:::o;25259:419::-;25425:4;25463:2;25452:9;25448:18;25440:26;;25512:9;25506:4;25502:20;25498:1;25487:9;25483:17;25476:47;25540:131;25666:4;25540:131;:::i;:::-;25532:139;;25259:419;;;:::o;25684:229::-;25824:34;25820:1;25812:6;25808:14;25801:58;25893:12;25888:2;25880:6;25876:15;25869:37;25684:229;:::o;25919:366::-;26061:3;26082:67;26146:2;26141:3;26082:67;:::i;:::-;26075:74;;26158:93;26247:3;26158:93;:::i;:::-;26276:2;26271:3;26267:12;26260:19;;25919:366;;;:::o;26291:419::-;26457:4;26495:2;26484:9;26480:18;26472:26;;26544:9;26538:4;26534:20;26530:1;26519:9;26515:17;26508:47;26572:131;26698:4;26572:131;:::i;:::-;26564:139;;26291:419;;;:::o;26716:175::-;26856:27;26852:1;26844:6;26840:14;26833:51;26716:175;:::o;26897:366::-;27039:3;27060:67;27124:2;27119:3;27060:67;:::i;:::-;27053:74;;27136:93;27225:3;27136:93;:::i;:::-;27254:2;27249:3;27245:12;27238:19;;26897:366;;;:::o;27269:419::-;27435:4;27473:2;27462:9;27458:18;27450:26;;27522:9;27516:4;27512:20;27508:1;27497:9;27493:17;27486:47;27550:131;27676:4;27550:131;:::i;:::-;27542:139;;27269:419;;;:::o;27694:234::-;27834:34;27830:1;27822:6;27818:14;27811:58;27903:17;27898:2;27890:6;27886:15;27879:42;27694:234;:::o;27934:366::-;28076:3;28097:67;28161:2;28156:3;28097:67;:::i;:::-;28090:74;;28173:93;28262:3;28173:93;:::i;:::-;28291:2;28286:3;28282:12;28275:19;;27934:366;;;:::o;28306:419::-;28472:4;28510:2;28499:9;28495:18;28487:26;;28559:9;28553:4;28549:20;28545:1;28534:9;28530:17;28523:47;28587:131;28713:4;28587:131;:::i;:::-;28579:139;;28306:419;;;:::o;28731:148::-;28833:11;28870:3;28855:18;;28731:148;;;;:::o;28885:390::-;28991:3;29019:39;29052:5;29019:39;:::i;:::-;29074:89;29156:6;29151:3;29074:89;:::i;:::-;29067:96;;29172:65;29230:6;29225:3;29218:4;29211:5;29207:16;29172:65;:::i;:::-;29262:6;29257:3;29253:16;29246:23;;28995:280;28885:390;;;;:::o;29281:435::-;29461:3;29483:95;29574:3;29565:6;29483:95;:::i;:::-;29476:102;;29595:95;29686:3;29677:6;29595:95;:::i;:::-;29588:102;;29707:3;29700:10;;29281:435;;;;;:::o;29722:161::-;29862:13;29858:1;29850:6;29846:14;29839:37;29722:161;:::o;29889:366::-;30031:3;30052:67;30116:2;30111:3;30052:67;:::i;:::-;30045:74;;30128:93;30217:3;30128:93;:::i;:::-;30246:2;30241:3;30237:12;30230:19;;29889:366;;;:::o;30261:419::-;30427:4;30465:2;30454:9;30450:18;30442:26;;30514:9;30508:4;30504:20;30500:1;30489:9;30485:17;30478:47;30542:131;30668:4;30542:131;:::i;:::-;30534:139;;30261:419;;;:::o;30686:181::-;30826:33;30822:1;30814:6;30810:14;30803:57;30686:181;:::o;30873:366::-;31015:3;31036:67;31100:2;31095:3;31036:67;:::i;:::-;31029:74;;31112:93;31201:3;31112:93;:::i;:::-;31230:2;31225:3;31221:12;31214:19;;30873:366;;;:::o;31245:419::-;31411:4;31449:2;31438:9;31434:18;31426:26;;31498:9;31492:4;31488:20;31484:1;31473:9;31469:17;31462:47;31526:131;31652:4;31526:131;:::i;:::-;31518:139;;31245:419;;;:::o;31670:180::-;31718:77;31715:1;31708:88;31815:4;31812:1;31805:15;31839:4;31836:1;31829:15;31856:191;31896:3;31915:20;31933:1;31915:20;:::i;:::-;31910:25;;31949:20;31967:1;31949:20;:::i;:::-;31944:25;;31992:1;31989;31985:9;31978:16;;32013:3;32010:1;32007:10;32004:36;;;32020:18;;:::i;:::-;32004:36;31856:191;;;;:::o;32053:171::-;32193:23;32189:1;32181:6;32177:14;32170:47;32053:171;:::o;32230:366::-;32372:3;32393:67;32457:2;32452:3;32393:67;:::i;:::-;32386:74;;32469:93;32558:3;32469:93;:::i;:::-;32587:2;32582:3;32578:12;32571:19;;32230:366;;;:::o;32602:419::-;32768:4;32806:2;32795:9;32791:18;32783:26;;32855:9;32849:4;32845:20;32841:1;32830:9;32826:17;32819:47;32883:131;33009:4;32883:131;:::i;:::-;32875:139;;32602:419;;;:::o;33027:410::-;33067:7;33090:20;33108:1;33090:20;:::i;:::-;33085:25;;33124:20;33142:1;33124:20;:::i;:::-;33119:25;;33179:1;33176;33172:9;33201:30;33219:11;33201:30;:::i;:::-;33190:41;;33380:1;33371:7;33367:15;33364:1;33361:22;33341:1;33334:9;33314:83;33291:139;;33410:18;;:::i;:::-;33291:139;33075:362;33027:410;;;;:::o;33443:175::-;33583:27;33579:1;33571:6;33567:14;33560:51;33443:175;:::o;33624:366::-;33766:3;33787:67;33851:2;33846:3;33787:67;:::i;:::-;33780:74;;33863:93;33952:3;33863:93;:::i;:::-;33981:2;33976:3;33972:12;33965:19;;33624:366;;;:::o;33996:419::-;34162:4;34200:2;34189:9;34185:18;34177:26;;34249:9;34243:4;34239:20;34235:1;34224:9;34220:17;34213:47;34277:131;34403:4;34277:131;:::i;:::-;34269:139;;33996:419;;;:::o;34421:233::-;34460:3;34483:24;34501:5;34483:24;:::i;:::-;34474:33;;34529:66;34522:5;34519:77;34516:103;;34599:18;;:::i;:::-;34516:103;34646:1;34639:5;34635:13;34628:20;;34421:233;;;:::o;34660:225::-;34800:34;34796:1;34788:6;34784:14;34777:58;34869:8;34864:2;34856:6;34852:15;34845:33;34660:225;:::o;34891:366::-;35033:3;35054:67;35118:2;35113:3;35054:67;:::i;:::-;35047:74;;35130:93;35219:3;35130:93;:::i;:::-;35248:2;35243:3;35239:12;35232:19;;34891:366;;;:::o;35263:419::-;35429:4;35467:2;35456:9;35452:18;35444:26;;35516:9;35510:4;35506:20;35502:1;35491:9;35487:17;35480:47;35544:131;35670:4;35544:131;:::i;:::-;35536:139;;35263:419;;;:::o;35688:231::-;35828:34;35824:1;35816:6;35812:14;35805:58;35897:14;35892:2;35884:6;35880:15;35873:39;35688:231;:::o;35925:366::-;36067:3;36088:67;36152:2;36147:3;36088:67;:::i;:::-;36081:74;;36164:93;36253:3;36164:93;:::i;:::-;36282:2;36277:3;36273:12;36266:19;;35925:366;;;:::o;36297:419::-;36463:4;36501:2;36490:9;36486:18;36478:26;;36550:9;36544:4;36540:20;36536:1;36525:9;36521:17;36514:47;36578:131;36704:4;36578:131;:::i;:::-;36570:139;;36297:419;;;:::o;36722:228::-;36862:34;36858:1;36850:6;36846:14;36839:58;36931:11;36926:2;36918:6;36914:15;36907:36;36722:228;:::o;36956:366::-;37098:3;37119:67;37183:2;37178:3;37119:67;:::i;:::-;37112:74;;37195:93;37284:3;37195:93;:::i;:::-;37313:2;37308:3;37304:12;37297:19;;36956:366;;;:::o;37328:419::-;37494:4;37532:2;37521:9;37517:18;37509:26;;37581:9;37575:4;37571:20;37567:1;37556:9;37552:17;37545:47;37609:131;37735:4;37609:131;:::i;:::-;37601:139;;37328:419;;;:::o;37753:223::-;37893:34;37889:1;37881:6;37877:14;37870:58;37962:6;37957:2;37949:6;37945:15;37938:31;37753:223;:::o;37982:366::-;38124:3;38145:67;38209:2;38204:3;38145:67;:::i;:::-;38138:74;;38221:93;38310:3;38221:93;:::i;:::-;38339:2;38334:3;38330:12;38323:19;;37982:366;;;:::o;38354:419::-;38520:4;38558:2;38547:9;38543:18;38535:26;;38607:9;38601:4;38597:20;38593:1;38582:9;38578:17;38571:47;38635:131;38761:4;38635:131;:::i;:::-;38627:139;;38354:419;;;:::o;38779:194::-;38819:4;38839:20;38857:1;38839:20;:::i;:::-;38834:25;;38873:20;38891:1;38873:20;:::i;:::-;38868:25;;38917:1;38914;38910:9;38902:17;;38941:1;38935:4;38932:11;38929:37;;;38946:18;;:::i;:::-;38929:37;38779:194;;;;:::o;38979:237::-;39119:34;39115:1;39107:6;39103:14;39096:58;39188:20;39183:2;39175:6;39171:15;39164:45;38979:237;:::o;39222:366::-;39364:3;39385:67;39449:2;39444:3;39385:67;:::i;:::-;39378:74;;39461:93;39550:3;39461:93;:::i;:::-;39579:2;39574:3;39570:12;39563:19;;39222:366;;;:::o;39594:419::-;39760:4;39798:2;39787:9;39783:18;39775:26;;39847:9;39841:4;39837:20;39833:1;39822:9;39818:17;39811:47;39875:131;40001:4;39875:131;:::i;:::-;39867:139;;39594:419;;;:::o;40019:180::-;40067:77;40064:1;40057:88;40164:4;40161:1;40154:15;40188:4;40185:1;40178:15;40205:185;40245:1;40262:20;40280:1;40262:20;:::i;:::-;40257:25;;40296:20;40314:1;40296:20;:::i;:::-;40291:25;;40335:1;40325:35;;40340:18;;:::i;:::-;40325:35;40382:1;40379;40375:9;40370:14;;40205:185;;;;:::o;40396:176::-;40428:1;40445:20;40463:1;40445:20;:::i;:::-;40440:25;;40479:20;40497:1;40479:20;:::i;:::-;40474:25;;40518:1;40508:35;;40523:18;;:::i;:::-;40508:35;40564:1;40561;40557:9;40552:14;;40396:176;;;;:::o;40578:98::-;40629:6;40663:5;40657:12;40647:22;;40578:98;;;:::o;40682:168::-;40765:11;40799:6;40794:3;40787:19;40839:4;40834:3;40830:14;40815:29;;40682:168;;;;:::o;40856:373::-;40942:3;40970:38;41002:5;40970:38;:::i;:::-;41024:70;41087:6;41082:3;41024:70;:::i;:::-;41017:77;;41103:65;41161:6;41156:3;41149:4;41142:5;41138:16;41103:65;:::i;:::-;41193:29;41215:6;41193:29;:::i;:::-;41188:3;41184:39;41177:46;;40946:283;40856:373;;;;:::o;41235:640::-;41430:4;41468:3;41457:9;41453:19;41445:27;;41482:71;41550:1;41539:9;41535:17;41526:6;41482:71;:::i;:::-;41563:72;41631:2;41620:9;41616:18;41607:6;41563:72;:::i;:::-;41645;41713:2;41702:9;41698:18;41689:6;41645:72;:::i;:::-;41764:9;41758:4;41754:20;41749:2;41738:9;41734:18;41727:48;41792:76;41863:4;41854:6;41792:76;:::i;:::-;41784:84;;41235:640;;;;;;;:::o;41881:141::-;41937:5;41968:6;41962:13;41953:22;;41984:32;42010:5;41984:32;:::i;:::-;41881:141;;;;:::o;42028:349::-;42097:6;42146:2;42134:9;42125:7;42121:23;42117:32;42114:119;;;42152:79;;:::i;:::-;42114:119;42272:1;42297:63;42352:7;42343:6;42332:9;42328:22;42297:63;:::i;:::-;42287:73;;42243:127;42028:349;;;;:::o;42383:180::-;42431:77;42428:1;42421:88;42528:4;42525:1;42518:15;42552:4;42549:1;42542:15;42569:182;42709:34;42705:1;42697:6;42693:14;42686:58;42569:182;:::o;42757:366::-;42899:3;42920:67;42984:2;42979:3;42920:67;:::i;:::-;42913:74;;42996:93;43085:3;42996:93;:::i;:::-;43114:2;43109:3;43105:12;43098:19;;42757:366;;;:::o;43129:419::-;43295:4;43333:2;43322:9;43318:18;43310:26;;43382:9;43376:4;43372:20;43368:1;43357:9;43353:17;43346:47;43410:131;43536:4;43410:131;:::i;:::-;43402:139;;43129:419;;;:::o;43554:178::-;43694:30;43690:1;43682:6;43678:14;43671:54;43554:178;:::o;43738:366::-;43880:3;43901:67;43965:2;43960:3;43901:67;:::i;:::-;43894:74;;43977:93;44066:3;43977:93;:::i;:::-;44095:2;44090:3;44086:12;44079:19;;43738:366;;;:::o;44110:419::-;44276:4;44314:2;44303:9;44299:18;44291:26;;44363:9;44357:4;44353:20;44349:1;44338:9;44334:17;44327:47;44391:131;44517:4;44391:131;:::i;:::-;44383:139;;44110:419;;;:::o

Swarm Source

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