ETH Price: $3,856.30 (-0.15%)

Token

Goblinarmy.wtf (GAWTF)
 

Overview

Max Total Supply

383 GAWTF

Holders

92

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 GAWTF
0xa2c335be56c9d18973217129482f5e315ff2714c
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:
GoblinArmy

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-06
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/


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 GoblinArmy 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;
    string private _postURI;

    // 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 public mintActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public price;
    uint256 public totalTokens;
    uint256 public numberMinted;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Goblinarmy.wtf";
        _symbol = "GAWTF";
        _baseURI = "https://goblinarmy.org/metadata/";
        _postURI = ".json";
        _hideTokens = true;
        
        totalTokens = 5000;
        price = 3500 * (10 ** 12); // Replace leading value with price in milli-finney
        
    }

    //@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 == GoblinArmy.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
    	//put in 10% here
        uint256 sendAmount = address(this).balance;
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }

    function mint(uint256 qty) external payable reentryLock {
        address _to = _msgSender();
        require(msg.value == qty * price, "Mint: Wrong Payment");
        require((qty + numberMinted) <= totalTokens, "Mint: Sold Out");
        require(mintActive, "Mint: AccessDenied");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        

        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            numberMinted ++;
            _safeMint(_to, mintSeedValue + i);
        }

    }
    
    // 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 activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    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), _postURI));
        }
        
        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":[],"name":"activateMint","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":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","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":[],"name":"totalTokens","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"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c62000040620001bc60201b60201c565b620001c460201b60201c565b6040518060400160405280600e81526020017f476f626c696e61726d792e777466000000000000000000000000000000000000815250600190805190602001906200009992919062000288565b506040518060400160405280600581526020017f474157544600000000000000000000000000000000000000000000000000000081525060029080519060200190620000e792919062000288565b506040518060400160405280602081526020017f68747470733a2f2f676f626c696e61726d792e6f72672f6d657461646174612f815250600390805190602001906200013592919062000288565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600490805190602001906200018392919062000288565b506001600960016101000a81548160ff021916908315150217905550611388600b81905550660c6f3b40b6c000600a819055506200039d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002969062000338565b90600052602060002090601f016020900481019282620002ba576000855562000306565b82601f10620002d557805160ff191683800117855562000306565b8280016001018555821562000306579182015b8281111562000305578251825591602001919060010190620002e8565b5b50905062000315919062000319565b5090565b5b80821115620003345760008160009055506001016200031a565b5090565b600060028204905060018216806200035157607f821691505b602082108114156200036857620003676200036e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613cfd80620003ad6000396000f3fe6080604052600436106101f25760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610684578063c91c0462146106c1578063e8a3d485146106d8578063e985e9c514610703578063f2fde38b14610740576101f9565b8063a22cb465146105f2578063b0b922631461061b578063b5b3e21414610644578063b88d4fde1461065b576101f9565b806391b7f5ed116100dc57806391b7f5ed1461055757806395d89b4114610580578063a035b1fe146105ab578063a0712d68146105d6576101f9565b806370a08231146104ad578063715018a6146104ea5780637e1c0c09146105015780638da5cb5b1461052c576101f9565b80632e56f71e1161018557806342966c681161015457806342966c68146103f357806349a772b51461041c57806355f804b3146104475780636352211e14610470576101f9565b80632e56f71e146103855780633ba5939d1461039c5780633ccfd60b146103b357806342842e0e146103ca576101f9565b8063150b7a02116101c1578063150b7a02146102c957806318160ddd1461030657806323b872dd1461033157806325fd90f31461035a576101f9565b806301ffc9a7146101fb57806306fdde0314610238578063081812fc14610263578063095ea7b3146102a0576101f9565b366101f957005b005b34801561020757600080fd5b50610222600480360381019061021d9190612a93565b610769565b60405161022f91906130fa565b60405180910390f35b34801561024457600080fd5b5061024d6108f2565b60405161025a9190613130565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612b36565b610984565b6040516102979190613093565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612a53565b610a09565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612908565b610b13565b6040516102fd9190613115565b60405180910390f35b34801561031257600080fd5b5061031b610b28565b60405161032891906133f2565b60405180910390f35b34801561033d57600080fd5b50610358600480360381019061035391906128b5565b610b32565b005b34801561036657600080fd5b5061036f610b8b565b60405161037c91906130fa565b60405180910390f35b34801561039157600080fd5b5061039a610b9e565b005b3480156103a857600080fd5b506103b1610c37565b005b3480156103bf57600080fd5b506103c8610cd0565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906128b5565b610e01565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190612b36565b610e21565b005b34801561042857600080fd5b50610431610e74565b60405161043e91906133f2565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190612aed565b610e7a565b005b34801561047c57600080fd5b5061049760048036038101906104929190612b36565b610f10565b6040516104a49190613093565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190612848565b610fc2565b6040516104e191906133f2565b60405180910390f35b3480156104f657600080fd5b506104ff61107a565b005b34801561050d57600080fd5b50610516611102565b60405161052391906133f2565b60405180910390f35b34801561053857600080fd5b50610541611108565b60405161054e9190613093565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190612b36565b611131565b005b34801561058c57600080fd5b506105956111b7565b6040516105a29190613130565b60405180910390f35b3480156105b757600080fd5b506105c0611249565b6040516105cd91906133f2565b60405180910390f35b6105f060048036038101906105eb9190612b36565b61124f565b005b3480156105fe57600080fd5b5061061960048036038101906106149190612a13565b611428565b005b34801561062757600080fd5b50610642600480360381019061063d9190612b36565b611594565b005b34801561065057600080fd5b5061065961161a565b005b34801561066757600080fd5b50610682600480360381019061067d9190612990565b6116b3565b005b34801561069057600080fd5b506106ab60048036038101906106a69190612b36565b61170e565b6040516106b89190613130565b60405180910390f35b3480156106cd57600080fd5b506106d66117d1565b005b3480156106e457600080fd5b506106ed61186a565b6040516106fa9190613130565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612875565b611892565b60405161073791906130fa565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612848565b611926565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061089c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108eb575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610901906136c2565b80601f016020809104026020016040519081016040528092919081815260200182805461092d906136c2565b801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b5050505050905090565b600061098f82611a1e565b6109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c5906131d2565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1482610f10565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c906131f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac55750610ac48133611892565b5b610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb906132b2565b60405180910390fd5b610b0e8383611a8a565b505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b610b3c3382611b43565b610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613372565b60405180910390fd5b610b86838383611c21565b505050565b600960009054906101000a900460ff1681565b610ba6611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610bc4611108565b73ffffffffffffffffffffffffffffffffffffffff1614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613352565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610c3f611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610c5d611108565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613352565b60405180910390fd5b6000600960016101000a81548160ff021916908315150217905550565b610cd8611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610cf6611108565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390613352565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610d779061307e565b60006040518083038185875af1925050503d8060008114610db4576040519150601f19603f3d011682016040523d82523d6000602084013e610db9565b606091505b5050905080610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613212565b60405180910390fd5b5050565b610e1c838383604051806020016040528060008152506116b3565b505050565b610e2a81610f10565b73ffffffffffffffffffffffffffffffffffffffff16610e48611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614610e6857600080fd5b610e7181611e85565b50565b600c5481565b610e82611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610ea0611108565b73ffffffffffffffffffffffffffffffffffffffff1614610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90613352565b60405180910390fd5b8060039080519060200190610f0c929190612606565b5050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613272565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613312565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611082611e7d565b73ffffffffffffffffffffffffffffffffffffffff166110a0611108565b73ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613352565b60405180910390fd5b6111006000611f96565b565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611139611e7d565b73ffffffffffffffffffffffffffffffffffffffff16611157611108565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613352565b60405180910390fd5b80600a8190555050565b6060600280546111c6906136c2565b80601f01602080910402602001604051908101604052809291908181526020018280546111f2906136c2565b801561123f5780601f106112145761010080835404028352916020019161123f565b820191906000526020600020905b81548152906001019060200180831161122257829003601f168201915b5050505050905090565b600a5481565b600060149054906101000a900460ff161561129f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611296906132d2565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060006112c4611e7d565b9050600a54826112d4919061357e565b3414611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613172565b60405180910390fd5b600b54600c548361132691906134f7565b1115611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90613392565b60405180910390fd5b600960009054906101000a900460ff166113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad906133d2565b60405180910390fd5b6000600c54905060005b8381101561140857600c60008154809291906113db90613725565b91905055506113f58382846113f091906134f7565b61205a565b808061140090613725565b9150506113c0565b50505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613252565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161158891906130fa565b60405180910390a35050565b61159c611e7d565b73ffffffffffffffffffffffffffffffffffffffff166115ba611108565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790613352565b60405180910390fd5b80600b8190555050565b611622611e7d565b73ffffffffffffffffffffffffffffffffffffffff16611640611108565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613352565b60405180910390fd5b6001600960016101000a81548160ff021916908315150217905550565b6116bd3383611b43565b6116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390613372565b60405180910390fd5b61170884848484612078565b50505050565b606061171982611a1e565b611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f906133b2565b60405180910390fd5b6060600960019054906101000a900460ff1615611797576003604051602001611781919061305c565b60405160208183030381529060405290506117c8565b60036117a2846120d4565b60046040516020016117b693929190613009565b60405160208183030381529060405290505b80915050919050565b6117d9611e7d565b73ffffffffffffffffffffffffffffffffffffffff166117f7611108565b73ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613352565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b6060600360405160200161187e919061303a565b604051602081830303815290604052905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61192e611e7d565b73ffffffffffffffffffffffffffffffffffffffff1661194c611108565b73ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990613352565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613232565b60405180910390fd5b611a1b81611f96565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611afd83610f10565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b4e82611a1e565b611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613152565b60405180910390fd5b6000611b9883610f10565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c0757508373ffffffffffffffffffffffffffffffffffffffff16611bef84610984565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c185750611c178185611892565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c4182610f10565b73ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613332565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613192565b60405180910390fd5b611d12838383612235565b611d1d600082611a8a565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d6d91906135d8565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc491906134f7565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b6000611e9082610f10565b9050611e9e81600084612235565b611ea9600083611a8a565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ef991906135d8565b925050819055506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61207482826040518060200160405280600081525061223a565b5050565b612083848484611c21565b61208f84848484612295565b6120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613292565b60405180910390fd5b50505050565b6060600082141561211c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612230565b600082905060005b6000821461214e57808061213790613725565b915050600a82612147919061354d565b9150612124565b60008167ffffffffffffffff81111561216a5761216961385b565b5b6040519080825280601f01601f19166020018201604052801561219c5781602001600182028036833780820191505090505b5090505b60008514612229576001826121b591906135d8565b9150600a856121c4919061376e565b60306121d091906134f7565b60f81b8183815181106121e6576121e561382c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612222919061354d565b94506121a0565b8093505050505b919050565b505050565b6122448383612425565b6122516000848484612295565b612290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228790613292565b60405180910390fd5b505050565b60006122b68473ffffffffffffffffffffffffffffffffffffffff166125f3565b15612418578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016122fa94939291906130ae565b602060405180830381600087803b15801561231457600080fd5b505af192505050801561234557506040513d601f19601f820116820180604052508101906123429190612ac0565b60015b6123c8573d8060008114612375576040519150601f19603f3d011682016040523d82523d6000602084013e61237a565b606091505b506000815114156123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790613292565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906132f2565b60405180910390fd5b61249e81611a1e565b156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d5906131b2565b60405180910390fd5b6124ea60008383612235565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461253a91906134f7565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612612906136c2565b90600052602060002090601f016020900481019282612634576000855561267b565b82601f1061264d57805160ff191683800117855561267b565b8280016001018555821561267b579182015b8281111561267a57825182559160200191906001019061265f565b5b509050612688919061268c565b5090565b5b808211156126a557600081600090555060010161268d565b5090565b60006126bc6126b784613432565b61340d565b9050828152602081018484840111156126d8576126d7613899565b5b6126e3848285613680565b509392505050565b60006126fe6126f984613463565b61340d565b90508281526020810184848401111561271a57612719613899565b5b612725848285613680565b509392505050565b60008135905061273c81613c6b565b92915050565b60008135905061275181613c82565b92915050565b60008135905061276681613c99565b92915050565b60008151905061277b81613c99565b92915050565b60008083601f8401126127975761279661388f565b5b8235905067ffffffffffffffff8111156127b4576127b361388a565b5b6020830191508360018202830111156127d0576127cf613894565b5b9250929050565b600082601f8301126127ec576127eb61388f565b5b81356127fc8482602086016126a9565b91505092915050565b600082601f83011261281a5761281961388f565b5b813561282a8482602086016126eb565b91505092915050565b60008135905061284281613cb0565b92915050565b60006020828403121561285e5761285d6138a3565b5b600061286c8482850161272d565b91505092915050565b6000806040838503121561288c5761288b6138a3565b5b600061289a8582860161272d565b92505060206128ab8582860161272d565b9150509250929050565b6000806000606084860312156128ce576128cd6138a3565b5b60006128dc8682870161272d565b93505060206128ed8682870161272d565b92505060406128fe86828701612833565b9150509250925092565b600080600080600060808688031215612924576129236138a3565b5b60006129328882890161272d565b95505060206129438882890161272d565b945050604061295488828901612833565b935050606086013567ffffffffffffffff8111156129755761297461389e565b5b61298188828901612781565b92509250509295509295909350565b600080600080608085870312156129aa576129a96138a3565b5b60006129b88782880161272d565b94505060206129c98782880161272d565b93505060406129da87828801612833565b925050606085013567ffffffffffffffff8111156129fb576129fa61389e565b5b612a07878288016127d7565b91505092959194509250565b60008060408385031215612a2a57612a296138a3565b5b6000612a388582860161272d565b9250506020612a4985828601612742565b9150509250929050565b60008060408385031215612a6a57612a696138a3565b5b6000612a788582860161272d565b9250506020612a8985828601612833565b9150509250929050565b600060208284031215612aa957612aa86138a3565b5b6000612ab784828501612757565b91505092915050565b600060208284031215612ad657612ad56138a3565b5b6000612ae48482850161276c565b91505092915050565b600060208284031215612b0357612b026138a3565b5b600082013567ffffffffffffffff811115612b2157612b2061389e565b5b612b2d84828501612805565b91505092915050565b600060208284031215612b4c57612b4b6138a3565b5b6000612b5a84828501612833565b91505092915050565b612b6c8161360c565b82525050565b612b7b8161361e565b82525050565b612b8a8161362a565b82525050565b6000612b9b826134a9565b612ba581856134bf565b9350612bb581856020860161368f565b612bbe816138a8565b840191505092915050565b6000612bd4826134b4565b612bde81856134db565b9350612bee81856020860161368f565b612bf7816138a8565b840191505092915050565b6000612c0d826134b4565b612c1781856134ec565b9350612c2781856020860161368f565b80840191505092915050565b60008154612c40816136c2565b612c4a81866134ec565b94506001821660008114612c655760018114612c7657612ca9565b60ff19831686528186019350612ca9565b612c7f85613494565b60005b83811015612ca157815481890152600182019150602081019050612c82565b838801955050505b50505092915050565b6000612cbf6020836134db565b9150612cca826138b9565b602082019050919050565b6000612ce2600d836134ec565b9150612ced826138e2565b600d82019050919050565b6000612d056013836134db565b9150612d108261390b565b602082019050919050565b6000612d28601b836134db565b9150612d3382613934565b602082019050919050565b6000612d4b601c836134db565b9150612d568261395d565b602082019050919050565b6000612d6e6020836134db565b9150612d7982613986565b602082019050919050565b6000612d91601e836134db565b9150612d9c826139af565b602082019050919050565b6000612db46018836134db565b9150612dbf826139d8565b602082019050919050565b6000612dd76020836134db565b9150612de282613a01565b602082019050919050565b6000612dfa6019836134db565b9150612e0582613a2a565b602082019050919050565b6000612e1d600c836134ec565b9150612e2882613a53565b600c82019050919050565b6000612e40601e836134db565b9150612e4b82613a7c565b602082019050919050565b6000612e63601a836134db565b9150612e6e82613aa5565b602082019050919050565b6000612e86601f836134db565b9150612e9182613ace565b602082019050919050565b6000612ea9601f836134db565b9150612eb482613af7565b602082019050919050565b6000612ecc6020836134db565b9150612ed782613b20565b602082019050919050565b6000612eef6020836134db565b9150612efa82613b49565b602082019050919050565b6000612f12601c836134db565b9150612f1d82613b72565b602082019050919050565b6000612f356020836134db565b9150612f4082613b9b565b602082019050919050565b6000612f58601c836134db565b9150612f6382613bc4565b602082019050919050565b6000612f7b600e836134db565b9150612f8682613bed565b602082019050919050565b6000612f9e6000836134d0565b9150612fa982613c16565b600082019050919050565b6000612fc1601d836134db565b9150612fcc82613c19565b602082019050919050565b6000612fe46012836134db565b9150612fef82613c42565b602082019050919050565b61300381613676565b82525050565b60006130158286612c33565b91506130218285612c02565b915061302d8284612c33565b9150819050949350505050565b60006130468284612c33565b915061305182612cd5565b915081905092915050565b60006130688284612c33565b915061307382612e10565b915081905092915050565b600061308982612f91565b9150819050919050565b60006020820190506130a86000830184612b63565b92915050565b60006080820190506130c36000830187612b63565b6130d06020830186612b63565b6130dd6040830185612ffa565b81810360608301526130ef8184612b90565b905095945050505050565b600060208201905061310f6000830184612b72565b92915050565b600060208201905061312a6000830184612b81565b92915050565b6000602082019050818103600083015261314a8184612bc9565b905092915050565b6000602082019050818103600083015261316b81612cb2565b9050919050565b6000602082019050818103600083015261318b81612cf8565b9050919050565b600060208201905081810360008301526131ab81612d1b565b9050919050565b600060208201905081810360008301526131cb81612d3e565b9050919050565b600060208201905081810360008301526131eb81612d61565b9050919050565b6000602082019050818103600083015261320b81612d84565b9050919050565b6000602082019050818103600083015261322b81612da7565b9050919050565b6000602082019050818103600083015261324b81612dca565b9050919050565b6000602082019050818103600083015261326b81612ded565b9050919050565b6000602082019050818103600083015261328b81612e33565b9050919050565b600060208201905081810360008301526132ab81612e56565b9050919050565b600060208201905081810360008301526132cb81612e79565b9050919050565b600060208201905081810360008301526132eb81612e9c565b9050919050565b6000602082019050818103600083015261330b81612ebf565b9050919050565b6000602082019050818103600083015261332b81612ee2565b9050919050565b6000602082019050818103600083015261334b81612f05565b9050919050565b6000602082019050818103600083015261336b81612f28565b9050919050565b6000602082019050818103600083015261338b81612f4b565b9050919050565b600060208201905081810360008301526133ab81612f6e565b9050919050565b600060208201905081810360008301526133cb81612fb4565b9050919050565b600060208201905081810360008301526133eb81612fd7565b9050919050565b60006020820190506134076000830184612ffa565b92915050565b6000613417613428565b905061342382826136f4565b919050565b6000604051905090565b600067ffffffffffffffff82111561344d5761344c61385b565b5b613456826138a8565b9050602081019050919050565b600067ffffffffffffffff82111561347e5761347d61385b565b5b613487826138a8565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061350282613676565b915061350d83613676565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135425761354161379f565b5b828201905092915050565b600061355882613676565b915061356383613676565b925082613573576135726137ce565b5b828204905092915050565b600061358982613676565b915061359483613676565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135cd576135cc61379f565b5b828202905092915050565b60006135e382613676565b91506135ee83613676565b9250828210156136015761360061379f565b5b828203905092915050565b600061361782613656565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136ad578082015181840152602081019050613692565b838111156136bc576000848401525b50505050565b600060028204905060018216806136da57607f821691505b602082108114156136ee576136ed6137fd565b5b50919050565b6136fd826138a8565b810181811067ffffffffffffffff8211171561371c5761371b61385b565b5b80604052505050565b600061373082613676565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137635761376261379f565b5b600182019050919050565b600061377982613676565b915061378483613676565b925082613794576137936137ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a2057726f6e67205061796d656e7400000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a20536f6c64204f7574000000000000000000000000000000000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d696e743a2041636365737344656e6965640000000000000000000000000000600082015250565b613c748161360c565b8114613c7f57600080fd5b50565b613c8b8161361e565b8114613c9657600080fd5b50565b613ca28161362a565b8114613cad57600080fd5b50565b613cb981613676565b8114613cc457600080fd5b5056fea26469706673582212203366a3f808f5ea6d50dafa2cc7f3d5fea60a4cc9478edca78e336149a05bf65564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c806370a082311161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610684578063c91c0462146106c1578063e8a3d485146106d8578063e985e9c514610703578063f2fde38b14610740576101f9565b8063a22cb465146105f2578063b0b922631461061b578063b5b3e21414610644578063b88d4fde1461065b576101f9565b806391b7f5ed116100dc57806391b7f5ed1461055757806395d89b4114610580578063a035b1fe146105ab578063a0712d68146105d6576101f9565b806370a08231146104ad578063715018a6146104ea5780637e1c0c09146105015780638da5cb5b1461052c576101f9565b80632e56f71e1161018557806342966c681161015457806342966c68146103f357806349a772b51461041c57806355f804b3146104475780636352211e14610470576101f9565b80632e56f71e146103855780633ba5939d1461039c5780633ccfd60b146103b357806342842e0e146103ca576101f9565b8063150b7a02116101c1578063150b7a02146102c957806318160ddd1461030657806323b872dd1461033157806325fd90f31461035a576101f9565b806301ffc9a7146101fb57806306fdde0314610238578063081812fc14610263578063095ea7b3146102a0576101f9565b366101f957005b005b34801561020757600080fd5b50610222600480360381019061021d9190612a93565b610769565b60405161022f91906130fa565b60405180910390f35b34801561024457600080fd5b5061024d6108f2565b60405161025a9190613130565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612b36565b610984565b6040516102979190613093565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190612a53565b610a09565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612908565b610b13565b6040516102fd9190613115565b60405180910390f35b34801561031257600080fd5b5061031b610b28565b60405161032891906133f2565b60405180910390f35b34801561033d57600080fd5b50610358600480360381019061035391906128b5565b610b32565b005b34801561036657600080fd5b5061036f610b8b565b60405161037c91906130fa565b60405180910390f35b34801561039157600080fd5b5061039a610b9e565b005b3480156103a857600080fd5b506103b1610c37565b005b3480156103bf57600080fd5b506103c8610cd0565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906128b5565b610e01565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190612b36565b610e21565b005b34801561042857600080fd5b50610431610e74565b60405161043e91906133f2565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190612aed565b610e7a565b005b34801561047c57600080fd5b5061049760048036038101906104929190612b36565b610f10565b6040516104a49190613093565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190612848565b610fc2565b6040516104e191906133f2565b60405180910390f35b3480156104f657600080fd5b506104ff61107a565b005b34801561050d57600080fd5b50610516611102565b60405161052391906133f2565b60405180910390f35b34801561053857600080fd5b50610541611108565b60405161054e9190613093565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190612b36565b611131565b005b34801561058c57600080fd5b506105956111b7565b6040516105a29190613130565b60405180910390f35b3480156105b757600080fd5b506105c0611249565b6040516105cd91906133f2565b60405180910390f35b6105f060048036038101906105eb9190612b36565b61124f565b005b3480156105fe57600080fd5b5061061960048036038101906106149190612a13565b611428565b005b34801561062757600080fd5b50610642600480360381019061063d9190612b36565b611594565b005b34801561065057600080fd5b5061065961161a565b005b34801561066757600080fd5b50610682600480360381019061067d9190612990565b6116b3565b005b34801561069057600080fd5b506106ab60048036038101906106a69190612b36565b61170e565b6040516106b89190613130565b60405180910390f35b3480156106cd57600080fd5b506106d66117d1565b005b3480156106e457600080fd5b506106ed61186a565b6040516106fa9190613130565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612875565b611892565b60405161073791906130fa565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612848565b611926565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061089c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108eb575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610901906136c2565b80601f016020809104026020016040519081016040528092919081815260200182805461092d906136c2565b801561097a5780601f1061094f5761010080835404028352916020019161097a565b820191906000526020600020905b81548152906001019060200180831161095d57829003601f168201915b5050505050905090565b600061098f82611a1e565b6109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c5906131d2565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1482610f10565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c906131f2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ac55750610ac48133611892565b5b610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb906132b2565b60405180910390fd5b610b0e8383611a8a565b505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b610b3c3382611b43565b610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613372565b60405180910390fd5b610b86838383611c21565b505050565b600960009054906101000a900460ff1681565b610ba6611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610bc4611108565b73ffffffffffffffffffffffffffffffffffffffff1614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190613352565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610c3f611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610c5d611108565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613352565b60405180910390fd5b6000600960016101000a81548160ff021916908315150217905550565b610cd8611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610cf6611108565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390613352565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610d779061307e565b60006040518083038185875af1925050503d8060008114610db4576040519150601f19603f3d011682016040523d82523d6000602084013e610db9565b606091505b5050905080610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613212565b60405180910390fd5b5050565b610e1c838383604051806020016040528060008152506116b3565b505050565b610e2a81610f10565b73ffffffffffffffffffffffffffffffffffffffff16610e48611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614610e6857600080fd5b610e7181611e85565b50565b600c5481565b610e82611e7d565b73ffffffffffffffffffffffffffffffffffffffff16610ea0611108565b73ffffffffffffffffffffffffffffffffffffffff1614610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90613352565b60405180910390fd5b8060039080519060200190610f0c929190612606565b5050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb090613272565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613312565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611082611e7d565b73ffffffffffffffffffffffffffffffffffffffff166110a0611108565b73ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613352565b60405180910390fd5b6111006000611f96565b565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611139611e7d565b73ffffffffffffffffffffffffffffffffffffffff16611157611108565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613352565b60405180910390fd5b80600a8190555050565b6060600280546111c6906136c2565b80601f01602080910402602001604051908101604052809291908181526020018280546111f2906136c2565b801561123f5780601f106112145761010080835404028352916020019161123f565b820191906000526020600020905b81548152906001019060200180831161122257829003601f168201915b5050505050905090565b600a5481565b600060149054906101000a900460ff161561129f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611296906132d2565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060006112c4611e7d565b9050600a54826112d4919061357e565b3414611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613172565b60405180910390fd5b600b54600c548361132691906134f7565b1115611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90613392565b60405180910390fd5b600960009054906101000a900460ff166113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad906133d2565b60405180910390fd5b6000600c54905060005b8381101561140857600c60008154809291906113db90613725565b91905055506113f58382846113f091906134f7565b61205a565b808061140090613725565b9150506113c0565b50505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613252565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161158891906130fa565b60405180910390a35050565b61159c611e7d565b73ffffffffffffffffffffffffffffffffffffffff166115ba611108565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790613352565b60405180910390fd5b80600b8190555050565b611622611e7d565b73ffffffffffffffffffffffffffffffffffffffff16611640611108565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613352565b60405180910390fd5b6001600960016101000a81548160ff021916908315150217905550565b6116bd3383611b43565b6116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390613372565b60405180910390fd5b61170884848484612078565b50505050565b606061171982611a1e565b611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f906133b2565b60405180910390fd5b6060600960019054906101000a900460ff1615611797576003604051602001611781919061305c565b60405160208183030381529060405290506117c8565b60036117a2846120d4565b60046040516020016117b693929190613009565b60405160208183030381529060405290505b80915050919050565b6117d9611e7d565b73ffffffffffffffffffffffffffffffffffffffff166117f7611108565b73ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613352565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b6060600360405160200161187e919061303a565b604051602081830303815290604052905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61192e611e7d565b73ffffffffffffffffffffffffffffffffffffffff1661194c611108565b73ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990613352565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990613232565b60405180910390fd5b611a1b81611f96565b50565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611afd83610f10565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b4e82611a1e565b611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8490613152565b60405180910390fd5b6000611b9883610f10565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c0757508373ffffffffffffffffffffffffffffffffffffffff16611bef84610984565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c185750611c178185611892565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c4182610f10565b73ffffffffffffffffffffffffffffffffffffffff1614611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613332565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613192565b60405180910390fd5b611d12838383612235565b611d1d600082611a8a565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d6d91906135d8565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc491906134f7565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b6000611e9082610f10565b9050611e9e81600084612235565b611ea9600083611a8a565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ef991906135d8565b925050819055506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61207482826040518060200160405280600081525061223a565b5050565b612083848484611c21565b61208f84848484612295565b6120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613292565b60405180910390fd5b50505050565b6060600082141561211c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612230565b600082905060005b6000821461214e57808061213790613725565b915050600a82612147919061354d565b9150612124565b60008167ffffffffffffffff81111561216a5761216961385b565b5b6040519080825280601f01601f19166020018201604052801561219c5781602001600182028036833780820191505090505b5090505b60008514612229576001826121b591906135d8565b9150600a856121c4919061376e565b60306121d091906134f7565b60f81b8183815181106121e6576121e561382c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612222919061354d565b94506121a0565b8093505050505b919050565b505050565b6122448383612425565b6122516000848484612295565b612290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228790613292565b60405180910390fd5b505050565b60006122b68473ffffffffffffffffffffffffffffffffffffffff166125f3565b15612418578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016122fa94939291906130ae565b602060405180830381600087803b15801561231457600080fd5b505af192505050801561234557506040513d601f19601f820116820180604052508101906123429190612ac0565b60015b6123c8573d8060008114612375576040519150601f19603f3d011682016040523d82523d6000602084013e61237a565b606091505b506000815114156123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790613292565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906132f2565b60405180910390fd5b61249e81611a1e565b156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d5906131b2565b60405180910390fd5b6124ea60008383612235565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461253a91906134f7565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612612906136c2565b90600052602060002090601f016020900481019282612634576000855561267b565b82601f1061264d57805160ff191683800117855561267b565b8280016001018555821561267b579182015b8281111561267a57825182559160200191906001019061265f565b5b509050612688919061268c565b5090565b5b808211156126a557600081600090555060010161268d565b5090565b60006126bc6126b784613432565b61340d565b9050828152602081018484840111156126d8576126d7613899565b5b6126e3848285613680565b509392505050565b60006126fe6126f984613463565b61340d565b90508281526020810184848401111561271a57612719613899565b5b612725848285613680565b509392505050565b60008135905061273c81613c6b565b92915050565b60008135905061275181613c82565b92915050565b60008135905061276681613c99565b92915050565b60008151905061277b81613c99565b92915050565b60008083601f8401126127975761279661388f565b5b8235905067ffffffffffffffff8111156127b4576127b361388a565b5b6020830191508360018202830111156127d0576127cf613894565b5b9250929050565b600082601f8301126127ec576127eb61388f565b5b81356127fc8482602086016126a9565b91505092915050565b600082601f83011261281a5761281961388f565b5b813561282a8482602086016126eb565b91505092915050565b60008135905061284281613cb0565b92915050565b60006020828403121561285e5761285d6138a3565b5b600061286c8482850161272d565b91505092915050565b6000806040838503121561288c5761288b6138a3565b5b600061289a8582860161272d565b92505060206128ab8582860161272d565b9150509250929050565b6000806000606084860312156128ce576128cd6138a3565b5b60006128dc8682870161272d565b93505060206128ed8682870161272d565b92505060406128fe86828701612833565b9150509250925092565b600080600080600060808688031215612924576129236138a3565b5b60006129328882890161272d565b95505060206129438882890161272d565b945050604061295488828901612833565b935050606086013567ffffffffffffffff8111156129755761297461389e565b5b61298188828901612781565b92509250509295509295909350565b600080600080608085870312156129aa576129a96138a3565b5b60006129b88782880161272d565b94505060206129c98782880161272d565b93505060406129da87828801612833565b925050606085013567ffffffffffffffff8111156129fb576129fa61389e565b5b612a07878288016127d7565b91505092959194509250565b60008060408385031215612a2a57612a296138a3565b5b6000612a388582860161272d565b9250506020612a4985828601612742565b9150509250929050565b60008060408385031215612a6a57612a696138a3565b5b6000612a788582860161272d565b9250506020612a8985828601612833565b9150509250929050565b600060208284031215612aa957612aa86138a3565b5b6000612ab784828501612757565b91505092915050565b600060208284031215612ad657612ad56138a3565b5b6000612ae48482850161276c565b91505092915050565b600060208284031215612b0357612b026138a3565b5b600082013567ffffffffffffffff811115612b2157612b2061389e565b5b612b2d84828501612805565b91505092915050565b600060208284031215612b4c57612b4b6138a3565b5b6000612b5a84828501612833565b91505092915050565b612b6c8161360c565b82525050565b612b7b8161361e565b82525050565b612b8a8161362a565b82525050565b6000612b9b826134a9565b612ba581856134bf565b9350612bb581856020860161368f565b612bbe816138a8565b840191505092915050565b6000612bd4826134b4565b612bde81856134db565b9350612bee81856020860161368f565b612bf7816138a8565b840191505092915050565b6000612c0d826134b4565b612c1781856134ec565b9350612c2781856020860161368f565b80840191505092915050565b60008154612c40816136c2565b612c4a81866134ec565b94506001821660008114612c655760018114612c7657612ca9565b60ff19831686528186019350612ca9565b612c7f85613494565b60005b83811015612ca157815481890152600182019150602081019050612c82565b838801955050505b50505092915050565b6000612cbf6020836134db565b9150612cca826138b9565b602082019050919050565b6000612ce2600d836134ec565b9150612ced826138e2565b600d82019050919050565b6000612d056013836134db565b9150612d108261390b565b602082019050919050565b6000612d28601b836134db565b9150612d3382613934565b602082019050919050565b6000612d4b601c836134db565b9150612d568261395d565b602082019050919050565b6000612d6e6020836134db565b9150612d7982613986565b602082019050919050565b6000612d91601e836134db565b9150612d9c826139af565b602082019050919050565b6000612db46018836134db565b9150612dbf826139d8565b602082019050919050565b6000612dd76020836134db565b9150612de282613a01565b602082019050919050565b6000612dfa6019836134db565b9150612e0582613a2a565b602082019050919050565b6000612e1d600c836134ec565b9150612e2882613a53565b600c82019050919050565b6000612e40601e836134db565b9150612e4b82613a7c565b602082019050919050565b6000612e63601a836134db565b9150612e6e82613aa5565b602082019050919050565b6000612e86601f836134db565b9150612e9182613ace565b602082019050919050565b6000612ea9601f836134db565b9150612eb482613af7565b602082019050919050565b6000612ecc6020836134db565b9150612ed782613b20565b602082019050919050565b6000612eef6020836134db565b9150612efa82613b49565b602082019050919050565b6000612f12601c836134db565b9150612f1d82613b72565b602082019050919050565b6000612f356020836134db565b9150612f4082613b9b565b602082019050919050565b6000612f58601c836134db565b9150612f6382613bc4565b602082019050919050565b6000612f7b600e836134db565b9150612f8682613bed565b602082019050919050565b6000612f9e6000836134d0565b9150612fa982613c16565b600082019050919050565b6000612fc1601d836134db565b9150612fcc82613c19565b602082019050919050565b6000612fe46012836134db565b9150612fef82613c42565b602082019050919050565b61300381613676565b82525050565b60006130158286612c33565b91506130218285612c02565b915061302d8284612c33565b9150819050949350505050565b60006130468284612c33565b915061305182612cd5565b915081905092915050565b60006130688284612c33565b915061307382612e10565b915081905092915050565b600061308982612f91565b9150819050919050565b60006020820190506130a86000830184612b63565b92915050565b60006080820190506130c36000830187612b63565b6130d06020830186612b63565b6130dd6040830185612ffa565b81810360608301526130ef8184612b90565b905095945050505050565b600060208201905061310f6000830184612b72565b92915050565b600060208201905061312a6000830184612b81565b92915050565b6000602082019050818103600083015261314a8184612bc9565b905092915050565b6000602082019050818103600083015261316b81612cb2565b9050919050565b6000602082019050818103600083015261318b81612cf8565b9050919050565b600060208201905081810360008301526131ab81612d1b565b9050919050565b600060208201905081810360008301526131cb81612d3e565b9050919050565b600060208201905081810360008301526131eb81612d61565b9050919050565b6000602082019050818103600083015261320b81612d84565b9050919050565b6000602082019050818103600083015261322b81612da7565b9050919050565b6000602082019050818103600083015261324b81612dca565b9050919050565b6000602082019050818103600083015261326b81612ded565b9050919050565b6000602082019050818103600083015261328b81612e33565b9050919050565b600060208201905081810360008301526132ab81612e56565b9050919050565b600060208201905081810360008301526132cb81612e79565b9050919050565b600060208201905081810360008301526132eb81612e9c565b9050919050565b6000602082019050818103600083015261330b81612ebf565b9050919050565b6000602082019050818103600083015261332b81612ee2565b9050919050565b6000602082019050818103600083015261334b81612f05565b9050919050565b6000602082019050818103600083015261336b81612f28565b9050919050565b6000602082019050818103600083015261338b81612f4b565b9050919050565b600060208201905081810360008301526133ab81612f6e565b9050919050565b600060208201905081810360008301526133cb81612fb4565b9050919050565b600060208201905081810360008301526133eb81612fd7565b9050919050565b60006020820190506134076000830184612ffa565b92915050565b6000613417613428565b905061342382826136f4565b919050565b6000604051905090565b600067ffffffffffffffff82111561344d5761344c61385b565b5b613456826138a8565b9050602081019050919050565b600067ffffffffffffffff82111561347e5761347d61385b565b5b613487826138a8565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061350282613676565b915061350d83613676565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135425761354161379f565b5b828201905092915050565b600061355882613676565b915061356383613676565b925082613573576135726137ce565b5b828204905092915050565b600061358982613676565b915061359483613676565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135cd576135cc61379f565b5b828202905092915050565b60006135e382613676565b91506135ee83613676565b9250828210156136015761360061379f565b5b828203905092915050565b600061361782613656565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136ad578082015181840152602081019050613692565b838111156136bc576000848401525b50505050565b600060028204905060018216806136da57607f821691505b602082108114156136ee576136ed6137fd565b5b50919050565b6136fd826138a8565b810181811067ffffffffffffffff8211171561371c5761371b61385b565b5b80604052505050565b600061373082613676565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137635761376261379f565b5b600182019050919050565b600061377982613676565b915061378483613676565b925082613794576137936137ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4d696e743a2057726f6e67205061796d656e7400000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a20536f6c64204f7574000000000000000000000000000000000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d696e743a2041636365737344656e6965640000000000000000000000000000600082015250565b613c748161360c565b8114613c7f57600080fd5b50565b613c8b8161361e565b8114613c9657600080fd5b50565b613ca28161362a565b8114613cad57600080fd5b50565b613cb981613676565b8114613cc457600080fd5b5056fea26469706673582212203366a3f808f5ea6d50dafa2cc7f3d5fea60a4cc9478edca78e336149a05bf65564736f6c63430008070033

