Token Egonauts

 

Overview [ERC-721]

Min. Price
$669.11 @ 0.500000 ETH
Max Total Supply:
213 EGONS

Holders:
62

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Egonauts

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-02-15
*/

// 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 Egonauts 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 _hiddenURI;

    // 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;
    uint256 private _tokensRevealed;  //for URI redirects
    uint256 public price;
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerTxn;
    uint256 public reservedTokens;
    
    
    //Payout Wallets
    address Founder    = payable(0xa9193c40412FD7E1c5cA4331500264427f6673a5);
    address CoFounder  = payable(0x20F4Fb97055D8652B0A11f405a3f56fC8c574A15);
    address WebDev     = payable(0xf39CEB8Ab0DE75Dca31e988fD59D53cC009803E4);
    address SolDev     = payable(0x2E07cd18E675c921E8c523E36D79788734E94f88);
    address Artist     = payable(0x37aeE816b29aB75fB3BD35E7DF49a76d20797aB6);
    address Foundation = payable(0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe);
    address Marketing  = payable(0xcBCefD0C44aDb0dC2Cc8BF03eE5F37013aF8A548);
    address Director   = payable(0xe54B5Ae556a1230Ea2B2a431F78BA30f2E9ba406);
    

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Egonauts";
        _symbol = "EGONS";
        _baseURI = "https://egonauts.io/metadata/";
        _hiddenURI = "https://egonauts.io/metadata/";
        
        totalTokens = 101;
        price = 1000 * (10 ** 15); // Replace leading value with price in finney
        
        maxPerTxn = 3;
        reservedTokens = 0;
    }

    //@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 == Egonauts.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 fundsAvailable = address(this).balance;
        uint256 sendAmount;
        bool success;
        
        sendAmount = (fundsAvailable*360) / 1000;
        (success, ) = Founder.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (fundsAvailable*360) / 1000;
        (success, ) = CoFounder.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (fundsAvailable * 20) / 1000;
        (success, ) = WebDev.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (fundsAvailable * 50) / 1000;
        (success, ) = SolDev.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (fundsAvailable * 100) / 1000;
        (success, ) = Artist.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (fundsAvailable * 10) / 1000;
        (success, ) = Foundation.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (fundsAvailable * 50) / 1000;
        (success, ) = Marketing.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
        
        sendAmount = (fundsAvailable * 50) / 1000;
        (success, ) = Director.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }

    function emergencyWithdraw() external onlyOwner {
        uint256 fundsAvailable = address(this).balance;
        bool success;

        (success, ) = _msgSender().call{value: fundsAvailable}("");
        require(success, "Transaction Unsuccessful");
    }   
    
    function ownerMint(address _to, uint256 qty) external onlyOwner {
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        if (reservedTokens >= qty) {
            reservedTokens -= qty;
        } else {
            reservedTokens = 0;
        }
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function airDrop(address[] memory _to) external onlyOwner {
        uint256 qty = _to.length;
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted;
        if (reservedTokens >= qty) {
            reservedTokens -= qty;
        } else {
            reservedTokens = 0;
        }
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to[i], mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function mint(uint256 qty) external payable reentryLock {
        address _to = _msgSender();
        require(msg.value == qty * price, "Mint: Insufficient Funds");
        require(qty <= maxPerTxn, "Mint: Above Trxn Threshold!");
        require((qty + reservedTokens + numberMinted) <= totalTokens, "Mint: Not enough available");
        require(mintActive, "Mint: minting not open");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        numberMinted += qty;

        //send tokens
        for(uint256 i = 0; i < qty; i++) {
            _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 setMaxMintThreshold(uint256 maxMints) external onlyOwner {
        maxPerTxn = maxMints;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function setHiddenURI(string memory newURI) public onlyOwner {
        _hiddenURI = 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 setReserve(uint256 newReserve) public onlyOwner {
        reservedTokens = newReserve;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function revealTokens(uint256 newVal) external onlyOwner {
        _tokensRevealed = newVal;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

    /**
     * @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 (tokenId >= _tokensRevealed) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_hiddenURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","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":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","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":"reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"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":"string","name":"newURI","type":"string"}],"name":"setHiddenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxMintThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserve","type":"uint256"}],"name":"setReserve","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"}]

608060405260008060146101000a81548160ff02191690831515021790555073a9193c40412fd7e1c5ca4331500264427f6673a5601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507320f4fb97055d8652b0a11f405a3f56fc8c574a15601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f39ceb8ab0de75dca31e988fd59d53cc009803e4601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732e07cd18e675c921e8c523e36d79788734e94f88601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507337aee816b29ab75fb3bd35e7df49a76d20797ab6601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de0b295669a9fd93d5f28d9ec85e40f4cb697bae601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cbcefd0c44adb0dc2cc8bf03ee5f37013af8a548601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e54b5ae556a1230ea2b2a431f78ba30f2e9ba406601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620002d357600080fd5b50620002f4620002e86200045960201b60201c565b6200046160201b60201c565b6040518060400160405280600881526020017f45676f6e61757473000000000000000000000000000000000000000000000000815250600190805190602001906200034192919062000525565b506040518060400160405280600581526020017f45474f4e53000000000000000000000000000000000000000000000000000000815250600290805190602001906200038f92919062000525565b506040518060400160405280601d81526020017f68747470733a2f2f65676f6e617574732e696f2f6d657461646174612f00000081525060039080519060200190620003dd92919062000525565b506040518060400160405280601d81526020017f68747470733a2f2f65676f6e617574732e696f2f6d657461646174612f000000815250600490805190602001906200042b92919062000525565b506065600c81905550670de0b6b3a7640000600b819055506003600e819055506000600f819055506200063a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200053390620005d5565b90600052602060002090601f016020900481019282620005575760008555620005a3565b82601f106200057257805160ff1916838001178555620005a3565b82800160010185558215620005a3579182015b82811115620005a257825182559160200191906001019062000585565b5b509050620005b29190620005b6565b5090565b5b80821115620005d1576000816000905550600101620005b7565b5090565b60006002820490506001821680620005ee57607f821691505b602082108114156200060557620006046200060b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614e5a806200064a6000396000f3fe6080604052600436106102495760003560e01c806370a0823111610139578063b88d4fde116100b6578063db2e21bc1161007a578063db2e21bc14610824578063e8a3d4851461083b578063e985e9c514610866578063f2fde38b146108a3578063f8b2cb4f146108cc578063fa825efd1461090957610250565b8063b88d4fde14610755578063bbaac02f1461077e578063c87b56dd146107a7578063c91c0462146107e4578063d78c06fa146107fb57610250565b806395d89b41116100fd57806395d89b4114610691578063a035b1fe146106bc578063a0712d68146106e7578063a22cb46514610703578063b0b922631461072c57610250565b806370a08231146105be578063715018a6146105fb5780637e1c0c09146106125780638da5cb5b1461063d57806391b7f5ed1461066857610250565b80632e56f71e116101c757806342966c681161018b57806342966c68146104db578063484b973c1461050457806349a772b51461052d57806355f804b3146105585780636352211e1461058157610250565b80632e56f71e146104305780633cb51994146104475780633ccfd60b146104725780634256dbe31461048957806342842e0e146104b257610250565b8063150b7a021161020e578063150b7a021461034957806315a553471461038657806318160ddd146103b157806323b872dd146103dc57806325fd90f31461040557610250565b8062b6849f1461025257806301ffc9a71461027b57806306fdde03146102b8578063081812fc146102e3578063095ea7b31461032057610250565b3661025057005b005b34801561025e57600080fd5b50610279600480360381019061027491906139ed565b610932565b005b34801561028757600080fd5b506102a2600480360381019061029d9190613a36565b610af9565b6040516102af9190614127565b60405180910390f35b3480156102c457600080fd5b506102cd610c82565b6040516102da919061415d565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613ad9565b610d14565b60405161031791906140c0565b60405180910390f35b34801561032c57600080fd5b50610347600480360381019061034291906139ad565b610d99565b005b34801561035557600080fd5b50610370600480360381019061036b9190613862565b610ea3565b60405161037d9190614142565b60405180910390f35b34801561039257600080fd5b5061039b610eb8565b6040516103a8919061447f565b60405180910390f35b3480156103bd57600080fd5b506103c6610ebe565b6040516103d3919061447f565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe919061380f565b610ec8565b005b34801561041157600080fd5b5061041a610f21565b6040516104279190614127565b60405180910390f35b34801561043c57600080fd5b50610445610f34565b005b34801561045357600080fd5b5061045c610fcd565b604051610469919061447f565b60405180910390f35b34801561047e57600080fd5b50610487610fd3565b005b34801561049557600080fd5b506104b060048036038101906104ab9190613ad9565b6117ae565b005b3480156104be57600080fd5b506104d960048036038101906104d4919061380f565b611834565b005b3480156104e757600080fd5b5061050260048036038101906104fd9190613ad9565b611854565b005b34801561051057600080fd5b5061052b600480360381019061052691906139ad565b6118a7565b005b34801561053957600080fd5b50610542611a4e565b60405161054f919061447f565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a9190613a90565b611a54565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613ad9565b611aea565b6040516105b591906140c0565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e091906137a2565b611b9c565b6040516105f2919061447f565b60405180910390f35b34801561060757600080fd5b50610610611c54565b005b34801561061e57600080fd5b50610627611cdc565b604051610634919061447f565b60405180910390f35b34801561064957600080fd5b50610652611ce2565b60405161065f91906140c0565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613ad9565b611d0b565b005b34801561069d57600080fd5b506106a6611d91565b6040516106b3919061415d565b60405180910390f35b3480156106c857600080fd5b506106d1611e23565b6040516106de919061447f565b60405180910390f35b61070160048036038101906106fc9190613ad9565b611e29565b005b34801561070f57600080fd5b5061072a6004803603810190610725919061396d565b612055565b005b34801561073857600080fd5b50610753600480360381019061074e9190613ad9565b6121c1565b005b34801561076157600080fd5b5061077c600480360381019061077791906138ea565b612247565b005b34801561078a57600080fd5b506107a560048036038101906107a09190613a90565b6122a2565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613ad9565b612338565b6040516107db919061415d565b60405180910390f35b3480156107f057600080fd5b506107f96123ec565b005b34801561080757600080fd5b50610822600480360381019061081d9190613ad9565b612485565b005b34801561083057600080fd5b5061083961250b565b005b34801561084757600080fd5b50610850612645565b60405161085d919061415d565b60405180910390f35b34801561087257600080fd5b5061088d600480360381019061088891906137cf565b61266d565b60405161089a9190614127565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906137a2565b612701565b005b3480156108d857600080fd5b506108f360048036038101906108ee91906137a2565b6127f9565b604051610900919061447f565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190613ad9565b612854565b005b61093a6128da565b73ffffffffffffffffffffffffffffffffffffffff16610958611ce2565b73ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a5906143bf565b60405180910390fd5b600081519050600d5481600d546109c591906145b0565b11610a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fc9061445f565b60405180910390fd5b600c5481600d54610a1691906145b0565b1115610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e906142ff565b60405180910390fd5b6000600d54905081600f5410610a855781600f6000828254610a799190614691565b92505081905550610a8e565b6000600f819055505b60005b82811015610af357610ac8848281518110610aaf57610aae6148e5565b5b60200260200101518284610ac391906145b0565b6128e2565b600d6000815480929190610adb906147de565b91905055508080610aeb906147de565b915050610a91565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c7b575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610c919061477b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbd9061477b565b8015610d0a5780601f10610cdf57610100808354040283529160200191610d0a565b820191906000526020600020905b815481529060010190602001808311610ced57829003601f168201915b5050505050905090565b6000610d1f82612900565b610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d55906141df565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610da482611aea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c906141ff565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e555750610e54813361266d565b5b610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061431f565b60405180910390fd5b610e9e838361296c565b505050565b600063150b7a0260e01b905095945050505050565b600f5481565b6000600d54905090565b610ed23382612a25565b610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906143ff565b60405180910390fd5b610f1c838383612b03565b505050565b600960009054906101000a900460ff1681565b610f3c6128da565b73ffffffffffffffffffffffffffffffffffffffff16610f5a611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa7906143bf565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b600e5481565b610fdb6128da565b73ffffffffffffffffffffffffffffffffffffffff16610ff9611ce2565b73ffffffffffffffffffffffffffffffffffffffff161461104f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611046906143bf565b60405180910390fd5b60004790506000806103e8610168846110689190614637565b6110729190614606565b9150601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516110ba906140ab565b60006040518083038185875af1925050503d80600081146110f7576040519150601f19603f3d011682016040523d82523d6000602084013e6110fc565b606091505b50508091505080611142576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111399061421f565b60405180910390fd5b6103e8610168846111539190614637565b61115d9190614606565b9150601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111a5906140ab565b60006040518083038185875af1925050503d80600081146111e2576040519150601f19603f3d011682016040523d82523d6000602084013e6111e7565b606091505b5050809150508061122d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249061421f565b60405180910390fd5b6103e860148461123d9190614637565b6112479190614606565b9150601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161128f906140ab565b60006040518083038185875af1925050503d80600081146112cc576040519150601f19603f3d011682016040523d82523d6000602084013e6112d1565b606091505b50508091505080611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e9061421f565b60405180910390fd5b6103e86032846113279190614637565b6113319190614606565b9150601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611379906140ab565b60006040518083038185875af1925050503d80600081146113b6576040519150601f19603f3d011682016040523d82523d6000602084013e6113bb565b606091505b50508091505080611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f89061421f565b60405180910390fd5b6103e86064846114119190614637565b61141b9190614606565b9150601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611463906140ab565b60006040518083038185875af1925050503d80600081146114a0576040519150601f19603f3d011682016040523d82523d6000602084013e6114a5565b606091505b505080915050806114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e29061421f565b60405180910390fd5b6103e8600a846114fb9190614637565b6115059190614606565b9150601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161154d906140ab565b60006040518083038185875af1925050503d806000811461158a576040519150601f19603f3d011682016040523d82523d6000602084013e61158f565b606091505b505080915050806115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc9061421f565b60405180910390fd5b6103e86032846115e59190614637565b6115ef9190614606565b9150601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611637906140ab565b60006040518083038185875af1925050503d8060008114611674576040519150601f19603f3d011682016040523d82523d6000602084013e611679565b606091505b505080915050806116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b69061421f565b60405180910390fd5b6103e86032846116cf9190614637565b6116d99190614606565b9150601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611721906140ab565b60006040518083038185875af1925050503d806000811461175e576040519150601f19603f3d011682016040523d82523d6000602084013e611763565b606091505b505080915050806117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a09061421f565b60405180910390fd5b505050565b6117b66128da565b73ffffffffffffffffffffffffffffffffffffffff166117d4611ce2565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611821906143bf565b60405180910390fd5b80600f8190555050565b61184f83838360405180602001604052806000815250612247565b505050565b61185d81611aea565b73ffffffffffffffffffffffffffffffffffffffff1661187b6128da565b73ffffffffffffffffffffffffffffffffffffffff161461189b57600080fd5b6118a481612d5f565b50565b6118af6128da565b73ffffffffffffffffffffffffffffffffffffffff166118cd611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a906143bf565b60405180910390fd5b600d5481600d5461193491906145b0565b11611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b9061445f565b60405180910390fd5b600c5481600d5461198591906145b0565b11156119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd906142ff565b60405180910390fd5b6000600d54905081600f54106119f45781600f60008282546119e89190614691565b925050819055506119fd565b6000600f819055505b60005b82811015611a4857611a1d848284611a1891906145b0565b6128e2565b600d6000815480929190611a30906147de565b91905055508080611a40906147de565b915050611a00565b50505050565b600d5481565b611a5c6128da565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac7906143bf565b60405180910390fd5b8060039080519060200190611ae69291906134c2565b5050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a9061427f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c049061437f565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c5c6128da565b73ffffffffffffffffffffffffffffffffffffffff16611c7a611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906143bf565b60405180910390fd5b611cda6000612e70565b565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d136128da565b73ffffffffffffffffffffffffffffffffffffffff16611d31611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e906143bf565b60405180910390fd5b80600b8190555050565b606060028054611da09061477b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dcc9061477b565b8015611e195780601f10611dee57610100808354040283529160200191611e19565b820191906000526020600020905b815481529060010190602001808311611dfc57829003601f168201915b5050505050905090565b600b5481565b600060149054906101000a900460ff1615611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e709061433f565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611e9e6128da565b9050600b5482611eae9190614637565b3414611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee6906143df565b60405180910390fd5b600e54821115611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b9061441f565b60405180910390fd5b600c54600d54600f5484611f4891906145b0565b611f5291906145b0565b1115611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a906142df565b60405180910390fd5b600960009054906101000a900460ff16611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd99061429f565b60405180910390fd5b6000600d54905082600d6000828254611ffb91906145b0565b9250508190555060005b838110156120355761202283828461201d91906145b0565b6128e2565b808061202d906147de565b915050612005565b50505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061425f565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121b59190614127565b60405180910390a35050565b6121c96128da565b73ffffffffffffffffffffffffffffffffffffffff166121e7611ce2565b73ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906143bf565b60405180910390fd5b80600c8190555050565b6122513383612a25565b612290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612287906143ff565b60405180910390fd5b61229c84848484612f34565b50505050565b6122aa6128da565b73ffffffffffffffffffffffffffffffffffffffff166122c8611ce2565b73ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612315906143bf565b60405180910390fd5b80600490805190602001906123349291906134c2565b5050565b606061234382612900565b612382576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123799061443f565b60405180910390fd5b6060600a5483106123b557600460405160200161239f9190614089565b60405160208183030381529060405290506123e3565b60036123c084612f90565b6040516020016123d1929190614038565b60405160208183030381529060405290505b80915050919050565b6123f46128da565b73ffffffffffffffffffffffffffffffffffffffff16612412611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f906143bf565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b61248d6128da565b73ffffffffffffffffffffffffffffffffffffffff166124ab611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f8906143bf565b60405180910390fd5b80600e8190555050565b6125136128da565b73ffffffffffffffffffffffffffffffffffffffff16612531611ce2565b73ffffffffffffffffffffffffffffffffffffffff1614612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e906143bf565b60405180910390fd5b600047905060006125966128da565b73ffffffffffffffffffffffffffffffffffffffff16826040516125b9906140ab565b60006040518083038185875af1925050503d80600081146125f6576040519150601f19603f3d011682016040523d82523d6000602084013e6125fb565b606091505b50508091505080612641576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126389061421f565b60405180910390fd5b5050565b606060036040516020016126599190614067565b604051602081830303815290604052905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127096128da565b73ffffffffffffffffffffffffffffffffffffffff16612727611ce2565b73ffffffffffffffffffffffffffffffffffffffff161461277d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612774906143bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e49061423f565b60405180910390fd5b6127f681612e70565b50565b600066038d7ea4c68000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284d9190614606565b9050919050565b61285c6128da565b73ffffffffffffffffffffffffffffffffffffffff1661287a611ce2565b73ffffffffffffffffffffffffffffffffffffffff16146128d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c7906143bf565b60405180910390fd5b80600a8190555050565b600033905090565b6128fc8282604051806020016040528060008152506130f1565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129df83611aea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a3082612900565b612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669061417f565b60405180910390fd5b6000612a7a83611aea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ae957508373ffffffffffffffffffffffffffffffffffffffff16612ad184610d14565b73ffffffffffffffffffffffffffffffffffffffff16145b80612afa5750612af9818561266d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b2382611aea565b73ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b709061439f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be09061419f565b60405180910390fd5b612bf483838361314c565b612bff60008261296c565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4f9190614691565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ca691906145b0565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612d6a82611aea565b9050612d788160008461314c565b612d8360008361296c565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dd39190614691565b925050819055506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f3f848484612b03565b612f4b84848484613151565b612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f81906142bf565b60405180910390fd5b50505050565b60606000821415612fd8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130ec565b600082905060005b6000821461300a578080612ff3906147de565b915050600a826130039190614606565b9150612fe0565b60008167ffffffffffffffff81111561302657613025614914565b5b6040519080825280601f01601f1916602001820160405280156130585781602001600182028036833780820191505090505b5090505b600085146130e5576001826130719190614691565b9150600a856130809190614827565b603061308c91906145b0565b60f81b8183815181106130a2576130a16148e5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130de9190614606565b945061305c565b8093505050505b919050565b6130fb83836132e1565b6131086000848484613151565b613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e906142bf565b60405180910390fd5b505050565b505050565b60006131728473ffffffffffffffffffffffffffffffffffffffff166134af565b156132d4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016131b694939291906140db565b602060405180830381600087803b1580156131d057600080fd5b505af192505050801561320157506040513d601f19601f820116820180604052508101906131fe9190613a63565b60015b613284573d8060008114613231576040519150601f19603f3d011682016040523d82523d6000602084013e613236565b606091505b5060008151141561327c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613273906142bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132d9565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133489061435f565b60405180910390fd5b61335a81612900565b1561339a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613391906141bf565b60405180910390fd5b6133a66000838361314c565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133f691906145b0565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134ce9061477b565b90600052602060002090601f0160209004810192826134f05760008555613537565b82601f1061350957805160ff1916838001178555613537565b82800160010185558215613537579182015b8281111561353657825182559160200191906001019061351b565b5b5090506135449190613548565b5090565b5b80821115613561576000816000905550600101613549565b5090565b6000613578613573846144bf565b61449a565b9050808382526020820190508285602086028201111561359b5761359a61494d565b5b60005b858110156135cb57816135b18882613659565b84526020840193506020830192505060018101905061359e565b5050509392505050565b60006135e86135e3846144eb565b61449a565b90508281526020810184848401111561360457613603614952565b5b61360f848285614739565b509392505050565b600061362a6136258461451c565b61449a565b90508281526020810184848401111561364657613645614952565b5b613651848285614739565b509392505050565b60008135905061366881614dc8565b92915050565b600082601f83011261368357613682614948565b5b8135613693848260208601613565565b91505092915050565b6000813590506136ab81614ddf565b92915050565b6000813590506136c081614df6565b92915050565b6000815190506136d581614df6565b92915050565b60008083601f8401126136f1576136f0614948565b5b8235905067ffffffffffffffff81111561370e5761370d614943565b5b60208301915083600182028301111561372a5761372961494d565b5b9250929050565b600082601f83011261374657613745614948565b5b81356137568482602086016135d5565b91505092915050565b600082601f83011261377457613773614948565b5b8135613784848260208601613617565b91505092915050565b60008135905061379c81614e0d565b92915050565b6000602082840312156137b8576137b761495c565b5b60006137c684828501613659565b91505092915050565b600080604083850312156137e6576137e561495c565b5b60006137f485828601613659565b925050602061380585828601613659565b9150509250929050565b6000806000606084860312156138285761382761495c565b5b600061383686828701613659565b935050602061384786828701613659565b92505060406138588682870161378d565b9150509250925092565b60008060008060006080868803121561387e5761387d61495c565b5b600061388c88828901613659565b955050602061389d88828901613659565b94505060406138ae8882890161378d565b935050606086013567ffffffffffffffff8111156138cf576138ce614957565b5b6138db888289016136db565b92509250509295509295909350565b600080600080608085870312156139045761390361495c565b5b600061391287828801613659565b945050602061392387828801613659565b93505060406139348782880161378d565b925050606085013567ffffffffffffffff81111561395557613954614957565b5b61396187828801613731565b91505092959194509250565b600080604083850312156139845761398361495c565b5b600061399285828601613659565b92505060206139a38582860161369c565b9150509250929050565b600080604083850312156139c4576139c361495c565b5b60006139d285828601613659565b92505060206139e38582860161378d565b9150509250929050565b600060208284031215613a0357613a0261495c565b5b600082013567ffffffffffffffff811115613a2157613a20614957565b5b613a2d8482850161366e565b91505092915050565b600060208284031215613a4c57613a4b61495c565b5b6000613a5a848285016136b1565b91505092915050565b600060208284031215613a7957613a7861495c565b5b6000613a87848285016136c6565b91505092915050565b600060208284031215613aa657613aa561495c565b5b600082013567ffffffffffffffff811115613ac457613ac3614957565b5b613ad08482850161375f565b91505092915050565b600060208284031215613aef57613aee61495c565b5b6000613afd8482850161378d565b91505092915050565b613b0f816146c5565b82525050565b613b1e816146d7565b82525050565b613b2d816146e3565b82525050565b6000613b3e82614562565b613b488185614578565b9350613b58818560208601614748565b613b6181614961565b840191505092915050565b6000613b778261456d565b613b818185614594565b9350613b91818560208601614748565b613b9a81614961565b840191505092915050565b6000613bb08261456d565b613bba81856145a5565b9350613bca818560208601614748565b80840191505092915050565b60008154613be38161477b565b613bed81866145a5565b94506001821660008114613c085760018114613c1957613c4c565b60ff19831686528186019350613c4c565b613c228561454d565b60005b83811015613c4457815481890152600182019150602081019050613c25565b838801955050505b50505092915050565b6000613c62602083614594565b9150613c6d82614972565b602082019050919050565b6000613c85600d836145a5565b9150613c908261499b565b600d82019050919050565b6000613ca8601b83614594565b9150613cb3826149c4565b602082019050919050565b6000613ccb601c83614594565b9150613cd6826149ed565b602082019050919050565b6000613cee602083614594565b9150613cf982614a16565b602082019050919050565b6000613d11601e83614594565b9150613d1c82614a3f565b602082019050919050565b6000613d34601883614594565b9150613d3f82614a68565b602082019050919050565b6000613d57602083614594565b9150613d6282614a91565b602082019050919050565b6000613d7a601983614594565b9150613d8582614aba565b602082019050919050565b6000613d9d600c836145a5565b9150613da882614ae3565b600c82019050919050565b6000613dc0601e83614594565b9150613dcb82614b0c565b602082019050919050565b6000613de3601683614594565b9150613dee82614b35565b602082019050919050565b6000613e06601a83614594565b9150613e1182614b5e565b602082019050919050565b6000613e29601a83614594565b9150613e3482614b87565b602082019050919050565b6000613e4c601183614594565b9150613e5782614bb0565b602082019050919050565b6000613e6f601f83614594565b9150613e7a82614bd9565b602082019050919050565b6000613e92601f83614594565b9150613e9d82614c02565b602082019050919050565b6000613eb5602083614594565b9150613ec082614c2b565b602082019050919050565b6000613ed8602083614594565b9150613ee382614c54565b602082019050919050565b6000613efb6005836145a5565b9150613f0682614c7d565b600582019050919050565b6000613f1e601c83614594565b9150613f2982614ca6565b602082019050919050565b6000613f41602083614594565b9150613f4c82614ccf565b602082019050919050565b6000613f64601883614594565b9150613f6f82614cf8565b602082019050919050565b6000613f87601c83614594565b9150613f9282614d21565b602082019050919050565b6000613faa601b83614594565b9150613fb582614d4a565b602082019050919050565b6000613fcd600083614589565b9150613fd882614d73565b600082019050919050565b6000613ff0601d83614594565b9150613ffb82614d76565b602082019050919050565b6000614013601383614594565b915061401e82614d9f565b602082019050919050565b6140328161472f565b82525050565b60006140448285613bd6565b91506140508284613ba5565b915061405b82613eee565b91508190509392505050565b60006140738284613bd6565b915061407e82613c78565b915081905092915050565b60006140958284613bd6565b91506140a082613d90565b915081905092915050565b60006140b682613fc0565b9150819050919050565b60006020820190506140d56000830184613b06565b92915050565b60006080820190506140f06000830187613b06565b6140fd6020830186613b06565b61410a6040830185614029565b818103606083015261411c8184613b33565b905095945050505050565b600060208201905061413c6000830184613b15565b92915050565b60006020820190506141576000830184613b24565b92915050565b600060208201905081810360008301526141778184613b6c565b905092915050565b6000602082019050818103600083015261419881613c55565b9050919050565b600060208201905081810360008301526141b881613c9b565b9050919050565b600060208201905081810360008301526141d881613cbe565b9050919050565b600060208201905081810360008301526141f881613ce1565b9050919050565b6000602082019050818103600083015261421881613d04565b9050919050565b6000602082019050818103600083015261423881613d27565b9050919050565b6000602082019050818103600083015261425881613d4a565b9050919050565b6000602082019050818103600083015261427881613d6d565b9050919050565b6000602082019050818103600083015261429881613db3565b9050919050565b600060208201905081810360008301526142b881613dd6565b9050919050565b600060208201905081810360008301526142d881613df9565b9050919050565b600060208201905081810360008301526142f881613e1c565b9050919050565b6000602082019050818103600083015261431881613e3f565b9050919050565b6000602082019050818103600083015261433881613e62565b9050919050565b6000602082019050818103600083015261435881613e85565b9050919050565b6000602082019050818103600083015261437881613ea8565b9050919050565b6000602082019050818103600083015261439881613ecb565b9050919050565b600060208201905081810360008301526143b881613f11565b9050919050565b600060208201905081810360008301526143d881613f34565b9050919050565b600060208201905081810360008301526143f881613f57565b9050919050565b6000602082019050818103600083015261441881613f7a565b9050919050565b6000602082019050818103600083015261443881613f9d565b9050919050565b6000602082019050818103600083015261445881613fe3565b9050919050565b6000602082019050818103600083015261447881614006565b9050919050565b60006020820190506144946000830184614029565b92915050565b60006144a46144b5565b90506144b082826147ad565b919050565b6000604051905090565b600067ffffffffffffffff8211156144da576144d9614914565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561450657614505614914565b5b61450f82614961565b9050602081019050919050565b600067ffffffffffffffff82111561453757614536614914565b5b61454082614961565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145bb8261472f565b91506145c68361472f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145fb576145fa614858565b5b828201905092915050565b60006146118261472f565b915061461c8361472f565b92508261462c5761462b614887565b5b828204905092915050565b60006146428261472f565b915061464d8361472f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561468657614685614858565b5b828202905092915050565b600061469c8261472f565b91506146a78361472f565b9250828210156146ba576146b9614858565b5b828203905092915050565b60006146d08261470f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561476657808201518184015260208101905061474b565b83811115614775576000848401525b50505050565b6000600282049050600182168061479357607f821691505b602082108114156147a7576147a66148b6565b5b50919050565b6147b682614961565b810181811067ffffffffffffffff821117156147d5576147d4614914565b5b80604052505050565b60006147e98261472f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561481c5761481b614858565b5b600182019050919050565b60006148328261472f565b915061483d8361472f565b92508261484d5761484c614887565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f4d696e743a206d696e74696e67206e6f74206f70656e00000000000000000000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f4d696e743a204e6f7420656e6f75676820617661696c61626c65000000000000600082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e743a2041626f7665205472786e205468726573686f6c64210000000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b614dd1816146c5565b8114614ddc57600080fd5b50565b614de8816146d7565b8114614df357600080fd5b50565b614dff816146e3565b8114614e0a57600080fd5b50565b614e168161472f565b8114614e2157600080fd5b5056fea2646970667358221220102db9157d9b58a374280620905cf919cb6294dd8e330ae4da656bba6bf99d4464736f6c63430008070033

Deployed ByteCode Sourcemap

16576:20936:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21827:647;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18854:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36312:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25956:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25518:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35256:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17567:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24395:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26826:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17354:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23982:80;;;;;;;;;;;;;:::i;:::-;;17536:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19294:1576;;;;;;;;;;;;;:::i;:::-;;24284:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27211:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23215:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21155:660;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17502:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23675:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25228:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24968:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:94;;;;;;;;;;;;;:::i;:::-;;17469:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24070:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36453;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17442:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22486:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26235:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24170:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27467:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23782:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36628:563;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23893:77;;;;;;;;;;;;;:::i;:::-;;23558:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20878:262;;;;;;;;;;;;;:::i;:::-;;37203:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26595:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24645:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24533:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21827:647;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21896:11:::1;21910:3;:10;21896:24;;21962:12;;21955:3;21940:12;;:18;;;;:::i;:::-;21939:35;21931:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22041:11;;22033:3;22018:12;;:18;;;;:::i;:::-;22017:35;;22009:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22095:21;22119:12;;22095:36;;22164:3;22146:14;;:21;22142:126;;22202:3;22184:14;;:21;;;;;;;:::i;:::-;;;;;;;;22142:126;;;22255:1;22238:14;:18;;;;22142:126;22292:9;22288:179;22311:3;22307:1;:7;22288:179;;;22336:36;22346:3;22350:1;22346:6;;;;;;;;:::i;:::-;;;;;;;;22370:1;22354:13;:17;;;;:::i;:::-;22336:9;:36::i;:::-;22387:12;;:15;;;;;;;;;:::i;:::-;;;;;;22316:3;;;;;:::i;:::-;;;;22288:179;;;;21885:589;;21827:647:::0;:::o;18854:358::-;18939:4;18979:25;18964:40;;;:11;:40;;;;:109;;;;19040:33;19025:48;;;:11;:48;;;;18964:109;:170;;;;19109:25;19094:40;;;:11;:40;;;;18964:170;:240;;;;19170:34;;;19155:49;;;:11;:49;;;;18964:240;18956:248;;18854:358;;;:::o;36312:84::-;36351:13;36383:5;36376:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36312:84;:::o;25956:207::-;26032:7;26060:16;26068:7;26060;:16::i;:::-;26052:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26131:15;:24;26147:7;26131:24;;;;;;;;;;;;;;;;;;;;;26124:31;;25956:207;;;:::o;25518:372::-;25599:13;25615:16;25623:7;25615;:16::i;:::-;25599:32;;25656:5;25650:11;;:2;:11;;;;25642:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25745:5;25731:19;;:10;:19;;;:58;;;;25754:35;25771:5;25778:10;25754:16;:35::i;:::-;25731:58;25709:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25861:21;25870:2;25874:7;25861:8;:21::i;:::-;25588:302;25518:372;;:::o;35256:215::-;35373:6;35433:30;;;35426:37;;35256:215;;;;;;;:::o;17567:29::-;;;;:::o;24395:126::-;24441:7;24468:12;;24461:19;;24395:126;:::o;26826:314::-;27021:39;27040:10;27052:7;27021:18;:39::i;:::-;27013:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27104:28;27114:4;27120:2;27124:7;27104:9;:28::i;:::-;26826:314;;;:::o;17354:22::-;;;;;;;;;;;;;:::o;23982:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24049:5:::1;24036:10;;:18;;;;;;;;;;;;;;;;;;23982:80::o:0;17536:24::-;;;;:::o;19294:1576::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19344:22:::1;19369:21;19344:46;;19401:18;19430:12:::0;19499:4:::1;19492:3;19477:14;:18;;;;:::i;:::-;19476:27;;;;:::i;:::-;19463:40;;19528:7;;;;;;;;;;;:12;;19548:10;19528:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19514:49;;;;;19582:7;19574:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19675:4;19668:3;19653:14;:18;;;;:::i;:::-;19652:27;;;;:::i;:::-;19639:40;;19704:9;;;;;;;;;;;:14;;19726:10;19704:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19690:51;;;;;19760:7;19752:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19854:4;19848:2;19831:14;:19;;;;:::i;:::-;19830:28;;;;:::i;:::-;19817:41;;19883:6;;;;;;;;;;;:11;;19902:10;19883:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19869:48;;;;;19936:7;19928:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20030:4;20024:2;20007:14;:19;;;;:::i;:::-;20006:28;;;;:::i;:::-;19993:41;;20059:6;;;;;;;;;;;:11;;20078:10;20059:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20045:48;;;;;20112:7;20104:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20207:4;20200:3;20183:14;:20;;;;:::i;:::-;20182:29;;;;:::i;:::-;20169:42;;20236:6;;;;;;;;;;;:11;;20255:10;20236:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20222:48;;;;;20289:7;20281:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20383:4;20377:2;20360:14;:19;;;;:::i;:::-;20359:28;;;;:::i;:::-;20346:41;;20412:10;;;;;;;;;;;:15;;20435:10;20412:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20398:52;;;;;20469:7;20461:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20563:4;20557:2;20540:14;:19;;;;:::i;:::-;20539:28;;;;:::i;:::-;20526:41;;20592:9;;;;;;;;;;;:14;;20614:10;20592:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20578:51;;;;;20648:7;20640:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20742:4;20736:2;20719:14;:19;;;;:::i;:::-;20718:28;;;;:::i;:::-;20705:41;;20771:8;;;;;;;;;;;:13;;20792:10;20771:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20757:50;;;;;20826:7;20818:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19333:1537;;;19294:1576::o:0;24284:103::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24369:10:::1;24352:14;:27;;;;24284:103:::0;:::o;27211:185::-;27349:39;27366:4;27372:2;27376:7;27349:39;;;;;;;;;;;;:16;:39::i;:::-;27211:185;;;:::o;23215:125::-;23290:16;23298:7;23290;:16::i;:::-;23274:32;;:12;:10;:12::i;:::-;:32;;;23266:41;;;;;;23318:14;23324:7;23318:5;:14::i;:::-;23215:125;:::o;21155:660::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21261:12:::1;;21254:3;21239:12;;:18;;;;:::i;:::-;21238:35;21230:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21340:11;;21332:3;21317:12;;:18;;;;:::i;:::-;21316:35;;21308:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21394:21;21418:12;;21394:36;;21508:3;21490:14;;:21;21486:126;;21546:3;21528:14;;:21;;;;;;;:::i;:::-;;;;;;;;21486:126;;;21599:1;21582:14;:18;;;;21486:126;21636:9;21632:176;21655:3;21651:1;:7;21632:176;;;21680:33;21690:3;21711:1;21695:13;:17;;;;:::i;:::-;21680:9;:33::i;:::-;21728:12;;:15;;;;;;;;;:::i;:::-;;;;;;21660:3;;;;;:::i;:::-;;;;21632:176;;;;21219:596;21155:660:::0;;:::o;17502:27::-;;;;:::o;23675:95::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23756:6:::1;23745:8;:17;;;;;;;;;;;;:::i;:::-;;23675:95:::0;:::o;25228:228::-;25300:7;25320:13;25336:7;:16;25344:7;25336:16;;;;;;;;;;;;;;;;;;;;;25320:32;;25388:1;25371:19;;:5;:19;;;;25363:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25443:5;25436:12;;;25228:228;;;:::o;24968:198::-;25040:7;25085:1;25068:19;;:5;:19;;;;25060:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25142:9;:16;25152:5;25142:16;;;;;;;;;;;;;;;;25135:23;;24968: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;17469:26::-;;;;:::o;14114:87::-;14160:7;14187:6;;;;;;;;;;;14180:13;;14114:87;:::o;24070:88::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24142:8:::1;24134:5;:16;;;;24070:88:::0;:::o;36453:::-;36494:13;36526:7;36519:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36453:88;:::o;17442:20::-;;;;:::o;22486:658::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;22553:11:::1;22567:12;:10;:12::i;:::-;22553:26;;22617:5;;22611:3;:11;;;;:::i;:::-;22598:9;:24;22590:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22677:9;;22670:3;:16;;22662:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22778:11;;22761:12;;22744:14;;22738:3;:20;;;;:::i;:::-;:35;;;;:::i;:::-;22737:52;;22729:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;22839:10;;;;;;;;;;;22831:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22897:21;22921:12;;22897:36;;23005:3;22989:12;;:19;;;;;;;:::i;:::-;;;;;;;;23048:9;23044:93;23067:3;23063:1;:7;23044:93;;;23092:33;23102:3;23123:1;23107:13;:17;;;;:::i;:::-;23092:9;:33::i;:::-;23072:3;;;;;:::i;:::-;;;;23044:93;;;;22542:602;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;22486:658;:::o;26235:289::-;26350:10;26338:22;;:8;:22;;;;26330:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26446:8;26403:18;:30;26422:10;26403:30;;;;;;;;;;;;;;;:40;26434:8;26403:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;26497:8;26470:46;;26485:10;26470:46;;;26507:8;26470:46;;;;;;:::i;:::-;;;;;;;;26235:289;;:::o;24170:102::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24255:9:::1;24241:11;:23;;;;24170:102:::0;:::o;27467:305::-;27642:39;27661:10;27673:7;27642:18;:39::i;:::-;27634:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27725:39;27739:4;27745:2;27749:7;27758:5;27725:13;:39::i;:::-;27467:305;;;;:::o;23782:99::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23867:6:::1;23854:10;:19;;;;;;;;;;;;:::i;:::-;;23782:99:::0;:::o;36628:563::-;36686:13;36719:16;36727:7;36719;:16::i;:::-;36711:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36780:22;36838:15;;36827:7;:26;36823:325;;36944:10;36927:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;36909:63;;36823:325;;;37098:8;37108:17;37117:7;37108:8;:17::i;:::-;37081:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37063:73;;36823:325;37175:8;37168:15;;;36628:563;;;:::o;23893:77::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23958:4:::1;23945:10;;:17;;;;;;;;;;;;;;;;;;23893:77::o:0;23558:105::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23647:8:::1;23635:9;:20;;;;23558:105:::0;:::o;20878:262::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20937:22:::1;20962:21;20937:46;;20994:12;21033;:10;:12::i;:::-;:17;;21058:14;21033:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21019:58;;;;;21096:7;21088:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20926:214;;20878:262::o:0;37203:139::-;37247:13;37308:8;37291:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37277:57;;37203:139;:::o;26595:164::-;26692:4;26716:18;:25;26735:5;26716:25;;;;;;;;;;;;;;;:35;26742:8;26716:35;;;;;;;;;;;;;;;;;;;;;;;;;26709:42;;26595: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;24645:259::-;24710:7;24852:6;24825:9;:23;24835:12;24825:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;24818:41;;24645:259;;;:::o;24533:100::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24619:6:::1;24601:15;:24;;;;24533:100:::0;:::o;13497:98::-;13550:7;13577:10;13570:17;;13497:98;:::o;30223:110::-;30299:26;30309:2;30313:7;30299:26;;;;;;;;;;;;:9;:26::i;:::-;30223:110;;:::o;29258:127::-;29323:4;29375:1;29347:30;;:7;:16;29355:7;29347:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29340:37;;29258:127;;;:::o;33159:167::-;33261:2;33234:15;:24;33250:7;33234:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33310:7;33306:2;33279:39;;33288:16;33296:7;33288;:16::i;:::-;33279:39;;;;;;;;;;;;33159:167;;:::o;29552:329::-;29645:4;29670:16;29678:7;29670;:16::i;:::-;29662:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29734:13;29750:16;29758:7;29750;:16::i;:::-;29734:32;;29796:5;29785:16;;:7;:16;;;:51;;;;29829:7;29805:31;;:20;29817:7;29805:11;:20::i;:::-;:31;;;29785:51;:87;;;;29840:32;29857:5;29864:7;29840:16;:32::i;:::-;29785:87;29777:96;;;29552:329;;;;:::o;32494:547::-;32646:4;32626:24;;:16;32634:7;32626;:16::i;:::-;:24;;;32618:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32716:1;32702:16;;:2;:16;;;;32694:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32761:39;32782:4;32788:2;32792:7;32761:20;:39::i;:::-;32865:29;32882:1;32886:7;32865:8;:29::i;:::-;32926:1;32907:9;:15;32917:4;32907:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32955:1;32938:9;:13;32948:2;32938:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32986:2;32967:7;:16;32975:7;32967:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33025:7;33021:2;33006:27;;33015:4;33006:27;;;;;;;;;;;;32494:547;;;:::o;31804:353::-;31864:13;31880:16;31888:7;31880;:16::i;:::-;31864:32;;31909:48;31930:5;31945:1;31949:7;31909:20;:48::i;:::-;31998:29;32015:1;32019:7;31998:8;:29::i;:::-;32060:1;32040:9;:16;32050:5;32040:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32079:7;:16;32087:7;32079:16;;;;;;;;;;;;32072:23;;;;;;;;;;;32141:7;32137:1;32113:36;;32122:5;32113:36;;;;;;;;;;;;31853:304;31804: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;28654:291::-;28811:28;28821:4;28827:2;28831:7;28811:9;:28::i;:::-;28858:48;28881:4;28887:2;28891:7;28900:5;28858:22;:48::i;:::-;28850:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28654: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;30560:297::-;30690:18;30696:2;30700:7;30690:5;:18::i;:::-;30741:54;30772:1;30776:2;30780:7;30789:5;30741:22;:54::i;:::-;30719:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;30560:297;;;:::o;36043:126::-;;;;:::o;33891:777::-;34046:4;34067:15;:2;:13;;;:15::i;:::-;34063:598;;;34119:2;34103:36;;;34140:10;34152:4;34158:7;34167:5;34103:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34099:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34364:1;34347:6;:13;:18;34343:248;;;34390:36;;;;;;;;;;:::i;:::-;;;;;;;;34343:248;34541:6;34535:13;34526:6;34522:2;34518:15;34511:38;34099:507;34234:45;;;34224:55;;;:6;:55;;;;34217:62;;;;;34063:598;34645:4;34638:11;;33891:777;;;;;;;:::o;31193:382::-;31287:1;31273:16;;:2;:16;;;;31265:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31346:16;31354:7;31346;:16::i;:::-;31345:17;31337:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31408:45;31437:1;31441:2;31445:7;31408:20;:45::i;:::-;31483:1;31466:9;:13;31476:2;31466:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31514:2;31495:7;:16;31503:7;31495:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31559:7;31555:2;31534:33;;31551:1;31534:33;;;;;;;;;;;;31193: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;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4321:474;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;5196:2;5222:53;5267:7;5258:6;5247:9;5243:22;5222:53;:::i;:::-;5212:63;;5167:118;5324:2;5350:53;5395:7;5386:6;5375:9;5371:22;5350:53;:::i;:::-;5340:63;;5295:118;4801:619;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:120;;;5611:79;;:::i;:::-;5572:120;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6142:2;6131:9;6127:18;6114:32;6173:18;6165:6;6162:30;6159:117;;;6195:79;;:::i;:::-;6159:117;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5426:963;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:120;;;6570:79;;:::i;:::-;6531:120;6690:1;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6661:117;6817:2;6843:53;6888:7;6879:6;6868:9;6864:22;6843:53;:::i;:::-;6833:63;;6788:118;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;7101:2;7090:9;7086:18;7073:32;7132:18;7124:6;7121:30;7118:117;;;7154:79;;:::i;:::-;7118:117;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6395:943;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:50;7787:7;7778:6;7767:9;7763:22;7745:50;:::i;:::-;7735:60;;7690:115;7344:468;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;8069:1;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8040:117;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;7818:474;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8298:539;;;;:::o;8843:327::-;8901:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:119;;;8956:79;;:::i;:::-;8918:119;9076:1;9101:52;9145:7;9136:6;9125:9;9121:22;9101:52;:::i;:::-;9091:62;;9047:116;8843:327;;;;:::o;9176:349::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9391:127;9176:349;;;;:::o;9531:509::-;9600:6;9649:2;9637:9;9628:7;9624:23;9620:32;9617:119;;;9655:79;;:::i;:::-;9617:119;9803:1;9792:9;9788:17;9775:31;9833:18;9825:6;9822:30;9819:117;;;9855:79;;:::i;:::-;9819:117;9960:63;10015:7;10006:6;9995:9;9991:22;9960:63;:::i;:::-;9950:73;;9746:287;9531:509;;;;:::o;10046:329::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10046:329;;;;:::o;10381:118::-;10468:24;10486:5;10468:24;:::i;:::-;10463:3;10456:37;10381:118;;:::o;10505:109::-;10586:21;10601:5;10586:21;:::i;:::-;10581:3;10574:34;10505:109;;:::o;10620:115::-;10705:23;10722:5;10705:23;:::i;:::-;10700:3;10693:36;10620:115;;:::o;10741:360::-;10827:3;10855:38;10887:5;10855:38;:::i;:::-;10909:70;10972:6;10967:3;10909:70;:::i;:::-;10902:77;;10988:52;11033:6;11028:3;11021:4;11014:5;11010:16;10988:52;:::i;:::-;11065:29;11087:6;11065:29;:::i;:::-;11060:3;11056:39;11049:46;;10831:270;10741:360;;;;:::o;11107:364::-;11195:3;11223:39;11256:5;11223:39;:::i;:::-;11278:71;11342:6;11337:3;11278:71;:::i;:::-;11271:78;;11358:52;11403:6;11398:3;11391:4;11384:5;11380:16;11358:52;:::i;:::-;11435:29;11457:6;11435:29;:::i;:::-;11430:3;11426:39;11419:46;;11199:272;11107:364;;;;:::o;11477:377::-;11583:3;11611:39;11644:5;11611:39;:::i;:::-;11666:89;11748:6;11743:3;11666:89;:::i;:::-;11659:96;;11764:52;11809:6;11804:3;11797:4;11790:5;11786:16;11764:52;:::i;:::-;11841:6;11836:3;11832:16;11825:23;;11587:267;11477:377;;;;:::o;11884:845::-;11987:3;12024:5;12018:12;12053:36;12079:9;12053:36;:::i;:::-;12105:89;12187:6;12182:3;12105:89;:::i;:::-;12098:96;;12225:1;12214:9;12210:17;12241:1;12236:137;;;;12387:1;12382:341;;;;12203:520;;12236:137;12320:4;12316:9;12305;12301:25;12296:3;12289:38;12356:6;12351:3;12347:16;12340:23;;12236:137;;12382:341;12449:38;12481:5;12449:38;:::i;:::-;12509:1;12523:154;12537:6;12534:1;12531:13;12523:154;;;12611:7;12605:14;12601:1;12596:3;12592:11;12585:35;12661:1;12652:7;12648:15;12637:26;;12559:4;12556:1;12552:12;12547:17;;12523:154;;;12706:6;12701:3;12697:16;12690:23;;12389:334;;12203:520;;11991:738;;11884:845;;;;:::o;12735:366::-;12877:3;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12974:93;13063:3;12974:93;:::i;:::-;13092:2;13087:3;13083:12;13076:19;;12735:366;;;:::o;13107:402::-;13267:3;13288:85;13370:2;13365:3;13288:85;:::i;:::-;13281:92;;13382:93;13471:3;13382:93;:::i;:::-;13500:2;13495:3;13491:12;13484:19;;13107:402;;;:::o;13515:366::-;13657:3;13678:67;13742:2;13737:3;13678:67;:::i;:::-;13671:74;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13515:366;;;:::o;13887:::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13887:366;;;:::o;14259:::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:402::-;16279:3;16300:85;16382:2;16377:3;16300:85;:::i;:::-;16293:92;;16394:93;16483:3;16394:93;:::i;:::-;16512:2;16507:3;16503:12;16496:19;;16119:402;;;:::o;16527:366::-;16669:3;16690:67;16754:2;16749:3;16690:67;:::i;:::-;16683:74;;16766:93;16855:3;16766:93;:::i;:::-;16884:2;16879:3;16875:12;16868:19;;16527:366;;;:::o;16899:::-;17041:3;17062:67;17126:2;17121:3;17062:67;:::i;:::-;17055:74;;17138:93;17227:3;17138:93;:::i;:::-;17256:2;17251:3;17247:12;17240:19;;16899:366;;;:::o;17271:::-;17413:3;17434:67;17498:2;17493:3;17434:67;:::i;:::-;17427:74;;17510:93;17599:3;17510:93;:::i;:::-;17628:2;17623:3;17619:12;17612:19;;17271:366;;;:::o;17643:::-;17785:3;17806:67;17870:2;17865:3;17806:67;:::i;:::-;17799:74;;17882:93;17971:3;17882:93;:::i;:::-;18000:2;17995:3;17991:12;17984:19;;17643:366;;;:::o;18015:::-;18157:3;18178:67;18242:2;18237:3;18178:67;:::i;:::-;18171:74;;18254:93;18343:3;18254:93;:::i;:::-;18372:2;18367:3;18363:12;18356:19;;18015:366;;;:::o;18387:::-;18529:3;18550:67;18614:2;18609:3;18550:67;:::i;:::-;18543:74;;18626:93;18715:3;18626:93;:::i;:::-;18744:2;18739:3;18735:12;18728:19;;18387:366;;;:::o;18759:::-;18901:3;18922:67;18986:2;18981:3;18922:67;:::i;:::-;18915:74;;18998:93;19087:3;18998:93;:::i;:::-;19116:2;19111:3;19107:12;19100:19;;18759:366;;;:::o;19131:::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:::-;19645:3;19666:67;19730:2;19725:3;19666:67;:::i;:::-;19659:74;;19742:93;19831:3;19742:93;:::i;:::-;19860:2;19855:3;19851:12;19844:19;;19503:366;;;:::o;19875:400::-;20035:3;20056:84;20138:1;20133:3;20056:84;:::i;:::-;20049:91;;20149:93;20238:3;20149:93;:::i;:::-;20267:1;20262:3;20258:11;20251:18;;19875:400;;;:::o;20281:366::-;20423:3;20444:67;20508:2;20503:3;20444:67;:::i;:::-;20437:74;;20520:93;20609:3;20520:93;:::i;:::-;20638:2;20633:3;20629:12;20622:19;;20281:366;;;:::o;20653:::-;20795:3;20816:67;20880:2;20875:3;20816:67;:::i;:::-;20809:74;;20892:93;20981:3;20892:93;:::i;:::-;21010:2;21005:3;21001:12;20994:19;;20653:366;;;:::o;21025:::-;21167:3;21188:67;21252:2;21247:3;21188:67;:::i;:::-;21181:74;;21264:93;21353:3;21264:93;:::i;:::-;21382:2;21377:3;21373:12;21366:19;;21025:366;;;:::o;21397:::-;21539:3;21560:67;21624:2;21619:3;21560:67;:::i;:::-;21553:74;;21636:93;21725:3;21636:93;:::i;:::-;21754:2;21749:3;21745:12;21738:19;;21397:366;;;:::o;21769:::-;21911:3;21932:67;21996:2;21991:3;21932:67;:::i;:::-;21925:74;;22008:93;22097:3;22008:93;:::i;:::-;22126:2;22121:3;22117:12;22110:19;;21769:366;;;:::o;22141:398::-;22300:3;22321:83;22402:1;22397:3;22321:83;:::i;:::-;22314:90;;22413:93;22502:3;22413:93;:::i;:::-;22531:1;22526:3;22522:11;22515:18;;22141:398;;;:::o;22545:366::-;22687:3;22708:67;22772:2;22767:3;22708:67;:::i;:::-;22701:74;;22784:93;22873:3;22784:93;:::i;:::-;22902:2;22897:3;22893:12;22886:19;;22545:366;;;:::o;22917:::-;23059:3;23080:67;23144:2;23139:3;23080:67;:::i;:::-;23073:74;;23156:93;23245:3;23156:93;:::i;:::-;23274:2;23269:3;23265:12;23258:19;;22917:366;;;:::o;23289:118::-;23376:24;23394:5;23376:24;:::i;:::-;23371:3;23364:37;23289:118;;:::o;23413:695::-;23691:3;23713:92;23801:3;23792:6;23713:92;:::i;:::-;23706:99;;23822:95;23913:3;23904:6;23822:95;:::i;:::-;23815:102;;23934:148;24078:3;23934:148;:::i;:::-;23927:155;;24099:3;24092:10;;23413:695;;;;;:::o;24114:535::-;24344:3;24366:92;24454:3;24445:6;24366:92;:::i;:::-;24359:99;;24475:148;24619:3;24475:148;:::i;:::-;24468:155;;24640:3;24633:10;;24114:535;;;;:::o;24655:::-;24885:3;24907:92;24995:3;24986:6;24907:92;:::i;:::-;24900:99;;25016:148;25160:3;25016:148;:::i;:::-;25009:155;;25181:3;25174:10;;24655:535;;;;:::o;25196:379::-;25380:3;25402:147;25545:3;25402:147;:::i;:::-;25395:154;;25566:3;25559:10;;25196:379;;;:::o;25581:222::-;25674:4;25712:2;25701:9;25697:18;25689:26;;25725:71;25793:1;25782:9;25778:17;25769:6;25725:71;:::i;:::-;25581:222;;;;:::o;25809:640::-;26004:4;26042:3;26031:9;26027:19;26019:27;;26056:71;26124:1;26113:9;26109:17;26100:6;26056:71;:::i;:::-;26137:72;26205:2;26194:9;26190:18;26181:6;26137:72;:::i;:::-;26219;26287:2;26276:9;26272:18;26263:6;26219:72;:::i;:::-;26338:9;26332:4;26328:20;26323:2;26312:9;26308:18;26301:48;26366:76;26437:4;26428:6;26366:76;:::i;:::-;26358:84;;25809:640;;;;;;;:::o;26455:210::-;26542:4;26580:2;26569:9;26565:18;26557:26;;26593:65;26655:1;26644:9;26640:17;26631:6;26593:65;:::i;:::-;26455:210;;;;:::o;26671:218::-;26762:4;26800:2;26789:9;26785:18;26777:26;;26813:69;26879:1;26868:9;26864:17;26855:6;26813:69;:::i;:::-;26671:218;;;;:::o;26895:313::-;27008:4;27046:2;27035:9;27031:18;27023:26;;27095:9;27089:4;27085:20;27081:1;27070:9;27066:17;27059:47;27123:78;27196:4;27187:6;27123:78;:::i;:::-;27115:86;;26895:313;;;;:::o;27214:419::-;27380:4;27418:2;27407:9;27403:18;27395:26;;27467:9;27461:4;27457:20;27453:1;27442:9;27438:17;27431:47;27495:131;27621:4;27495:131;:::i;:::-;27487:139;;27214:419;;;:::o;27639:::-;27805:4;27843:2;27832:9;27828:18;27820:26;;27892:9;27886:4;27882:20;27878:1;27867:9;27863:17;27856:47;27920:131;28046:4;27920:131;:::i;:::-;27912:139;;27639:419;;;:::o;28064:::-;28230:4;28268:2;28257:9;28253:18;28245:26;;28317:9;28311:4;28307:20;28303:1;28292:9;28288:17;28281:47;28345:131;28471:4;28345:131;:::i;:::-;28337:139;;28064:419;;;:::o;28489:::-;28655:4;28693:2;28682:9;28678:18;28670:26;;28742:9;28736:4;28732:20;28728:1;28717:9;28713:17;28706:47;28770:131;28896:4;28770:131;:::i;:::-;28762:139;;28489:419;;;:::o;28914:::-;29080:4;29118:2;29107:9;29103:18;29095:26;;29167:9;29161:4;29157:20;29153:1;29142:9;29138:17;29131:47;29195:131;29321:4;29195:131;:::i;:::-;29187:139;;28914:419;;;:::o;29339:::-;29505:4;29543:2;29532:9;29528:18;29520:26;;29592:9;29586:4;29582:20;29578:1;29567:9;29563:17;29556:47;29620:131;29746:4;29620:131;:::i;:::-;29612:139;;29339:419;;;:::o;29764:::-;29930:4;29968:2;29957:9;29953:18;29945:26;;30017:9;30011:4;30007:20;30003:1;29992:9;29988:17;29981:47;30045:131;30171:4;30045:131;:::i;:::-;30037:139;;29764:419;;;:::o;30189:::-;30355:4;30393:2;30382:9;30378:18;30370:26;;30442:9;30436:4;30432:20;30428:1;30417:9;30413:17;30406:47;30470:131;30596:4;30470:131;:::i;:::-;30462:139;;30189:419;;;:::o;30614:::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:::-;31205:4;31243:2;31232:9;31228:18;31220:26;;31292:9;31286:4;31282:20;31278:1;31267:9;31263:17;31256:47;31320:131;31446:4;31320:131;:::i;:::-;31312:139;;31039:419;;;:::o;31464:::-;31630:4;31668:2;31657:9;31653:18;31645:26;;31717:9;31711:4;31707:20;31703:1;31692:9;31688:17;31681:47;31745:131;31871:4;31745:131;:::i;:::-;31737:139;;31464:419;;;:::o;31889:::-;32055:4;32093:2;32082:9;32078:18;32070:26;;32142:9;32136:4;32132:20;32128:1;32117:9;32113:17;32106:47;32170:131;32296:4;32170:131;:::i;:::-;32162:139;;31889:419;;;:::o;32314:::-;32480:4;32518:2;32507:9;32503:18;32495:26;;32567:9;32561:4;32557:20;32553:1;32542:9;32538:17;32531:47;32595:131;32721:4;32595:131;:::i;:::-;32587:139;;32314:419;;;:::o;32739:::-;32905:4;32943:2;32932:9;32928:18;32920:26;;32992:9;32986:4;32982:20;32978:1;32967:9;32963:17;32956:47;33020:131;33146:4;33020:131;:::i;:::-;33012:139;;32739:419;;;:::o;33164:::-;33330:4;33368:2;33357:9;33353:18;33345:26;;33417:9;33411:4;33407:20;33403:1;33392:9;33388:17;33381:47;33445:131;33571:4;33445:131;:::i;:::-;33437:139;;33164:419;;;:::o;33589:::-;33755:4;33793:2;33782:9;33778:18;33770:26;;33842:9;33836:4;33832:20;33828:1;33817:9;33813:17;33806:47;33870:131;33996:4;33870:131;:::i;:::-;33862:139;;33589:419;;;:::o;34014:::-;34180:4;34218:2;34207:9;34203:18;34195:26;;34267:9;34261:4;34257:20;34253:1;34242:9;34238:17;34231:47;34295:131;34421:4;34295:131;:::i;:::-;34287:139;;34014:419;;;:::o;34439:::-;34605:4;34643:2;34632:9;34628:18;34620:26;;34692:9;34686:4;34682:20;34678:1;34667:9;34663:17;34656:47;34720:131;34846:4;34720:131;:::i;:::-;34712:139;;34439:419;;;:::o;34864:::-;35030:4;35068:2;35057:9;35053:18;35045:26;;35117:9;35111:4;35107:20;35103:1;35092:9;35088:17;35081:47;35145:131;35271:4;35145:131;:::i;:::-;35137:139;;34864:419;;;:::o;35289:::-;35455:4;35493:2;35482:9;35478:18;35470:26;;35542:9;35536:4;35532:20;35528:1;35517:9;35513:17;35506:47;35570:131;35696:4;35570:131;:::i;:::-;35562:139;;35289:419;;;:::o;35714:::-;35880:4;35918:2;35907:9;35903:18;35895:26;;35967:9;35961:4;35957:20;35953:1;35942:9;35938:17;35931:47;35995:131;36121:4;35995:131;:::i;:::-;35987:139;;35714:419;;;:::o;36139:::-;36305:4;36343:2;36332:9;36328:18;36320:26;;36392:9;36386:4;36382:20;36378:1;36367:9;36363:17;36356:47;36420:131;36546:4;36420:131;:::i;:::-;36412:139;;36139:419;;;:::o;36564:::-;36730:4;36768:2;36757:9;36753:18;36745:26;;36817:9;36811:4;36807:20;36803:1;36792:9;36788:17;36781:47;36845:131;36971:4;36845:131;:::i;:::-;36837:139;;36564:419;;;:::o;36989:::-;37155:4;37193:2;37182:9;37178:18;37170:26;;37242:9;37236:4;37232:20;37228:1;37217:9;37213:17;37206:47;37270:131;37396:4;37270:131;:::i;:::-;37262:139;;36989:419;;;:::o;37414:222::-;37507:4;37545:2;37534:9;37530:18;37522:26;;37558:71;37626:1;37615:9;37611:17;37602:6;37558:71;:::i;:::-;37414:222;;;;:::o;37642:129::-;37676:6;37703:20;;:::i;:::-;37693:30;;37732:33;37760:4;37752:6;37732:33;:::i;:::-;37642:129;;;:::o;37777:75::-;37810:6;37843:2;37837:9;37827:19;;37777:75;:::o;37858:311::-;37935:4;38025:18;38017:6;38014:30;38011:56;;;38047:18;;:::i;:::-;38011:56;38097:4;38089:6;38085:17;38077:25;;38157:4;38151;38147:15;38139:23;;37858:311;;;:::o;38175:307::-;38236:4;38326:18;38318:6;38315:30;38312:56;;;38348:18;;:::i;:::-;38312:56;38386:29;38408:6;38386:29;:::i;:::-;38378:37;;38470:4;38464;38460:15;38452:23;;38175:307;;;:::o;38488:308::-;38550:4;38640:18;38632:6;38629:30;38626:56;;;38662:18;;:::i;:::-;38626:56;38700:29;38722:6;38700:29;:::i;:::-;38692:37;;38784:4;38778;38774:15;38766:23;;38488:308;;;:::o;38802:141::-;38851:4;38874:3;38866:11;;38897:3;38894:1;38887:14;38931:4;38928:1;38918:18;38910:26;;38802:141;;;:::o;38949:98::-;39000:6;39034:5;39028:12;39018:22;;38949:98;;;:::o;39053:99::-;39105:6;39139:5;39133:12;39123:22;;39053:99;;;:::o;39158:168::-;39241:11;39275:6;39270:3;39263:19;39315:4;39310:3;39306:14;39291:29;;39158:168;;;;:::o;39332:147::-;39433:11;39470:3;39455:18;;39332:147;;;;:::o;39485:169::-;39569:11;39603:6;39598:3;39591:19;39643:4;39638:3;39634:14;39619:29;;39485:169;;;;:::o;39660:148::-;39762:11;39799:3;39784:18;;39660:148;;;;:::o;39814:305::-;39854:3;39873:20;39891:1;39873:20;:::i;:::-;39868:25;;39907:20;39925:1;39907:20;:::i;:::-;39902:25;;40061:1;39993:66;39989:74;39986:1;39983:81;39980:107;;;40067:18;;:::i;:::-;39980:107;40111:1;40108;40104:9;40097:16;;39814:305;;;;:::o;40125:185::-;40165:1;40182:20;40200:1;40182:20;:::i;:::-;40177:25;;40216:20;40234:1;40216:20;:::i;:::-;40211:25;;40255:1;40245:35;;40260:18;;:::i;:::-;40245:35;40302:1;40299;40295:9;40290:14;;40125:185;;;;:::o;40316:348::-;40356:7;40379:20;40397:1;40379:20;:::i;:::-;40374:25;;40413:20;40431:1;40413:20;:::i;:::-;40408:25;;40601:1;40533:66;40529:74;40526:1;40523:81;40518:1;40511:9;40504:17;40500:105;40497:131;;;40608:18;;:::i;:::-;40497:131;40656:1;40653;40649:9;40638:20;;40316:348;;;;:::o;40670:191::-;40710:4;40730:20;40748:1;40730:20;:::i;:::-;40725:25;;40764:20;40782:1;40764:20;:::i;:::-;40759:25;;40803:1;40800;40797:8;40794:34;;;40808:18;;:::i;:::-;40794:34;40853:1;40850;40846:9;40838:17;;40670:191;;;;:::o;40867:96::-;40904:7;40933:24;40951:5;40933:24;:::i;:::-;40922:35;;40867:96;;;:::o;40969:90::-;41003:7;41046:5;41039:13;41032:21;41021:32;;40969:90;;;:::o;41065:149::-;41101:7;41141:66;41134:5;41130:78;41119:89;;41065:149;;;:::o;41220:126::-;41257:7;41297:42;41290:5;41286:54;41275:65;;41220:126;;;:::o;41352:77::-;41389:7;41418:5;41407:16;;41352:77;;;:::o;41435:154::-;41519:6;41514:3;41509;41496:30;41581:1;41572:6;41567:3;41563:16;41556:27;41435:154;;;:::o;41595:307::-;41663:1;41673:113;41687:6;41684:1;41681:13;41673:113;;;41772:1;41767:3;41763:11;41757:18;41753:1;41748:3;41744:11;41737:39;41709:2;41706:1;41702:10;41697:15;;41673:113;;;41804:6;41801:1;41798:13;41795:101;;;41884:1;41875:6;41870:3;41866:16;41859:27;41795:101;41644:258;41595:307;;;:::o;41908:320::-;41952:6;41989:1;41983:4;41979:12;41969:22;;42036:1;42030:4;42026:12;42057:18;42047:81;;42113:4;42105:6;42101:17;42091:27;;42047:81;42175:2;42167:6;42164:14;42144:18;42141:38;42138:84;;;42194:18;;:::i;:::-;42138:84;41959:269;41908:320;;;:::o;42234:281::-;42317:27;42339:4;42317:27;:::i;:::-;42309:6;42305:40;42447:6;42435:10;42432:22;42411:18;42399:10;42396:34;42393:62;42390:88;;;42458:18;;:::i;:::-;42390:88;42498:10;42494:2;42487:22;42277:238;42234:281;;:::o;42521:233::-;42560:3;42583:24;42601:5;42583:24;:::i;:::-;42574:33;;42629:66;42622:5;42619:77;42616:103;;;42699:18;;:::i;:::-;42616:103;42746:1;42739:5;42735:13;42728:20;;42521:233;;;:::o;42760:176::-;42792:1;42809:20;42827:1;42809:20;:::i;:::-;42804:25;;42843:20;42861:1;42843:20;:::i;:::-;42838:25;;42882:1;42872:35;;42887:18;;:::i;:::-;42872:35;42928:1;42925;42921:9;42916:14;;42760:176;;;;:::o;42942:180::-;42990:77;42987:1;42980:88;43087:4;43084:1;43077:15;43111:4;43108:1;43101:15;43128:180;43176:77;43173:1;43166:88;43273:4;43270:1;43263:15;43297:4;43294:1;43287:15;43314:180;43362:77;43359:1;43352:88;43459:4;43456:1;43449:15;43483:4;43480:1;43473:15;43500:180;43548:77;43545:1;43538:88;43645:4;43642:1;43635:15;43669:4;43666:1;43659:15;43686:180;43734:77;43731:1;43724:88;43831:4;43828:1;43821:15;43855:4;43852:1;43845:15;43872:117;43981:1;43978;43971:12;43995:117;44104:1;44101;44094:12;44118:117;44227:1;44224;44217:12;44241:117;44350:1;44347;44340:12;44364:117;44473:1;44470;44463:12;44487:117;44596:1;44593;44586:12;44610:102;44651:6;44702:2;44698:7;44693:2;44686:5;44682:14;44678:28;44668:38;;44610:102;;;:::o;44718:182::-;44858:34;44854:1;44846:6;44842:14;44835:58;44718:182;:::o;44906:163::-;45046:15;45042:1;45034:6;45030:14;45023:39;44906:163;:::o;45075:177::-;45215:29;45211:1;45203:6;45199:14;45192:53;45075:177;:::o;45258:178::-;45398:30;45394:1;45386:6;45382:14;45375:54;45258:178;:::o;45442:182::-;45582:34;45578:1;45570:6;45566:14;45559:58;45442:182;:::o;45630:180::-;45770:32;45766:1;45758:6;45754:14;45747:56;45630:180;:::o;45816:174::-;45956:26;45952:1;45944:6;45940:14;45933:50;45816:174;:::o;45996:182::-;46136:34;46132:1;46124:6;46120:14;46113:58;45996:182;:::o;46184:175::-;46324:27;46320:1;46312:6;46308:14;46301:51;46184:175;:::o;46365:162::-;46505:14;46501:1;46493:6;46489:14;46482:38;46365:162;:::o;46533:180::-;46673:32;46669:1;46661:6;46657:14;46650:56;46533:180;:::o;46719:172::-;46859:24;46855:1;46847:6;46843:14;46836:48;46719:172;:::o;46897:176::-;47037:28;47033:1;47025:6;47021:14;47014:52;46897:176;:::o;47079:::-;47219:28;47215:1;47207:6;47203:14;47196:52;47079:176;:::o;47261:167::-;47401:19;47397:1;47389:6;47385:14;47378:43;47261:167;:::o;47434:181::-;47574:33;47570:1;47562:6;47558:14;47551:57;47434:181;:::o;47621:::-;47761:33;47757:1;47749:6;47745:14;47738:57;47621:181;:::o;47808:182::-;47948:34;47944:1;47936:6;47932:14;47925:58;47808:182;:::o;47996:::-;48136:34;48132:1;48124:6;48120:14;48113:58;47996:182;:::o;48184:155::-;48324:7;48320:1;48312:6;48308:14;48301:31;48184:155;:::o;48345:178::-;48485:30;48481:1;48473:6;48469:14;48462:54;48345:178;:::o;48529:182::-;48669:34;48665:1;48657:6;48653:14;48646:58;48529:182;:::o;48717:174::-;48857:26;48853:1;48845:6;48841:14;48834:50;48717:174;:::o;48897:178::-;49037:30;49033:1;49025:6;49021:14;49014:54;48897:178;:::o;49081:177::-;49221:29;49217:1;49209:6;49205:14;49198:53;49081:177;:::o;49264:114::-;;:::o;49384:179::-;49524:31;49520:1;49512:6;49508:14;49501:55;49384:179;:::o;49569:169::-;49709:21;49705:1;49697:6;49693:14;49686:45;49569:169;:::o;49744:122::-;49817:24;49835:5;49817:24;:::i;:::-;49810:5;49807:35;49797:63;;49856:1;49853;49846:12;49797:63;49744:122;:::o;49872:116::-;49942:21;49957:5;49942:21;:::i;:::-;49935:5;49932:32;49922:60;;49978:1;49975;49968:12;49922:60;49872:116;:::o;49994:120::-;50066:23;50083:5;50066:23;:::i;:::-;50059:5;50056:34;50046:62;;50104:1;50101;50094:12;50046:62;49994:120;:::o;50120:122::-;50193:24;50211:5;50193:24;:::i;:::-;50186:5;50183:35;50173:63;;50232:1;50229;50222:12;50173:63;50120:122;:::o

Swarm Source

ipfs://102db9157d9b58a374280620905cf919cb6294dd8e330ae4da656bba6bf99d44

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.