ETH Price: $2,483.79 (+4.88%)

OG Baby Moose (OGBABYMOOSE)
 

Overview

TokenID

308

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
OGBabyMoose

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-23
*/

pragma solidity ^0.8.0;
//SPDX-License-Identifier: MIT

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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

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

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

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, "Addr: cant send val, rcpt revert");
    }

    /**
     * @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, "Addr: low-level call value fail");
    }

    /**
     * @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, "Addr: insufficient balance 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, "Addr: low-level static call fail");
    }

    /**
     * @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), "Addr: static call 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, "Addr: low-level del 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), "Addr: delegate call 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);
            }
        }
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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 0x address");
        _setOwner(newOwner);
    }

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

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract OGBabyMoose is IERC721, Ownable, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

    // 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;
    
    // Specific Functionality
    bool private _hideTokens;  //logic toggle
    uint256 public numberMinted;
    

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "OG Baby Moose";
        _symbol = "OGBABYMOOSE";
        _baseURI = "https://doyoumoose.com/ogbabymoose/metadata/";
        _hideTokens = true;
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == OGBabyMoose.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        bool success;
        (success, ) = owner().call{value: address(this).balance}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function airdrop(address[] memory batch) public onlyOwner {
        uint256 mintSeedValue = numberMinted + 1;
        for (uint256 i = 0; i < batch.length; i++) {
            _safeMint(batch[i], mintSeedValue + i);
            numberMinted += 1;
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideTokens() external onlyOwner {
        _hideTokens = true;
    }
    
    function revealTokens() external onlyOwner {
        _hideTokens = false;
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: bal qry for 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: own query nonexist tkn");
        return owner;
    }

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

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, 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(msg.sender, tokenId), "ERC721: txfr !owner/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(msg.sender, tokenId), "ERC721: txfr !owner/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), "txfr to non ERC721Reciever");
    }

    /**
     * @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: op query nonexistent tkn");
        address owner = 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),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @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 = 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(ownerOf(tokenId) == from, "ERC721: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 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(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(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @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) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

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

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "ERC721Metadata: URI 0x0 token");
        string memory tokenuri;
        
        if (_hideTokens) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

    receive() external payable {}
    
    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"batch","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"hideTokens","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTokens","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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f8060146101000a81548160ff021916908315150217905550348015610028575f80fd5b5061004561003a61011660201b60201c565b61011d60201b60201c565b6040518060400160405280600d81526020017f4f472042616279204d6f6f736500000000000000000000000000000000000000815250600190816100899190610418565b506040518060400160405280600b81526020017f4f47424142594d4f4f5345000000000000000000000000000000000000000000815250600290816100ce9190610418565b506040518060600160405280602c8152602001613caf602c9139600390816100f69190610418565b50600160085f6101000a81548160ff0219169083151502179055506104e7565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061025957607f821691505b60208210810361026c5761026b610215565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610293565b6102d88683610293565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61031c610317610312846102f0565b6102f9565b6102f0565b9050919050565b5f819050919050565b61033583610302565b61034961034182610323565b84845461029f565b825550505050565b5f90565b61035d610351565b61036881848461032c565b505050565b5b8181101561038b576103805f82610355565b60018101905061036e565b5050565b601f8211156103d0576103a181610272565b6103aa84610284565b810160208510156103b9578190505b6103cd6103c585610284565b83018261036d565b50505b505050565b5f82821c905092915050565b5f6103f05f19846008026103d5565b1980831691505092915050565b5f61040883836103e1565b9150826002028217905092915050565b610421826101de565b67ffffffffffffffff81111561043a576104396101e8565b5b6104448254610242565b61044f82828561038f565b5f60209050601f831160018114610480575f841561046e578287015190505b61047885826103fd565b8655506104df565b601f19841661048e86610272565b5f5b828110156104b557848901518255600182019150602085019450602081019050610490565b868310156104d257848901516104ce601f8916826103e1565b8355505b6001600288020188555050505b505050505050565b6137bb806104f45f395ff3fe608060405260043610610184575f3560e01c80636352211e116100d0578063a22cb46511610089578063c87b56dd11610063578063c87b56dd14610523578063e8a3d4851461055f578063e985e9c514610589578063f2fde38b146105c55761018b565b8063a22cb465146104bd578063b5b3e214146104e5578063b88d4fde146104fb5761018b565b80636352211e146103b357806370a08231146103ef578063715018a61461042b578063729ad39e146104415780638da5cb5b1461046957806395d89b41146104935761018b565b806323b872dd1161013d57806342842e0e1161011757806342842e0e1461031157806342966c681461033957806349a772b51461036157806355f804b31461038b5761018b565b806323b872dd146102bd5780633ba5939d146102e55780633ccfd60b146102fb5761018b565b806301ffc9a71461018d57806306fdde03146101c9578063081812fc146101f3578063095ea7b31461022f578063150b7a021461025757806318160ddd146102935761018b565b3661018b57005b005b348015610198575f80fd5b506101b360048036038101906101ae9190612126565b6105ed565b6040516101c0919061216b565b60405180910390f35b3480156101d4575f80fd5b506101dd610775565b6040516101ea91906121f4565b60405180910390f35b3480156101fe575f80fd5b5061021960048036038101906102149190612247565b610805565b60405161022691906122b1565b60405180910390f35b34801561023a575f80fd5b50610255600480360381019061025091906122f4565b610886565b005b348015610262575f80fd5b5061027d60048036038101906102789190612393565b61098e565b60405161028a9190612426565b60405180910390f35b34801561029e575f80fd5b506102a76109a2565b6040516102b4919061244e565b60405180910390f35b3480156102c8575f80fd5b506102e360048036038101906102de9190612467565b6109ab565b005b3480156102f0575f80fd5b506102f9610a04565b005b348015610306575f80fd5b5061030f610a9b565b005b34801561031c575f80fd5b5061033760048036038101906103329190612467565b610bcb565b005b348015610344575f80fd5b5061035f600480360381019061035a9190612247565b610bea565b005b34801561036c575f80fd5b50610375610c3c565b604051610382919061244e565b60405180910390f35b348015610396575f80fd5b506103b160048036038101906103ac91906125df565b610c42565b005b3480156103be575f80fd5b506103d960048036038101906103d49190612247565b610cd1565b6040516103e691906122b1565b60405180910390f35b3480156103fa575f80fd5b5061041560048036038101906104109190612626565b610d7d565b604051610422919061244e565b60405180910390f35b348015610436575f80fd5b5061043f610e31565b005b34801561044c575f80fd5b5061046760048036038101906104629190612711565b610eb8565b005b348015610474575f80fd5b5061047d610fab565b60405161048a91906122b1565b60405180910390f35b34801561049e575f80fd5b506104a7610fd2565b6040516104b491906121f4565b60405180910390f35b3480156104c8575f80fd5b506104e360048036038101906104de9190612782565b611062565b005b3480156104f0575f80fd5b506104f96111c8565b005b348015610506575f80fd5b50610521600480360381019061051c919061285e565b611260565b005b34801561052e575f80fd5b5061054960048036038101906105449190612247565b6112bb565b60405161055691906121f4565b60405180910390f35b34801561056a575f80fd5b5061057361137a565b60405161058091906121f4565b60405180910390f35b348015610594575f80fd5b506105af60048036038101906105aa91906128de565b6113a2565b6040516105bc919061216b565b60405180910390f35b3480156105d0575f80fd5b506105eb60048036038101906105e69190612626565b611430565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061071f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076e575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606001805461078490612949565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090612949565b80156107fb5780601f106107d2576101008083540402835291602001916107fb565b820191905f5260205f20905b8154815290600101906020018083116107de57829003601f168201915b5050505050905090565b5f61080f82611526565b61084e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610845906129c3565b60405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f61089082610cd1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790612a2b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610940575061093f81336113a2565b5b61097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097690612a93565b60405180910390fd5b610989838361158e565b505050565b5f63150b7a0260e01b905095945050505050565b5f600954905090565b6109b53382611644565b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90612afb565b60405180910390fd5b6109ff838383611720565b505050565b610a0c611970565b73ffffffffffffffffffffffffffffffffffffffff16610a2a610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790612b63565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b610aa3611970565b73ffffffffffffffffffffffffffffffffffffffff16610ac1610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0e90612b63565b60405180910390fd5b5f610b20610fab565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b4390612bae565b5f6040518083038185875af1925050503d805f8114610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b50508091505080610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612c0c565b60405180910390fd5b50565b610be583838360405180602001604052805f815250611260565b505050565b610bf381610cd1565b73ffffffffffffffffffffffffffffffffffffffff16610c11611970565b73ffffffffffffffffffffffffffffffffffffffff1614610c30575f80fd5b610c3981611977565b50565b60095481565b610c4a611970565b73ffffffffffffffffffffffffffffffffffffffff16610c68610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590612b63565b60405180910390fd5b8060039081610ccd9190612dc7565b5050565b5f8060045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90612ee0565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390612f48565b60405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e39611970565b73ffffffffffffffffffffffffffffffffffffffff16610e57610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612b63565b60405180910390fd5b610eb65f611a7e565b565b610ec0611970565b73ffffffffffffffffffffffffffffffffffffffff16610ede610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b90612b63565b60405180910390fd5b5f6001600954610f449190612f93565b90505f5b8251811015610fa657610f80838281518110610f6757610f66612fc6565b5b60200260200101518284610f7b9190612f93565b611b3f565b600160095f828254610f929190612f93565b925050819055508080600101915050610f48565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610fe190612949565b80601f016020809104026020016040519081016040528092919081815260200182805461100d90612949565b80156110585780601f1061102f57610100808354040283529160200191611058565b820191905f5260205f20905b81548152906001019060200180831161103b57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c79061303d565b60405180910390fd5b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111bc919061216b565b60405180910390a35050565b6111d0611970565b73ffffffffffffffffffffffffffffffffffffffff166111ee610fab565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612b63565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b61126a3383611644565b6112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090612afb565b60405180910390fd5b6112b584848484611b5c565b50505050565b60606112c682611526565b611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc906130a5565b60405180910390fd5b606060085f9054906101000a900460ff161561134357600360405160200161132d9190613197565b6040516020818303038152906040529050611371565b600361134e84611bb8565b60405160200161135f929190613232565b60405160208183030381529060405290505b80915050919050565b6060600360405160200161138e91906132aa565b604051602081830303815290604052905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611438611970565b73ffffffffffffffffffffffffffffffffffffffff16611456610fab565b73ffffffffffffffffffffffffffffffffffffffff16146114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390612b63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190613315565b60405180910390fd5b61152381611a7e565b50565b5f8073ffffffffffffffffffffffffffffffffffffffff1660045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160065f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115fe83610cd1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f61164e82611526565b61168d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116849061337d565b60405180910390fd5b5f61169783610cd1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061170657508373ffffffffffffffffffffffffffffffffffffffff166116ee84610805565b73ffffffffffffffffffffffffffffffffffffffff16145b80611717575061171681856113a2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661174082610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d906133e5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb9061344d565b60405180910390fd5b61180f838383611d11565b6118195f8261158e565b600160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611866919061346b565b92505081905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546118ba9190612f93565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f33905090565b5f61198182610cd1565b905061198e815f84611d11565b6119985f8361158e565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119e5919061346b565b9250508190555060045f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b58828260405180602001604052805f815250611d16565b5050565b611b67848484611720565b611b7384848484611d70565b611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906134e8565b60405180910390fd5b50505050565b60605f8203611bfe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d0c565b5f8290505f5b5f8214611c2d578080611c1690613506565b915050600a82611c26919061357a565b9150611c04565b5f8167ffffffffffffffff811115611c4857611c476124bb565b5b6040519080825280601f01601f191660200182016040528015611c7a5781602001600182028036833780820191505090505b5090505b5f8514611d0557600182611c92919061346b565b9150600a85611ca191906135aa565b6030611cad9190612f93565b60f81b818381518110611cc357611cc2612fc6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611cfe919061357a565b9450611c7e565b8093505050505b919050565b505050565b611d208383611eeb565b611d2c5f848484611d70565b611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d62906134e8565b60405180910390fd5b505050565b5f611d908473ffffffffffffffffffffffffffffffffffffffff166120af565b15611ede578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611dd4949392919061362c565b6020604051808303815f875af1925050508015611e0f57506040513d601f19601f82011682018060405250810190611e0c919061368a565b60015b611e8e573d805f8114611e3d576040519150601f19603f3d011682016040523d82523d5f602084013e611e42565b606091505b505f815103611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d906134e8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611ee3565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f50906136ff565b60405180910390fd5b611f6281611526565b15611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990613767565b60405180910390fd5b611fad5f8383611d11565b600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611ffa9190612f93565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612105816120d1565b811461210f575f80fd5b50565b5f81359050612120816120fc565b92915050565b5f6020828403121561213b5761213a6120c9565b5b5f61214884828501612112565b91505092915050565b5f8115159050919050565b61216581612151565b82525050565b5f60208201905061217e5f83018461215c565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6121c682612184565b6121d0818561218e565b93506121e081856020860161219e565b6121e9816121ac565b840191505092915050565b5f6020820190508181035f83015261220c81846121bc565b905092915050565b5f819050919050565b61222681612214565b8114612230575f80fd5b50565b5f813590506122418161221d565b92915050565b5f6020828403121561225c5761225b6120c9565b5b5f61226984828501612233565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61229b82612272565b9050919050565b6122ab81612291565b82525050565b5f6020820190506122c45f8301846122a2565b92915050565b6122d381612291565b81146122dd575f80fd5b50565b5f813590506122ee816122ca565b92915050565b5f806040838503121561230a576123096120c9565b5b5f612317858286016122e0565b925050602061232885828601612233565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261235357612352612332565b5b8235905067ffffffffffffffff8111156123705761236f612336565b5b60208301915083600182028301111561238c5761238b61233a565b5b9250929050565b5f805f805f608086880312156123ac576123ab6120c9565b5b5f6123b9888289016122e0565b95505060206123ca888289016122e0565b94505060406123db88828901612233565b935050606086013567ffffffffffffffff8111156123fc576123fb6120cd565b5b6124088882890161233e565b92509250509295509295909350565b612420816120d1565b82525050565b5f6020820190506124395f830184612417565b92915050565b61244881612214565b82525050565b5f6020820190506124615f83018461243f565b92915050565b5f805f6060848603121561247e5761247d6120c9565b5b5f61248b868287016122e0565b935050602061249c868287016122e0565b92505060406124ad86828701612233565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124f1826121ac565b810181811067ffffffffffffffff821117156125105761250f6124bb565b5b80604052505050565b5f6125226120c0565b905061252e82826124e8565b919050565b5f67ffffffffffffffff82111561254d5761254c6124bb565b5b612556826121ac565b9050602081019050919050565b828183375f83830152505050565b5f61258361257e84612533565b612519565b90508281526020810184848401111561259f5761259e6124b7565b5b6125aa848285612563565b509392505050565b5f82601f8301126125c6576125c5612332565b5b81356125d6848260208601612571565b91505092915050565b5f602082840312156125f4576125f36120c9565b5b5f82013567ffffffffffffffff811115612611576126106120cd565b5b61261d848285016125b2565b91505092915050565b5f6020828403121561263b5761263a6120c9565b5b5f612648848285016122e0565b91505092915050565b5f67ffffffffffffffff82111561266b5761266a6124bb565b5b602082029050602081019050919050565b5f61268e61268984612651565b612519565b905080838252602082019050602084028301858111156126b1576126b061233a565b5b835b818110156126da57806126c688826122e0565b8452602084019350506020810190506126b3565b5050509392505050565b5f82601f8301126126f8576126f7612332565b5b813561270884826020860161267c565b91505092915050565b5f60208284031215612726576127256120c9565b5b5f82013567ffffffffffffffff811115612743576127426120cd565b5b61274f848285016126e4565b91505092915050565b61276181612151565b811461276b575f80fd5b50565b5f8135905061277c81612758565b92915050565b5f8060408385031215612798576127976120c9565b5b5f6127a5858286016122e0565b92505060206127b68582860161276e565b9150509250929050565b5f67ffffffffffffffff8211156127da576127d96124bb565b5b6127e3826121ac565b9050602081019050919050565b5f6128026127fd846127c0565b612519565b90508281526020810184848401111561281e5761281d6124b7565b5b612829848285612563565b509392505050565b5f82601f83011261284557612844612332565b5b81356128558482602086016127f0565b91505092915050565b5f805f8060808587031215612876576128756120c9565b5b5f612883878288016122e0565b9450506020612894878288016122e0565b93505060406128a587828801612233565b925050606085013567ffffffffffffffff8111156128c6576128c56120cd565b5b6128d287828801612831565b91505092959194509250565b5f80604083850312156128f4576128f36120c9565b5b5f612901858286016122e0565b9250506020612912858286016122e0565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061296057607f821691505b6020821081036129735761297261291c565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e5f82015250565b5f6129ad60208361218e565b91506129b882612979565b602082019050919050565b5f6020820190508181035f8301526129da816129a1565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e657200005f82015250565b5f612a15601e8361218e565b9150612a20826129e1565b602082019050919050565b5f6020820190508181035f830152612a4281612a09565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f766564005f82015250565b5f612a7d601f8361218e565b9150612a8882612a49565b602082019050919050565b5f6020820190508181035f830152612aaa81612a71565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f766564000000005f82015250565b5f612ae5601c8361218e565b9150612af082612ab1565b602082019050919050565b5f6020820190508181035f830152612b1281612ad9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b4d60208361218e565b9150612b5882612b19565b602082019050919050565b5f6020820190508181035f830152612b7a81612b41565b9050919050565b5f81905092915050565b50565b5f612b995f83612b81565b9150612ba482612b8b565b5f82019050919050565b5f612bb882612b8e565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c00000000000000005f82015250565b5f612bf660188361218e565b9150612c0182612bc2565b602082019050919050565b5f6020820190508181035f830152612c2381612bea565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612c867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c4b565b612c908683612c4b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612ccb612cc6612cc184612214565b612ca8565b612214565b9050919050565b5f819050919050565b612ce483612cb1565b612cf8612cf082612cd2565b848454612c57565b825550505050565b5f90565b612d0c612d00565b612d17818484612cdb565b505050565b5b81811015612d3a57612d2f5f82612d04565b600181019050612d1d565b5050565b601f821115612d7f57612d5081612c2a565b612d5984612c3c565b81016020851015612d68578190505b612d7c612d7485612c3c565b830182612d1c565b50505b505050565b5f82821c905092915050565b5f612d9f5f1984600802612d84565b1980831691505092915050565b5f612db78383612d90565b9150826002028217905092915050565b612dd082612184565b67ffffffffffffffff811115612de957612de86124bb565b5b612df38254612949565b612dfe828285612d3e565b5f60209050601f831160018114612e2f575f8415612e1d578287015190505b612e278582612dac565b865550612e8e565b601f198416612e3d86612c2a565b5f5b82811015612e6457848901518255600182019150602085019450602081019050612e3f565b86831015612e815784890151612e7d601f891682612d90565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e00005f82015250565b5f612eca601e8361218e565b9150612ed582612e96565b602082019050919050565b5f6020820190508181035f830152612ef781612ebe565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f20616464726573735f82015250565b5f612f3260208361218e565b9150612f3d82612efe565b602082019050919050565b5f6020820190508181035f830152612f5f81612f26565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f9d82612214565b9150612fa883612214565b9250828201905080821115612fc057612fbf612f66565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f61302760198361218e565b915061303282612ff3565b602082019050919050565b5f6020820190508181035f8301526130548161301b565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e0000005f82015250565b5f61308f601d8361218e565b915061309a8261305b565b602082019050919050565b5f6020820190508181035f8301526130bc81613083565b9050919050565b5f81905092915050565b5f81546130d981612949565b6130e381866130c3565b9450600182165f81146130fd576001811461311257613144565b60ff1983168652811515820286019350613144565b61311b85612c2a565b5f5b8381101561313c5781548189015260018201915060208101905061311d565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e00000000000000000000000000000000000000005f82015250565b5f613181600c836130c3565b915061318c8261314d565b600c82019050919050565b5f6131a282846130cd565b91506131ad82613175565b915081905092915050565b5f6131c282612184565b6131cc81856130c3565b93506131dc81856020860161219e565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f61321c6005836130c3565b9150613227826131e8565b600582019050919050565b5f61323d82856130cd565b915061324982846131b8565b915061325482613210565b91508190509392505050565b7f636f6e74726163742e6a736f6e000000000000000000000000000000000000005f82015250565b5f613294600d836130c3565b915061329f82613260565b600d82019050919050565b5f6132b582846130cd565b91506132c082613288565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320307820616464726573735f82015250565b5f6132ff60208361218e565b915061330a826132cb565b602082019050919050565b5f6020820190508181035f83015261332c816132f3565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e5f82015250565b5f61336760208361218e565b915061337282613333565b602082019050919050565b5f6020820190508181035f8301526133948161335b565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e6564000000005f82015250565b5f6133cf601c8361218e565b91506133da8261339b565b602082019050919050565b5f6020820190508181035f8301526133fc816133c3565b9050919050565b7f4552433732313a207478667220746f20307830206164647265737300000000005f82015250565b5f613437601b8361218e565b915061344282613403565b602082019050919050565b5f6020820190508181035f8301526134648161342b565b9050919050565b5f61347582612214565b915061348083612214565b925082820390508181111561349857613497612f66565b5b92915050565b7f7478667220746f206e6f6e2045524337323152656369657665720000000000005f82015250565b5f6134d2601a8361218e565b91506134dd8261349e565b602082019050919050565b5f6020820190508181035f8301526134ff816134c6565b9050919050565b5f61351082612214565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354257613541612f66565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61358482612214565b915061358f83612214565b92508261359f5761359e61354d565b5b828204905092915050565b5f6135b482612214565b91506135bf83612214565b9250826135cf576135ce61354d565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6135fe826135da565b61360881856135e4565b935061361881856020860161219e565b613621816121ac565b840191505092915050565b5f60808201905061363f5f8301876122a2565b61364c60208301866122a2565b613659604083018561243f565b818103606083015261366b81846135f4565b905095945050505050565b5f81519050613684816120fc565b92915050565b5f6020828403121561369f5761369e6120c9565b5b5f6136ac84828501613676565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f6136e960208361218e565b91506136f4826136b5565b602082019050919050565b5f6020820190508181035f830152613716816136dd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f613751601c8361218e565b915061375c8261371d565b602082019050919050565b5f6020820190508181035f83015261377e81613745565b905091905056fea26469706673582212200aa857174deeba18f2440eb97f4d774a9f339552dfcfa97983a4262e019308c064736f6c634300081a003368747470733a2f2f646f796f756d6f6f73652e636f6d2f6f67626162796d6f6f73652f6d657461646174612f

Deployed Bytecode

0x608060405260043610610184575f3560e01c80636352211e116100d0578063a22cb46511610089578063c87b56dd11610063578063c87b56dd14610523578063e8a3d4851461055f578063e985e9c514610589578063f2fde38b146105c55761018b565b8063a22cb465146104bd578063b5b3e214146104e5578063b88d4fde146104fb5761018b565b80636352211e146103b357806370a08231146103ef578063715018a61461042b578063729ad39e146104415780638da5cb5b1461046957806395d89b41146104935761018b565b806323b872dd1161013d57806342842e0e1161011757806342842e0e1461031157806342966c681461033957806349a772b51461036157806355f804b31461038b5761018b565b806323b872dd146102bd5780633ba5939d146102e55780633ccfd60b146102fb5761018b565b806301ffc9a71461018d57806306fdde03146101c9578063081812fc146101f3578063095ea7b31461022f578063150b7a021461025757806318160ddd146102935761018b565b3661018b57005b005b348015610198575f80fd5b506101b360048036038101906101ae9190612126565b6105ed565b6040516101c0919061216b565b60405180910390f35b3480156101d4575f80fd5b506101dd610775565b6040516101ea91906121f4565b60405180910390f35b3480156101fe575f80fd5b5061021960048036038101906102149190612247565b610805565b60405161022691906122b1565b60405180910390f35b34801561023a575f80fd5b50610255600480360381019061025091906122f4565b610886565b005b348015610262575f80fd5b5061027d60048036038101906102789190612393565b61098e565b60405161028a9190612426565b60405180910390f35b34801561029e575f80fd5b506102a76109a2565b6040516102b4919061244e565b60405180910390f35b3480156102c8575f80fd5b506102e360048036038101906102de9190612467565b6109ab565b005b3480156102f0575f80fd5b506102f9610a04565b005b348015610306575f80fd5b5061030f610a9b565b005b34801561031c575f80fd5b5061033760048036038101906103329190612467565b610bcb565b005b348015610344575f80fd5b5061035f600480360381019061035a9190612247565b610bea565b005b34801561036c575f80fd5b50610375610c3c565b604051610382919061244e565b60405180910390f35b348015610396575f80fd5b506103b160048036038101906103ac91906125df565b610c42565b005b3480156103be575f80fd5b506103d960048036038101906103d49190612247565b610cd1565b6040516103e691906122b1565b60405180910390f35b3480156103fa575f80fd5b5061041560048036038101906104109190612626565b610d7d565b604051610422919061244e565b60405180910390f35b348015610436575f80fd5b5061043f610e31565b005b34801561044c575f80fd5b5061046760048036038101906104629190612711565b610eb8565b005b348015610474575f80fd5b5061047d610fab565b60405161048a91906122b1565b60405180910390f35b34801561049e575f80fd5b506104a7610fd2565b6040516104b491906121f4565b60405180910390f35b3480156104c8575f80fd5b506104e360048036038101906104de9190612782565b611062565b005b3480156104f0575f80fd5b506104f96111c8565b005b348015610506575f80fd5b50610521600480360381019061051c919061285e565b611260565b005b34801561052e575f80fd5b5061054960048036038101906105449190612247565b6112bb565b60405161055691906121f4565b60405180910390f35b34801561056a575f80fd5b5061057361137a565b60405161058091906121f4565b60405180910390f35b348015610594575f80fd5b506105af60048036038101906105aa91906128de565b6113a2565b6040516105bc919061216b565b60405180910390f35b3480156105d0575f80fd5b506105eb60048036038101906105e69190612626565b611430565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061071f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061076e575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606001805461078490612949565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090612949565b80156107fb5780601f106107d2576101008083540402835291602001916107fb565b820191905f5260205f20905b8154815290600101906020018083116107de57829003601f168201915b5050505050905090565b5f61080f82611526565b61084e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610845906129c3565b60405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f61089082610cd1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790612a2b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610940575061093f81336113a2565b5b61097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097690612a93565b60405180910390fd5b610989838361158e565b505050565b5f63150b7a0260e01b905095945050505050565b5f600954905090565b6109b53382611644565b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90612afb565b60405180910390fd5b6109ff838383611720565b505050565b610a0c611970565b73ffffffffffffffffffffffffffffffffffffffff16610a2a610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790612b63565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b610aa3611970565b73ffffffffffffffffffffffffffffffffffffffff16610ac1610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0e90612b63565b60405180910390fd5b5f610b20610fab565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b4390612bae565b5f6040518083038185875af1925050503d805f8114610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b50508091505080610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612c0c565b60405180910390fd5b50565b610be583838360405180602001604052805f815250611260565b505050565b610bf381610cd1565b73ffffffffffffffffffffffffffffffffffffffff16610c11611970565b73ffffffffffffffffffffffffffffffffffffffff1614610c30575f80fd5b610c3981611977565b50565b60095481565b610c4a611970565b73ffffffffffffffffffffffffffffffffffffffff16610c68610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590612b63565b60405180910390fd5b8060039081610ccd9190612dc7565b5050565b5f8060045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90612ee0565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390612f48565b60405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e39611970565b73ffffffffffffffffffffffffffffffffffffffff16610e57610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612b63565b60405180910390fd5b610eb65f611a7e565b565b610ec0611970565b73ffffffffffffffffffffffffffffffffffffffff16610ede610fab565b73ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b90612b63565b60405180910390fd5b5f6001600954610f449190612f93565b90505f5b8251811015610fa657610f80838281518110610f6757610f66612fc6565b5b60200260200101518284610f7b9190612f93565b611b3f565b600160095f828254610f929190612f93565b925050819055508080600101915050610f48565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610fe190612949565b80601f016020809104026020016040519081016040528092919081815260200182805461100d90612949565b80156110585780601f1061102f57610100808354040283529160200191611058565b820191905f5260205f20905b81548152906001019060200180831161103b57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c79061303d565b60405180910390fd5b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111bc919061216b565b60405180910390a35050565b6111d0611970565b73ffffffffffffffffffffffffffffffffffffffff166111ee610fab565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612b63565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b61126a3383611644565b6112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090612afb565b60405180910390fd5b6112b584848484611b5c565b50505050565b60606112c682611526565b611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc906130a5565b60405180910390fd5b606060085f9054906101000a900460ff161561134357600360405160200161132d9190613197565b6040516020818303038152906040529050611371565b600361134e84611bb8565b60405160200161135f929190613232565b60405160208183030381529060405290505b80915050919050565b6060600360405160200161138e91906132aa565b604051602081830303815290604052905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611438611970565b73ffffffffffffffffffffffffffffffffffffffff16611456610fab565b73ffffffffffffffffffffffffffffffffffffffff16146114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390612b63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190613315565b60405180910390fd5b61152381611a7e565b50565b5f8073ffffffffffffffffffffffffffffffffffffffff1660045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160065f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115fe83610cd1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f61164e82611526565b61168d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116849061337d565b60405180910390fd5b5f61169783610cd1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061170657508373ffffffffffffffffffffffffffffffffffffffff166116ee84610805565b73ffffffffffffffffffffffffffffffffffffffff16145b80611717575061171681856113a2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661174082610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d906133e5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb9061344d565b60405180910390fd5b61180f838383611d11565b6118195f8261158e565b600160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611866919061346b565b92505081905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546118ba9190612f93565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f33905090565b5f61198182610cd1565b905061198e815f84611d11565b6119985f8361158e565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119e5919061346b565b9250508190555060045f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b58828260405180602001604052805f815250611d16565b5050565b611b67848484611720565b611b7384848484611d70565b611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906134e8565b60405180910390fd5b50505050565b60605f8203611bfe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d0c565b5f8290505f5b5f8214611c2d578080611c1690613506565b915050600a82611c26919061357a565b9150611c04565b5f8167ffffffffffffffff811115611c4857611c476124bb565b5b6040519080825280601f01601f191660200182016040528015611c7a5781602001600182028036833780820191505090505b5090505b5f8514611d0557600182611c92919061346b565b9150600a85611ca191906135aa565b6030611cad9190612f93565b60f81b818381518110611cc357611cc2612fc6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611cfe919061357a565b9450611c7e565b8093505050505b919050565b505050565b611d208383611eeb565b611d2c5f848484611d70565b611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d62906134e8565b60405180910390fd5b505050565b5f611d908473ffffffffffffffffffffffffffffffffffffffff166120af565b15611ede578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611dd4949392919061362c565b6020604051808303815f875af1925050508015611e0f57506040513d601f19601f82011682018060405250810190611e0c919061368a565b60015b611e8e573d805f8114611e3d576040519150601f19603f3d011682016040523d82523d5f602084013e611e42565b606091505b505f815103611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d906134e8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611ee3565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f50906136ff565b60405180910390fd5b611f6281611526565b15611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990613767565b60405180910390fd5b611fad5f8383611d11565b600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611ffa9190612f93565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612105816120d1565b811461210f575f80fd5b50565b5f81359050612120816120fc565b92915050565b5f6020828403121561213b5761213a6120c9565b5b5f61214884828501612112565b91505092915050565b5f8115159050919050565b61216581612151565b82525050565b5f60208201905061217e5f83018461215c565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6121c682612184565b6121d0818561218e565b93506121e081856020860161219e565b6121e9816121ac565b840191505092915050565b5f6020820190508181035f83015261220c81846121bc565b905092915050565b5f819050919050565b61222681612214565b8114612230575f80fd5b50565b5f813590506122418161221d565b92915050565b5f6020828403121561225c5761225b6120c9565b5b5f61226984828501612233565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61229b82612272565b9050919050565b6122ab81612291565b82525050565b5f6020820190506122c45f8301846122a2565b92915050565b6122d381612291565b81146122dd575f80fd5b50565b5f813590506122ee816122ca565b92915050565b5f806040838503121561230a576123096120c9565b5b5f612317858286016122e0565b925050602061232885828601612233565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261235357612352612332565b5b8235905067ffffffffffffffff8111156123705761236f612336565b5b60208301915083600182028301111561238c5761238b61233a565b5b9250929050565b5f805f805f608086880312156123ac576123ab6120c9565b5b5f6123b9888289016122e0565b95505060206123ca888289016122e0565b94505060406123db88828901612233565b935050606086013567ffffffffffffffff8111156123fc576123fb6120cd565b5b6124088882890161233e565b92509250509295509295909350565b612420816120d1565b82525050565b5f6020820190506124395f830184612417565b92915050565b61244881612214565b82525050565b5f6020820190506124615f83018461243f565b92915050565b5f805f6060848603121561247e5761247d6120c9565b5b5f61248b868287016122e0565b935050602061249c868287016122e0565b92505060406124ad86828701612233565b9150509250925092565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6124f1826121ac565b810181811067ffffffffffffffff821117156125105761250f6124bb565b5b80604052505050565b5f6125226120c0565b905061252e82826124e8565b919050565b5f67ffffffffffffffff82111561254d5761254c6124bb565b5b612556826121ac565b9050602081019050919050565b828183375f83830152505050565b5f61258361257e84612533565b612519565b90508281526020810184848401111561259f5761259e6124b7565b5b6125aa848285612563565b509392505050565b5f82601f8301126125c6576125c5612332565b5b81356125d6848260208601612571565b91505092915050565b5f602082840312156125f4576125f36120c9565b5b5f82013567ffffffffffffffff811115612611576126106120cd565b5b61261d848285016125b2565b91505092915050565b5f6020828403121561263b5761263a6120c9565b5b5f612648848285016122e0565b91505092915050565b5f67ffffffffffffffff82111561266b5761266a6124bb565b5b602082029050602081019050919050565b5f61268e61268984612651565b612519565b905080838252602082019050602084028301858111156126b1576126b061233a565b5b835b818110156126da57806126c688826122e0565b8452602084019350506020810190506126b3565b5050509392505050565b5f82601f8301126126f8576126f7612332565b5b813561270884826020860161267c565b91505092915050565b5f60208284031215612726576127256120c9565b5b5f82013567ffffffffffffffff811115612743576127426120cd565b5b61274f848285016126e4565b91505092915050565b61276181612151565b811461276b575f80fd5b50565b5f8135905061277c81612758565b92915050565b5f8060408385031215612798576127976120c9565b5b5f6127a5858286016122e0565b92505060206127b68582860161276e565b9150509250929050565b5f67ffffffffffffffff8211156127da576127d96124bb565b5b6127e3826121ac565b9050602081019050919050565b5f6128026127fd846127c0565b612519565b90508281526020810184848401111561281e5761281d6124b7565b5b612829848285612563565b509392505050565b5f82601f83011261284557612844612332565b5b81356128558482602086016127f0565b91505092915050565b5f805f8060808587031215612876576128756120c9565b5b5f612883878288016122e0565b9450506020612894878288016122e0565b93505060406128a587828801612233565b925050606085013567ffffffffffffffff8111156128c6576128c56120cd565b5b6128d287828801612831565b91505092959194509250565b5f80604083850312156128f4576128f36120c9565b5b5f612901858286016122e0565b9250506020612912858286016122e0565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061296057607f821691505b6020821081036129735761297261291c565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e5f82015250565b5f6129ad60208361218e565b91506129b882612979565b602082019050919050565b5f6020820190508181035f8301526129da816129a1565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e657200005f82015250565b5f612a15601e8361218e565b9150612a20826129e1565b602082019050919050565b5f6020820190508181035f830152612a4281612a09565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f766564005f82015250565b5f612a7d601f8361218e565b9150612a8882612a49565b602082019050919050565b5f6020820190508181035f830152612aaa81612a71565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f766564000000005f82015250565b5f612ae5601c8361218e565b9150612af082612ab1565b602082019050919050565b5f6020820190508181035f830152612b1281612ad9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b4d60208361218e565b9150612b5882612b19565b602082019050919050565b5f6020820190508181035f830152612b7a81612b41565b9050919050565b5f81905092915050565b50565b5f612b995f83612b81565b9150612ba482612b8b565b5f82019050919050565b5f612bb882612b8e565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c00000000000000005f82015250565b5f612bf660188361218e565b9150612c0182612bc2565b602082019050919050565b5f6020820190508181035f830152612c2381612bea565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612c867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c4b565b612c908683612c4b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612ccb612cc6612cc184612214565b612ca8565b612214565b9050919050565b5f819050919050565b612ce483612cb1565b612cf8612cf082612cd2565b848454612c57565b825550505050565b5f90565b612d0c612d00565b612d17818484612cdb565b505050565b5b81811015612d3a57612d2f5f82612d04565b600181019050612d1d565b5050565b601f821115612d7f57612d5081612c2a565b612d5984612c3c565b81016020851015612d68578190505b612d7c612d7485612c3c565b830182612d1c565b50505b505050565b5f82821c905092915050565b5f612d9f5f1984600802612d84565b1980831691505092915050565b5f612db78383612d90565b9150826002028217905092915050565b612dd082612184565b67ffffffffffffffff811115612de957612de86124bb565b5b612df38254612949565b612dfe828285612d3e565b5f60209050601f831160018114612e2f575f8415612e1d578287015190505b612e278582612dac565b865550612e8e565b601f198416612e3d86612c2a565b5f5b82811015612e6457848901518255600182019150602085019450602081019050612e3f565b86831015612e815784890151612e7d601f891682612d90565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e00005f82015250565b5f612eca601e8361218e565b9150612ed582612e96565b602082019050919050565b5f6020820190508181035f830152612ef781612ebe565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f20616464726573735f82015250565b5f612f3260208361218e565b9150612f3d82612efe565b602082019050919050565b5f6020820190508181035f830152612f5f81612f26565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f9d82612214565b9150612fa883612214565b9250828201905080821115612fc057612fbf612f66565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f61302760198361218e565b915061303282612ff3565b602082019050919050565b5f6020820190508181035f8301526130548161301b565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e0000005f82015250565b5f61308f601d8361218e565b915061309a8261305b565b602082019050919050565b5f6020820190508181035f8301526130bc81613083565b9050919050565b5f81905092915050565b5f81546130d981612949565b6130e381866130c3565b9450600182165f81146130fd576001811461311257613144565b60ff1983168652811515820286019350613144565b61311b85612c2a565b5f5b8381101561313c5781548189015260018201915060208101905061311d565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e00000000000000000000000000000000000000005f82015250565b5f613181600c836130c3565b915061318c8261314d565b600c82019050919050565b5f6131a282846130cd565b91506131ad82613175565b915081905092915050565b5f6131c282612184565b6131cc81856130c3565b93506131dc81856020860161219e565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f61321c6005836130c3565b9150613227826131e8565b600582019050919050565b5f61323d82856130cd565b915061324982846131b8565b915061325482613210565b91508190509392505050565b7f636f6e74726163742e6a736f6e000000000000000000000000000000000000005f82015250565b5f613294600d836130c3565b915061329f82613260565b600d82019050919050565b5f6132b582846130cd565b91506132c082613288565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320307820616464726573735f82015250565b5f6132ff60208361218e565b915061330a826132cb565b602082019050919050565b5f6020820190508181035f83015261332c816132f3565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e5f82015250565b5f61336760208361218e565b915061337282613333565b602082019050919050565b5f6020820190508181035f8301526133948161335b565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e6564000000005f82015250565b5f6133cf601c8361218e565b91506133da8261339b565b602082019050919050565b5f6020820190508181035f8301526133fc816133c3565b9050919050565b7f4552433732313a207478667220746f20307830206164647265737300000000005f82015250565b5f613437601b8361218e565b915061344282613403565b602082019050919050565b5f6020820190508181035f8301526134648161342b565b9050919050565b5f61347582612214565b915061348083612214565b925082820390508181111561349857613497612f66565b5b92915050565b7f7478667220746f206e6f6e2045524337323152656369657665720000000000005f82015250565b5f6134d2601a8361218e565b91506134dd8261349e565b602082019050919050565b5f6020820190508181035f8301526134ff816134c6565b9050919050565b5f61351082612214565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354257613541612f66565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61358482612214565b915061358f83612214565b92508261359f5761359e61354d565b5b828204905092915050565b5f6135b482612214565b91506135bf83612214565b9250826135cf576135ce61354d565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6135fe826135da565b61360881856135e4565b935061361881856020860161219e565b613621816121ac565b840191505092915050565b5f60808201905061363f5f8301876122a2565b61364c60208301866122a2565b613659604083018561243f565b818103606083015261366b81846135f4565b905095945050505050565b5f81519050613684816120fc565b92915050565b5f6020828403121561369f5761369e6120c9565b5b5f6136ac84828501613676565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f6136e960208361218e565b91506136f4826136b5565b602082019050919050565b5f6020820190508181035f830152613716816136dd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f613751601c8361218e565b915061375c8261371d565b602082019050919050565b5f6020820190508181035f83015261377e81613745565b905091905056fea26469706673582212200aa857174deeba18f2440eb97f4d774a9f339552dfcfa97983a4262e019308c064736f6c634300081a0033

Deployed Bytecode Sourcemap

16401:15571:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17633:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30789:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20433:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19995:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29733:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19072:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21303:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19300:81;;;;;;;;;;;;;:::i;:::-;;18076:196;;;;;;;;;;;;;:::i;:::-;;21688:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18622:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17197:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18969:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19705:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19445:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14590:94;;;;;;;;;;;;;:::i;:::-;;18284:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13939:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30930:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20712:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19210:78;;;;;;;;;;;;;:::i;:::-;;21944:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31105:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31663:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21072:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14839:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17633:361;17718:4;17758:25;17743:40;;;:11;:40;;;;:109;;;;17819:33;17804:48;;;:11;:48;;;;17743:109;:170;;;;17888:25;17873:40;;;:11;:40;;;;17743:170;:243;;;;17949:37;;;17934:52;;;:11;:52;;;;17743:243;17735:251;;17633:361;;;:::o;30789:84::-;30828:13;30860:5;30853:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30789:84;:::o;20433:207::-;20509:7;20537:16;20545:7;20537;:16::i;:::-;20529:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20608:15;:24;20624:7;20608:24;;;;;;;;;;;;;;;;;;;;;20601:31;;20433:207;;;:::o;19995:372::-;20076:13;20092:16;20100:7;20092;:16::i;:::-;20076:32;;20133:5;20127:11;;:2;:11;;;20119:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;20222:5;20208:19;;:10;:19;;;:58;;;;20231:35;20248:5;20255:10;20231:16;:35::i;:::-;20208:58;20186:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;20338:21;20347:2;20351:7;20338:8;:21::i;:::-;20065:302;19995:372;;:::o;29733:215::-;29850:6;29910:30;;;29903:37;;29733:215;;;;;;;:::o;19072:126::-;19118:7;19145:12;;19138:19;;19072:126;:::o;21303:314::-;21498:39;21517:10;21529:7;21498:18;:39::i;:::-;21490:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21581:28;21591:4;21597:2;21601:7;21581:9;:28::i;:::-;21303:314;;;:::o;19300:81::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19368:5:::1;19354:11;;:19;;;;;;;;;;;;;;;;;;19300:81::o:0;18076:196::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18126:12:::1;18163:7;:5;:7::i;:::-;:12;;18183:21;18163:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18149:60;;;;;18228:7;18220:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18115:157;18076:196::o:0;21688:185::-;21826:39;21843:4;21849:2;21853:7;21826:39;;;;;;;;;;;;:16;:39::i;:::-;21688:185;;;:::o;18622:125::-;18697:16;18705:7;18697;:16::i;:::-;18681:32;;:12;:10;:12::i;:::-;:32;;;18673:41;;;;;;18725:14;18731:7;18725:5;:14::i;:::-;18622:125;:::o;17197:27::-;;;;:::o;18969:95::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19050:6:::1;19039:8;:17;;;;;;:::i;:::-;;18969:95:::0;:::o;19705:228::-;19777:7;19797:13;19813:7;:16;19821:7;19813:16;;;;;;;;;;;;;;;;;;;;;19797:32;;19865:1;19848:19;;:5;:19;;;19840:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19920:5;19913:12;;;19705:228;;;:::o;19445:198::-;19517:7;19562:1;19545:19;;:5;:19;;;19537:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19619:9;:16;19629:5;19619:16;;;;;;;;;;;;;;;;19612:23;;19445:198;;;:::o;14590:94::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14655:21:::1;14673:1;14655:9;:21::i;:::-;14590:94::o:0;18284:267::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18353:21:::1;18392:1;18377:12;;:16;;;;:::i;:::-;18353:40;;18409:9;18404:140;18428:5;:12;18424:1;:16;18404:140;;;18462:38;18472:5;18478:1;18472:8;;;;;;;;:::i;:::-;;;;;;;;18498:1;18482:13;:17;;;;:::i;:::-;18462:9;:38::i;:::-;18531:1;18515:12;;:17;;;;;;;:::i;:::-;;;;;;;;18442:3;;;;;;;18404:140;;;;18342:209;18284:267:::0;:::o;13939:87::-;13985:7;14012:6;;;;;;;;;;;14005:13;;13939:87;:::o;30930:88::-;30971:13;31003:7;30996:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30930:88;:::o;20712:289::-;20827:10;20815:22;;:8;:22;;;20807:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20923:8;20880:18;:30;20899:10;20880:30;;;;;;;;;;;;;;;:40;20911:8;20880:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;20974:8;20947:46;;20962:10;20947:46;;;20984:8;20947:46;;;;;;:::i;:::-;;;;;;;;20712:289;;:::o;19210:78::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19276:4:::1;19262:11;;:18;;;;;;;;;;;;;;;;;;19210:78::o:0;21944:305::-;22119:39;22138:10;22150:7;22119:18;:39::i;:::-;22111:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22202:39;22216:4;22222:2;22226:7;22235:5;22202:13;:39::i;:::-;21944:305;;;;:::o;31105:546::-;31163:13;31196:16;31204:7;31196;:16::i;:::-;31188:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31257:22;31304:11;;;;;;;;;;;31300:308;;;31406:8;31389:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;31371:61;;31300:308;;;31558:8;31568:17;31577:7;31568:8;:17::i;:::-;31541:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31523:73;;31300:308;31635:8;31628:15;;;31105:546;;;:::o;31663:139::-;31707:13;31768:8;31751:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;31737:57;;31663:139;:::o;21072:164::-;21169:4;21193:18;:25;21212:5;21193:25;;;;;;;;;;;;;;;:35;21219:8;21193:35;;;;;;;;;;;;;;;;;;;;;;;;;21186:42;;21072:164;;;;:::o;14839:186::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14948:1:::1;14928:22;;:8;:22;;::::0;14920:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14998:19;15008:8;14998:9;:19::i;:::-;14839:186:::0;:::o;23735:127::-;23800:4;23852:1;23824:30;;:7;:16;23832:7;23824:16;;;;;;;;;;;;;;;;;;;;;:30;;;;23817:37;;23735:127;;;:::o;27636:167::-;27738:2;27711:15;:24;27727:7;27711:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27787:7;27783:2;27756:39;;27765:16;27773:7;27765;:16::i;:::-;27756:39;;;;;;;;;;;;27636:167;;:::o;24029:329::-;24122:4;24147:16;24155:7;24147;:16::i;:::-;24139:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24211:13;24227:16;24235:7;24227;:16::i;:::-;24211:32;;24273:5;24262:16;;:7;:16;;;:51;;;;24306:7;24282:31;;:20;24294:7;24282:11;:20::i;:::-;:31;;;24262:51;:87;;;;24317:32;24334:5;24341:7;24317:16;:32::i;:::-;24262:87;24254:96;;;24029:329;;;;:::o;26971:547::-;27123:4;27103:24;;:16;27111:7;27103;:16::i;:::-;:24;;;27095:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27193:1;27179:16;;:2;:16;;;27171:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27238:39;27259:4;27265:2;27269:7;27238:20;:39::i;:::-;27342:29;27359:1;27363:7;27342:8;:29::i;:::-;27403:1;27384:9;:15;27394:4;27384:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27432:1;27415:9;:13;27425:2;27415:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27463:2;27444:7;:16;27452:7;27444:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27502:7;27498:2;27483:27;;27492:4;27483:27;;;;;;;;;;;;26971:547;;;:::o;13322:98::-;13375:7;13402:10;13395:17;;13322:98;:::o;26281:353::-;26341:13;26357:16;26365:7;26357;:16::i;:::-;26341:32;;26386:48;26407:5;26422:1;26426:7;26386:20;:48::i;:::-;26475:29;26492:1;26496:7;26475:8;:29::i;:::-;26537:1;26517:9;:16;26527:5;26517:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;26556:7;:16;26564:7;26556:16;;;;;;;;;;;;26549:23;;;;;;;;;;;26618:7;26614:1;26590:36;;26599:5;26590:36;;;;;;;;;;;;26330:304;26281:353;:::o;15033:173::-;15089:16;15108:6;;;;;;;;;;;15089:25;;15134:8;15125:6;;:17;;;;;;;;;;;;;;;;;;15189:8;15158:40;;15179:8;15158:40;;;;;;;;;;;;15078:128;15033:173;:::o;24700:110::-;24776:26;24786:2;24790:7;24776:26;;;;;;;;;;;;:9;:26::i;:::-;24700:110;;:::o;23131:291::-;23288:28;23298:4;23304:2;23308:7;23288:9;:28::i;:::-;23335:48;23358:4;23364:2;23368:7;23377:5;23335:22;:48::i;:::-;23327:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23131:291;;;;:::o;15249:532::-;15305:13;15344:1;15335:5;:10;15331:53;;15362:10;;;;;;;;;;;;;;;;;;;;;15331:53;15394:12;15409:5;15394:20;;15425:14;15450:78;15465:1;15457:4;:9;15450:78;;15483:8;;;;;:::i;:::-;;;;15514:2;15506:10;;;;;:::i;:::-;;;15450:78;;;15538:19;15570:6;15560:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15538:39;;15588:154;15604:1;15595:5;:10;15588:154;;15632:1;15622:11;;;;;:::i;:::-;;;15699:2;15691:5;:10;;;;:::i;:::-;15678:2;:24;;;;:::i;:::-;15665:39;;15648:6;15655;15648:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15728:2;15719:11;;;;;:::i;:::-;;;15588:154;;;15766:6;15752:21;;;;;15249:532;;;;:::o;30520:126::-;;;;:::o;25037:297::-;25167:18;25173:2;25177:7;25167:5;:18::i;:::-;25218:54;25249:1;25253:2;25257:7;25266:5;25218:22;:54::i;:::-;25196:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;25037:297;;;:::o;28368:777::-;28523:4;28544:15;:2;:13;;;:15::i;:::-;28540:598;;;28596:2;28580:36;;;28617:10;28629:4;28635:7;28644:5;28580:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28576:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28841:1;28824:6;:13;:18;28820:248;;28867:36;;;;;;;;;;:::i;:::-;;;;;;;;28820:248;29018:6;29012:13;29003:6;28999:2;28995:15;28988:38;28576:507;28711:45;;;28701:55;;;:6;:55;;;;28694:62;;;;;28540:598;29122:4;29115:11;;28368:777;;;;;;;:::o;25670:382::-;25764:1;25750:16;;:2;:16;;;25742:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25823:16;25831:7;25823;:16::i;:::-;25822:17;25814:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25885:45;25914:1;25918:2;25922:7;25885:20;:45::i;:::-;25960:1;25943:9;:13;25953:2;25943:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25991:2;25972:7;:16;25980:7;25972:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26036:7;26032:2;26011:33;;26028:1;26011:33;;;;;;;;;;;;25670:382;;:::o;6243:387::-;6303:4;6511:12;6578:7;6566:20;6558:28;;6621:1;6614:4;:8;6607:15;;;6243:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:77::-;2790:7;2819:5;2808:16;;2753:77;;;:::o;2836:122::-;2909:24;2927:5;2909:24;:::i;:::-;2902:5;2899:35;2889:63;;2948:1;2945;2938:12;2889:63;2836:122;:::o;2964:139::-;3010:5;3048:6;3035:20;3026:29;;3064:33;3091:5;3064:33;:::i;:::-;2964:139;;;;:::o;3109:329::-;3168:6;3217:2;3205:9;3196:7;3192:23;3188:32;3185:119;;;3223:79;;:::i;:::-;3185:119;3343:1;3368:53;3413:7;3404:6;3393:9;3389:22;3368:53;:::i;:::-;3358:63;;3314:117;3109:329;;;;:::o;3444:126::-;3481:7;3521:42;3514:5;3510:54;3499:65;;3444:126;;;:::o;3576:96::-;3613:7;3642:24;3660:5;3642:24;:::i;:::-;3631:35;;3576:96;;;:::o;3678:118::-;3765:24;3783:5;3765:24;:::i;:::-;3760:3;3753:37;3678:118;;:::o;3802:222::-;3895:4;3933:2;3922:9;3918:18;3910:26;;3946:71;4014:1;4003:9;3999:17;3990:6;3946:71;:::i;:::-;3802:222;;;;:::o;4030:122::-;4103:24;4121:5;4103:24;:::i;:::-;4096:5;4093:35;4083:63;;4142:1;4139;4132:12;4083:63;4030:122;:::o;4158:139::-;4204:5;4242:6;4229:20;4220:29;;4258:33;4285:5;4258:33;:::i;:::-;4158:139;;;;:::o;4303:474::-;4371:6;4379;4428:2;4416:9;4407:7;4403:23;4399:32;4396:119;;;4434:79;;:::i;:::-;4396:119;4554:1;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4525:117;4681:2;4707:53;4752:7;4743:6;4732:9;4728:22;4707:53;:::i;:::-;4697:63;;4652:118;4303:474;;;;;:::o;4783:117::-;4892:1;4889;4882:12;4906:117;5015:1;5012;5005:12;5029:117;5138:1;5135;5128:12;5165:552;5222:8;5232:6;5282:3;5275:4;5267:6;5263:17;5259:27;5249:122;;5290:79;;:::i;:::-;5249:122;5403:6;5390:20;5380:30;;5433:18;5425:6;5422:30;5419:117;;;5455:79;;:::i;:::-;5419:117;5569:4;5561:6;5557:17;5545:29;;5623:3;5615:4;5607:6;5603:17;5593:8;5589:32;5586:41;5583:128;;;5630:79;;:::i;:::-;5583:128;5165:552;;;;;:::o;5723:963::-;5820:6;5828;5836;5844;5852;5901:3;5889:9;5880:7;5876:23;5872:33;5869:120;;;5908:79;;:::i;:::-;5869:120;6028:1;6053:53;6098:7;6089:6;6078:9;6074:22;6053:53;:::i;:::-;6043:63;;5999:117;6155:2;6181:53;6226:7;6217:6;6206:9;6202:22;6181:53;:::i;:::-;6171:63;;6126:118;6283:2;6309:53;6354:7;6345:6;6334:9;6330:22;6309:53;:::i;:::-;6299:63;;6254:118;6439:2;6428:9;6424:18;6411:32;6470:18;6462:6;6459:30;6456:117;;;6492:79;;:::i;:::-;6456:117;6605:64;6661:7;6652:6;6641:9;6637:22;6605:64;:::i;:::-;6587:82;;;;6382:297;5723:963;;;;;;;;:::o;6692:115::-;6777:23;6794:5;6777:23;:::i;:::-;6772:3;6765:36;6692:115;;:::o;6813:218::-;6904:4;6942:2;6931:9;6927:18;6919:26;;6955:69;7021:1;7010:9;7006:17;6997:6;6955:69;:::i;:::-;6813:218;;;;:::o;7037:118::-;7124:24;7142:5;7124:24;:::i;:::-;7119:3;7112:37;7037:118;;:::o;7161:222::-;7254:4;7292:2;7281:9;7277:18;7269:26;;7305:71;7373:1;7362:9;7358:17;7349:6;7305:71;:::i;:::-;7161:222;;;;:::o;7389:619::-;7466:6;7474;7482;7531:2;7519:9;7510:7;7506:23;7502:32;7499:119;;;7537:79;;:::i;:::-;7499:119;7657:1;7682:53;7727:7;7718:6;7707:9;7703:22;7682:53;:::i;:::-;7672:63;;7628:117;7784:2;7810:53;7855:7;7846:6;7835:9;7831:22;7810:53;:::i;:::-;7800:63;;7755:118;7912:2;7938:53;7983:7;7974:6;7963:9;7959:22;7938:53;:::i;:::-;7928:63;;7883:118;7389:619;;;;;:::o;8014:117::-;8123:1;8120;8113:12;8137:180;8185:77;8182:1;8175:88;8282:4;8279:1;8272:15;8306:4;8303:1;8296:15;8323:281;8406:27;8428:4;8406:27;:::i;:::-;8398:6;8394:40;8536:6;8524:10;8521:22;8500:18;8488:10;8485:34;8482:62;8479:88;;;8547:18;;:::i;:::-;8479:88;8587:10;8583:2;8576:22;8366:238;8323:281;;:::o;8610:129::-;8644:6;8671:20;;:::i;:::-;8661:30;;8700:33;8728:4;8720:6;8700:33;:::i;:::-;8610:129;;;:::o;8745:308::-;8807:4;8897:18;8889:6;8886:30;8883:56;;;8919:18;;:::i;:::-;8883:56;8957:29;8979:6;8957:29;:::i;:::-;8949:37;;9041:4;9035;9031:15;9023:23;;8745:308;;;:::o;9059:148::-;9157:6;9152:3;9147;9134:30;9198:1;9189:6;9184:3;9180:16;9173:27;9059:148;;;:::o;9213:425::-;9291:5;9316:66;9332:49;9374:6;9332:49;:::i;:::-;9316:66;:::i;:::-;9307:75;;9405:6;9398:5;9391:21;9443:4;9436:5;9432:16;9481:3;9472:6;9467:3;9463:16;9460:25;9457:112;;;9488:79;;:::i;:::-;9457:112;9578:54;9625:6;9620:3;9615;9578:54;:::i;:::-;9297:341;9213:425;;;;;:::o;9658:340::-;9714:5;9763:3;9756:4;9748:6;9744:17;9740:27;9730:122;;9771:79;;:::i;:::-;9730:122;9888:6;9875:20;9913:79;9988:3;9980:6;9973:4;9965:6;9961:17;9913:79;:::i;:::-;9904:88;;9720:278;9658:340;;;;:::o;10004:509::-;10073:6;10122:2;10110:9;10101:7;10097:23;10093:32;10090:119;;;10128:79;;:::i;:::-;10090:119;10276:1;10265:9;10261:17;10248:31;10306:18;10298:6;10295:30;10292:117;;;10328:79;;:::i;:::-;10292:117;10433:63;10488:7;10479:6;10468:9;10464:22;10433:63;:::i;:::-;10423:73;;10219:287;10004:509;;;;:::o;10519:329::-;10578:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:119;;;10633:79;;:::i;:::-;10595:119;10753:1;10778:53;10823:7;10814:6;10803:9;10799:22;10778:53;:::i;:::-;10768:63;;10724:117;10519:329;;;;:::o;10854:311::-;10931:4;11021:18;11013:6;11010:30;11007:56;;;11043:18;;:::i;:::-;11007:56;11093:4;11085:6;11081:17;11073:25;;11153:4;11147;11143:15;11135:23;;10854:311;;;:::o;11188:710::-;11284:5;11309:81;11325:64;11382:6;11325:64;:::i;:::-;11309:81;:::i;:::-;11300:90;;11410:5;11439:6;11432:5;11425:21;11473:4;11466:5;11462:16;11455:23;;11526:4;11518:6;11514:17;11506:6;11502:30;11555:3;11547:6;11544:15;11541:122;;;11574:79;;:::i;:::-;11541:122;11689:6;11672:220;11706:6;11701:3;11698:15;11672:220;;;11781:3;11810:37;11843:3;11831:10;11810:37;:::i;:::-;11805:3;11798:50;11877:4;11872:3;11868:14;11861:21;;11748:144;11732:4;11727:3;11723:14;11716:21;;11672:220;;;11676:21;11290:608;;11188:710;;;;;:::o;11921:370::-;11992:5;12041:3;12034:4;12026:6;12022:17;12018:27;12008:122;;12049:79;;:::i;:::-;12008:122;12166:6;12153:20;12191:94;12281:3;12273:6;12266:4;12258:6;12254:17;12191:94;:::i;:::-;12182:103;;11998:293;11921:370;;;;:::o;12297:539::-;12381:6;12430:2;12418:9;12409:7;12405:23;12401:32;12398:119;;;12436:79;;:::i;:::-;12398:119;12584:1;12573:9;12569:17;12556:31;12614:18;12606:6;12603:30;12600:117;;;12636:79;;:::i;:::-;12600:117;12741:78;12811:7;12802:6;12791:9;12787:22;12741:78;:::i;:::-;12731:88;;12527:302;12297:539;;;;:::o;12842:116::-;12912:21;12927:5;12912:21;:::i;:::-;12905:5;12902:32;12892:60;;12948:1;12945;12938:12;12892:60;12842:116;:::o;12964:133::-;13007:5;13045:6;13032:20;13023:29;;13061:30;13085:5;13061:30;:::i;:::-;12964:133;;;;:::o;13103:468::-;13168:6;13176;13225:2;13213:9;13204:7;13200:23;13196:32;13193:119;;;13231:79;;:::i;:::-;13193:119;13351:1;13376:53;13421:7;13412:6;13401:9;13397:22;13376:53;:::i;:::-;13366:63;;13322:117;13478:2;13504:50;13546:7;13537:6;13526:9;13522:22;13504:50;:::i;:::-;13494:60;;13449:115;13103:468;;;;;:::o;13577:307::-;13638:4;13728:18;13720:6;13717:30;13714:56;;;13750:18;;:::i;:::-;13714:56;13788:29;13810:6;13788:29;:::i;:::-;13780:37;;13872:4;13866;13862:15;13854:23;;13577:307;;;:::o;13890:423::-;13967:5;13992:65;14008:48;14049:6;14008:48;:::i;:::-;13992:65;:::i;:::-;13983:74;;14080:6;14073:5;14066:21;14118:4;14111:5;14107:16;14156:3;14147:6;14142:3;14138:16;14135:25;14132:112;;;14163:79;;:::i;:::-;14132:112;14253:54;14300:6;14295:3;14290;14253:54;:::i;:::-;13973:340;13890:423;;;;;:::o;14332:338::-;14387:5;14436:3;14429:4;14421:6;14417:17;14413:27;14403:122;;14444:79;;:::i;:::-;14403:122;14561:6;14548:20;14586:78;14660:3;14652:6;14645:4;14637:6;14633:17;14586:78;:::i;:::-;14577:87;;14393:277;14332:338;;;;:::o;14676:943::-;14771:6;14779;14787;14795;14844:3;14832:9;14823:7;14819:23;14815:33;14812:120;;;14851:79;;:::i;:::-;14812:120;14971:1;14996:53;15041:7;15032:6;15021:9;15017:22;14996:53;:::i;:::-;14986:63;;14942:117;15098:2;15124:53;15169:7;15160:6;15149:9;15145:22;15124:53;:::i;:::-;15114:63;;15069:118;15226:2;15252:53;15297:7;15288:6;15277:9;15273:22;15252:53;:::i;:::-;15242:63;;15197:118;15382:2;15371:9;15367:18;15354:32;15413:18;15405:6;15402:30;15399:117;;;15435:79;;:::i;:::-;15399:117;15540:62;15594:7;15585:6;15574:9;15570:22;15540:62;:::i;:::-;15530:72;;15325:287;14676:943;;;;;;;:::o;15625:474::-;15693:6;15701;15750:2;15738:9;15729:7;15725:23;15721:32;15718:119;;;15756:79;;:::i;:::-;15718:119;15876:1;15901:53;15946:7;15937:6;15926:9;15922:22;15901:53;:::i;:::-;15891:63;;15847:117;16003:2;16029:53;16074:7;16065:6;16054:9;16050:22;16029:53;:::i;:::-;16019:63;;15974:118;15625:474;;;;;:::o;16105:180::-;16153:77;16150:1;16143:88;16250:4;16247:1;16240:15;16274:4;16271:1;16264:15;16291:320;16335:6;16372:1;16366:4;16362:12;16352:22;;16419:1;16413:4;16409:12;16440:18;16430:81;;16496:4;16488:6;16484:17;16474:27;;16430:81;16558:2;16550:6;16547:14;16527:18;16524:38;16521:84;;16577:18;;:::i;:::-;16521:84;16342:269;16291:320;;;:::o;16617:182::-;16757:34;16753:1;16745:6;16741:14;16734:58;16617:182;:::o;16805:366::-;16947:3;16968:67;17032:2;17027:3;16968:67;:::i;:::-;16961:74;;17044:93;17133:3;17044:93;:::i;:::-;17162:2;17157:3;17153:12;17146:19;;16805:366;;;:::o;17177:419::-;17343:4;17381:2;17370:9;17366:18;17358:26;;17430:9;17424:4;17420:20;17416:1;17405:9;17401:17;17394:47;17458:131;17584:4;17458:131;:::i;:::-;17450:139;;17177:419;;;:::o;17602:180::-;17742:32;17738:1;17730:6;17726:14;17719:56;17602:180;:::o;17788:366::-;17930:3;17951:67;18015:2;18010:3;17951:67;:::i;:::-;17944:74;;18027:93;18116:3;18027:93;:::i;:::-;18145:2;18140:3;18136:12;18129:19;;17788:366;;;:::o;18160:419::-;18326:4;18364:2;18353:9;18349:18;18341:26;;18413:9;18407:4;18403:20;18399:1;18388:9;18384:17;18377:47;18441:131;18567:4;18441:131;:::i;:::-;18433:139;;18160:419;;;:::o;18585:181::-;18725:33;18721:1;18713:6;18709:14;18702:57;18585:181;:::o;18772:366::-;18914:3;18935:67;18999:2;18994:3;18935:67;:::i;:::-;18928:74;;19011:93;19100:3;19011:93;:::i;:::-;19129:2;19124:3;19120:12;19113:19;;18772:366;;;:::o;19144:419::-;19310:4;19348:2;19337:9;19333:18;19325:26;;19397:9;19391:4;19387:20;19383:1;19372:9;19368:17;19361:47;19425:131;19551:4;19425:131;:::i;:::-;19417:139;;19144:419;;;:::o;19569:178::-;19709:30;19705:1;19697:6;19693:14;19686:54;19569:178;:::o;19753:366::-;19895:3;19916:67;19980:2;19975:3;19916:67;:::i;:::-;19909:74;;19992:93;20081:3;19992:93;:::i;:::-;20110:2;20105:3;20101:12;20094:19;;19753:366;;;:::o;20125:419::-;20291:4;20329:2;20318:9;20314:18;20306:26;;20378:9;20372:4;20368:20;20364:1;20353:9;20349:17;20342:47;20406:131;20532:4;20406:131;:::i;:::-;20398:139;;20125:419;;;:::o;20550:182::-;20690:34;20686:1;20678:6;20674:14;20667:58;20550:182;:::o;20738:366::-;20880:3;20901:67;20965:2;20960:3;20901:67;:::i;:::-;20894:74;;20977:93;21066:3;20977:93;:::i;:::-;21095:2;21090:3;21086:12;21079:19;;20738:366;;;:::o;21110:419::-;21276:4;21314:2;21303:9;21299:18;21291:26;;21363:9;21357:4;21353:20;21349:1;21338:9;21334:17;21327:47;21391:131;21517:4;21391:131;:::i;:::-;21383:139;;21110:419;;;:::o;21535:147::-;21636:11;21673:3;21658:18;;21535:147;;;;:::o;21688:114::-;;:::o;21808:398::-;21967:3;21988:83;22069:1;22064:3;21988:83;:::i;:::-;21981:90;;22080:93;22169:3;22080:93;:::i;:::-;22198:1;22193:3;22189:11;22182:18;;21808:398;;;:::o;22212:379::-;22396:3;22418:147;22561:3;22418:147;:::i;:::-;22411:154;;22582:3;22575:10;;22212:379;;;:::o;22597:174::-;22737:26;22733:1;22725:6;22721:14;22714:50;22597:174;:::o;22777:366::-;22919:3;22940:67;23004:2;22999:3;22940:67;:::i;:::-;22933:74;;23016:93;23105:3;23016:93;:::i;:::-;23134:2;23129:3;23125:12;23118:19;;22777:366;;;:::o;23149:419::-;23315:4;23353:2;23342:9;23338:18;23330:26;;23402:9;23396:4;23392:20;23388:1;23377:9;23373:17;23366:47;23430:131;23556:4;23430:131;:::i;:::-;23422:139;;23149:419;;;:::o;23574:141::-;23623:4;23646:3;23638:11;;23669:3;23666:1;23659:14;23703:4;23700:1;23690:18;23682:26;;23574:141;;;:::o;23721:93::-;23758:6;23805:2;23800;23793:5;23789:14;23785:23;23775:33;;23721:93;;;:::o;23820:107::-;23864:8;23914:5;23908:4;23904:16;23883:37;;23820:107;;;;:::o;23933:393::-;24002:6;24052:1;24040:10;24036:18;24075:97;24105:66;24094:9;24075:97;:::i;:::-;24193:39;24223:8;24212:9;24193:39;:::i;:::-;24181:51;;24265:4;24261:9;24254:5;24250:21;24241:30;;24314:4;24304:8;24300:19;24293:5;24290:30;24280:40;;24009:317;;23933:393;;;;;:::o;24332:60::-;24360:3;24381:5;24374:12;;24332:60;;;:::o;24398:142::-;24448:9;24481:53;24499:34;24508:24;24526:5;24508:24;:::i;:::-;24499:34;:::i;:::-;24481:53;:::i;:::-;24468:66;;24398:142;;;:::o;24546:75::-;24589:3;24610:5;24603:12;;24546:75;;;:::o;24627:269::-;24737:39;24768:7;24737:39;:::i;:::-;24798:91;24847:41;24871:16;24847:41;:::i;:::-;24839:6;24832:4;24826:11;24798:91;:::i;:::-;24792:4;24785:105;24703:193;24627:269;;;:::o;24902:73::-;24947:3;24902:73;:::o;24981:189::-;25058:32;;:::i;:::-;25099:65;25157:6;25149;25143:4;25099:65;:::i;:::-;25034:136;24981:189;;:::o;25176:186::-;25236:120;25253:3;25246:5;25243:14;25236:120;;;25307:39;25344:1;25337:5;25307:39;:::i;:::-;25280:1;25273:5;25269:13;25260:22;;25236:120;;;25176:186;;:::o;25368:543::-;25469:2;25464:3;25461:11;25458:446;;;25503:38;25535:5;25503:38;:::i;:::-;25587:29;25605:10;25587:29;:::i;:::-;25577:8;25573:44;25770:2;25758:10;25755:18;25752:49;;;25791:8;25776:23;;25752:49;25814:80;25870:22;25888:3;25870:22;:::i;:::-;25860:8;25856:37;25843:11;25814:80;:::i;:::-;25473:431;;25458:446;25368:543;;;:::o;25917:117::-;25971:8;26021:5;26015:4;26011:16;25990:37;;25917:117;;;;:::o;26040:169::-;26084:6;26117:51;26165:1;26161:6;26153:5;26150:1;26146:13;26117:51;:::i;:::-;26113:56;26198:4;26192;26188:15;26178:25;;26091:118;26040:169;;;;:::o;26214:295::-;26290:4;26436:29;26461:3;26455:4;26436:29;:::i;:::-;26428:37;;26498:3;26495:1;26491:11;26485:4;26482:21;26474:29;;26214:295;;;;:::o;26514:1395::-;26631:37;26664:3;26631:37;:::i;:::-;26733:18;26725:6;26722:30;26719:56;;;26755:18;;:::i;:::-;26719:56;26799:38;26831:4;26825:11;26799:38;:::i;:::-;26884:67;26944:6;26936;26930:4;26884:67;:::i;:::-;26978:1;27002:4;26989:17;;27034:2;27026:6;27023:14;27051:1;27046:618;;;;27708:1;27725:6;27722:77;;;27774:9;27769:3;27765:19;27759:26;27750:35;;27722:77;27825:67;27885:6;27878:5;27825:67;:::i;:::-;27819:4;27812:81;27681:222;27016:887;;27046:618;27098:4;27094:9;27086:6;27082:22;27132:37;27164:4;27132:37;:::i;:::-;27191:1;27205:208;27219:7;27216:1;27213:14;27205:208;;;27298:9;27293:3;27289:19;27283:26;27275:6;27268:42;27349:1;27341:6;27337:14;27327:24;;27396:2;27385:9;27381:18;27368:31;;27242:4;27239:1;27235:12;27230:17;;27205:208;;;27441:6;27432:7;27429:19;27426:179;;;27499:9;27494:3;27490:19;27484:26;27542:48;27584:4;27576:6;27572:17;27561:9;27542:48;:::i;:::-;27534:6;27527:64;27449:156;27426:179;27651:1;27647;27639:6;27635:14;27631:22;27625:4;27618:36;27053:611;;;27016:887;;26606:1303;;;26514:1395;;:::o;27915:180::-;28055:32;28051:1;28043:6;28039:14;28032:56;27915:180;:::o;28101:366::-;28243:3;28264:67;28328:2;28323:3;28264:67;:::i;:::-;28257:74;;28340:93;28429:3;28340:93;:::i;:::-;28458:2;28453:3;28449:12;28442:19;;28101:366;;;:::o;28473:419::-;28639:4;28677:2;28666:9;28662:18;28654:26;;28726:9;28720:4;28716:20;28712:1;28701:9;28697:17;28690:47;28754:131;28880:4;28754:131;:::i;:::-;28746:139;;28473:419;;;:::o;28898:182::-;29038:34;29034:1;29026:6;29022:14;29015:58;28898:182;:::o;29086:366::-;29228:3;29249:67;29313:2;29308:3;29249:67;:::i;:::-;29242:74;;29325:93;29414:3;29325:93;:::i;:::-;29443:2;29438:3;29434:12;29427:19;;29086:366;;;:::o;29458:419::-;29624:4;29662:2;29651:9;29647:18;29639:26;;29711:9;29705:4;29701:20;29697:1;29686:9;29682:17;29675:47;29739:131;29865:4;29739:131;:::i;:::-;29731:139;;29458:419;;;:::o;29883:180::-;29931:77;29928:1;29921:88;30028:4;30025:1;30018:15;30052:4;30049:1;30042:15;30069:191;30109:3;30128:20;30146:1;30128:20;:::i;:::-;30123:25;;30162:20;30180:1;30162:20;:::i;:::-;30157:25;;30205:1;30202;30198:9;30191:16;;30226:3;30223:1;30220:10;30217:36;;;30233:18;;:::i;:::-;30217:36;30069:191;;;;:::o;30266:180::-;30314:77;30311:1;30304:88;30411:4;30408:1;30401:15;30435:4;30432:1;30425:15;30452:175;30592:27;30588:1;30580:6;30576:14;30569:51;30452:175;:::o;30633:366::-;30775:3;30796:67;30860:2;30855:3;30796:67;:::i;:::-;30789:74;;30872:93;30961:3;30872:93;:::i;:::-;30990:2;30985:3;30981:12;30974:19;;30633:366;;;:::o;31005:419::-;31171:4;31209:2;31198:9;31194:18;31186:26;;31258:9;31252:4;31248:20;31244:1;31233:9;31229:17;31222:47;31286:131;31412:4;31286:131;:::i;:::-;31278:139;;31005:419;;;:::o;31430:179::-;31570:31;31566:1;31558:6;31554:14;31547:55;31430:179;:::o;31615:366::-;31757:3;31778:67;31842:2;31837:3;31778:67;:::i;:::-;31771:74;;31854:93;31943:3;31854:93;:::i;:::-;31972:2;31967:3;31963:12;31956:19;;31615:366;;;:::o;31987:419::-;32153:4;32191:2;32180:9;32176:18;32168:26;;32240:9;32234:4;32230:20;32226:1;32215:9;32211:17;32204:47;32268:131;32394:4;32268:131;:::i;:::-;32260:139;;31987:419;;;:::o;32412:148::-;32514:11;32551:3;32536:18;;32412:148;;;;:::o;32590:874::-;32693:3;32730:5;32724:12;32759:36;32785:9;32759:36;:::i;:::-;32811:89;32893:6;32888:3;32811:89;:::i;:::-;32804:96;;32931:1;32920:9;32916:17;32947:1;32942:166;;;;33122:1;33117:341;;;;32909:549;;32942:166;33026:4;33022:9;33011;33007:25;33002:3;32995:38;33088:6;33081:14;33074:22;33066:6;33062:35;33057:3;33053:45;33046:52;;32942:166;;33117:341;33184:38;33216:5;33184:38;:::i;:::-;33244:1;33258:154;33272:6;33269:1;33266:13;33258:154;;;33346:7;33340:14;33336:1;33331:3;33327:11;33320:35;33396:1;33387:7;33383:15;33372:26;;33294:4;33291:1;33287:12;33282:17;;33258:154;;;33441:6;33436:3;33432:16;33425:23;;33124:334;;32909:549;;32697:767;;32590:874;;;;:::o;33470:162::-;33610:14;33606:1;33598:6;33594:14;33587:38;33470:162;:::o;33638:402::-;33798:3;33819:85;33901:2;33896:3;33819:85;:::i;:::-;33812:92;;33913:93;34002:3;33913:93;:::i;:::-;34031:2;34026:3;34022:12;34015:19;;33638:402;;;:::o;34046:535::-;34276:3;34298:92;34386:3;34377:6;34298:92;:::i;:::-;34291:99;;34407:148;34551:3;34407:148;:::i;:::-;34400:155;;34572:3;34565:10;;34046:535;;;;:::o;34587:390::-;34693:3;34721:39;34754:5;34721:39;:::i;:::-;34776:89;34858:6;34853:3;34776:89;:::i;:::-;34769:96;;34874:65;34932:6;34927:3;34920:4;34913:5;34909:16;34874:65;:::i;:::-;34964:6;34959:3;34955:16;34948:23;;34697:280;34587:390;;;;:::o;34983:155::-;35123:7;35119:1;35111:6;35107:14;35100:31;34983:155;:::o;35144:400::-;35304:3;35325:84;35407:1;35402:3;35325:84;:::i;:::-;35318:91;;35418:93;35507:3;35418:93;:::i;:::-;35536:1;35531:3;35527:11;35520:18;;35144:400;;;:::o;35550:695::-;35828:3;35850:92;35938:3;35929:6;35850:92;:::i;:::-;35843:99;;35959:95;36050:3;36041:6;35959:95;:::i;:::-;35952:102;;36071:148;36215:3;36071:148;:::i;:::-;36064:155;;36236:3;36229:10;;35550:695;;;;;:::o;36251:163::-;36391:15;36387:1;36379:6;36375:14;36368:39;36251:163;:::o;36420:402::-;36580:3;36601:85;36683:2;36678:3;36601:85;:::i;:::-;36594:92;;36695:93;36784:3;36695:93;:::i;:::-;36813:2;36808:3;36804:12;36797:19;;36420:402;;;:::o;36828:535::-;37058:3;37080:92;37168:3;37159:6;37080:92;:::i;:::-;37073:99;;37189:148;37333:3;37189:148;:::i;:::-;37182:155;;37354:3;37347:10;;36828:535;;;;:::o;37369:182::-;37509:34;37505:1;37497:6;37493:14;37486:58;37369:182;:::o;37557:366::-;37699:3;37720:67;37784:2;37779:3;37720:67;:::i;:::-;37713:74;;37796:93;37885:3;37796:93;:::i;:::-;37914:2;37909:3;37905:12;37898:19;;37557:366;;;:::o;37929:419::-;38095:4;38133:2;38122:9;38118:18;38110:26;;38182:9;38176:4;38172:20;38168:1;38157:9;38153:17;38146:47;38210:131;38336:4;38210:131;:::i;:::-;38202:139;;37929:419;;;:::o;38354:182::-;38494:34;38490:1;38482:6;38478:14;38471:58;38354:182;:::o;38542:366::-;38684:3;38705:67;38769:2;38764:3;38705:67;:::i;:::-;38698:74;;38781:93;38870:3;38781:93;:::i;:::-;38899:2;38894:3;38890:12;38883:19;;38542:366;;;:::o;38914:419::-;39080:4;39118:2;39107:9;39103:18;39095:26;;39167:9;39161:4;39157:20;39153:1;39142:9;39138:17;39131:47;39195:131;39321:4;39195:131;:::i;:::-;39187:139;;38914:419;;;:::o;39339:178::-;39479:30;39475:1;39467:6;39463:14;39456:54;39339:178;:::o;39523:366::-;39665:3;39686:67;39750:2;39745:3;39686:67;:::i;:::-;39679:74;;39762:93;39851:3;39762:93;:::i;:::-;39880:2;39875:3;39871:12;39864:19;;39523:366;;;:::o;39895:419::-;40061:4;40099:2;40088:9;40084:18;40076:26;;40148:9;40142:4;40138:20;40134:1;40123:9;40119:17;40112:47;40176:131;40302:4;40176:131;:::i;:::-;40168:139;;39895:419;;;:::o;40320:177::-;40460:29;40456:1;40448:6;40444:14;40437:53;40320:177;:::o;40503:366::-;40645:3;40666:67;40730:2;40725:3;40666:67;:::i;:::-;40659:74;;40742:93;40831:3;40742:93;:::i;:::-;40860:2;40855:3;40851:12;40844:19;;40503:366;;;:::o;40875:419::-;41041:4;41079:2;41068:9;41064:18;41056:26;;41128:9;41122:4;41118:20;41114:1;41103:9;41099:17;41092:47;41156:131;41282:4;41156:131;:::i;:::-;41148:139;;40875:419;;;:::o;41300:194::-;41340:4;41360:20;41378:1;41360:20;:::i;:::-;41355:25;;41394:20;41412:1;41394:20;:::i;:::-;41389:25;;41438:1;41435;41431:9;41423:17;;41462:1;41456:4;41453:11;41450:37;;;41467:18;;:::i;:::-;41450:37;41300:194;;;;:::o;41500:176::-;41640:28;41636:1;41628:6;41624:14;41617:52;41500:176;:::o;41682:366::-;41824:3;41845:67;41909:2;41904:3;41845:67;:::i;:::-;41838:74;;41921:93;42010:3;41921:93;:::i;:::-;42039:2;42034:3;42030:12;42023:19;;41682:366;;;:::o;42054:419::-;42220:4;42258:2;42247:9;42243:18;42235:26;;42307:9;42301:4;42297:20;42293:1;42282:9;42278:17;42271:47;42335:131;42461:4;42335:131;:::i;:::-;42327:139;;42054:419;;;:::o;42479:233::-;42518:3;42541:24;42559:5;42541:24;:::i;:::-;42532:33;;42587:66;42580:5;42577:77;42574:103;;42657:18;;:::i;:::-;42574:103;42704:1;42697:5;42693:13;42686:20;;42479:233;;;:::o;42718:180::-;42766:77;42763:1;42756:88;42863:4;42860:1;42853:15;42887:4;42884:1;42877:15;42904:185;42944:1;42961:20;42979:1;42961:20;:::i;:::-;42956:25;;42995:20;43013:1;42995:20;:::i;:::-;42990:25;;43034:1;43024:35;;43039:18;;:::i;:::-;43024:35;43081:1;43078;43074:9;43069:14;;42904:185;;;;:::o;43095:176::-;43127:1;43144:20;43162:1;43144:20;:::i;:::-;43139:25;;43178:20;43196:1;43178:20;:::i;:::-;43173:25;;43217:1;43207:35;;43222:18;;:::i;:::-;43207:35;43263:1;43260;43256:9;43251:14;;43095:176;;;;:::o;43277:98::-;43328:6;43362:5;43356:12;43346:22;;43277:98;;;:::o;43381:168::-;43464:11;43498:6;43493:3;43486:19;43538:4;43533:3;43529:14;43514:29;;43381:168;;;;:::o;43555:373::-;43641:3;43669:38;43701:5;43669:38;:::i;:::-;43723:70;43786:6;43781:3;43723:70;:::i;:::-;43716:77;;43802:65;43860:6;43855:3;43848:4;43841:5;43837:16;43802:65;:::i;:::-;43892:29;43914:6;43892:29;:::i;:::-;43887:3;43883:39;43876:46;;43645:283;43555:373;;;;:::o;43934:640::-;44129:4;44167:3;44156:9;44152:19;44144:27;;44181:71;44249:1;44238:9;44234:17;44225:6;44181:71;:::i;:::-;44262:72;44330:2;44319:9;44315:18;44306:6;44262:72;:::i;:::-;44344;44412:2;44401:9;44397:18;44388:6;44344:72;:::i;:::-;44463:9;44457:4;44453:20;44448:2;44437:9;44433:18;44426:48;44491:76;44562:4;44553:6;44491:76;:::i;:::-;44483:84;;43934:640;;;;;;;:::o;44580:141::-;44636:5;44667:6;44661:13;44652:22;;44683:32;44709:5;44683:32;:::i;:::-;44580:141;;;;:::o;44727:349::-;44796:6;44845:2;44833:9;44824:7;44820:23;44816:32;44813:119;;;44851:79;;:::i;:::-;44813:119;44971:1;44996:63;45051:7;45042:6;45031:9;45027:22;44996:63;:::i;:::-;44986:73;;44942:127;44727:349;;;;:::o;45082:182::-;45222:34;45218:1;45210:6;45206:14;45199:58;45082:182;:::o;45270:366::-;45412:3;45433:67;45497:2;45492:3;45433:67;:::i;:::-;45426:74;;45509:93;45598:3;45509:93;:::i;:::-;45627:2;45622:3;45618:12;45611:19;;45270:366;;;:::o;45642:419::-;45808:4;45846:2;45835:9;45831:18;45823:26;;45895:9;45889:4;45885:20;45881:1;45870:9;45866:17;45859:47;45923:131;46049:4;45923:131;:::i;:::-;45915:139;;45642:419;;;:::o;46067:178::-;46207:30;46203:1;46195:6;46191:14;46184:54;46067:178;:::o;46251:366::-;46393:3;46414:67;46478:2;46473:3;46414:67;:::i;:::-;46407:74;;46490:93;46579:3;46490:93;:::i;:::-;46608:2;46603:3;46599:12;46592:19;;46251:366;;;:::o;46623:419::-;46789:4;46827:2;46816:9;46812:18;46804:26;;46876:9;46870:4;46866:20;46862:1;46851:9;46847:17;46840:47;46904:131;47030:4;46904:131;:::i;:::-;46896:139;;46623:419;;;:::o

Swarm Source

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