Deployed Bytecode Sourcemap

16578:16573:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18076:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31967:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21611:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21173:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30911:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20250:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22481:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17356:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19948:80;;;;;;;;;;;;;:::i;:::-;;20478:81;;;;;;;;;;;;;:::i;:::-;;18518:247;;;;;;;;;;;;;:::i;:::-;;22866:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19409:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17497:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19752:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20883:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20623:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:94;;;;;;;;;;;;;:::i;:::-;;17464:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20040:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17437:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18773:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21890:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20140:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20388:78;;;;;;;;;;;;;:::i;:::-;;23122:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32283:547;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19859:77;;;;;;;;;;;;;:::i;:::-;;32842:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22250:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18076:360;18161:4;18201:25;18186:40;;;:11;:40;;;;:109;;;;18262:33;18247:48;;;:11;:48;;;;18186:109;:170;;;;18331:25;18316:40;;;:11;:40;;;;18186:170;:242;;;;18392:36;;;18377:51;;;:11;:51;;;;18186:242;18178:250;;18076:360;;;:::o;31967:84::-;32006:13;32038:5;32031:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31967:84;:::o;21611:207::-;21687:7;21715:16;21723:7;21715;:16::i;:::-;21707:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21786:15;:24;21802:7;21786:24;;;;;;;;;;;;;;;;;;;;;21779:31;;21611:207;;;:::o;21173:372::-;21254:13;21270:16;21278:7;21270;:16::i;:::-;21254:32;;21311:5;21305:11;;:2;:11;;;;21297:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;21400:5;21386:19;;:10;:19;;;:58;;;;21409:35;21426:5;21433:10;21409:16;:35::i;:::-;21386:58;21364:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;21516:21;21525:2;21529:7;21516:8;:21::i;:::-;21243:302;21173:372;;:::o;30911:215::-;31028:6;31088:30;;;31081:37;;30911:215;;;;;;;:::o;20250:126::-;20296:7;20323:12;;20316:19;;20250:126;:::o;22481:314::-;22676:39;22695:10;22707:7;22676:18;:39::i;:::-;22668:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22759:28;22769:4;22775:2;22779:7;22759:9;:28::i;:::-;22481:314;;;:::o;17356:22::-;;;;;;;;;;;;;:::o;19948:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20015:5:::1;20002:10;;:18;;;;;;;;;;;;;;;;;;19948:80::o:0;20478:81::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20546:5:::1;20532:11;;:19;;;;;;;;;;;;;;;;;;20478:81::o:0;18518:247::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18592:18:::1;18613:21;18592:42;;18646:12;18664:10;:15;;18687:10;18664:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18645:57;;;18721:7;18713:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18557:208;;18518:247::o:0;22866:185::-;23004:39;23021:4;23027:2;23031:7;23004:39;;;;;;;;;;;;:16;:39::i;:::-;22866:185;;;:::o;19409:125::-;19484:16;19492:7;19484;:16::i;:::-;19468:32;;:12;:10;:12::i;:::-;:32;;;19460:41;;;;;;19512:14;19518:7;19512:5;:14::i;:::-;19409:125;:::o;17497:27::-;;;;:::o;19752:95::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19833:6:::1;19822:8;:17;;;;;;;;;;;;:::i;:::-;;19752:95:::0;:::o;20883:228::-;20955:7;20975:13;20991:7;:16;20999:7;20991:16;;;;;;;;;;;;;;;;;;;;;20975:32;;21043:1;21026:19;;:5;:19;;;;21018:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21098:5;21091:12;;;20883:228;;;:::o;20623:198::-;20695:7;20740:1;20723:19;;:5;:19;;;;20715:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20797:9;:16;20807:5;20797:16;;;;;;;;;;;;;;;;20790:23;;20623:198;;;:::o;14765:94::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14830:21:::1;14848:1;14830:9;:21::i;:::-;14765:94::o:0;17464:26::-;;;;:::o;14114:87::-;14160:7;14187:6;;;;;;;;;;;14180:13;;14114:87;:::o;20040:88::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20112:8:::1;20104:5;:16;;;;20040:88:::0;:::o;32108:::-;32149:13;32181:7;32174:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32108:88;:::o;17437:20::-;;;;:::o;18773:565::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;18840:11:::1;18854:12;:10;:12::i;:::-;18840:26;;18904:5;;18898:3;:11;;;;:::i;:::-;18885:9;:24;18877:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18976:11;;18959:12;;18953:3;:18;;;;:::i;:::-;18952:35;;18944:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19025:10;;;;;;;;;;;19017:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;19079:21;19103:12;;19079:36;;19210:9;19206:123;19229:3;19225:1;:7;19206:123;;;19254:12;;:15;;;;;;;;;:::i;:::-;;;;;;19284:33;19294:3;19315:1;19299:13;:17;;;;:::i;:::-;19284:9;:33::i;:::-;19234:3;;;;;:::i;:::-;;;;19206:123;;;;18829:509;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;18773:565;:::o;21890:289::-;22005:10;21993:22;;:8;:22;;;;21985:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:8;22058:18;:30;22077:10;22058:30;;;;;;;;;;;;;;;:40;22089:8;22058:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;22152:8;22125:46;;22140:10;22125:46;;;22162:8;22125:46;;;;;;:::i;:::-;;;;;;;;21890:289;;:::o;20140:102::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20225:9:::1;20211:11;:23;;;;20140:102:::0;:::o;20388:78::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20454:4:::1;20440:11;;:18;;;;;;;;;;;;;;;;;;20388:78::o:0;23122:305::-;23297:39;23316:10;23328:7;23297:18;:39::i;:::-;23289:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;23380:39;23394:4;23400:2;23404:7;23413:5;23380:13;:39::i;:::-;23122:305;;;;:::o;32283:547::-;32341:13;32374:16;32382:7;32374;:16::i;:::-;32366:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32435:22;32482:11;;;;;;;;;;;32478:309;;;32584:8;32567:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;32549:61;;32478:309;;;32736:8;32746:17;32755:7;32746:8;:17::i;:::-;32765:8;32719:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32701:74;;32478:309;32814:8;32807:15;;;32283:547;;;:::o;19859:77::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19924:4:::1;19911:10;;:17;;;;;;;;;;;;;;;;;;19859:77::o:0;32842:139::-;32886:13;32947:8;32930:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;32916:57;;32842:139;:::o;22250:164::-;22347:4;22371:18;:25;22390:5;22371:25;;;;;;;;;;;;;;;:35;22397:8;22371:35;;;;;;;;;;;;;;;;;;;;;;;;;22364:42;;22250:164;;;;:::o;15014:186::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15123:1:::1;15103:22;;:8;:22;;;;15095:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15173:19;15183:8;15173:9;:19::i;:::-;15014:186:::0;:::o;24913:127::-;24978:4;25030:1;25002:30;;:7;:16;25010:7;25002:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24995:37;;24913:127;;;:::o;28814:167::-;28916:2;28889:15;:24;28905:7;28889:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28965:7;28961:2;28934:39;;28943:16;28951:7;28943;:16::i;:::-;28934:39;;;;;;;;;;;;28814:167;;:::o;25207:329::-;25300:4;25325:16;25333:7;25325;:16::i;:::-;25317:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25389:13;25405:16;25413:7;25405;:16::i;:::-;25389:32;;25451:5;25440:16;;:7;:16;;;:51;;;;25484:7;25460:31;;:20;25472:7;25460:11;:20::i;:::-;:31;;;25440:51;:87;;;;25495:32;25512:5;25519:7;25495:16;:32::i;:::-;25440:87;25432:96;;;25207:329;;;;:::o;28149:547::-;28301:4;28281:24;;:16;28289:7;28281;:16::i;:::-;:24;;;28273:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28371:1;28357:16;;:2;:16;;;;28349:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28416:39;28437:4;28443:2;28447:7;28416:20;:39::i;:::-;28520:29;28537:1;28541:7;28520:8;:29::i;:::-;28581:1;28562:9;:15;28572:4;28562:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28610:1;28593:9;:13;28603:2;28593:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28641:2;28622:7;:16;28630:7;28622:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28680:7;28676:2;28661:27;;28670:4;28661:27;;;;;;;;;;;;28149:547;;;:::o;13497:98::-;13550:7;13577:10;13570:17;;13497:98;:::o;27459:353::-;27519:13;27535:16;27543:7;27535;:16::i;:::-;27519:32;;27564:48;27585:5;27600:1;27604:7;27564:20;:48::i;:::-;27653:29;27670:1;27674:7;27653:8;:29::i;:::-;27715:1;27695:9;:16;27705:5;27695:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;27734:7;:16;27742:7;27734:16;;;;;;;;;;;;27727:23;;;;;;;;;;;27796:7;27792:1;27768:36;;27777:5;27768:36;;;;;;;;;;;;27508:304;27459:353;:::o;15208:173::-;15264:16;15283:6;;;;;;;;;;;15264:25;;15309:8;15300:6;;:17;;;;;;;;;;;;;;;;;;15364:8;15333:40;;15354:8;15333:40;;;;;;;;;;;;15253:128;15208:173;:::o;25878:110::-;25954:26;25964:2;25968:7;25954:26;;;;;;;;;;;;:9;:26::i;:::-;25878:110;;:::o;24309:291::-;24466:28;24476:4;24482:2;24486:7;24466:9;:28::i;:::-;24513:48;24536:4;24542:2;24546:7;24555:5;24513:22;:48::i;:::-;24505:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24309:291;;;;:::o;15424:532::-;15480:13;15519:1;15510:5;:10;15506:53;;;15537:10;;;;;;;;;;;;;;;;;;;;;15506:53;15569:12;15584:5;15569:20;;15600:14;15625:78;15640:1;15632:4;:9;15625:78;;15658:8;;;;;:::i;:::-;;;;15689:2;15681:10;;;;;:::i;:::-;;;15625:78;;;15713:19;15745:6;15735:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15713:39;;15763:154;15779:1;15770:5;:10;15763:154;;15807:1;15797:11;;;;;:::i;:::-;;;15874:2;15866:5;:10;;;;:::i;:::-;15853:2;:24;;;;:::i;:::-;15840:39;;15823:6;15830;15823:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15903:2;15894:11;;;;;:::i;:::-;;;15763:154;;;15941:6;15927:21;;;;;15424:532;;;;:::o;31698:126::-;;;;:::o;26215:297::-;26345:18;26351:2;26355:7;26345:5;:18::i;:::-;26396:54;26427:1;26431:2;26435:7;26444:5;26396:22;:54::i;:::-;26374:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;26215:297;;;:::o;29546:777::-;29701:4;29722:15;:2;:13;;;:15::i;:::-;29718:598;;;29774:2;29758:36;;;29795:10;29807:4;29813:7;29822:5;29758:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29754:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30019:1;30002:6;:13;:18;29998:248;;;30045:36;;;;;;;;;;:::i;:::-;;;;;;;;29998:248;30196:6;30190:13;30181:6;30177:2;30173:15;30166:38;29754:507;29889:45;;;29879:55;;;:6;:55;;;;29872:62;;;;;29718:598;30300:4;30293:11;;29546:777;;;;;;;:::o;26848:382::-;26942:1;26928:16;;:2;:16;;;;26920:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27001:16;27009:7;27001;:16::i;:::-;27000:17;26992:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27063:45;27092:1;27096:2;27100:7;27063:20;:45::i;:::-;27138:1;27121:9;:13;27131:2;27121:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27169:2;27150:7;:16;27158:7;27150:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27214:7;27210:2;27189:33;;27206:1;27189:33;;;;;;;;;;;;26848:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:552::-;1485:8;1495:6;1545:3;1538:4;1530:6;1526:17;1522:27;1512:122;;1553:79;;:::i;:::-;1512:122;1666:6;1653:20;1643:30;;1696:18;1688:6;1685:30;1682:117;;;1718:79;;:::i;:::-;1682:117;1832:4;1824:6;1820:17;1808:29;;1886:3;1878:4;1870:6;1866:17;1856:8;1852:32;1849:41;1846:128;;;1893:79;;:::i;:::-;1846:128;1428:552;;;;;:::o;1999:338::-;2054:5;2103:3;2096:4;2088:6;2084:17;2080:27;2070:122;;2111:79;;:::i;:::-;2070:122;2228:6;2215:20;2253:78;2327:3;2319:6;2312:4;2304:6;2300:17;2253:78;:::i;:::-;2244:87;;2060:277;1999:338;;;;:::o;2357:340::-;2413:5;2462:3;2455:4;2447:6;2443:17;2439:27;2429:122;;2470:79;;:::i;:::-;2429:122;2587:6;2574:20;2612:79;2687:3;2679:6;2672:4;2664:6;2660:17;2612:79;:::i;:::-;2603:88;;2419:278;2357:340;;;;:::o;2703:139::-;2749:5;2787:6;2774:20;2765:29;;2803:33;2830:5;2803:33;:::i;:::-;2703:139;;;;:::o;2848:329::-;2907:6;2956:2;2944:9;2935:7;2931:23;2927:32;2924:119;;;2962:79;;:::i;:::-;2924:119;3082:1;3107:53;3152:7;3143:6;3132:9;3128:22;3107:53;:::i;:::-;3097:63;;3053:117;2848:329;;;;:::o;3183:474::-;3251:6;3259;3308:2;3296:9;3287:7;3283:23;3279:32;3276:119;;;3314:79;;:::i;:::-;3276:119;3434:1;3459:53;3504:7;3495:6;3484:9;3480:22;3459:53;:::i;:::-;3449:63;;3405:117;3561:2;3587:53;3632:7;3623:6;3612:9;3608:22;3587:53;:::i;:::-;3577:63;;3532:118;3183:474;;;;;:::o;3663:619::-;3740:6;3748;3756;3805:2;3793:9;3784:7;3780:23;3776:32;3773:119;;;3811:79;;:::i;:::-;3773:119;3931:1;3956:53;4001:7;3992:6;3981:9;3977:22;3956:53;:::i;:::-;3946:63;;3902:117;4058:2;4084:53;4129:7;4120:6;4109:9;4105:22;4084:53;:::i;:::-;4074:63;;4029:118;4186:2;4212:53;4257:7;4248:6;4237:9;4233:22;4212:53;:::i;:::-;4202:63;;4157:118;3663:619;;;;;:::o;4288:963::-;4385:6;4393;4401;4409;4417;4466:3;4454:9;4445:7;4441:23;4437:33;4434:120;;;4473:79;;:::i;:::-;4434:120;4593:1;4618:53;4663:7;4654:6;4643:9;4639:22;4618:53;:::i;:::-;4608:63;;4564:117;4720:2;4746:53;4791:7;4782:6;4771:9;4767:22;4746:53;:::i;:::-;4736:63;;4691:118;4848:2;4874:53;4919:7;4910:6;4899:9;4895:22;4874:53;:::i;:::-;4864:63;;4819:118;5004:2;4993:9;4989:18;4976:32;5035:18;5027:6;5024:30;5021:117;;;5057:79;;:::i;:::-;5021:117;5170:64;5226:7;5217:6;5206:9;5202:22;5170:64;:::i;:::-;5152:82;;;;4947:297;4288:963;;;;;;;;:::o;5257:943::-;5352:6;5360;5368;5376;5425:3;5413:9;5404:7;5400:23;5396:33;5393:120;;;5432:79;;:::i;:::-;5393:120;5552:1;5577:53;5622:7;5613:6;5602:9;5598:22;5577:53;:::i;:::-;5567:63;;5523:117;5679:2;5705:53;5750:7;5741:6;5730:9;5726:22;5705:53;:::i;:::-;5695:63;;5650:118;5807:2;5833:53;5878:7;5869:6;5858:9;5854:22;5833:53;:::i;:::-;5823:63;;5778:118;5963:2;5952:9;5948:18;5935:32;5994:18;5986:6;5983:30;5980:117;;;6016:79;;:::i;:::-;5980:117;6121:62;6175:7;6166:6;6155:9;6151:22;6121:62;:::i;:::-;6111:72;;5906:287;5257:943;;;;;;;:::o;6206:468::-;6271:6;6279;6328:2;6316:9;6307:7;6303:23;6299:32;6296:119;;;6334:79;;:::i;:::-;6296:119;6454:1;6479:53;6524:7;6515:6;6504:9;6500:22;6479:53;:::i;:::-;6469:63;;6425:117;6581:2;6607:50;6649:7;6640:6;6629:9;6625:22;6607:50;:::i;:::-;6597:60;;6552:115;6206:468;;;;;:::o;6680:474::-;6748:6;6756;6805:2;6793:9;6784:7;6780:23;6776:32;6773:119;;;6811:79;;:::i;:::-;6773:119;6931:1;6956:53;7001:7;6992:6;6981:9;6977:22;6956:53;:::i;:::-;6946:63;;6902:117;7058:2;7084:53;7129:7;7120:6;7109:9;7105:22;7084:53;:::i;:::-;7074:63;;7029:118;6680:474;;;;;:::o;7160:327::-;7218:6;7267:2;7255:9;7246:7;7242:23;7238:32;7235:119;;;7273:79;;:::i;:::-;7235:119;7393:1;7418:52;7462:7;7453:6;7442:9;7438:22;7418:52;:::i;:::-;7408:62;;7364:116;7160:327;;;;:::o;7493:349::-;7562:6;7611:2;7599:9;7590:7;7586:23;7582:32;7579:119;;;7617:79;;:::i;:::-;7579:119;7737:1;7762:63;7817:7;7808:6;7797:9;7793:22;7762:63;:::i;:::-;7752:73;;7708:127;7493:349;;;;:::o;7848:509::-;7917:6;7966:2;7954:9;7945:7;7941:23;7937:32;7934:119;;;7972:79;;:::i;:::-;7934:119;8120:1;8109:9;8105:17;8092:31;8150:18;8142:6;8139:30;8136:117;;;8172:79;;:::i;:::-;8136:117;8277:63;8332:7;8323:6;8312:9;8308:22;8277:63;:::i;:::-;8267:73;;8063:287;7848:509;;;;:::o;8363:329::-;8422:6;8471:2;8459:9;8450:7;8446:23;8442:32;8439:119;;;8477:79;;:::i;:::-;8439:119;8597:1;8622:53;8667:7;8658:6;8647:9;8643:22;8622:53;:::i;:::-;8612:63;;8568:117;8363:329;;;;:::o;8698:118::-;8785:24;8803:5;8785:24;:::i;:::-;8780:3;8773:37;8698:118;;:::o;8822:109::-;8903:21;8918:5;8903:21;:::i;:::-;8898:3;8891:34;8822:109;;:::o;8937:115::-;9022:23;9039:5;9022:23;:::i;:::-;9017:3;9010:36;8937:115;;:::o;9058:360::-;9144:3;9172:38;9204:5;9172:38;:::i;:::-;9226:70;9289:6;9284:3;9226:70;:::i;:::-;9219:77;;9305:52;9350:6;9345:3;9338:4;9331:5;9327:16;9305:52;:::i;:::-;9382:29;9404:6;9382:29;:::i;:::-;9377:3;9373:39;9366:46;;9148:270;9058:360;;;;:::o;9424:364::-;9512:3;9540:39;9573:5;9540:39;:::i;:::-;9595:71;9659:6;9654:3;9595:71;:::i;:::-;9588:78;;9675:52;9720:6;9715:3;9708:4;9701:5;9697:16;9675:52;:::i;:::-;9752:29;9774:6;9752:29;:::i;:::-;9747:3;9743:39;9736:46;;9516:272;9424:364;;;;:::o;9794:377::-;9900:3;9928:39;9961:5;9928:39;:::i;:::-;9983:89;10065:6;10060:3;9983:89;:::i;:::-;9976:96;;10081:52;10126:6;10121:3;10114:4;10107:5;10103:16;10081:52;:::i;:::-;10158:6;10153:3;10149:16;10142:23;;9904:267;9794:377;;;;:::o;10201:845::-;10304:3;10341:5;10335:12;10370:36;10396:9;10370:36;:::i;:::-;10422:89;10504:6;10499:3;10422:89;:::i;:::-;10415:96;;10542:1;10531:9;10527:17;10558:1;10553:137;;;;10704:1;10699:341;;;;10520:520;;10553:137;10637:4;10633:9;10622;10618:25;10613:3;10606:38;10673:6;10668:3;10664:16;10657:23;;10553:137;;10699:341;10766:38;10798:5;10766:38;:::i;:::-;10826:1;10840:154;10854:6;10851:1;10848:13;10840:154;;;10928:7;10922:14;10918:1;10913:3;10909:11;10902:35;10978:1;10969:7;10965:15;10954:26;;10876:4;10873:1;10869:12;10864:17;;10840:154;;;11023:6;11018:3;11014:16;11007:23;;10706:334;;10520:520;;10308:738;;10201:845;;;;:::o;11052:366::-;11194:3;11215:67;11279:2;11274:3;11215:67;:::i;:::-;11208:74;;11291:93;11380:3;11291:93;:::i;:::-;11409:2;11404:3;11400:12;11393:19;;11052:366;;;:::o;11424:402::-;11584:3;11605:85;11687:2;11682:3;11605:85;:::i;:::-;11598:92;;11699:93;11788:3;11699:93;:::i;:::-;11817:2;11812:3;11808:12;11801:19;;11424:402;;;:::o;11832:366::-;11974:3;11995:67;12059:2;12054:3;11995:67;:::i;:::-;11988:74;;12071:93;12160:3;12071:93;:::i;:::-;12189:2;12184:3;12180:12;12173:19;;11832:366;;;:::o;12204:::-;12346:3;12367:67;12431:2;12426:3;12367:67;:::i;:::-;12360:74;;12443:93;12532:3;12443:93;:::i;:::-;12561:2;12556:3;12552:12;12545:19;;12204:366;;;:::o;12576:::-;12718:3;12739:67;12803:2;12798:3;12739:67;:::i;:::-;12732:74;;12815:93;12904:3;12815:93;:::i;:::-;12933:2;12928:3;12924:12;12917:19;;12576:366;;;:::o;12948:::-;13090:3;13111:67;13175:2;13170:3;13111:67;:::i;:::-;13104:74;;13187:93;13276:3;13187:93;:::i;:::-;13305:2;13300:3;13296:12;13289:19;;12948:366;;;:::o;13320:::-;13462:3;13483:67;13547:2;13542:3;13483:67;:::i;:::-;13476:74;;13559:93;13648:3;13559:93;:::i;:::-;13677:2;13672:3;13668:12;13661:19;;13320:366;;;:::o;13692:::-;13834:3;13855:67;13919:2;13914:3;13855:67;:::i;:::-;13848:74;;13931:93;14020:3;13931:93;:::i;:::-;14049:2;14044:3;14040:12;14033:19;;13692:366;;;:::o;14064:::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:::-;14578:3;14599:67;14663:2;14658:3;14599:67;:::i;:::-;14592:74;;14675:93;14764:3;14675:93;:::i;:::-;14793:2;14788:3;14784:12;14777:19;;14436:366;;;:::o;14808:402::-;14968:3;14989:85;15071:2;15066:3;14989:85;:::i;:::-;14982:92;;15083:93;15172:3;15083:93;:::i;:::-;15201:2;15196:3;15192:12;15185:19;;14808:402;;;:::o;15216:366::-;15358:3;15379:67;15443:2;15438:3;15379:67;:::i;:::-;15372:74;;15455:93;15544:3;15455:93;:::i;:::-;15573:2;15568:3;15564:12;15557:19;;15216:366;;;:::o;15588:::-;15730:3;15751:67;15815:2;15810:3;15751:67;:::i;:::-;15744:74;;15827:93;15916:3;15827:93;:::i;:::-;15945:2;15940:3;15936:12;15929:19;;15588:366;;;:::o;15960:::-;16102:3;16123:67;16187:2;16182:3;16123:67;:::i;:::-;16116:74;;16199:93;16288:3;16199:93;:::i;:::-;16317:2;16312:3;16308:12;16301:19;;15960:366;;;:::o;16332:::-;16474:3;16495:67;16559:2;16554:3;16495:67;:::i;:::-;16488:74;;16571:93;16660:3;16571:93;:::i;:::-;16689:2;16684:3;16680:12;16673:19;;16332:366;;;:::o;16704:::-;16846:3;16867:67;16931:2;16926:3;16867:67;:::i;:::-;16860:74;;16943:93;17032:3;16943:93;:::i;:::-;17061:2;17056:3;17052:12;17045:19;;16704:366;;;:::o;17076:::-;17218:3;17239:67;17303:2;17298:3;17239:67;:::i;:::-;17232:74;;17315:93;17404:3;17315:93;:::i;:::-;17433:2;17428:3;17424:12;17417:19;;17076:366;;;:::o;17448:::-;17590:3;17611:67;17675:2;17670:3;17611:67;:::i;:::-;17604:74;;17687:93;17776:3;17687:93;:::i;:::-;17805:2;17800:3;17796:12;17789:19;;17448:366;;;:::o;17820:::-;17962:3;17983:67;18047:2;18042:3;17983:67;:::i;:::-;17976:74;;18059:93;18148:3;18059:93;:::i;:::-;18177:2;18172:3;18168:12;18161:19;;17820:366;;;:::o;18192:::-;18334:3;18355:67;18419:2;18414:3;18355:67;:::i;:::-;18348:74;;18431:93;18520:3;18431:93;:::i;:::-;18549:2;18544:3;18540:12;18533:19;;18192:366;;;:::o;18564:::-;18706:3;18727:67;18791:2;18786:3;18727:67;:::i;:::-;18720:74;;18803:93;18892:3;18803:93;:::i;:::-;18921:2;18916:3;18912:12;18905:19;;18564:366;;;:::o;18936:398::-;19095:3;19116:83;19197:1;19192:3;19116:83;:::i;:::-;19109:90;;19208:93;19297:3;19208:93;:::i;:::-;19326:1;19321:3;19317:11;19310:18;;18936:398;;;:::o;19340:366::-;19482:3;19503:67;19567:2;19562:3;19503:67;:::i;:::-;19496:74;;19579:93;19668:3;19579:93;:::i;:::-;19697:2;19692:3;19688:12;19681:19;;19340:366;;;:::o;19712:::-;19854:3;19875:67;19939:2;19934:3;19875:67;:::i;:::-;19868:74;;19951:93;20040:3;19951:93;:::i;:::-;20069:2;20064:3;20060:12;20053:19;;19712:366;;;:::o;20084:118::-;20171:24;20189:5;20171:24;:::i;:::-;20166:3;20159:37;20084:118;;:::o;20208:583::-;20430:3;20452:92;20540:3;20531:6;20452:92;:::i;:::-;20445:99;;20561:95;20652:3;20643:6;20561:95;:::i;:::-;20554:102;;20673:92;20761:3;20752:6;20673:92;:::i;:::-;20666:99;;20782:3;20775:10;;20208:583;;;;;;:::o;20797:535::-;21027:3;21049:92;21137:3;21128:6;21049:92;:::i;:::-;21042:99;;21158:148;21302:3;21158:148;:::i;:::-;21151:155;;21323:3;21316:10;;20797:535;;;;:::o;21338:::-;21568:3;21590:92;21678:3;21669:6;21590:92;:::i;:::-;21583:99;;21699:148;21843:3;21699:148;:::i;:::-;21692:155;;21864:3;21857:10;;21338:535;;;;:::o;21879:379::-;22063:3;22085:147;22228:3;22085:147;:::i;:::-;22078:154;;22249:3;22242:10;;21879:379;;;:::o;22264:222::-;22357:4;22395:2;22384:9;22380:18;22372:26;;22408:71;22476:1;22465:9;22461:17;22452:6;22408:71;:::i;:::-;22264:222;;;;:::o;22492:640::-;22687:4;22725:3;22714:9;22710:19;22702:27;;22739:71;22807:1;22796:9;22792:17;22783:6;22739:71;:::i;:::-;22820:72;22888:2;22877:9;22873:18;22864:6;22820:72;:::i;:::-;22902;22970:2;22959:9;22955:18;22946:6;22902:72;:::i;:::-;23021:9;23015:4;23011:20;23006:2;22995:9;22991:18;22984:48;23049:76;23120:4;23111:6;23049:76;:::i;:::-;23041:84;;22492:640;;;;;;;:::o;23138:210::-;23225:4;23263:2;23252:9;23248:18;23240:26;;23276:65;23338:1;23327:9;23323:17;23314:6;23276:65;:::i;:::-;23138:210;;;;:::o;23354:218::-;23445:4;23483:2;23472:9;23468:18;23460:26;;23496:69;23562:1;23551:9;23547:17;23538:6;23496:69;:::i;:::-;23354:218;;;;:::o;23578:313::-;23691:4;23729:2;23718:9;23714:18;23706:26;;23778:9;23772:4;23768:20;23764:1;23753:9;23749:17;23742:47;23806:78;23879:4;23870:6;23806:78;:::i;:::-;23798:86;;23578:313;;;;:::o;23897:419::-;24063:4;24101:2;24090:9;24086:18;24078:26;;24150:9;24144:4;24140:20;24136:1;24125:9;24121:17;24114:47;24178:131;24304:4;24178:131;:::i;:::-;24170:139;;23897:419;;;:::o;24322:::-;24488:4;24526:2;24515:9;24511:18;24503:26;;24575:9;24569:4;24565:20;24561:1;24550:9;24546:17;24539:47;24603:131;24729:4;24603:131;:::i;:::-;24595:139;;24322:419;;;:::o;24747:::-;24913:4;24951:2;24940:9;24936:18;24928:26;;25000:9;24994:4;24990:20;24986:1;24975:9;24971:17;24964:47;25028:131;25154:4;25028:131;:::i;:::-;25020:139;;24747:419;;;:::o;25172:::-;25338:4;25376:2;25365:9;25361:18;25353:26;;25425:9;25419:4;25415:20;25411:1;25400:9;25396:17;25389:47;25453:131;25579:4;25453:131;:::i;:::-;25445:139;;25172:419;;;:::o;25597:::-;25763:4;25801:2;25790:9;25786:18;25778:26;;25850:9;25844:4;25840:20;25836:1;25825:9;25821:17;25814:47;25878:131;26004:4;25878:131;:::i;:::-;25870:139;;25597:419;;;:::o;26022:::-;26188:4;26226:2;26215:9;26211:18;26203:26;;26275:9;26269:4;26265:20;26261:1;26250:9;26246:17;26239:47;26303:131;26429:4;26303:131;:::i;:::-;26295:139;;26022:419;;;:::o;26447:::-;26613:4;26651:2;26640:9;26636:18;26628:26;;26700:9;26694:4;26690:20;26686:1;26675:9;26671:17;26664:47;26728:131;26854:4;26728:131;:::i;:::-;26720:139;;26447:419;;;:::o;26872:::-;27038:4;27076:2;27065:9;27061:18;27053:26;;27125:9;27119:4;27115:20;27111:1;27100:9;27096:17;27089:47;27153:131;27279:4;27153:131;:::i;:::-;27145:139;;26872:419;;;:::o;27297:::-;27463:4;27501:2;27490:9;27486:18;27478:26;;27550:9;27544:4;27540:20;27536:1;27525:9;27521:17;27514:47;27578:131;27704:4;27578:131;:::i;:::-;27570:139;;27297:419;;;:::o;27722:::-;27888:4;27926:2;27915:9;27911:18;27903:26;;27975:9;27969:4;27965:20;27961:1;27950:9;27946:17;27939:47;28003:131;28129:4;28003:131;:::i;:::-;27995:139;;27722:419;;;:::o;28147:::-;28313:4;28351:2;28340:9;28336:18;28328:26;;28400:9;28394:4;28390:20;28386:1;28375:9;28371:17;28364:47;28428:131;28554:4;28428:131;:::i;:::-;28420:139;;28147:419;;;:::o;28572:::-;28738:4;28776:2;28765:9;28761:18;28753:26;;28825:9;28819:4;28815:20;28811:1;28800:9;28796:17;28789:47;28853:131;28979:4;28853:131;:::i;:::-;28845:139;;28572:419;;;:::o;28997:::-;29163:4;29201:2;29190:9;29186:18;29178:26;;29250:9;29244:4;29240:20;29236:1;29225:9;29221:17;29214:47;29278:131;29404:4;29278:131;:::i;:::-;29270:139;;28997:419;;;:::o;29422:::-;29588:4;29626:2;29615:9;29611:18;29603:26;;29675:9;29669:4;29665:20;29661:1;29650:9;29646:17;29639:47;29703:131;29829:4;29703:131;:::i;:::-;29695:139;;29422:419;;;:::o;29847:::-;30013:4;30051:2;30040:9;30036:18;30028:26;;30100:9;30094:4;30090:20;30086:1;30075:9;30071:17;30064:47;30128:131;30254:4;30128:131;:::i;:::-;30120:139;;29847:419;;;:::o;30272:::-;30438:4;30476:2;30465:9;30461:18;30453:26;;30525:9;30519:4;30515:20;30511:1;30500:9;30496:17;30489:47;30553:131;30679:4;30553:131;:::i;:::-;30545:139;;30272:419;;;:::o;30697:::-;30863:4;30901:2;30890:9;30886:18;30878:26;;30950:9;30944:4;30940:20;30936:1;30925:9;30921:17;30914:47;30978:131;31104:4;30978:131;:::i;:::-;30970:139;;30697:419;;;:::o;31122:::-;31288:4;31326:2;31315:9;31311:18;31303:26;;31375:9;31369:4;31365:20;31361:1;31350:9;31346:17;31339:47;31403:131;31529:4;31403:131;:::i;:::-;31395:139;;31122:419;;;:::o;31547:::-;31713:4;31751:2;31740:9;31736:18;31728:26;;31800:9;31794:4;31790:20;31786:1;31775:9;31771:17;31764:47;31828:131;31954:4;31828:131;:::i;:::-;31820:139;;31547:419;;;:::o;31972:::-;32138:4;32176:2;32165:9;32161:18;32153:26;;32225:9;32219:4;32215:20;32211:1;32200:9;32196:17;32189:47;32253:131;32379:4;32253:131;:::i;:::-;32245:139;;31972:419;;;:::o;32397:::-;32563:4;32601:2;32590:9;32586:18;32578:26;;32650:9;32644:4;32640:20;32636:1;32625:9;32621:17;32614:47;32678:131;32804:4;32678:131;:::i;:::-;32670:139;;32397:419;;;:::o;32822:222::-;32915:4;32953:2;32942:9;32938:18;32930:26;;32966:71;33034:1;33023:9;33019:17;33010:6;32966:71;:::i;:::-;32822:222;;;;:::o;33050:129::-;33084:6;33111:20;;:::i;:::-;33101:30;;33140:33;33168:4;33160:6;33140:33;:::i;:::-;33050:129;;;:::o;33185:75::-;33218:6;33251:2;33245:9;33235:19;;33185:75;:::o;33266:307::-;33327:4;33417:18;33409:6;33406:30;33403:56;;;33439:18;;:::i;:::-;33403:56;33477:29;33499:6;33477:29;:::i;:::-;33469:37;;33561:4;33555;33551:15;33543:23;;33266:307;;;:::o;33579:308::-;33641:4;33731:18;33723:6;33720:30;33717:56;;;33753:18;;:::i;:::-;33717:56;33791:29;33813:6;33791:29;:::i;:::-;33783:37;;33875:4;33869;33865:15;33857:23;;33579:308;;;:::o;33893:141::-;33942:4;33965:3;33957:11;;33988:3;33985:1;33978:14;34022:4;34019:1;34009:18;34001:26;;33893:141;;;:::o;34040:98::-;34091:6;34125:5;34119:12;34109:22;;34040:98;;;:::o;34144:99::-;34196:6;34230:5;34224:12;34214:22;;34144:99;;;:::o;34249:168::-;34332:11;34366:6;34361:3;34354:19;34406:4;34401:3;34397:14;34382:29;;34249:168;;;;:::o;34423:147::-;34524:11;34561:3;34546:18;;34423:147;;;;:::o;34576:169::-;34660:11;34694:6;34689:3;34682:19;34734:4;34729:3;34725:14;34710:29;;34576:169;;;;:::o;34751:148::-;34853:11;34890:3;34875:18;;34751:148;;;;:::o;34905:305::-;34945:3;34964:20;34982:1;34964:20;:::i;:::-;34959:25;;34998:20;35016:1;34998:20;:::i;:::-;34993:25;;35152:1;35084:66;35080:74;35077:1;35074:81;35071:107;;;35158:18;;:::i;:::-;35071:107;35202:1;35199;35195:9;35188:16;;34905:305;;;;:::o;35216:185::-;35256:1;35273:20;35291:1;35273:20;:::i;:::-;35268:25;;35307:20;35325:1;35307:20;:::i;:::-;35302:25;;35346:1;35336:35;;35351:18;;:::i;:::-;35336:35;35393:1;35390;35386:9;35381:14;;35216:185;;;;:::o;35407:348::-;35447:7;35470:20;35488:1;35470:20;:::i;:::-;35465:25;;35504:20;35522:1;35504:20;:::i;:::-;35499:25;;35692:1;35624:66;35620:74;35617:1;35614:81;35609:1;35602:9;35595:17;35591:105;35588:131;;;35699:18;;:::i;:::-;35588:131;35747:1;35744;35740:9;35729:20;;35407:348;;;;:::o;35761:191::-;35801:4;35821:20;35839:1;35821:20;:::i;:::-;35816:25;;35855:20;35873:1;35855:20;:::i;:::-;35850:25;;35894:1;35891;35888:8;35885:34;;;35899:18;;:::i;:::-;35885:34;35944:1;35941;35937:9;35929:17;;35761:191;;;;:::o;35958:96::-;35995:7;36024:24;36042:5;36024:24;:::i;:::-;36013:35;;35958:96;;;:::o;36060:90::-;36094:7;36137:5;36130:13;36123:21;36112:32;;36060:90;;;:::o;36156:149::-;36192:7;36232:66;36225:5;36221:78;36210:89;;36156:149;;;:::o;36311:126::-;36348:7;36388:42;36381:5;36377:54;36366:65;;36311:126;;;:::o;36443:77::-;36480:7;36509:5;36498:16;;36443:77;;;:::o;36526:154::-;36610:6;36605:3;36600;36587:30;36672:1;36663:6;36658:3;36654:16;36647:27;36526:154;;;:::o;36686:307::-;36754:1;36764:113;36778:6;36775:1;36772:13;36764:113;;;36863:1;36858:3;36854:11;36848:18;36844:1;36839:3;36835:11;36828:39;36800:2;36797:1;36793:10;36788:15;;36764:113;;;36895:6;36892:1;36889:13;36886:101;;;36975:1;36966:6;36961:3;36957:16;36950:27;36886:101;36735:258;36686:307;;;:::o;36999:320::-;37043:6;37080:1;37074:4;37070:12;37060:22;;37127:1;37121:4;37117:12;37148:18;37138:81;;37204:4;37196:6;37192:17;37182:27;;37138:81;37266:2;37258:6;37255:14;37235:18;37232:38;37229:84;;;37285:18;;:::i;:::-;37229:84;37050:269;36999:320;;;:::o;37325:281::-;37408:27;37430:4;37408:27;:::i;:::-;37400:6;37396:40;37538:6;37526:10;37523:22;37502:18;37490:10;37487:34;37484:62;37481:88;;;37549:18;;:::i;:::-;37481:88;37589:10;37585:2;37578:22;37368:238;37325:281;;:::o;37612:233::-;37651:3;37674:24;37692:5;37674:24;:::i;:::-;37665:33;;37720:66;37713:5;37710:77;37707:103;;;37790:18;;:::i;:::-;37707:103;37837:1;37830:5;37826:13;37819:20;;37612:233;;;:::o;37851:176::-;37883:1;37900:20;37918:1;37900:20;:::i;:::-;37895:25;;37934:20;37952:1;37934:20;:::i;:::-;37929:25;;37973:1;37963:35;;37978:18;;:::i;:::-;37963:35;38019:1;38016;38012:9;38007:14;;37851:176;;;;:::o;38033:180::-;38081:77;38078:1;38071:88;38178:4;38175:1;38168:15;38202:4;38199:1;38192:15;38219:180;38267:77;38264:1;38257:88;38364:4;38361:1;38354:15;38388:4;38385:1;38378:15;38405:180;38453:77;38450:1;38443:88;38550:4;38547:1;38540:15;38574:4;38571:1;38564:15;38591:180;38639:77;38636:1;38629:88;38736:4;38733:1;38726:15;38760:4;38757:1;38750:15;38777:180;38825:77;38822:1;38815:88;38922:4;38919:1;38912:15;38946:4;38943:1;38936:15;38963:117;39072:1;39069;39062:12;39086:117;39195:1;39192;39185:12;39209:117;39318:1;39315;39308:12;39332:117;39441:1;39438;39431:12;39455:117;39564:1;39561;39554:12;39578:117;39687:1;39684;39677:12;39701:102;39742:6;39793:2;39789:7;39784:2;39777:5;39773:14;39769:28;39759:38;;39701:102;;;:::o;39809:182::-;39949:34;39945:1;39937:6;39933:14;39926:58;39809:182;:::o;39997:163::-;40137:15;40133:1;40125:6;40121:14;40114:39;39997:163;:::o;40166:169::-;40306:21;40302:1;40294:6;40290:14;40283:45;40166:169;:::o;40341:177::-;40481:29;40477:1;40469:6;40465:14;40458:53;40341:177;:::o;40524:178::-;40664:30;40660:1;40652:6;40648:14;40641:54;40524:178;:::o;40708:182::-;40848:34;40844:1;40836:6;40832:14;40825:58;40708:182;:::o;40896:180::-;41036:32;41032:1;41024:6;41020:14;41013:56;40896:180;:::o;41082:174::-;41222:26;41218:1;41210:6;41206:14;41199:50;41082:174;:::o;41262:182::-;41402:34;41398:1;41390:6;41386:14;41379:58;41262:182;:::o;41450:175::-;41590:27;41586:1;41578:6;41574:14;41567:51;41450:175;:::o;41631:162::-;41771:14;41767:1;41759:6;41755:14;41748:38;41631:162;:::o;41799:180::-;41939:32;41935:1;41927:6;41923:14;41916:56;41799:180;:::o;41985:176::-;42125:28;42121:1;42113:6;42109:14;42102:52;41985:176;:::o;42167:181::-;42307:33;42303:1;42295:6;42291:14;42284:57;42167:181;:::o;42354:::-;42494:33;42490:1;42482:6;42478:14;42471:57;42354:181;:::o;42541:182::-;42681:34;42677:1;42669:6;42665:14;42658:58;42541:182;:::o;42729:::-;42869:34;42865:1;42857:6;42853:14;42846:58;42729:182;:::o;42917:178::-;43057:30;43053:1;43045:6;43041:14;43034:54;42917:178;:::o;43101:182::-;43241:34;43237:1;43229:6;43225:14;43218:58;43101:182;:::o;43289:178::-;43429:30;43425:1;43417:6;43413:14;43406:54;43289:178;:::o;43473:164::-;43613:16;43609:1;43601:6;43597:14;43590:40;43473:164;:::o;43643:114::-;;:::o;43763:179::-;43903:31;43899:1;43891:6;43887:14;43880:55;43763:179;:::o;43948:168::-;44088:20;44084:1;44076:6;44072:14;44065:44;43948:168;:::o;44122:122::-;44195:24;44213:5;44195:24;:::i;:::-;44188:5;44185:35;44175:63;;44234:1;44231;44224:12;44175:63;44122:122;:::o;44250:116::-;44320:21;44335:5;44320:21;:::i;:::-;44313:5;44310:32;44300:60;;44356:1;44353;44346:12;44300:60;44250:116;:::o;44372:120::-;44444:23;44461:5;44444:23;:::i;:::-;44437:5;44434:34;44424:62;;44482:1;44479;44472:12;44424:62;44372:120;:::o;44498:122::-;44571:24;44589:5;44571:24;:::i;:::-;44564:5;44561:35;44551:63;;44610:1;44607;44600:12;44551:63;44498:122;:::o

Swarm Source

ipfs://3366a3f808f5ea6d50dafa2cc7f3d5fea60a4cc9478edca78e336149a05bf655
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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