ETH Price: $3,039.18 (+3.02%)

Dapper Dinos (DINO)
 

Overview

TokenID

6282

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Dapper Dinos are a collection of 9,999 randomly generated dinosaurs roaming the Ethereum Blockchain. Dapper Dinos was founded with the idea of being a family-friendly, kid-loveable, hyper-collectible, and fun to look at collection of Dinosaur NFTs!

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DINO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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




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




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





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



/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    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

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




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

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



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

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

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

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

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





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




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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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




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





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


/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}




contract DINO is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    uint256 public _reserved = 3000;
    uint256 private _price = 0.0555 ether;
    bool public _paused = true;

    // withdraw addresses
    address t1 = 0x07858bf9D66a43B63521Ab4DEFDb7B4d0Ec658Ed;


    constructor(string memory baseURI) ERC721("Dapper Dinos", "DINO")  {
        setBaseURI(baseURI);

        //mint to team
        _safeMint(t1, 0);
        _safeMint(t1, 1);
        _safeMint(t1, 2);
        _safeMint(t1, 3);

    }

    function mint(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_paused,                            "Sale paused" );
        require( num < 21,                            "You can mint a maximum of 20" );
        require(balanceOf(msg.sender) < 101, "Too many tokens owned to mint more");
        require( supply + num < 10000 - _reserved,     "Exceeds maximum supply" );
        require( msg.value >= _price * num,           "Ether sent is not correct" );

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

    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    // Just in case Eth does some crazy stuff
    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 giveAway(address _to, uint256 _amount) external onlyOwner() {
        require( _amount <= _reserved, "Exceeds reserved supply" );

        uint256 supply = totalSupply();
        for(uint256 i; i < _amount; i++){
            _safeMint( _to, supply + i );
        }

        _reserved -= _amount;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }
    
   function setReserved(uint256 _newReserved) public onlyOwner {
        _reserved = _newReserved;
    }
    

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

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":[],"name":"_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"mint","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":"uint256","name":"_newReserved","type":"uint256"}],"name":"setReserved","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052610bb8600c5566c52cf4b908c000600d556001600e60006101000a81548160ff0219169083151502179055507307858bf9d66a43b63521ab4defdb7b4d0ec658ed600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009257600080fd5b5060405162005923380380620059238339818101604052810190620000b8919062000f66565b6040518060400160405280600c81526020017f4461707065722044696e6f7300000000000000000000000000000000000000008152506040518060400160405280600481526020017f44494e4f0000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013c92919062000def565b5080600190805190602001906200015592919062000def565b505050620001786200016c6200026460201b60201c565b6200026c60201b60201c565b62000189816200033260201b60201c565b620001be600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000620003dd60201b60201c565b620001f3600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620003dd60201b60201c565b62000228600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002620003dd60201b60201c565b6200025d600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003620003dd60201b60201c565b506200164e565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003426200026460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003686200040360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b890620011b9565b60405180910390fd5b80600b9080519060200190620003d992919062000def565b5050565b620003ff8282604051806020016040528060008152506200042d60201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200043f83836200049b60201b60201c565b6200045460008484846200068160201b60201c565b62000496576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048d9062001131565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200050e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005059062001197565b60405180910390fd5b6200051f816200083b60201b60201c565b1562000562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005599062001153565b60405180910390fd5b6200057660008383620008a760201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005c8919062001267565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006af8473ffffffffffffffffffffffffffffffffffffffff16620009ee60201b620019111760201c565b156200082e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006e16200026460201b60201c565b8786866040518563ffffffff1660e01b8152600401620007059493929190620010dd565b602060405180830381600087803b1580156200072057600080fd5b505af19250505080156200075457506040513d601f19601f8201168201806040525081019062000751919062000f34565b60015b620007dd573d806000811462000787576040519150601f19603f3d011682016040523d82523d6000602084013e6200078c565b606091505b50600081511415620007d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cc9062001131565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000833565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008bf83838362000a0160201b620019241760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200090c57620009068162000a0660201b60201c565b62000954565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009535762000952838262000a4f60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009a1576200099b8162000bcc60201b60201c565b620009e9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009e857620009e7828262000ca860201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a698462000d3460201b62000e9e1760201c565b62000a759190620012c4565b905060006007600084815260200190815260200160002054905081811462000b5b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000be29190620012c4565b905060006009600084815260200190815260200160002054905060006008838154811062000c155762000c1462001498565b5b90600052602060002001549050806008838154811062000c3a5762000c3962001498565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c8c5762000c8b62001469565b5b6001900381819060005260206000200160009055905550505050565b600062000cc08362000d3460201b62000e9e1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000da8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d9f9062001175565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000dfd906200139f565b90600052602060002090601f01602090048101928262000e21576000855562000e6d565b82601f1062000e3c57805160ff191683800117855562000e6d565b8280016001018555821562000e6d579182015b8281111562000e6c57825182559160200191906001019062000e4f565b5b50905062000e7c919062000e80565b5090565b5b8082111562000e9b57600081600090555060010162000e81565b5090565b600062000eb662000eb08462001204565b620011db565b90508281526020810184848401111562000ed55762000ed4620014fb565b5b62000ee284828562001369565b509392505050565b60008151905062000efb8162001634565b92915050565b600082601f83011262000f195762000f18620014f6565b5b815162000f2b84826020860162000e9f565b91505092915050565b60006020828403121562000f4d5762000f4c62001505565b5b600062000f5d8482850162000eea565b91505092915050565b60006020828403121562000f7f5762000f7e62001505565b5b600082015167ffffffffffffffff81111562000fa05762000f9f62001500565b5b62000fae8482850162000f01565b91505092915050565b62000fc281620012ff565b82525050565b600062000fd5826200123a565b62000fe1818562001245565b935062000ff381856020860162001369565b62000ffe816200150a565b840191505092915050565b60006200101860328362001256565b915062001025826200151b565b604082019050919050565b60006200103f601c8362001256565b91506200104c826200156a565b602082019050919050565b600062001066602a8362001256565b9150620010738262001593565b604082019050919050565b60006200108d60208362001256565b91506200109a82620015e2565b602082019050919050565b6000620010b460208362001256565b9150620010c1826200160b565b602082019050919050565b620010d7816200135f565b82525050565b6000608082019050620010f4600083018762000fb7565b62001103602083018662000fb7565b620011126040830185620010cc565b818103606083015262001126818462000fc8565b905095945050505050565b600060208201905081810360008301526200114c8162001009565b9050919050565b600060208201905081810360008301526200116e8162001030565b9050919050565b60006020820190508181036000830152620011908162001057565b9050919050565b60006020820190508181036000830152620011b2816200107e565b9050919050565b60006020820190508181036000830152620011d481620010a5565b9050919050565b6000620011e7620011fa565b9050620011f58282620013d5565b919050565b6000604051905090565b600067ffffffffffffffff821115620012225762001221620014c7565b5b6200122d826200150a565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062001274826200135f565b915062001281836200135f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012b957620012b86200140b565b5b828201905092915050565b6000620012d1826200135f565b9150620012de836200135f565b925082821015620012f457620012f36200140b565b5b828203905092915050565b60006200130c826200133f565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620013895780820151818401526020810190506200136c565b8381111562001399576000848401525b50505050565b60006002820490506001821680620013b857607f821691505b60208210811415620013cf57620013ce6200143a565b5b50919050565b620013e0826200150a565b810181811067ffffffffffffffff82111715620014025762001401620014c7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200163f8162001313565b81146200164b57600080fd5b50565b6142c5806200165e6000396000f3fe6080604052600436106101cd5760003560e01c80636aaa571d116100f757806398d5fdca11610095578063c87b56dd11610064578063c87b56dd14610658578063ca80014414610695578063e985e9c5146106be578063f2fde38b146106fb576101cd565b806398d5fdca146105bf578063a0712d68146105ea578063a22cb46514610606578063b88d4fde1461062f576101cd565b8063853828b6116100d1578063853828b6146105365780638da5cb5b1461054057806391b7f5ed1461056b57806395d89b4114610594576101cd565b80636aaa571d146104b757806370a08231146104e2578063715018a61461051f576101cd565b806323b872dd1161016f578063438b63001161013e578063438b6300146103d75780634f6ccce71461041457806355f804b3146104515780636352211e1461047a576101cd565b806323b872dd1461031f5780632d6e71b6146103485780632f745c591461037157806342842e0e146103ae576101cd565b8063081812fc116101ab578063081812fc14610263578063095ea7b3146102a057806316c61ccc146102c957806318160ddd146102f4576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612dc5565b610724565b60405161020691906133df565b60405180910390f35b34801561021b57600080fd5b5061023660048036038101906102319190612d98565b61079e565b005b34801561024457600080fd5b5061024d610837565b60405161025a91906133fa565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612e68565b6108c9565b6040516102979190613356565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612d58565b61094e565b005b3480156102d557600080fd5b506102de610a66565b6040516102eb91906133df565b60405180910390f35b34801561030057600080fd5b50610309610a79565b604051610316919061371c565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190612c42565b610a86565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e68565b610ae6565b005b34801561037d57600080fd5b5061039860048036038101906103939190612d58565b610b6c565b6040516103a5919061371c565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190612c42565b610c11565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612bd5565b610c31565b60405161040b91906133bd565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190612e68565b610cdf565b604051610448919061371c565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190612e1f565b610d50565b005b34801561048657600080fd5b506104a1600480360381019061049c9190612e68565b610de6565b6040516104ae9190613356565b60405180910390f35b3480156104c357600080fd5b506104cc610e98565b6040516104d9919061371c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612bd5565b610e9e565b604051610516919061371c565b60405180910390f35b34801561052b57600080fd5b50610534610f56565b005b61053e610fde565b005b34801561054c57600080fd5b506105556110c2565b6040516105629190613356565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612e68565b6110ec565b005b3480156105a057600080fd5b506105a9611172565b6040516105b691906133fa565b60405180910390f35b3480156105cb57600080fd5b506105d4611204565b6040516105e1919061371c565b60405180910390f35b61060460048036038101906105ff9190612e68565b61120e565b005b34801561061257600080fd5b5061062d60048036038101906106289190612d18565b6113dc565b005b34801561063b57600080fd5b5061065660048036038101906106519190612c95565b61155d565b005b34801561066457600080fd5b5061067f600480360381019061067a9190612e68565b6115bf565b60405161068c91906133fa565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612d58565b611666565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612c02565b611785565b6040516106f291906133df565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190612bd5565b611819565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610797575061079682611929565b5b9050919050565b6107a6611a0b565b73ffffffffffffffffffffffffffffffffffffffff166107c46110c2565b73ffffffffffffffffffffffffffffffffffffffff161461081a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610811906135fc565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461084690613a05565b80601f016020809104026020016040519081016040528092919081815260200182805461087290613a05565b80156108bf5780601f10610894576101008083540402835291602001916108bf565b820191906000526020600020905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b60006108d482611a13565b610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a906135dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095982610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061367c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e9611a0b565b73ffffffffffffffffffffffffffffffffffffffff161480610a185750610a1781610a12611a0b565b611785565b5b610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e9061353c565b60405180910390fd5b610a618383611a7f565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a97610a91611a0b565b82611b38565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906136dc565b60405180910390fd5b610ae1838383611c16565b505050565b610aee611a0b565b73ffffffffffffffffffffffffffffffffffffffff16610b0c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906135fc565b60405180910390fd5b80600c8190555050565b6000610b7783610e9e565b8210610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf9061343c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2c8383836040518060200160405280600081525061155d565b505050565b60606000610c3e83610e9e565b905060008167ffffffffffffffff811115610c5c57610c5b613bcd565b5b604051908082528060200260200182016040528015610c8a5781602001602082028036833780820191505090505b50905060005b82811015610cd457610ca28582610b6c565b828281518110610cb557610cb4613b9e565b5b6020026020010181815250508080610ccc90613a68565b915050610c90565b508092505050919050565b6000610ce9610a79565b8210610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906136fc565b60405180910390fd5b60088281548110610d3e57610d3d613b9e565b5b90600052602060002001549050919050565b610d58611a0b565b73ffffffffffffffffffffffffffffffffffffffff16610d766110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906135fc565b60405180910390fd5b80600b9080519060200190610de29291906129e9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061357c565b60405180910390fd5b80915050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061355c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f5e611a0b565b73ffffffffffffffffffffffffffffffffffffffff16610f7c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906135fc565b60405180910390fd5b610fdc6000611e72565b565b610fe6611a0b565b73ffffffffffffffffffffffffffffffffffffffff166110046110c2565b73ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611051906135fc565b60405180910390fd5b6000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110bf57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110f4611a0b565b73ffffffffffffffffffffffffffffffffffffffff166111126110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f906135fc565b60405180910390fd5b80600d8190555050565b60606001805461118190613a05565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613a05565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b5050505050905090565b6000600d54905090565b6000611218610a79565b9050600e60009054906101000a900460ff161561126a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112619061341c565b60405180910390fd5b601582106112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a49061351c565b60405180910390fd5b60656112b833610e9e565b106112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef9061365c565b60405180910390fd5b600c54612710611308919061391b565b8282611314919061383a565b10611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b9061369c565b60405180910390fd5b81600d5461136291906138c1565b3410156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906136bc565b60405180910390fd5b60005b828110156113d7576113c43382846113bf919061383a565b611f38565b80806113cf90613a68565b9150506113a7565b505050565b6113e4611a0b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611449906134dc565b60405180910390fd5b806005600061145f611a0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661150c611a0b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155191906133df565b60405180910390a35050565b61156e611568611a0b565b83611b38565b6115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a4906136dc565b60405180910390fd5b6115b984848484611f56565b50505050565b60606115ca82611a13565b611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116009061363c565b60405180910390fd5b6000611613611fb2565b90506000815111611633576040518060200160405280600081525061165e565b8061163d84612044565b60405160200161164e929190613332565b6040516020818303038152906040525b915050919050565b61166e611a0b565b73ffffffffffffffffffffffffffffffffffffffff1661168c6110c2565b73ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d9906135fc565b60405180910390fd5b600c54811115611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e9061359c565b60405180910390fd5b6000611731610a79565b905060005b828110156117665761175384828461174e919061383a565b611f38565b808061175e90613a68565b915050611736565b5081600c6000828254611779919061391b565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611821611a0b565b73ffffffffffffffffffffffffffffffffffffffff1661183f6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c906135fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc9061347c565b60405180910390fd5b61190e81611e72565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119f457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a045750611a03826121a5565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611af283610de6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b4382611a13565b611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b79906134fc565b60405180910390fd5b6000611b8d83610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bfc57508373ffffffffffffffffffffffffffffffffffffffff16611be4846108c9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c0d5750611c0c8185611785565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c3682610de6565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c839061361c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf3906134bc565b60405180910390fd5b611d0783838361220f565b611d12600082611a7f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d62919061391b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611db9919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f52828260405180602001604052806000815250612323565b5050565b611f61848484611c16565b611f6d8484848461237e565b611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa39061345c565b60405180910390fd5b50505050565b6060600b8054611fc190613a05565b80601f0160208091040260200160405190810160405280929190818152602001828054611fed90613a05565b801561203a5780601f1061200f5761010080835404028352916020019161203a565b820191906000526020600020905b81548152906001019060200180831161201d57829003601f168201915b5050505050905090565b6060600082141561208c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121a0565b600082905060005b600082146120be5780806120a790613a68565b915050600a826120b79190613890565b9150612094565b60008167ffffffffffffffff8111156120da576120d9613bcd565b5b6040519080825280601f01601f19166020018201604052801561210c5781602001600182028036833780820191505090505b5090505b6000851461219957600182612125919061391b565b9150600a856121349190613ab1565b6030612140919061383a565b60f81b81838151811061215657612155613b9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121929190613890565b9450612110565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61221a838383611924565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561225d5761225881612515565b61229c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461229b5761229a838261255e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122df576122da816126cb565b61231e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461231d5761231c828261279c565b5b5b505050565b61232d838361281b565b61233a600084848461237e565b612379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123709061345c565b60405180910390fd5b505050565b600061239f8473ffffffffffffffffffffffffffffffffffffffff16611911565b15612508578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c8611a0b565b8786866040518563ffffffff1660e01b81526004016123ea9493929190613371565b602060405180830381600087803b15801561240457600080fd5b505af192505050801561243557506040513d601f19601f820116820180604052508101906124329190612df2565b60015b6124b8573d8060008114612465576040519150601f19603f3d011682016040523d82523d6000602084013e61246a565b606091505b506000815114156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a79061345c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061250d565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161256b84610e9e565b612575919061391b565b905060006007600084815260200190815260200160002054905081811461265a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126df919061391b565b905060006009600084815260200190815260200160002054905060006008838154811061270f5761270e613b9e565b5b90600052602060002001549050806008838154811061273157612730613b9e565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127805761277f613b6f565b5b6001900381819060005260206000200160009055905550505050565b60006127a783610e9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612882906135bc565b60405180910390fd5b61289481611a13565b156128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb9061349c565b60405180910390fd5b6128e06000838361220f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612930919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546129f590613a05565b90600052602060002090601f016020900481019282612a175760008555612a5e565b82601f10612a3057805160ff1916838001178555612a5e565b82800160010185558215612a5e579182015b82811115612a5d578251825591602001919060010190612a42565b5b509050612a6b9190612a6f565b5090565b5b80821115612a88576000816000905550600101612a70565b5090565b6000612a9f612a9a8461375c565b613737565b905082815260208101848484011115612abb57612aba613c01565b5b612ac68482856139c3565b509392505050565b6000612ae1612adc8461378d565b613737565b905082815260208101848484011115612afd57612afc613c01565b5b612b088482856139c3565b509392505050565b600081359050612b1f81614233565b92915050565b600081359050612b348161424a565b92915050565b600081359050612b4981614261565b92915050565b600081519050612b5e81614261565b92915050565b600082601f830112612b7957612b78613bfc565b5b8135612b89848260208601612a8c565b91505092915050565b600082601f830112612ba757612ba6613bfc565b5b8135612bb7848260208601612ace565b91505092915050565b600081359050612bcf81614278565b92915050565b600060208284031215612beb57612bea613c0b565b5b6000612bf984828501612b10565b91505092915050565b60008060408385031215612c1957612c18613c0b565b5b6000612c2785828601612b10565b9250506020612c3885828601612b10565b9150509250929050565b600080600060608486031215612c5b57612c5a613c0b565b5b6000612c6986828701612b10565b9350506020612c7a86828701612b10565b9250506040612c8b86828701612bc0565b9150509250925092565b60008060008060808587031215612caf57612cae613c0b565b5b6000612cbd87828801612b10565b9450506020612cce87828801612b10565b9350506040612cdf87828801612bc0565b925050606085013567ffffffffffffffff811115612d0057612cff613c06565b5b612d0c87828801612b64565b91505092959194509250565b60008060408385031215612d2f57612d2e613c0b565b5b6000612d3d85828601612b10565b9250506020612d4e85828601612b25565b9150509250929050565b60008060408385031215612d6f57612d6e613c0b565b5b6000612d7d85828601612b10565b9250506020612d8e85828601612bc0565b9150509250929050565b600060208284031215612dae57612dad613c0b565b5b6000612dbc84828501612b25565b91505092915050565b600060208284031215612ddb57612dda613c0b565b5b6000612de984828501612b3a565b91505092915050565b600060208284031215612e0857612e07613c0b565b5b6000612e1684828501612b4f565b91505092915050565b600060208284031215612e3557612e34613c0b565b5b600082013567ffffffffffffffff811115612e5357612e52613c06565b5b612e5f84828501612b92565b91505092915050565b600060208284031215612e7e57612e7d613c0b565b5b6000612e8c84828501612bc0565b91505092915050565b6000612ea18383613314565b60208301905092915050565b612eb68161394f565b82525050565b6000612ec7826137ce565b612ed181856137fc565b9350612edc836137be565b8060005b83811015612f0d578151612ef48882612e95565b9750612eff836137ef565b925050600181019050612ee0565b5085935050505092915050565b612f2381613961565b82525050565b6000612f34826137d9565b612f3e818561380d565b9350612f4e8185602086016139d2565b612f5781613c10565b840191505092915050565b6000612f6d826137e4565b612f77818561381e565b9350612f878185602086016139d2565b612f9081613c10565b840191505092915050565b6000612fa6826137e4565b612fb0818561382f565b9350612fc08185602086016139d2565b80840191505092915050565b6000612fd9600b8361381e565b9150612fe482613c21565b602082019050919050565b6000612ffc602b8361381e565b915061300782613c4a565b604082019050919050565b600061301f60328361381e565b915061302a82613c99565b604082019050919050565b600061304260268361381e565b915061304d82613ce8565b604082019050919050565b6000613065601c8361381e565b915061307082613d37565b602082019050919050565b600061308860248361381e565b915061309382613d60565b604082019050919050565b60006130ab60198361381e565b91506130b682613daf565b602082019050919050565b60006130ce602c8361381e565b91506130d982613dd8565b604082019050919050565b60006130f1601c8361381e565b91506130fc82613e27565b602082019050919050565b600061311460388361381e565b915061311f82613e50565b604082019050919050565b6000613137602a8361381e565b915061314282613e9f565b604082019050919050565b600061315a60298361381e565b915061316582613eee565b604082019050919050565b600061317d60178361381e565b915061318882613f3d565b602082019050919050565b60006131a060208361381e565b91506131ab82613f66565b602082019050919050565b60006131c3602c8361381e565b91506131ce82613f8f565b604082019050919050565b60006131e660208361381e565b91506131f182613fde565b602082019050919050565b600061320960298361381e565b915061321482614007565b604082019050919050565b600061322c602f8361381e565b915061323782614056565b604082019050919050565b600061324f60228361381e565b915061325a826140a5565b604082019050919050565b600061327260218361381e565b915061327d826140f4565b604082019050919050565b600061329560168361381e565b91506132a082614143565b602082019050919050565b60006132b860198361381e565b91506132c38261416c565b602082019050919050565b60006132db60318361381e565b91506132e682614195565b604082019050919050565b60006132fe602c8361381e565b9150613309826141e4565b604082019050919050565b61331d816139b9565b82525050565b61332c816139b9565b82525050565b600061333e8285612f9b565b915061334a8284612f9b565b91508190509392505050565b600060208201905061336b6000830184612ead565b92915050565b60006080820190506133866000830187612ead565b6133936020830186612ead565b6133a06040830185613323565b81810360608301526133b28184612f29565b905095945050505050565b600060208201905081810360008301526133d78184612ebc565b905092915050565b60006020820190506133f46000830184612f1a565b92915050565b600060208201905081810360008301526134148184612f62565b905092915050565b6000602082019050818103600083015261343581612fcc565b9050919050565b6000602082019050818103600083015261345581612fef565b9050919050565b6000602082019050818103600083015261347581613012565b9050919050565b6000602082019050818103600083015261349581613035565b9050919050565b600060208201905081810360008301526134b581613058565b9050919050565b600060208201905081810360008301526134d58161307b565b9050919050565b600060208201905081810360008301526134f58161309e565b9050919050565b60006020820190508181036000830152613515816130c1565b9050919050565b60006020820190508181036000830152613535816130e4565b9050919050565b6000602082019050818103600083015261355581613107565b9050919050565b600060208201905081810360008301526135758161312a565b9050919050565b600060208201905081810360008301526135958161314d565b9050919050565b600060208201905081810360008301526135b581613170565b9050919050565b600060208201905081810360008301526135d581613193565b9050919050565b600060208201905081810360008301526135f5816131b6565b9050919050565b60006020820190508181036000830152613615816131d9565b9050919050565b60006020820190508181036000830152613635816131fc565b9050919050565b600060208201905081810360008301526136558161321f565b9050919050565b6000602082019050818103600083015261367581613242565b9050919050565b6000602082019050818103600083015261369581613265565b9050919050565b600060208201905081810360008301526136b581613288565b9050919050565b600060208201905081810360008301526136d5816132ab565b9050919050565b600060208201905081810360008301526136f5816132ce565b9050919050565b60006020820190508181036000830152613715816132f1565b9050919050565b60006020820190506137316000830184613323565b92915050565b6000613741613752565b905061374d8282613a37565b919050565b6000604051905090565b600067ffffffffffffffff82111561377757613776613bcd565b5b61378082613c10565b9050602081019050919050565b600067ffffffffffffffff8211156137a8576137a7613bcd565b5b6137b182613c10565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613845826139b9565b9150613850836139b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561388557613884613ae2565b5b828201905092915050565b600061389b826139b9565b91506138a6836139b9565b9250826138b6576138b5613b11565b5b828204905092915050565b60006138cc826139b9565b91506138d7836139b9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139105761390f613ae2565b5b828202905092915050565b6000613926826139b9565b9150613931836139b9565b92508282101561394457613943613ae2565b5b828203905092915050565b600061395a82613999565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139f05780820151818401526020810190506139d5565b838111156139ff576000848401525b50505050565b60006002820490506001821680613a1d57607f821691505b60208210811415613a3157613a30613b40565b5b50919050565b613a4082613c10565b810181811067ffffffffffffffff82111715613a5f57613a5e613bcd565b5b80604052505050565b6000613a73826139b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa657613aa5613ae2565b5b600182019050919050565b6000613abc826139b9565b9150613ac7836139b9565b925082613ad757613ad6613b11565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e73206f776e656420746f206d696e74206d6f60008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61423c8161394f565b811461424757600080fd5b50565b61425381613961565b811461425e57600080fd5b50565b61426a8161396d565b811461427557600080fd5b50565b614281816139b9565b811461428c57600080fd5b5056fea26469706673582212205971119e63c1fc7635e31825ade12f0fee0488fce9d1b88630795c9d62aacfd764736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80636aaa571d116100f757806398d5fdca11610095578063c87b56dd11610064578063c87b56dd14610658578063ca80014414610695578063e985e9c5146106be578063f2fde38b146106fb576101cd565b806398d5fdca146105bf578063a0712d68146105ea578063a22cb46514610606578063b88d4fde1461062f576101cd565b8063853828b6116100d1578063853828b6146105365780638da5cb5b1461054057806391b7f5ed1461056b57806395d89b4114610594576101cd565b80636aaa571d146104b757806370a08231146104e2578063715018a61461051f576101cd565b806323b872dd1161016f578063438b63001161013e578063438b6300146103d75780634f6ccce71461041457806355f804b3146104515780636352211e1461047a576101cd565b806323b872dd1461031f5780632d6e71b6146103485780632f745c591461037157806342842e0e146103ae576101cd565b8063081812fc116101ab578063081812fc14610263578063095ea7b3146102a057806316c61ccc146102c957806318160ddd146102f4576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612dc5565b610724565b60405161020691906133df565b60405180910390f35b34801561021b57600080fd5b5061023660048036038101906102319190612d98565b61079e565b005b34801561024457600080fd5b5061024d610837565b60405161025a91906133fa565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612e68565b6108c9565b6040516102979190613356565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612d58565b61094e565b005b3480156102d557600080fd5b506102de610a66565b6040516102eb91906133df565b60405180910390f35b34801561030057600080fd5b50610309610a79565b604051610316919061371c565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190612c42565b610a86565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e68565b610ae6565b005b34801561037d57600080fd5b5061039860048036038101906103939190612d58565b610b6c565b6040516103a5919061371c565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190612c42565b610c11565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612bd5565b610c31565b60405161040b91906133bd565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190612e68565b610cdf565b604051610448919061371c565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190612e1f565b610d50565b005b34801561048657600080fd5b506104a1600480360381019061049c9190612e68565b610de6565b6040516104ae9190613356565b60405180910390f35b3480156104c357600080fd5b506104cc610e98565b6040516104d9919061371c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612bd5565b610e9e565b604051610516919061371c565b60405180910390f35b34801561052b57600080fd5b50610534610f56565b005b61053e610fde565b005b34801561054c57600080fd5b506105556110c2565b6040516105629190613356565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612e68565b6110ec565b005b3480156105a057600080fd5b506105a9611172565b6040516105b691906133fa565b60405180910390f35b3480156105cb57600080fd5b506105d4611204565b6040516105e1919061371c565b60405180910390f35b61060460048036038101906105ff9190612e68565b61120e565b005b34801561061257600080fd5b5061062d60048036038101906106289190612d18565b6113dc565b005b34801561063b57600080fd5b5061065660048036038101906106519190612c95565b61155d565b005b34801561066457600080fd5b5061067f600480360381019061067a9190612e68565b6115bf565b60405161068c91906133fa565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612d58565b611666565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612c02565b611785565b6040516106f291906133df565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d9190612bd5565b611819565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610797575061079682611929565b5b9050919050565b6107a6611a0b565b73ffffffffffffffffffffffffffffffffffffffff166107c46110c2565b73ffffffffffffffffffffffffffffffffffffffff161461081a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610811906135fc565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461084690613a05565b80601f016020809104026020016040519081016040528092919081815260200182805461087290613a05565b80156108bf5780601f10610894576101008083540402835291602001916108bf565b820191906000526020600020905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b60006108d482611a13565b610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a906135dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095982610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061367c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e9611a0b565b73ffffffffffffffffffffffffffffffffffffffff161480610a185750610a1781610a12611a0b565b611785565b5b610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e9061353c565b60405180910390fd5b610a618383611a7f565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a97610a91611a0b565b82611b38565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906136dc565b60405180910390fd5b610ae1838383611c16565b505050565b610aee611a0b565b73ffffffffffffffffffffffffffffffffffffffff16610b0c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906135fc565b60405180910390fd5b80600c8190555050565b6000610b7783610e9e565b8210610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf9061343c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c2c8383836040518060200160405280600081525061155d565b505050565b60606000610c3e83610e9e565b905060008167ffffffffffffffff811115610c5c57610c5b613bcd565b5b604051908082528060200260200182016040528015610c8a5781602001602082028036833780820191505090505b50905060005b82811015610cd457610ca28582610b6c565b828281518110610cb557610cb4613b9e565b5b6020026020010181815250508080610ccc90613a68565b915050610c90565b508092505050919050565b6000610ce9610a79565b8210610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906136fc565b60405180910390fd5b60088281548110610d3e57610d3d613b9e565b5b90600052602060002001549050919050565b610d58611a0b565b73ffffffffffffffffffffffffffffffffffffffff16610d766110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906135fc565b60405180910390fd5b80600b9080519060200190610de29291906129e9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061357c565b60405180910390fd5b80915050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f069061355c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f5e611a0b565b73ffffffffffffffffffffffffffffffffffffffff16610f7c6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906135fc565b60405180910390fd5b610fdc6000611e72565b565b610fe6611a0b565b73ffffffffffffffffffffffffffffffffffffffff166110046110c2565b73ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611051906135fc565b60405180910390fd5b6000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110bf57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110f4611a0b565b73ffffffffffffffffffffffffffffffffffffffff166111126110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f906135fc565b60405180910390fd5b80600d8190555050565b60606001805461118190613a05565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613a05565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b5050505050905090565b6000600d54905090565b6000611218610a79565b9050600e60009054906101000a900460ff161561126a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112619061341c565b60405180910390fd5b601582106112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a49061351c565b60405180910390fd5b60656112b833610e9e565b106112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef9061365c565b60405180910390fd5b600c54612710611308919061391b565b8282611314919061383a565b10611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b9061369c565b60405180910390fd5b81600d5461136291906138c1565b3410156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b906136bc565b60405180910390fd5b60005b828110156113d7576113c43382846113bf919061383a565b611f38565b80806113cf90613a68565b9150506113a7565b505050565b6113e4611a0b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611449906134dc565b60405180910390fd5b806005600061145f611a0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661150c611a0b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155191906133df565b60405180910390a35050565b61156e611568611a0b565b83611b38565b6115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a4906136dc565b60405180910390fd5b6115b984848484611f56565b50505050565b60606115ca82611a13565b611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116009061363c565b60405180910390fd5b6000611613611fb2565b90506000815111611633576040518060200160405280600081525061165e565b8061163d84612044565b60405160200161164e929190613332565b6040516020818303038152906040525b915050919050565b61166e611a0b565b73ffffffffffffffffffffffffffffffffffffffff1661168c6110c2565b73ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d9906135fc565b60405180910390fd5b600c54811115611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e9061359c565b60405180910390fd5b6000611731610a79565b905060005b828110156117665761175384828461174e919061383a565b611f38565b808061175e90613a68565b915050611736565b5081600c6000828254611779919061391b565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611821611a0b565b73ffffffffffffffffffffffffffffffffffffffff1661183f6110c2565b73ffffffffffffffffffffffffffffffffffffffff1614611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c906135fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc9061347c565b60405180910390fd5b61190e81611e72565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119f457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a045750611a03826121a5565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611af283610de6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b4382611a13565b611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b79906134fc565b60405180910390fd5b6000611b8d83610de6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bfc57508373ffffffffffffffffffffffffffffffffffffffff16611be4846108c9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c0d5750611c0c8185611785565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c3682610de6565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c839061361c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf3906134bc565b60405180910390fd5b611d0783838361220f565b611d12600082611a7f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d62919061391b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611db9919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f52828260405180602001604052806000815250612323565b5050565b611f61848484611c16565b611f6d8484848461237e565b611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa39061345c565b60405180910390fd5b50505050565b6060600b8054611fc190613a05565b80601f0160208091040260200160405190810160405280929190818152602001828054611fed90613a05565b801561203a5780601f1061200f5761010080835404028352916020019161203a565b820191906000526020600020905b81548152906001019060200180831161201d57829003601f168201915b5050505050905090565b6060600082141561208c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121a0565b600082905060005b600082146120be5780806120a790613a68565b915050600a826120b79190613890565b9150612094565b60008167ffffffffffffffff8111156120da576120d9613bcd565b5b6040519080825280601f01601f19166020018201604052801561210c5781602001600182028036833780820191505090505b5090505b6000851461219957600182612125919061391b565b9150600a856121349190613ab1565b6030612140919061383a565b60f81b81838151811061215657612155613b9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121929190613890565b9450612110565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61221a838383611924565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561225d5761225881612515565b61229c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461229b5761229a838261255e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122df576122da816126cb565b61231e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461231d5761231c828261279c565b5b5b505050565b61232d838361281b565b61233a600084848461237e565b612379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123709061345c565b60405180910390fd5b505050565b600061239f8473ffffffffffffffffffffffffffffffffffffffff16611911565b15612508578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c8611a0b565b8786866040518563ffffffff1660e01b81526004016123ea9493929190613371565b602060405180830381600087803b15801561240457600080fd5b505af192505050801561243557506040513d601f19601f820116820180604052508101906124329190612df2565b60015b6124b8573d8060008114612465576040519150601f19603f3d011682016040523d82523d6000602084013e61246a565b606091505b506000815114156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a79061345c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061250d565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161256b84610e9e565b612575919061391b565b905060006007600084815260200190815260200160002054905081811461265a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126df919061391b565b905060006009600084815260200190815260200160002054905060006008838154811061270f5761270e613b9e565b5b90600052602060002001549050806008838154811061273157612730613b9e565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127805761277f613b6f565b5b6001900381819060005260206000200160009055905550505050565b60006127a783610e9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612882906135bc565b60405180910390fd5b61289481611a13565b156128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb9061349c565b60405180910390fd5b6128e06000838361220f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612930919061383a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546129f590613a05565b90600052602060002090601f016020900481019282612a175760008555612a5e565b82601f10612a3057805160ff1916838001178555612a5e565b82800160010185558215612a5e579182015b82811115612a5d578251825591602001919060010190612a42565b5b509050612a6b9190612a6f565b5090565b5b80821115612a88576000816000905550600101612a70565b5090565b6000612a9f612a9a8461375c565b613737565b905082815260208101848484011115612abb57612aba613c01565b5b612ac68482856139c3565b509392505050565b6000612ae1612adc8461378d565b613737565b905082815260208101848484011115612afd57612afc613c01565b5b612b088482856139c3565b509392505050565b600081359050612b1f81614233565b92915050565b600081359050612b348161424a565b92915050565b600081359050612b4981614261565b92915050565b600081519050612b5e81614261565b92915050565b600082601f830112612b7957612b78613bfc565b5b8135612b89848260208601612a8c565b91505092915050565b600082601f830112612ba757612ba6613bfc565b5b8135612bb7848260208601612ace565b91505092915050565b600081359050612bcf81614278565b92915050565b600060208284031215612beb57612bea613c0b565b5b6000612bf984828501612b10565b91505092915050565b60008060408385031215612c1957612c18613c0b565b5b6000612c2785828601612b10565b9250506020612c3885828601612b10565b9150509250929050565b600080600060608486031215612c5b57612c5a613c0b565b5b6000612c6986828701612b10565b9350506020612c7a86828701612b10565b9250506040612c8b86828701612bc0565b9150509250925092565b60008060008060808587031215612caf57612cae613c0b565b5b6000612cbd87828801612b10565b9450506020612cce87828801612b10565b9350506040612cdf87828801612bc0565b925050606085013567ffffffffffffffff811115612d0057612cff613c06565b5b612d0c87828801612b64565b91505092959194509250565b60008060408385031215612d2f57612d2e613c0b565b5b6000612d3d85828601612b10565b9250506020612d4e85828601612b25565b9150509250929050565b60008060408385031215612d6f57612d6e613c0b565b5b6000612d7d85828601612b10565b9250506020612d8e85828601612bc0565b9150509250929050565b600060208284031215612dae57612dad613c0b565b5b6000612dbc84828501612b25565b91505092915050565b600060208284031215612ddb57612dda613c0b565b5b6000612de984828501612b3a565b91505092915050565b600060208284031215612e0857612e07613c0b565b5b6000612e1684828501612b4f565b91505092915050565b600060208284031215612e3557612e34613c0b565b5b600082013567ffffffffffffffff811115612e5357612e52613c06565b5b612e5f84828501612b92565b91505092915050565b600060208284031215612e7e57612e7d613c0b565b5b6000612e8c84828501612bc0565b91505092915050565b6000612ea18383613314565b60208301905092915050565b612eb68161394f565b82525050565b6000612ec7826137ce565b612ed181856137fc565b9350612edc836137be565b8060005b83811015612f0d578151612ef48882612e95565b9750612eff836137ef565b925050600181019050612ee0565b5085935050505092915050565b612f2381613961565b82525050565b6000612f34826137d9565b612f3e818561380d565b9350612f4e8185602086016139d2565b612f5781613c10565b840191505092915050565b6000612f6d826137e4565b612f77818561381e565b9350612f878185602086016139d2565b612f9081613c10565b840191505092915050565b6000612fa6826137e4565b612fb0818561382f565b9350612fc08185602086016139d2565b80840191505092915050565b6000612fd9600b8361381e565b9150612fe482613c21565b602082019050919050565b6000612ffc602b8361381e565b915061300782613c4a565b604082019050919050565b600061301f60328361381e565b915061302a82613c99565b604082019050919050565b600061304260268361381e565b915061304d82613ce8565b604082019050919050565b6000613065601c8361381e565b915061307082613d37565b602082019050919050565b600061308860248361381e565b915061309382613d60565b604082019050919050565b60006130ab60198361381e565b91506130b682613daf565b602082019050919050565b60006130ce602c8361381e565b91506130d982613dd8565b604082019050919050565b60006130f1601c8361381e565b91506130fc82613e27565b602082019050919050565b600061311460388361381e565b915061311f82613e50565b604082019050919050565b6000613137602a8361381e565b915061314282613e9f565b604082019050919050565b600061315a60298361381e565b915061316582613eee565b604082019050919050565b600061317d60178361381e565b915061318882613f3d565b602082019050919050565b60006131a060208361381e565b91506131ab82613f66565b602082019050919050565b60006131c3602c8361381e565b91506131ce82613f8f565b604082019050919050565b60006131e660208361381e565b91506131f182613fde565b602082019050919050565b600061320960298361381e565b915061321482614007565b604082019050919050565b600061322c602f8361381e565b915061323782614056565b604082019050919050565b600061324f60228361381e565b915061325a826140a5565b604082019050919050565b600061327260218361381e565b915061327d826140f4565b604082019050919050565b600061329560168361381e565b91506132a082614143565b602082019050919050565b60006132b860198361381e565b91506132c38261416c565b602082019050919050565b60006132db60318361381e565b91506132e682614195565b604082019050919050565b60006132fe602c8361381e565b9150613309826141e4565b604082019050919050565b61331d816139b9565b82525050565b61332c816139b9565b82525050565b600061333e8285612f9b565b915061334a8284612f9b565b91508190509392505050565b600060208201905061336b6000830184612ead565b92915050565b60006080820190506133866000830187612ead565b6133936020830186612ead565b6133a06040830185613323565b81810360608301526133b28184612f29565b905095945050505050565b600060208201905081810360008301526133d78184612ebc565b905092915050565b60006020820190506133f46000830184612f1a565b92915050565b600060208201905081810360008301526134148184612f62565b905092915050565b6000602082019050818103600083015261343581612fcc565b9050919050565b6000602082019050818103600083015261345581612fef565b9050919050565b6000602082019050818103600083015261347581613012565b9050919050565b6000602082019050818103600083015261349581613035565b9050919050565b600060208201905081810360008301526134b581613058565b9050919050565b600060208201905081810360008301526134d58161307b565b9050919050565b600060208201905081810360008301526134f58161309e565b9050919050565b60006020820190508181036000830152613515816130c1565b9050919050565b60006020820190508181036000830152613535816130e4565b9050919050565b6000602082019050818103600083015261355581613107565b9050919050565b600060208201905081810360008301526135758161312a565b9050919050565b600060208201905081810360008301526135958161314d565b9050919050565b600060208201905081810360008301526135b581613170565b9050919050565b600060208201905081810360008301526135d581613193565b9050919050565b600060208201905081810360008301526135f5816131b6565b9050919050565b60006020820190508181036000830152613615816131d9565b9050919050565b60006020820190508181036000830152613635816131fc565b9050919050565b600060208201905081810360008301526136558161321f565b9050919050565b6000602082019050818103600083015261367581613242565b9050919050565b6000602082019050818103600083015261369581613265565b9050919050565b600060208201905081810360008301526136b581613288565b9050919050565b600060208201905081810360008301526136d5816132ab565b9050919050565b600060208201905081810360008301526136f5816132ce565b9050919050565b60006020820190508181036000830152613715816132f1565b9050919050565b60006020820190506137316000830184613323565b92915050565b6000613741613752565b905061374d8282613a37565b919050565b6000604051905090565b600067ffffffffffffffff82111561377757613776613bcd565b5b61378082613c10565b9050602081019050919050565b600067ffffffffffffffff8211156137a8576137a7613bcd565b5b6137b182613c10565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613845826139b9565b9150613850836139b9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561388557613884613ae2565b5b828201905092915050565b600061389b826139b9565b91506138a6836139b9565b9250826138b6576138b5613b11565b5b828204905092915050565b60006138cc826139b9565b91506138d7836139b9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139105761390f613ae2565b5b828202905092915050565b6000613926826139b9565b9150613931836139b9565b92508282101561394457613943613ae2565b5b828203905092915050565b600061395a82613999565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139f05780820151818401526020810190506139d5565b838111156139ff576000848401525b50505050565b60006002820490506001821680613a1d57607f821691505b60208210811415613a3157613a30613b40565b5b50919050565b613a4082613c10565b810181811067ffffffffffffffff82111715613a5f57613a5e613bcd565b5b80604052505050565b6000613a73826139b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613aa657613aa5613ae2565b5b600182019050919050565b6000613abc826139b9565b9150613ac7836139b9565b925082613ad757613ad6613b11565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e73206f776e656420746f206d696e74206d6f60008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61423c8161394f565b811461424757600080fd5b50565b61425381613961565b811461425e57600080fd5b50565b61426a8161396d565b811461427557600080fd5b50565b614281816139b9565b811461428c57600080fd5b5056fea26469706673582212205971119e63c1fc7635e31825ade12f0fee0488fce9d1b88630795c9d62aacfd764736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41848:2687:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33502:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44183:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20616:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22175:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21698:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42043:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34142:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23065:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44268:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33810:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23475:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43037:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34332:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43657:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20310:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41961:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20040:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41213:94;;;;;;;;;;;;;:::i;:::-;;44385:147;;;:::i;:::-;;40562:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43434:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20785:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43767:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42420:609;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22468:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23731:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20960:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43856:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22834:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41462:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33502:224;33604:4;33643:35;33628:50;;;:11;:50;;;;:90;;;;33682:36;33706:11;33682:23;:36::i;:::-;33628:90;33621:97;;33502:224;;;:::o;44183:74::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44246:3:::1;44236:7;;:13;;;;;;;;;;;;;;;;;;44183:74:::0;:::o;20616:100::-;20670:13;20703:5;20696:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20616:100;:::o;22175:221::-;22251:7;22279:16;22287:7;22279;:16::i;:::-;22271:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22364:15;:24;22380:7;22364:24;;;;;;;;;;;;;;;;;;;;;22357:31;;22175:221;;;:::o;21698:411::-;21779:13;21795:23;21810:7;21795:14;:23::i;:::-;21779:39;;21843:5;21837:11;;:2;:11;;;;21829:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21937:5;21921:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21946:37;21963:5;21970:12;:10;:12::i;:::-;21946:16;:37::i;:::-;21921:62;21899:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22080:21;22089:2;22093:7;22080:8;:21::i;:::-;21768:341;21698:411;;:::o;42043:26::-;;;;;;;;;;;;;:::o;34142:113::-;34203:7;34230:10;:17;;;;34223:24;;34142:113;:::o;23065:339::-;23260:41;23279:12;:10;:12::i;:::-;23293:7;23260:18;:41::i;:::-;23252:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23368:28;23378:4;23384:2;23388:7;23368:9;:28::i;:::-;23065:339;;;:::o;44268:103::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44351:12:::1;44339:9;:24;;;;44268:103:::0;:::o;33810:256::-;33907:7;33943:23;33960:5;33943:16;:23::i;:::-;33935:5;:31;33927:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34032:12;:19;34045:5;34032:19;;;;;;;;;;;;;;;:26;34052:5;34032:26;;;;;;;;;;;;34025:33;;33810:256;;;;:::o;23475:185::-;23613:39;23630:4;23636:2;23640:7;23613:39;;;;;;;;;;;;:16;:39::i;:::-;23475:185;;;:::o;43037:342::-;43096:16;43125:18;43146:17;43156:6;43146:9;:17::i;:::-;43125:38;;43176:25;43218:10;43204:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43176:53;;43244:9;43240:106;43259:10;43255:1;:14;43240:106;;;43304:30;43324:6;43332:1;43304:19;:30::i;:::-;43290:8;43299:1;43290:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;43271:3;;;;;:::i;:::-;;;;43240:106;;;;43363:8;43356:15;;;;43037:342;;;:::o;34332:233::-;34407:7;34443:30;:28;:30::i;:::-;34435:5;:38;34427:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34540:10;34551:5;34540:17;;;;;;;;:::i;:::-;;;;;;;;;;34533:24;;34332:233;;;:::o;43657:102::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43744:7:::1;43728:13;:23;;;;;;;;;;;;:::i;:::-;;43657:102:::0;:::o;20310:239::-;20382:7;20402:13;20418:7;:16;20426:7;20418:16;;;;;;;;;;;;;;;;;;;;;20402:32;;20470:1;20453:19;;:5;:19;;;;20445:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20536:5;20529:12;;;20310:239;;;:::o;41961:31::-;;;;:::o;20040:208::-;20112:7;20157:1;20140:19;;:5;:19;;;;20132:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20224:9;:16;20234:5;20224:16;;;;;;;;;;;;;;;;20217:23;;20040:208;;;:::o;41213:94::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41278:21:::1;41296:1;41278:9;:21::i;:::-;41213:94::o:0;44385:147::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44444:13:::1;44460:21;44444:37;;44508:2;;;;;;;;;;;44500:16;;:23;44517:5;44500:23;;;;;;;;;;;;;;;;;;;;;;;44492:32;;;::::0;::::1;;44433:99;44385:147::o:0;40562:87::-;40608:7;40635:6;;;;;;;;;;;40628:13;;40562:87;:::o;43434:93::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43510:9:::1;43501:6;:18;;;;43434:93:::0;:::o;20785:104::-;20841:13;20874:7;20867:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20785:104;:::o;43767:81::-;43808:7;43834:6;;43827:13;;43767:81;:::o;42420:609::-;42473:14;42490:13;:11;:13::i;:::-;42473:30;;42524:7;;;;;;;;;;;42523:8;42514:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42601:2;42595:3;:8;42586:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42707:3;42683:21;42693:10;42683:9;:21::i;:::-;:27;42675:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42792:9;;42784:5;:17;;;;:::i;:::-;42778:3;42769:6;:12;;;;:::i;:::-;:32;42760:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42875:3;42866:6;;:12;;;;:::i;:::-;42853:9;:25;;42844:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42936:9;42932:90;42951:3;42947:1;:7;42932:90;;;42975:35;42986:10;43007:1;42998:6;:10;;;;:::i;:::-;42975:9;:35::i;:::-;42956:3;;;;;:::i;:::-;;;;42932:90;;;;42462:567;42420:609;:::o;22468:295::-;22583:12;:10;:12::i;:::-;22571:24;;:8;:24;;;;22563:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22683:8;22638:18;:32;22657:12;:10;:12::i;:::-;22638:32;;;;;;;;;;;;;;;:42;22671:8;22638:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22736:8;22707:48;;22722:12;:10;:12::i;:::-;22707:48;;;22746:8;22707:48;;;;;;:::i;:::-;;;;;;;;22468:295;;:::o;23731:328::-;23906:41;23925:12;:10;:12::i;:::-;23939:7;23906:18;:41::i;:::-;23898:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24012:39;24026:4;24032:2;24036:7;24045:5;24012:13;:39::i;:::-;23731:328;;;;:::o;20960:334::-;21033:13;21067:16;21075:7;21067;:16::i;:::-;21059:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21148:21;21172:10;:8;:10::i;:::-;21148:34;;21224:1;21206:7;21200:21;:25;:86;;;;;;;;;;;;;;;;;21252:7;21261:18;:7;:16;:18::i;:::-;21235:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21200:86;21193:93;;;20960:334;;;:::o;43856:319::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43956:9:::1;;43945:7;:20;;43936:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44007:14;44024:13;:11;:13::i;:::-;44007:30;;44052:9;44048:87;44067:7;44063:1;:11;44048:87;;;44095:28;44106:3;44120:1;44111:6;:10;;;;:::i;:::-;44095:9;:28::i;:::-;44076:3;;;;;:::i;:::-;;;;44048:87;;;;44160:7;44147:9;;:20;;;;;;;:::i;:::-;;;;;;;;43925:250;43856:319:::0;;:::o;22834:164::-;22931:4;22955:18;:25;22974:5;22955:25;;;;;;;;;;;;;;;:35;22981:8;22955:35;;;;;;;;;;;;;;;;;;;;;;;;;22948:42;;22834:164;;;;:::o;41462:192::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41571:1:::1;41551:22;;:8;:22;;;;41543:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41627:19;41637:8;41627:9;:19::i;:::-;41462:192:::0;:::o;7706:387::-;7766:4;7974:12;8041:7;8029:20;8021:28;;8084:1;8077:4;:8;8070:15;;;7706:387;;;:::o;31665:126::-;;;;:::o;19671:305::-;19773:4;19825:25;19810:40;;;:11;:40;;;;:105;;;;19882:33;19867:48;;;:11;:48;;;;19810:105;:158;;;;19932:36;19956:11;19932:23;:36::i;:::-;19810:158;19790:178;;19671:305;;;:::o;15365:98::-;15418:7;15445:10;15438:17;;15365:98;:::o;25569:127::-;25634:4;25686:1;25658:30;;:7;:16;25666:7;25658:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25651:37;;25569:127;;;:::o;29551:174::-;29653:2;29626:15;:24;29642:7;29626:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29709:7;29705:2;29671:46;;29680:23;29695:7;29680:14;:23::i;:::-;29671:46;;;;;;;;;;;;29551:174;;:::o;25863:348::-;25956:4;25981:16;25989:7;25981;:16::i;:::-;25973:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26057:13;26073:23;26088:7;26073:14;:23::i;:::-;26057:39;;26126:5;26115:16;;:7;:16;;;:51;;;;26159:7;26135:31;;:20;26147:7;26135:11;:20::i;:::-;:31;;;26115:51;:87;;;;26170:32;26187:5;26194:7;26170:16;:32::i;:::-;26115:87;26107:96;;;25863:348;;;;:::o;28855:578::-;29014:4;28987:31;;:23;29002:7;28987:14;:23::i;:::-;:31;;;28979:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29097:1;29083:16;;:2;:16;;;;29075:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29153:39;29174:4;29180:2;29184:7;29153:20;:39::i;:::-;29257:29;29274:1;29278:7;29257:8;:29::i;:::-;29318:1;29299:9;:15;29309:4;29299:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29347:1;29330:9;:13;29340:2;29330:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29378:2;29359:7;:16;29367:7;29359:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29417:7;29413:2;29398:27;;29407:4;29398:27;;;;;;;;;;;;28855:578;;;:::o;41662:173::-;41718:16;41737:6;;;;;;;;;;;41718:25;;41763:8;41754:6;;:17;;;;;;;;;;;;;;;;;;41818:8;41787:40;;41808:8;41787:40;;;;;;;;;;;;41707:128;41662:173;:::o;26553:110::-;26629:26;26639:2;26643:7;26629:26;;;;;;;;;;;;:9;:26::i;:::-;26553:110;;:::o;24941:315::-;25098:28;25108:4;25114:2;25118:7;25098:9;:28::i;:::-;25145:48;25168:4;25174:2;25178:7;25187:5;25145:22;:48::i;:::-;25137:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24941:315;;;;:::o;43535:114::-;43595:13;43628;43621:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43535:114;:::o;15809:723::-;15865:13;16095:1;16086:5;:10;16082:53;;;16113:10;;;;;;;;;;;;;;;;;;;;;16082:53;16145:12;16160:5;16145:20;;16176:14;16201:78;16216:1;16208:4;:9;16201:78;;16234:8;;;;;:::i;:::-;;;;16265:2;16257:10;;;;;:::i;:::-;;;16201:78;;;16289:19;16321:6;16311:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16289:39;;16339:154;16355:1;16346:5;:10;16339:154;;16383:1;16373:11;;;;;:::i;:::-;;;16450:2;16442:5;:10;;;;:::i;:::-;16429:2;:24;;;;:::i;:::-;16416:39;;16399:6;16406;16399:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16479:2;16470:11;;;;;:::i;:::-;;;16339:154;;;16517:6;16503:21;;;;;15809:723;;;;:::o;18274:157::-;18359:4;18398:25;18383:40;;;:11;:40;;;;18376:47;;18274:157;;;:::o;35178:589::-;35322:45;35349:4;35355:2;35359:7;35322:26;:45::i;:::-;35400:1;35384:18;;:4;:18;;;35380:187;;;35419:40;35451:7;35419:31;:40::i;:::-;35380:187;;;35489:2;35481:10;;:4;:10;;;35477:90;;35508:47;35541:4;35547:7;35508:32;:47::i;:::-;35477:90;35380:187;35595:1;35581:16;;:2;:16;;;35577:183;;;35614:45;35651:7;35614:36;:45::i;:::-;35577:183;;;35687:4;35681:10;;:2;:10;;;35677:83;;35708:40;35736:2;35740:7;35708:27;:40::i;:::-;35677:83;35577:183;35178:589;;;:::o;26890:321::-;27020:18;27026:2;27030:7;27020:5;:18::i;:::-;27071:54;27102:1;27106:2;27110:7;27119:5;27071:22;:54::i;:::-;27049:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26890:321;;;:::o;30290:803::-;30445:4;30466:15;:2;:13;;;:15::i;:::-;30462:624;;;30518:2;30502:36;;;30539:12;:10;:12::i;:::-;30553:4;30559:7;30568:5;30502:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30498:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30765:1;30748:6;:13;:18;30744:272;;;30791:60;;;;;;;;;;:::i;:::-;;;;;;;;30744:272;30966:6;30960:13;30951:6;30947:2;30943:15;30936:38;30498:533;30635:45;;;30625:55;;;:6;:55;;;;30618:62;;;;;30462:624;31070:4;31063:11;;30290:803;;;;;;;:::o;36490:164::-;36594:10;:17;;;;36567:15;:24;36583:7;36567:24;;;;;;;;;;;:44;;;;36622:10;36638:7;36622:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36490:164;:::o;37281:988::-;37547:22;37597:1;37572:22;37589:4;37572:16;:22::i;:::-;:26;;;;:::i;:::-;37547:51;;37609:18;37630:17;:26;37648:7;37630:26;;;;;;;;;;;;37609:47;;37777:14;37763:10;:28;37759:328;;37808:19;37830:12;:18;37843:4;37830:18;;;;;;;;;;;;;;;:34;37849:14;37830:34;;;;;;;;;;;;37808:56;;37914:11;37881:12;:18;37894:4;37881:18;;;;;;;;;;;;;;;:30;37900:10;37881:30;;;;;;;;;;;:44;;;;38031:10;37998:17;:30;38016:11;37998:30;;;;;;;;;;;:43;;;;37793:294;37759:328;38183:17;:26;38201:7;38183:26;;;;;;;;;;;38176:33;;;38227:12;:18;38240:4;38227:18;;;;;;;;;;;;;;;:34;38246:14;38227:34;;;;;;;;;;;38220:41;;;37362:907;;37281:988;;:::o;38564:1079::-;38817:22;38862:1;38842:10;:17;;;;:21;;;;:::i;:::-;38817:46;;38874:18;38895:15;:24;38911:7;38895:24;;;;;;;;;;;;38874:45;;39246:19;39268:10;39279:14;39268:26;;;;;;;;:::i;:::-;;;;;;;;;;39246:48;;39332:11;39307:10;39318;39307:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39443:10;39412:15;:28;39428:11;39412:28;;;;;;;;;;;:41;;;;39584:15;:24;39600:7;39584:24;;;;;;;;;;;39577:31;;;39619:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38635:1008;;;38564:1079;:::o;36068:221::-;36153:14;36170:20;36187:2;36170:16;:20::i;:::-;36153:37;;36228:7;36201:12;:16;36214:2;36201:16;;;;;;;;;;;;;;;:24;36218:6;36201:24;;;;;;;;;;;:34;;;;36275:6;36246:17;:26;36264:7;36246:26;;;;;;;;;;;:35;;;;36142:147;36068:221;;:::o;27547:382::-;27641:1;27627:16;;:2;:16;;;;27619:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27700:16;27708:7;27700;:16::i;:::-;27699:17;27691:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27762:45;27791:1;27795:2;27799:7;27762:20;:45::i;:::-;27837:1;27820:9;:13;27830:2;27820:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27868:2;27849:7;:16;27857:7;27849:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27913:7;27909:2;27888:33;;27905:1;27888:33;;;;;;;;;;;;27547:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11286:366;;;:::o;11658:::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14262:366;;;:::o;14634:::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15006:366;;;:::o;15378:::-;15520:3;15541:67;15605:2;15600:3;15541:67;:::i;:::-;15534:74;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15378:366;;;:::o;15750:::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15750:366;;;:::o;16122:::-;16264:3;16285:67;16349:2;16344:3;16285:67;:::i;:::-;16278:74;;16361:93;16450:3;16361:93;:::i;:::-;16479:2;16474:3;16470:12;16463:19;;16122:366;;;:::o;16494:::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16494:366;;;:::o;16866:::-;17008:3;17029:67;17093:2;17088:3;17029:67;:::i;:::-;17022:74;;17105:93;17194:3;17105:93;:::i;:::-;17223:2;17218:3;17214:12;17207:19;;16866:366;;;:::o;17238:::-;17380:3;17401:67;17465:2;17460:3;17401:67;:::i;:::-;17394:74;;17477:93;17566:3;17477:93;:::i;:::-;17595:2;17590:3;17586:12;17579:19;;17238:366;;;:::o;17610:::-;17752:3;17773:67;17837:2;17832:3;17773:67;:::i;:::-;17766:74;;17849:93;17938:3;17849:93;:::i;:::-;17967:2;17962:3;17958:12;17951:19;;17610:366;;;:::o;17982:::-;18124:3;18145:67;18209:2;18204:3;18145:67;:::i;:::-;18138:74;;18221:93;18310:3;18221:93;:::i;:::-;18339:2;18334:3;18330:12;18323:19;;17982:366;;;:::o;18354:::-;18496:3;18517:67;18581:2;18576:3;18517:67;:::i;:::-;18510:74;;18593:93;18682:3;18593:93;:::i;:::-;18711:2;18706:3;18702:12;18695:19;;18354:366;;;:::o;18726:108::-;18803:24;18821:5;18803:24;:::i;:::-;18798:3;18791:37;18726:108;;:::o;18840:118::-;18927:24;18945:5;18927:24;:::i;:::-;18922:3;18915:37;18840:118;;:::o;18964:435::-;19144:3;19166:95;19257:3;19248:6;19166:95;:::i;:::-;19159:102;;19278:95;19369:3;19360:6;19278:95;:::i;:::-;19271:102;;19390:3;19383:10;;18964:435;;;;;:::o;19405:222::-;19498:4;19536:2;19525:9;19521:18;19513:26;;19549:71;19617:1;19606:9;19602:17;19593:6;19549:71;:::i;:::-;19405:222;;;;:::o;19633:640::-;19828:4;19866:3;19855:9;19851:19;19843:27;;19880:71;19948:1;19937:9;19933:17;19924:6;19880:71;:::i;:::-;19961:72;20029:2;20018:9;20014:18;20005:6;19961:72;:::i;:::-;20043;20111:2;20100:9;20096:18;20087:6;20043:72;:::i;:::-;20162:9;20156:4;20152:20;20147:2;20136:9;20132:18;20125:48;20190:76;20261:4;20252:6;20190:76;:::i;:::-;20182:84;;19633:640;;;;;;;:::o;20279:373::-;20422:4;20460:2;20449:9;20445:18;20437:26;;20509:9;20503:4;20499:20;20495:1;20484:9;20480:17;20473:47;20537:108;20640:4;20631:6;20537:108;:::i;:::-;20529:116;;20279:373;;;;:::o;20658:210::-;20745:4;20783:2;20772:9;20768:18;20760:26;;20796:65;20858:1;20847:9;20843:17;20834:6;20796:65;:::i;:::-;20658:210;;;;:::o;20874:313::-;20987:4;21025:2;21014:9;21010:18;21002:26;;21074:9;21068:4;21064:20;21060:1;21049:9;21045:17;21038:47;21102:78;21175:4;21166:6;21102:78;:::i;:::-;21094:86;;20874:313;;;;:::o;21193:419::-;21359:4;21397:2;21386:9;21382:18;21374:26;;21446:9;21440:4;21436:20;21432:1;21421:9;21417:17;21410:47;21474:131;21600:4;21474:131;:::i;:::-;21466:139;;21193:419;;;:::o;21618:::-;21784:4;21822:2;21811:9;21807:18;21799:26;;21871:9;21865:4;21861:20;21857:1;21846:9;21842:17;21835:47;21899:131;22025:4;21899:131;:::i;:::-;21891:139;;21618:419;;;:::o;22043:::-;22209:4;22247:2;22236:9;22232:18;22224:26;;22296:9;22290:4;22286:20;22282:1;22271:9;22267:17;22260:47;22324:131;22450:4;22324:131;:::i;:::-;22316:139;;22043:419;;;:::o;22468:::-;22634:4;22672:2;22661:9;22657:18;22649:26;;22721:9;22715:4;22711:20;22707:1;22696:9;22692:17;22685:47;22749:131;22875:4;22749:131;:::i;:::-;22741:139;;22468:419;;;:::o;22893:::-;23059:4;23097:2;23086:9;23082:18;23074:26;;23146:9;23140:4;23136:20;23132:1;23121:9;23117:17;23110:47;23174:131;23300:4;23174:131;:::i;:::-;23166:139;;22893:419;;;:::o;23318:::-;23484:4;23522:2;23511:9;23507:18;23499:26;;23571:9;23565:4;23561:20;23557:1;23546:9;23542:17;23535:47;23599:131;23725:4;23599:131;:::i;:::-;23591:139;;23318:419;;;:::o;23743:::-;23909:4;23947:2;23936:9;23932:18;23924:26;;23996:9;23990:4;23986:20;23982:1;23971:9;23967:17;23960:47;24024:131;24150:4;24024:131;:::i;:::-;24016:139;;23743:419;;;:::o;24168:::-;24334:4;24372:2;24361:9;24357:18;24349:26;;24421:9;24415:4;24411:20;24407:1;24396:9;24392:17;24385:47;24449:131;24575:4;24449:131;:::i;:::-;24441:139;;24168:419;;;:::o;24593:::-;24759:4;24797:2;24786:9;24782:18;24774:26;;24846:9;24840:4;24836:20;24832:1;24821:9;24817:17;24810:47;24874:131;25000:4;24874:131;:::i;:::-;24866:139;;24593:419;;;:::o;25018:::-;25184:4;25222:2;25211:9;25207:18;25199:26;;25271:9;25265:4;25261:20;25257:1;25246:9;25242:17;25235:47;25299:131;25425:4;25299:131;:::i;:::-;25291:139;;25018:419;;;:::o;25443:::-;25609:4;25647:2;25636:9;25632:18;25624:26;;25696:9;25690:4;25686:20;25682:1;25671:9;25667:17;25660:47;25724:131;25850:4;25724:131;:::i;:::-;25716:139;;25443:419;;;:::o;25868:::-;26034:4;26072:2;26061:9;26057:18;26049:26;;26121:9;26115:4;26111:20;26107:1;26096:9;26092:17;26085:47;26149:131;26275:4;26149:131;:::i;:::-;26141:139;;25868:419;;;:::o;26293:::-;26459:4;26497:2;26486:9;26482:18;26474:26;;26546:9;26540:4;26536:20;26532:1;26521:9;26517:17;26510:47;26574:131;26700:4;26574:131;:::i;:::-;26566:139;;26293:419;;;:::o;26718:::-;26884:4;26922:2;26911:9;26907:18;26899:26;;26971:9;26965:4;26961:20;26957:1;26946:9;26942:17;26935:47;26999:131;27125:4;26999:131;:::i;:::-;26991:139;;26718:419;;;:::o;27143:::-;27309:4;27347:2;27336:9;27332:18;27324:26;;27396:9;27390:4;27386:20;27382:1;27371:9;27367:17;27360:47;27424:131;27550:4;27424:131;:::i;:::-;27416:139;;27143:419;;;:::o;27568:::-;27734:4;27772:2;27761:9;27757:18;27749:26;;27821:9;27815:4;27811:20;27807:1;27796:9;27792:17;27785:47;27849:131;27975:4;27849:131;:::i;:::-;27841:139;;27568:419;;;:::o;27993:::-;28159:4;28197:2;28186:9;28182:18;28174:26;;28246:9;28240:4;28236:20;28232:1;28221:9;28217:17;28210:47;28274:131;28400:4;28274:131;:::i;:::-;28266:139;;27993:419;;;:::o;28418:::-;28584:4;28622:2;28611:9;28607:18;28599:26;;28671:9;28665:4;28661:20;28657:1;28646:9;28642:17;28635:47;28699:131;28825:4;28699:131;:::i;:::-;28691:139;;28418:419;;;:::o;28843:::-;29009:4;29047:2;29036:9;29032:18;29024:26;;29096:9;29090:4;29086:20;29082:1;29071:9;29067:17;29060:47;29124:131;29250:4;29124:131;:::i;:::-;29116:139;;28843:419;;;:::o;29268:::-;29434:4;29472:2;29461:9;29457:18;29449:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29549:131;29675:4;29549:131;:::i;:::-;29541:139;;29268:419;;;:::o;29693:::-;29859:4;29897:2;29886:9;29882:18;29874:26;;29946:9;29940:4;29936:20;29932:1;29921:9;29917:17;29910:47;29974:131;30100:4;29974:131;:::i;:::-;29966:139;;29693:419;;;:::o;30118:::-;30284:4;30322:2;30311:9;30307:18;30299:26;;30371:9;30365:4;30361:20;30357:1;30346:9;30342:17;30335:47;30399:131;30525:4;30399:131;:::i;:::-;30391:139;;30118:419;;;:::o;30543:::-;30709:4;30747:2;30736:9;30732:18;30724:26;;30796:9;30790:4;30786:20;30782:1;30771:9;30767:17;30760:47;30824:131;30950:4;30824:131;:::i;:::-;30816:139;;30543:419;;;:::o;30968:::-;31134:4;31172:2;31161:9;31157:18;31149:26;;31221:9;31215:4;31211:20;31207:1;31196:9;31192:17;31185:47;31249:131;31375:4;31249:131;:::i;:::-;31241:139;;30968:419;;;:::o;31393:222::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31537:71;31605:1;31594:9;31590:17;31581:6;31537:71;:::i;:::-;31393:222;;;;:::o;31621:129::-;31655:6;31682:20;;:::i;:::-;31672:30;;31711:33;31739:4;31731:6;31711:33;:::i;:::-;31621:129;;;:::o;31756:75::-;31789:6;31822:2;31816:9;31806:19;;31756:75;:::o;31837:307::-;31898:4;31988:18;31980:6;31977:30;31974:56;;;32010:18;;:::i;:::-;31974:56;32048:29;32070:6;32048:29;:::i;:::-;32040:37;;32132:4;32126;32122:15;32114:23;;31837:307;;;:::o;32150:308::-;32212:4;32302:18;32294:6;32291:30;32288:56;;;32324:18;;:::i;:::-;32288:56;32362:29;32384:6;32362:29;:::i;:::-;32354:37;;32446:4;32440;32436:15;32428:23;;32150:308;;;:::o;32464:132::-;32531:4;32554:3;32546:11;;32584:4;32579:3;32575:14;32567:22;;32464:132;;;:::o;32602:114::-;32669:6;32703:5;32697:12;32687:22;;32602:114;;;:::o;32722:98::-;32773:6;32807:5;32801:12;32791:22;;32722:98;;;:::o;32826:99::-;32878:6;32912:5;32906:12;32896:22;;32826:99;;;:::o;32931:113::-;33001:4;33033;33028:3;33024:14;33016:22;;32931:113;;;:::o;33050:184::-;33149:11;33183:6;33178:3;33171:19;33223:4;33218:3;33214:14;33199:29;;33050:184;;;;:::o;33240:168::-;33323:11;33357:6;33352:3;33345:19;33397:4;33392:3;33388:14;33373:29;;33240:168;;;;:::o;33414:169::-;33498:11;33532:6;33527:3;33520:19;33572:4;33567:3;33563:14;33548:29;;33414:169;;;;:::o;33589:148::-;33691:11;33728:3;33713:18;;33589:148;;;;:::o;33743:305::-;33783:3;33802:20;33820:1;33802:20;:::i;:::-;33797:25;;33836:20;33854:1;33836:20;:::i;:::-;33831:25;;33990:1;33922:66;33918:74;33915:1;33912:81;33909:107;;;33996:18;;:::i;:::-;33909:107;34040:1;34037;34033:9;34026:16;;33743:305;;;;:::o;34054:185::-;34094:1;34111:20;34129:1;34111:20;:::i;:::-;34106:25;;34145:20;34163:1;34145:20;:::i;:::-;34140:25;;34184:1;34174:35;;34189:18;;:::i;:::-;34174:35;34231:1;34228;34224:9;34219:14;;34054:185;;;;:::o;34245:348::-;34285:7;34308:20;34326:1;34308:20;:::i;:::-;34303:25;;34342:20;34360:1;34342:20;:::i;:::-;34337:25;;34530:1;34462:66;34458:74;34455:1;34452:81;34447:1;34440:9;34433:17;34429:105;34426:131;;;34537:18;;:::i;:::-;34426:131;34585:1;34582;34578:9;34567:20;;34245:348;;;;:::o;34599:191::-;34639:4;34659:20;34677:1;34659:20;:::i;:::-;34654:25;;34693:20;34711:1;34693:20;:::i;:::-;34688:25;;34732:1;34729;34726:8;34723:34;;;34737:18;;:::i;:::-;34723:34;34782:1;34779;34775:9;34767:17;;34599:191;;;;:::o;34796:96::-;34833:7;34862:24;34880:5;34862:24;:::i;:::-;34851:35;;34796:96;;;:::o;34898:90::-;34932:7;34975:5;34968:13;34961:21;34950:32;;34898:90;;;:::o;34994:149::-;35030:7;35070:66;35063:5;35059:78;35048:89;;34994:149;;;:::o;35149:126::-;35186:7;35226:42;35219:5;35215:54;35204:65;;35149:126;;;:::o;35281:77::-;35318:7;35347:5;35336:16;;35281:77;;;:::o;35364:154::-;35448:6;35443:3;35438;35425:30;35510:1;35501:6;35496:3;35492:16;35485:27;35364:154;;;:::o;35524:307::-;35592:1;35602:113;35616:6;35613:1;35610:13;35602:113;;;35701:1;35696:3;35692:11;35686:18;35682:1;35677:3;35673:11;35666:39;35638:2;35635:1;35631:10;35626:15;;35602:113;;;35733:6;35730:1;35727:13;35724:101;;;35813:1;35804:6;35799:3;35795:16;35788:27;35724:101;35573:258;35524:307;;;:::o;35837:320::-;35881:6;35918:1;35912:4;35908:12;35898:22;;35965:1;35959:4;35955:12;35986:18;35976:81;;36042:4;36034:6;36030:17;36020:27;;35976:81;36104:2;36096:6;36093:14;36073:18;36070:38;36067:84;;;36123:18;;:::i;:::-;36067:84;35888:269;35837:320;;;:::o;36163:281::-;36246:27;36268:4;36246:27;:::i;:::-;36238:6;36234:40;36376:6;36364:10;36361:22;36340:18;36328:10;36325:34;36322:62;36319:88;;;36387:18;;:::i;:::-;36319:88;36427:10;36423:2;36416:22;36206:238;36163:281;;:::o;36450:233::-;36489:3;36512:24;36530:5;36512:24;:::i;:::-;36503:33;;36558:66;36551:5;36548:77;36545:103;;;36628:18;;:::i;:::-;36545:103;36675:1;36668:5;36664:13;36657:20;;36450:233;;;:::o;36689:176::-;36721:1;36738:20;36756:1;36738:20;:::i;:::-;36733:25;;36772:20;36790:1;36772:20;:::i;:::-;36767:25;;36811:1;36801:35;;36816:18;;:::i;:::-;36801:35;36857:1;36854;36850:9;36845:14;;36689:176;;;;:::o;36871:180::-;36919:77;36916:1;36909:88;37016:4;37013:1;37006:15;37040:4;37037:1;37030:15;37057:180;37105:77;37102:1;37095:88;37202:4;37199:1;37192:15;37226:4;37223:1;37216:15;37243:180;37291:77;37288:1;37281:88;37388:4;37385:1;37378:15;37412:4;37409:1;37402:15;37429:180;37477:77;37474:1;37467:88;37574:4;37571:1;37564:15;37598:4;37595:1;37588:15;37615:180;37663:77;37660:1;37653:88;37760:4;37757:1;37750:15;37784:4;37781:1;37774:15;37801:180;37849:77;37846:1;37839:88;37946:4;37943:1;37936:15;37970:4;37967:1;37960:15;37987:117;38096:1;38093;38086:12;38110:117;38219:1;38216;38209:12;38233:117;38342:1;38339;38332:12;38356:117;38465:1;38462;38455:12;38479:102;38520:6;38571:2;38567:7;38562:2;38555:5;38551:14;38547:28;38537:38;;38479:102;;;:::o;38587:161::-;38727:13;38723:1;38715:6;38711:14;38704:37;38587:161;:::o;38754:230::-;38894:34;38890:1;38882:6;38878:14;38871:58;38963:13;38958:2;38950:6;38946:15;38939:38;38754:230;:::o;38990:237::-;39130:34;39126:1;39118:6;39114:14;39107:58;39199:20;39194:2;39186:6;39182:15;39175:45;38990:237;:::o;39233:225::-;39373:34;39369:1;39361:6;39357:14;39350:58;39442:8;39437:2;39429:6;39425:15;39418:33;39233:225;:::o;39464:178::-;39604:30;39600:1;39592:6;39588:14;39581:54;39464:178;:::o;39648:223::-;39788:34;39784:1;39776:6;39772:14;39765:58;39857:6;39852:2;39844:6;39840:15;39833:31;39648:223;:::o;39877:175::-;40017:27;40013:1;40005:6;40001:14;39994:51;39877:175;:::o;40058:231::-;40198:34;40194:1;40186:6;40182:14;40175:58;40267:14;40262:2;40254:6;40250:15;40243:39;40058:231;:::o;40295:178::-;40435:30;40431:1;40423:6;40419:14;40412:54;40295:178;:::o;40479:243::-;40619:34;40615:1;40607:6;40603:14;40596:58;40688:26;40683:2;40675:6;40671:15;40664:51;40479:243;:::o;40728:229::-;40868:34;40864:1;40856:6;40852:14;40845:58;40937:12;40932:2;40924:6;40920:15;40913:37;40728:229;:::o;40963:228::-;41103:34;41099:1;41091:6;41087:14;41080:58;41172:11;41167:2;41159:6;41155:15;41148:36;40963:228;:::o;41197:173::-;41337:25;41333:1;41325:6;41321:14;41314:49;41197:173;:::o;41376:182::-;41516:34;41512:1;41504:6;41500:14;41493:58;41376:182;:::o;41564:231::-;41704:34;41700:1;41692:6;41688:14;41681:58;41773:14;41768:2;41760:6;41756:15;41749:39;41564:231;:::o;41801:182::-;41941:34;41937:1;41929:6;41925:14;41918:58;41801:182;:::o;41989:228::-;42129:34;42125:1;42117:6;42113:14;42106:58;42198:11;42193:2;42185:6;42181:15;42174:36;41989:228;:::o;42223:234::-;42363:34;42359:1;42351:6;42347:14;42340:58;42432:17;42427:2;42419:6;42415:15;42408:42;42223:234;:::o;42463:221::-;42603:34;42599:1;42591:6;42587:14;42580:58;42672:4;42667:2;42659:6;42655:15;42648:29;42463:221;:::o;42690:220::-;42830:34;42826:1;42818:6;42814:14;42807:58;42899:3;42894:2;42886:6;42882:15;42875:28;42690:220;:::o;42916:172::-;43056:24;43052:1;43044:6;43040:14;43033:48;42916:172;:::o;43094:175::-;43234:27;43230:1;43222:6;43218:14;43211:51;43094:175;:::o;43275:236::-;43415:34;43411:1;43403:6;43399:14;43392:58;43484:19;43479:2;43471:6;43467:15;43460:44;43275:236;:::o;43517:231::-;43657:34;43653:1;43645:6;43641:14;43634:58;43726:14;43721:2;43713:6;43709:15;43702:39;43517:231;:::o;43754:122::-;43827:24;43845:5;43827:24;:::i;:::-;43820:5;43817:35;43807:63;;43866:1;43863;43856:12;43807:63;43754:122;:::o;43882:116::-;43952:21;43967:5;43952:21;:::i;:::-;43945:5;43942:32;43932:60;;43988:1;43985;43978:12;43932:60;43882:116;:::o;44004:120::-;44076:23;44093:5;44076:23;:::i;:::-;44069:5;44066:34;44056:62;;44114:1;44111;44104:12;44056:62;44004:120;:::o;44130:122::-;44203:24;44221:5;44203:24;:::i;:::-;44196:5;44193:35;44183:63;;44242:1;44239;44232:12;44183:63;44130:122;:::o

Swarm Source

ipfs://5971119e63c1fc7635e31825ade12f0fee0488fce9d1b88630795c9d62aacfd7
Loading...
Loading
Loading...
Loading
[ 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.