ETH Price: $3,367.86 (-3.40%)

AVIUS OBSCURIS (AVONFT)
 

Overview

TokenID

506

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
AVIUSNFT

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: newAvaContract.sol

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

// File: @openzeppelin/contracts/utils/Strings.sol


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

contract ERC721 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance){}
    function ownerOf(uint256 tokenId) external view returns (address owner){}
    function safeTransferFrom(address from,address to,uint256 tokenId) external{}
    function transferFrom(address from, address to, uint256 tokenId) external{}
    function approve(address to, uint256 tokenId) external{}
    function getApproved(uint256 tokenId) external view returns (address operator){}
    function setApprovalForAll(address operator, bool _approved) external{}
    function isApprovedForAll(address owner, address operator) external view returns (bool){}
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external{}
}

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

contract AVIUSNFT is IERC721, Ownable, Functional {

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

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

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

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

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

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Specific Functionality
    bool public publicMintActive;
    bool public whiteListActive;
	uint256 private _maxSupply;
    uint256 public numberMinted;
    uint256 public maxPerTxn;
    uint256 public maxPerWallet = 10;
	bool private _revealed;
    uint256 public nftprice;
    
    mapping(address => uint256) private _mintTracker;
    address nftOwnerAddress      = payable(0x89AC334A1C882217916CB90f2A45cBA88cE35a52);
    
    //whitelist for holders
    ERC721 CC; ///Elephants of Chameleons
   
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "AVIUS OBSCURIS";
        _symbol = "AVONFT";
        _baseURI = "https://aviusanimae.xyz/metadata/";
       
        CC = ERC721(0x0eDA3c383F13C36db1c96bD9c56f715B09b9E350); // AVA Burn token on etherscan
        _maxSupply = 3333;
    }

    //@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 == AVIUSNFT.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        (bool success, ) = nftOwnerAddress.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function airDrop(address _to, uint256 qty) external onlyOwner {
        require(!publicMintActive && !whiteListActive, "Mint is Active first deactivate it by owner");
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((_mintTracker[_to] + qty) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        uint256 mintSeedValue = numberMinted;
        _mintTracker[_to] = _mintTracker[_to] + qty;
        for(uint256 i = 1; i <= qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
	function publicMint(uint256 qty) external payable reentryLock {
		require(publicMintActive, "Mint Not Active");
        require((_mintTracker[msg.sender] + qty) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        require(numberMinted + qty <= _maxSupply, "Max supply exceeded");
        require(msg.value >= 0, "Wrong Eth Amount");
    	nftprice = msg.value;
		uint256 mintSeedValue = numberMinted;
		numberMinted += qty;
		_mintTracker[msg.sender] = _mintTracker[msg.sender] + qty;
		for(uint256 i = 1; i <= qty; i++) {
        	_safeMint(_msgSender(), mintSeedValue + i);
        }
	}
    function whiteListMint(uint256 qty) external payable reentryLock {
		require(CC.balanceOf(_msgSender()) > 0, "Must have Avius Token");
		require(whiteListActive, "Mint Not Active");
        require((_mintTracker[msg.sender] + qty) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        require(numberMinted + qty <= _maxSupply, "Max supply exceeded");
        require(msg.value >= 0, "Wrong Eth Amount");
    	nftprice = msg.value;
		uint256 mintSeedValue = numberMinted;
		numberMinted += qty;
		_mintTracker[msg.sender] = _mintTracker[msg.sender] + qty;
		for(uint256 i = 1; i <= qty; i++) {
        	_safeMint(_msgSender(), mintSeedValue + i);
        }
	}
   
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID, uint256 tokenIDTwo) external {
        require(_msgSender() == (CC).ownerOf(tokenID), "Only token owner can call burn");
        require(_msgSender() == (CC).ownerOf(tokenIDTwo), "Only token owner can call burn");
        (CC).transferFrom(msg.sender, address(0x000000000000000000000000000000000000dEaD), tokenID);
        (CC).transferFrom(msg.sender, address(0x000000000000000000000000000000000000dEaD), tokenIDTwo);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
	function reveal() external onlyOwner {
		_revealed = true;
	}

	function changeMaxSupply( uint256 newValue ) external onlyOwner {
		_maxSupply = newValue;
	}

	function hide() external onlyOwner {
		_revealed = false;
	}

    function setMaxMintThreshold(uint256 maxMints) external onlyOwner {
        maxPerWallet = maxMints;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activatePublicMint() public onlyOwner {
        publicMintActive = true;
    }
    
    function deactivatePublicMint() public onlyOwner {
        publicMintActive = false;
    }

    function activeWhiteListMint() public onlyOwner {
        whiteListActive = true;
    }
    
    function deactivateWhiteListMint() public onlyOwner {
        whiteListActive = false;
    }
   
    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    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() external pure 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 (_revealed){
        	tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
		} else {
			tokenuri = string(abi.encodePacked(_baseURI, "mystery.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":"activatePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeWhiteListMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"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"},{"internalType":"uint256","name":"tokenIDTwo","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivatePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWhiteListMint","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":[],"name":"hide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxMintThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"whiteListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff021916908315150217905550600a600c557389ac334a1c882217916cb90f2a45cba88ce35a52601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008557600080fd5b50620000a66200009a620001d860201b60201c565b620001e060201b60201c565b6040518060400160405280600e81526020017f4156495553204f4253435552495300000000000000000000000000000000000081525060019080519060200190620000f3929190620002a4565b506040518060400160405280600681526020017f41564f4e465400000000000000000000000000000000000000000000000000008152506002908051906020019062000141929190620002a4565b5060405180606001604052806021815260200162004fa2602191396003908051906020019062000173929190620002a4565b50730eda3c383f13c36db1c96bd9c56f715b09b9e350601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d05600981905550620003b9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b29062000383565b90600052602060002090601f016020900481019282620002d6576000855562000322565b82601f10620002f157805160ff191683800117855562000322565b8280016001018555821562000322579182015b828111156200032157825182559160200191906001019062000304565b5b50905062000331919062000335565b5090565b5b808211156200035057600081600090555060010162000336565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200039c57607f821691505b60208210811415620003b357620003b262000354565b5b50919050565b614bd980620003c96000396000f3fe60806040526004361061023f5760003560e01c806370a082311161012e578063b62a7625116100ab578063d78c06fa1161006f578063d78c06fa146107b3578063e8a3d485146107dc578063e985e9c514610807578063f2fde38b14610844578063f8b2cb4f1461086d57610246565b8063b62a7625146106f4578063b67c25a31461070b578063b88d4fde14610736578063c87b56dd1461075f578063d3bd8f921461079c57610246565b806395d89b41116100f257806395d89b4114610635578063a22cb46514610660578063a475b5dd14610689578063a8fcc417146106a0578063b390c0ab146106cb57610246565b806370a0823114610588578063715018a6146105c557806376557743146105dc5780637dad95e9146105f35780638da5cb5b1461060a57610246565b80632e4355cd116101bc578063453c231011610180578063453c2310146104a157806349a772b5146104cc57806355f804b3146104f75780636352211e146105205780636fe3edef1461055d57610246565b80632e4355cd146103e25780633cb519941461040d5780633ccfd60b14610438578063404c7cdd1461044f57806342842e0e1461047857610246565b8063095ea7b311610203578063095ea7b314610332578063120ef1d71461035b57806318160ddd1461037257806323b872dd1461039d5780632db11544146103c657610246565b806301ffc9a71461024857806302e001ef14610285578063045f7850146102a157806306fdde03146102ca578063081812fc146102f557610246565b3661024657005b005b34801561025457600080fd5b5061026f600480360381019061026a9190613386565b6108aa565b60405161027c91906133ce565b60405180910390f35b61029f600480360381019061029a919061341f565b610a33565b005b3480156102ad57600080fd5b506102c860048036038101906102c391906134aa565b610e08565b005b3480156102d657600080fd5b506102df6110b6565b6040516102ec9190613583565b60405180910390f35b34801561030157600080fd5b5061031c6004803603810190610317919061341f565b611148565b60405161032991906135b4565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906134aa565b6111cd565b005b34801561036757600080fd5b506103706112d7565b005b34801561037e57600080fd5b50610387611370565b60405161039491906135de565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906135f9565b61137a565b005b6103e060048036038101906103db919061341f565b6113d3565b005b3480156103ee57600080fd5b506103f76116c3565b60405161040491906133ce565b60405180910390f35b34801561041957600080fd5b506104226116d6565b60405161042f91906135de565b60405180910390f35b34801561044457600080fd5b5061044d6116dc565b005b34801561045b57600080fd5b506104766004803603810190610471919061341f565b61182f565b005b34801561048457600080fd5b5061049f600480360381019061049a91906135f9565b6118b5565b005b3480156104ad57600080fd5b506104b66118d5565b6040516104c391906135de565b60405180910390f35b3480156104d857600080fd5b506104e16118db565b6040516104ee91906135de565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190613781565b6118e1565b005b34801561052c57600080fd5b506105476004803603810190610542919061341f565b611977565b60405161055491906135b4565b60405180910390f35b34801561056957600080fd5b50610572611a29565b60405161057f91906135de565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa91906137ca565b611a2f565b6040516105bc91906135de565b60405180910390f35b3480156105d157600080fd5b506105da611ae7565b005b3480156105e857600080fd5b506105f1611b6f565b005b3480156105ff57600080fd5b50610608611c08565b005b34801561061657600080fd5b5061061f611ca1565b60405161062c91906135b4565b60405180910390f35b34801561064157600080fd5b5061064a611cca565b6040516106579190613583565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613823565b611d5c565b005b34801561069557600080fd5b5061069e611ec8565b005b3480156106ac57600080fd5b506106b5611f61565b6040516106c29190613872565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed919061388d565b611f70565b005b34801561070057600080fd5b506107096122ba565b005b34801561071757600080fd5b50610720612353565b60405161072d91906133ce565b60405180910390f35b34801561074257600080fd5b5061075d6004803603810190610758919061396e565b612366565b005b34801561076b57600080fd5b506107866004803603810190610781919061341f565b6123c1565b6040516107939190613583565b60405180910390f35b3480156107a857600080fd5b506107b1612481565b005b3480156107bf57600080fd5b506107da60048036038101906107d5919061341f565b61251a565b005b3480156107e857600080fd5b506107f16125a0565b6040516107fe9190613583565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906139f1565b6125c8565b60405161083b91906133ce565b60405180910390f35b34801561085057600080fd5b5061086b600480360381019061086691906137ca565b61265c565b005b34801561087957600080fd5b50610894600480360381019061088f91906137ca565b612754565b6040516108a191906135de565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109dd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2c575063a8fcc41760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600060149054906101000a900460ff1615610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90613a7d565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610ae66127af565b6040518263ffffffff1660e01b8152600401610b0291906135b4565b602060405180830381865afa158015610b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b439190613ab2565b11610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90613b2b565b60405180910390fd5b600860019054906101000a900460ff16610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613b97565b60405180910390fd5b600c5481600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c209190613be6565b1115610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890613cae565b60405180910390fd5b60095481600a54610c729190613be6565b1115610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613d1a565b60405180910390fd5b6000341015610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613d86565b60405180910390fd5b34600e819055506000600a54905081600a6000828254610d179190613be6565b9250508190555081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d699190613be6565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b828111610de957610dd6610dc56127af565b8284610dd19190613be6565b6127b7565b8080610de190613da6565b915050610db3565b505060008060146101000a81548160ff02191690831515021790555050565b610e106127af565b73ffffffffffffffffffffffffffffffffffffffff16610e2e611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90613e3b565b60405180910390fd5b600860009054906101000a900460ff16158015610eae5750600860019054906101000a900460ff16155b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613ecd565b60405180910390fd5b600a5481600a54610efe9190613be6565b11610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613f39565b60405180910390fd5b600c5481600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8c9190613be6565b1115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490613cae565b60405180910390fd5b6000600a54905081600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461101f9190613be6565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b8281116110b0576110858482846110809190613be6565b6127b7565b600a600081548092919061109890613da6565b919050555080806110a890613da6565b915050611069565b50505050565b6060600180546110c590613f88565b80601f01602080910402602001604051908101604052809291908181526020018280546110f190613f88565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b5050505050905090565b6000611153826127d5565b611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614006565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006111d882611977565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090614072565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611289575061128881336125c8565b5b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf906140de565b60405180910390fd5b6112d28383612841565b505050565b6112df6127af565b73ffffffffffffffffffffffffffffffffffffffff166112fd611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613e3b565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6000600a54905090565b61138433826128fa565b6113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba9061414a565b60405180910390fd5b6113ce8383836129d8565b505050565b600060149054906101000a900460ff1615611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90613a7d565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff1661148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613b97565b60405180910390fd5b600c5481600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114db9190613be6565b111561151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390613cae565b60405180910390fd5b60095481600a5461152d9190613be6565b111561156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613d1a565b60405180910390fd5b60003410156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613d86565b60405180910390fd5b34600e819055506000600a54905081600a60008282546115d29190613be6565b9250508190555081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116249190613be6565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b8281116116a4576116916116806127af565b828461168c9190613be6565b6127b7565b808061169c90613da6565b91505061166e565b505060008060146101000a81548160ff02191690831515021790555050565b600860019054906101000a900460ff1681565b600b5481565b6116e46127af565b73ffffffffffffffffffffffffffffffffffffffff16611702611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613e3b565b60405180910390fd5b60004790506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117a59061419b565b60006040518083038185875af1925050503d80600081146117e2576040519150601f19603f3d011682016040523d82523d6000602084013e6117e7565b606091505b505090508061182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906141fc565b60405180910390fd5b5050565b6118376127af565b73ffffffffffffffffffffffffffffffffffffffff16611855611ca1565b73ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613e3b565b60405180910390fd5b8060098190555050565b6118d083838360405180602001604052806000815250612366565b505050565b600c5481565b600a5481565b6118e96127af565b73ffffffffffffffffffffffffffffffffffffffff16611907611ca1565b73ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490613e3b565b60405180910390fd5b8060039080519060200190611973929190613277565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1790614268565b60405180910390fd5b80915050919050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a97906142d4565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aef6127af565b73ffffffffffffffffffffffffffffffffffffffff16611b0d611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90613e3b565b60405180910390fd5b611b6d6000612c34565b565b611b776127af565b73ffffffffffffffffffffffffffffffffffffffff16611b95611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613e3b565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611c106127af565b73ffffffffffffffffffffffffffffffffffffffff16611c2e611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613e3b565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611cd990613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0590613f88565b8015611d525780601f10611d2757610100808354040283529160200191611d52565b820191906000526020600020905b815481529060010190602001808311611d3557829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290614340565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ebc91906133ce565b60405180910390a35050565b611ed06127af565b73ffffffffffffffffffffffffffffffffffffffff16611eee611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613e3b565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600063a8fcc41760e01b905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611fcb91906135de565b602060405180830381865afa158015611fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200c9190614375565b73ffffffffffffffffffffffffffffffffffffffff1661202a6127af565b73ffffffffffffffffffffffffffffffffffffffff1614612080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612077906143ee565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016120db91906135de565b602060405180830381865afa1580156120f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211c9190614375565b73ffffffffffffffffffffffffffffffffffffffff1661213a6127af565b73ffffffffffffffffffffffffffffffffffffffff1614612190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612187906143ee565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead856040518463ffffffff1660e01b81526004016121f19392919061440e565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead846040518463ffffffff1660e01b81526004016122849392919061440e565b600060405180830381600087803b15801561229e57600080fd5b505af11580156122b2573d6000803e3d6000fd5b505050505050565b6122c26127af565b73ffffffffffffffffffffffffffffffffffffffff166122e0611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90613e3b565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b600860009054906101000a900460ff1681565b61237033836128fa565b6123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a69061414a565b60405180910390fd5b6123bb84848484612cf8565b50505050565b60606123cc826127d5565b61240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614491565b60405180910390fd5b6060600d60009054906101000a900460ff161561245457600361242d84612d54565b60405160200161243e9291906145cd565b6040516020818303038152906040529050612478565b60036040516020016124669190614648565b60405160208183030381529060405290505b80915050919050565b6124896127af565b73ffffffffffffffffffffffffffffffffffffffff166124a7611ca1565b73ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490613e3b565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6125226127af565b73ffffffffffffffffffffffffffffffffffffffff16612540611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613e3b565b60405180910390fd5b80600c8190555050565b606060036040516020016125b491906146b6565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126646127af565b73ffffffffffffffffffffffffffffffffffffffff16612682611ca1565b73ffffffffffffffffffffffffffffffffffffffff16146126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90613e3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614724565b60405180910390fd5b61275181612c34565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a89190614773565b9050919050565b600033905090565b6127d1828260405180602001604052806000815250612eb5565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128b483611977565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612905826127d5565b612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906147f0565b60405180910390fd5b600061294f83611977565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129be57508373ffffffffffffffffffffffffffffffffffffffff166129a684611148565b73ffffffffffffffffffffffffffffffffffffffff16145b806129cf57506129ce81856125c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129f882611977565b73ffffffffffffffffffffffffffffffffffffffff1614612a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a459061485c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab5906148c8565b60405180910390fd5b612ac9838383612f10565b612ad4600082612841565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2491906148e8565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b7b9190613be6565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d038484846129d8565b612d0f84848484612f15565b612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614968565b60405180910390fd5b50505050565b60606000821415612d9c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eb0565b600082905060005b60008214612dce578080612db790613da6565b915050600a82612dc79190614773565b9150612da4565b60008167ffffffffffffffff811115612dea57612de9613656565b5b6040519080825280601f01601f191660200182016040528015612e1c5781602001600182028036833780820191505090505b5090505b60008514612ea957600182612e3591906148e8565b9150600a85612e449190614988565b6030612e509190613be6565b60f81b818381518110612e6657612e656149b9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ea29190614773565b9450612e20565b8093505050505b919050565b612ebf8383613096565b612ecc6000848484612f15565b612f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0290614968565b60405180910390fd5b505050565b505050565b6000612f368473ffffffffffffffffffffffffffffffffffffffff16613264565b15613089578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612f7a9493929190614a3d565b6020604051808303816000875af1925050508015612fb657506040513d601f19601f82011682018060405250810190612fb39190614a9e565b60015b613039573d8060008114612fe6576040519150601f19603f3d011682016040523d82523d6000602084013e612feb565b606091505b50600081511415613031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302890614968565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061308e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd90614b17565b60405180910390fd5b61310f816127d5565b1561314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314690614b83565b60405180910390fd5b61315b60008383612f10565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ab9190613be6565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461328390613f88565b90600052602060002090601f0160209004810192826132a557600085556132ec565b82601f106132be57805160ff19168380011785556132ec565b828001600101855582156132ec579182015b828111156132eb5782518255916020019190600101906132d0565b5b5090506132f991906132fd565b5090565b5b808211156133165760008160009055506001016132fe565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133638161332e565b811461336e57600080fd5b50565b6000813590506133808161335a565b92915050565b60006020828403121561339c5761339b613324565b5b60006133aa84828501613371565b91505092915050565b60008115159050919050565b6133c8816133b3565b82525050565b60006020820190506133e360008301846133bf565b92915050565b6000819050919050565b6133fc816133e9565b811461340757600080fd5b50565b600081359050613419816133f3565b92915050565b60006020828403121561343557613434613324565b5b60006134438482850161340a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134778261344c565b9050919050565b6134878161346c565b811461349257600080fd5b50565b6000813590506134a48161347e565b92915050565b600080604083850312156134c1576134c0613324565b5b60006134cf85828601613495565b92505060206134e08582860161340a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613524578082015181840152602081019050613509565b83811115613533576000848401525b50505050565b6000601f19601f8301169050919050565b6000613555826134ea565b61355f81856134f5565b935061356f818560208601613506565b61357881613539565b840191505092915050565b6000602082019050818103600083015261359d818461354a565b905092915050565b6135ae8161346c565b82525050565b60006020820190506135c960008301846135a5565b92915050565b6135d8816133e9565b82525050565b60006020820190506135f360008301846135cf565b92915050565b60008060006060848603121561361257613611613324565b5b600061362086828701613495565b935050602061363186828701613495565b92505060406136428682870161340a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61368e82613539565b810181811067ffffffffffffffff821117156136ad576136ac613656565b5b80604052505050565b60006136c061331a565b90506136cc8282613685565b919050565b600067ffffffffffffffff8211156136ec576136eb613656565b5b6136f582613539565b9050602081019050919050565b82818337600083830152505050565b600061372461371f846136d1565b6136b6565b9050828152602081018484840111156137405761373f613651565b5b61374b848285613702565b509392505050565b600082601f8301126137685761376761364c565b5b8135613778848260208601613711565b91505092915050565b60006020828403121561379757613796613324565b5b600082013567ffffffffffffffff8111156137b5576137b4613329565b5b6137c184828501613753565b91505092915050565b6000602082840312156137e0576137df613324565b5b60006137ee84828501613495565b91505092915050565b613800816133b3565b811461380b57600080fd5b50565b60008135905061381d816137f7565b92915050565b6000806040838503121561383a57613839613324565b5b600061384885828601613495565b92505060206138598582860161380e565b9150509250929050565b61386c8161332e565b82525050565b60006020820190506138876000830184613863565b92915050565b600080604083850312156138a4576138a3613324565b5b60006138b28582860161340a565b92505060206138c38582860161340a565b9150509250929050565b600067ffffffffffffffff8211156138e8576138e7613656565b5b6138f182613539565b9050602081019050919050565b600061391161390c846138cd565b6136b6565b90508281526020810184848401111561392d5761392c613651565b5b613938848285613702565b509392505050565b600082601f8301126139555761395461364c565b5b81356139658482602086016138fe565b91505092915050565b6000806000806080858703121561398857613987613324565b5b600061399687828801613495565b94505060206139a787828801613495565b93505060406139b88782880161340a565b925050606085013567ffffffffffffffff8111156139d9576139d8613329565b5b6139e587828801613940565b91505092959194509250565b60008060408385031215613a0857613a07613324565b5b6000613a1685828601613495565b9250506020613a2785828601613495565b9150509250929050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b6000613a67601f836134f5565b9150613a7282613a31565b602082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b600081519050613aac816133f3565b92915050565b600060208284031215613ac857613ac7613324565b5b6000613ad684828501613a9d565b91505092915050565b7f4d757374206861766520417669757320546f6b656e0000000000000000000000600082015250565b6000613b156015836134f5565b9150613b2082613adf565b602082019050919050565b60006020820190508181036000830152613b4481613b08565b9050919050565b7f4d696e74204e6f74204163746976650000000000000000000000000000000000600082015250565b6000613b81600f836134f5565b9150613b8c82613b4b565b602082019050919050565b60006020820190508181036000830152613bb081613b74565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bf1826133e9565b9150613bfc836133e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c3157613c30613bb7565b5b828201905092915050565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c986021836134f5565b9150613ca382613c3c565b604082019050919050565b60006020820190508181036000830152613cc781613c8b565b9050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b6000613d046013836134f5565b9150613d0f82613cce565b602082019050919050565b60006020820190508181036000830152613d3381613cf7565b9050919050565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b6000613d706010836134f5565b9150613d7b82613d3a565b602082019050919050565b60006020820190508181036000830152613d9f81613d63565b9050919050565b6000613db1826133e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613de457613de3613bb7565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e256020836134f5565b9150613e3082613def565b602082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f4d696e742069732041637469766520666972737420646561637469766174652060008201527f6974206279206f776e6572000000000000000000000000000000000000000000602082015250565b6000613eb7602b836134f5565b9150613ec282613e5b565b604082019050919050565b60006020820190508181036000830152613ee681613eaa565b9050919050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6000613f236013836134f5565b9150613f2e82613eed565b602082019050919050565b60006020820190508181036000830152613f5281613f16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa057607f821691505b60208210811415613fb457613fb3613f59565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b6000613ff06020836134f5565b9150613ffb82613fba565b602082019050919050565b6000602082019050818103600083015261401f81613fe3565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b600061405c601e836134f5565b915061406782614026565b602082019050919050565b6000602082019050818103600083015261408b8161404f565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b60006140c8601f836134f5565b91506140d382614092565b602082019050919050565b600060208201905081810360008301526140f7816140bb565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b6000614134601c836134f5565b915061413f826140fe565b602082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b600081905092915050565b50565b600061418560008361416a565b915061419082614175565b600082019050919050565b60006141a682614178565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b60006141e66018836134f5565b91506141f1826141b0565b602082019050919050565b60006020820190508181036000830152614215816141d9565b9050919050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000614252601e836134f5565b915061425d8261421c565b602082019050919050565b6000602082019050818103600083015261428181614245565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b60006142be6020836134f5565b91506142c982614288565b602082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061432a6019836134f5565b9150614335826142f4565b602082019050919050565b600060208201905081810360008301526143598161431d565b9050919050565b60008151905061436f8161347e565b92915050565b60006020828403121561438b5761438a613324565b5b600061439984828501614360565b91505092915050565b7f4f6e6c7920746f6b656e206f776e65722063616e2063616c6c206275726e0000600082015250565b60006143d8601e836134f5565b91506143e3826143a2565b602082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b600060608201905061442360008301866135a5565b61443060208301856135a5565b61443d60408301846135cf565b949350505050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b600061447b601d836134f5565b915061448682614445565b602082019050919050565b600060208201905081810360008301526144aa8161446e565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546144de81613f88565b6144e881866144b1565b94506001821660008114614503576001811461451457614547565b60ff19831686528186019350614547565b61451d856144bc565b60005b8381101561453f57815481890152600182019150602081019050614520565b838801955050505b50505092915050565b600061455b826134ea565b61456581856144b1565b9350614575818560208601613506565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006145b76005836144b1565b91506145c282614581565b600582019050919050565b60006145d982856144d1565b91506145e58284614550565b91506145f0826145aa565b91508190509392505050565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b6000614632600c836144b1565b915061463d826145fc565b600c82019050919050565b600061465482846144d1565b915061465f82614625565b915081905092915050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b60006146a0600d836144b1565b91506146ab8261466a565b600d82019050919050565b60006146c282846144d1565b91506146cd82614693565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b600061470e6020836134f5565b9150614719826146d8565b602082019050919050565b6000602082019050818103600083015261473d81614701565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061477e826133e9565b9150614789836133e9565b92508261479957614798614744565b5b828204905092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b60006147da6020836134f5565b91506147e5826147a4565b602082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b6000614846601c836134f5565b915061485182614810565b602082019050919050565b6000602082019050818103600083015261487581614839565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b60006148b2601b836134f5565b91506148bd8261487c565b602082019050919050565b600060208201905081810360008301526148e1816148a5565b9050919050565b60006148f3826133e9565b91506148fe836133e9565b92508282101561491157614910613bb7565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b6000614952601a836134f5565b915061495d8261491c565b602082019050919050565b6000602082019050818103600083015261498181614945565b9050919050565b6000614993826133e9565b915061499e836133e9565b9250826149ae576149ad614744565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000614a0f826149e8565b614a1981856149f3565b9350614a29818560208601613506565b614a3281613539565b840191505092915050565b6000608082019050614a5260008301876135a5565b614a5f60208301866135a5565b614a6c60408301856135cf565b8181036060830152614a7e8184614a04565b905095945050505050565b600081519050614a988161335a565b92915050565b600060208284031215614ab457614ab3613324565b5b6000614ac284828501614a89565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b016020836134f5565b9150614b0c82614acb565b602082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b6d601c836134f5565b9150614b7882614b37565b602082019050919050565b60006020820190508181036000830152614b9c81614b60565b905091905056fea2646970667358221220f47ca8958f7dc480aa75264062d24cd0cc67c85b17ebc0687ec38dc09b4c230e64736f6c634300080a003368747470733a2f2f6176697573616e696d61652e78797a2f6d657461646174612f

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806370a082311161012e578063b62a7625116100ab578063d78c06fa1161006f578063d78c06fa146107b3578063e8a3d485146107dc578063e985e9c514610807578063f2fde38b14610844578063f8b2cb4f1461086d57610246565b8063b62a7625146106f4578063b67c25a31461070b578063b88d4fde14610736578063c87b56dd1461075f578063d3bd8f921461079c57610246565b806395d89b41116100f257806395d89b4114610635578063a22cb46514610660578063a475b5dd14610689578063a8fcc417146106a0578063b390c0ab146106cb57610246565b806370a0823114610588578063715018a6146105c557806376557743146105dc5780637dad95e9146105f35780638da5cb5b1461060a57610246565b80632e4355cd116101bc578063453c231011610180578063453c2310146104a157806349a772b5146104cc57806355f804b3146104f75780636352211e146105205780636fe3edef1461055d57610246565b80632e4355cd146103e25780633cb519941461040d5780633ccfd60b14610438578063404c7cdd1461044f57806342842e0e1461047857610246565b8063095ea7b311610203578063095ea7b314610332578063120ef1d71461035b57806318160ddd1461037257806323b872dd1461039d5780632db11544146103c657610246565b806301ffc9a71461024857806302e001ef14610285578063045f7850146102a157806306fdde03146102ca578063081812fc146102f557610246565b3661024657005b005b34801561025457600080fd5b5061026f600480360381019061026a9190613386565b6108aa565b60405161027c91906133ce565b60405180910390f35b61029f600480360381019061029a919061341f565b610a33565b005b3480156102ad57600080fd5b506102c860048036038101906102c391906134aa565b610e08565b005b3480156102d657600080fd5b506102df6110b6565b6040516102ec9190613583565b60405180910390f35b34801561030157600080fd5b5061031c6004803603810190610317919061341f565b611148565b60405161032991906135b4565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906134aa565b6111cd565b005b34801561036757600080fd5b506103706112d7565b005b34801561037e57600080fd5b50610387611370565b60405161039491906135de565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906135f9565b61137a565b005b6103e060048036038101906103db919061341f565b6113d3565b005b3480156103ee57600080fd5b506103f76116c3565b60405161040491906133ce565b60405180910390f35b34801561041957600080fd5b506104226116d6565b60405161042f91906135de565b60405180910390f35b34801561044457600080fd5b5061044d6116dc565b005b34801561045b57600080fd5b506104766004803603810190610471919061341f565b61182f565b005b34801561048457600080fd5b5061049f600480360381019061049a91906135f9565b6118b5565b005b3480156104ad57600080fd5b506104b66118d5565b6040516104c391906135de565b60405180910390f35b3480156104d857600080fd5b506104e16118db565b6040516104ee91906135de565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190613781565b6118e1565b005b34801561052c57600080fd5b506105476004803603810190610542919061341f565b611977565b60405161055491906135b4565b60405180910390f35b34801561056957600080fd5b50610572611a29565b60405161057f91906135de565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa91906137ca565b611a2f565b6040516105bc91906135de565b60405180910390f35b3480156105d157600080fd5b506105da611ae7565b005b3480156105e857600080fd5b506105f1611b6f565b005b3480156105ff57600080fd5b50610608611c08565b005b34801561061657600080fd5b5061061f611ca1565b60405161062c91906135b4565b60405180910390f35b34801561064157600080fd5b5061064a611cca565b6040516106579190613583565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613823565b611d5c565b005b34801561069557600080fd5b5061069e611ec8565b005b3480156106ac57600080fd5b506106b5611f61565b6040516106c29190613872565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed919061388d565b611f70565b005b34801561070057600080fd5b506107096122ba565b005b34801561071757600080fd5b50610720612353565b60405161072d91906133ce565b60405180910390f35b34801561074257600080fd5b5061075d6004803603810190610758919061396e565b612366565b005b34801561076b57600080fd5b506107866004803603810190610781919061341f565b6123c1565b6040516107939190613583565b60405180910390f35b3480156107a857600080fd5b506107b1612481565b005b3480156107bf57600080fd5b506107da60048036038101906107d5919061341f565b61251a565b005b3480156107e857600080fd5b506107f16125a0565b6040516107fe9190613583565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906139f1565b6125c8565b60405161083b91906133ce565b60405180910390f35b34801561085057600080fd5b5061086b600480360381019061086691906137ca565b61265c565b005b34801561087957600080fd5b50610894600480360381019061088f91906137ca565b612754565b6040516108a191906135de565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109dd57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2c575063a8fcc41760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600060149054906101000a900460ff1615610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90613a7d565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610ae66127af565b6040518263ffffffff1660e01b8152600401610b0291906135b4565b602060405180830381865afa158015610b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b439190613ab2565b11610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90613b2b565b60405180910390fd5b600860019054906101000a900460ff16610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613b97565b60405180910390fd5b600c5481600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c209190613be6565b1115610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890613cae565b60405180910390fd5b60095481600a54610c729190613be6565b1115610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613d1a565b60405180910390fd5b6000341015610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613d86565b60405180910390fd5b34600e819055506000600a54905081600a6000828254610d179190613be6565b9250508190555081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d699190613be6565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b828111610de957610dd6610dc56127af565b8284610dd19190613be6565b6127b7565b8080610de190613da6565b915050610db3565b505060008060146101000a81548160ff02191690831515021790555050565b610e106127af565b73ffffffffffffffffffffffffffffffffffffffff16610e2e611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90613e3b565b60405180910390fd5b600860009054906101000a900460ff16158015610eae5750600860019054906101000a900460ff16155b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613ecd565b60405180910390fd5b600a5481600a54610efe9190613be6565b11610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613f39565b60405180910390fd5b600c5481600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f8c9190613be6565b1115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490613cae565b60405180910390fd5b6000600a54905081600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461101f9190613be6565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b8281116110b0576110858482846110809190613be6565b6127b7565b600a600081548092919061109890613da6565b919050555080806110a890613da6565b915050611069565b50505050565b6060600180546110c590613f88565b80601f01602080910402602001604051908101604052809291908181526020018280546110f190613f88565b801561113e5780601f106111135761010080835404028352916020019161113e565b820191906000526020600020905b81548152906001019060200180831161112157829003601f168201915b5050505050905090565b6000611153826127d5565b611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614006565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006111d882611977565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124090614072565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611289575061128881336125c8565b5b6112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf906140de565b60405180910390fd5b6112d28383612841565b505050565b6112df6127af565b73ffffffffffffffffffffffffffffffffffffffff166112fd611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613e3b565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6000600a54905090565b61138433826128fa565b6113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba9061414a565b60405180910390fd5b6113ce8383836129d8565b505050565b600060149054906101000a900460ff1615611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90613a7d565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff1661148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613b97565b60405180910390fd5b600c5481600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114db9190613be6565b111561151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390613cae565b60405180910390fd5b60095481600a5461152d9190613be6565b111561156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613d1a565b60405180910390fd5b60003410156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613d86565b60405180910390fd5b34600e819055506000600a54905081600a60008282546115d29190613be6565b9250508190555081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116249190613be6565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b8281116116a4576116916116806127af565b828461168c9190613be6565b6127b7565b808061169c90613da6565b91505061166e565b505060008060146101000a81548160ff02191690831515021790555050565b600860019054906101000a900460ff1681565b600b5481565b6116e46127af565b73ffffffffffffffffffffffffffffffffffffffff16611702611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613e3b565b60405180910390fd5b60004790506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516117a59061419b565b60006040518083038185875af1925050503d80600081146117e2576040519150601f19603f3d011682016040523d82523d6000602084013e6117e7565b606091505b505090508061182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906141fc565b60405180910390fd5b5050565b6118376127af565b73ffffffffffffffffffffffffffffffffffffffff16611855611ca1565b73ffffffffffffffffffffffffffffffffffffffff16146118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613e3b565b60405180910390fd5b8060098190555050565b6118d083838360405180602001604052806000815250612366565b505050565b600c5481565b600a5481565b6118e96127af565b73ffffffffffffffffffffffffffffffffffffffff16611907611ca1565b73ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490613e3b565b60405180910390fd5b8060039080519060200190611973929190613277565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1790614268565b60405180910390fd5b80915050919050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a97906142d4565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aef6127af565b73ffffffffffffffffffffffffffffffffffffffff16611b0d611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90613e3b565b60405180910390fd5b611b6d6000612c34565b565b611b776127af565b73ffffffffffffffffffffffffffffffffffffffff16611b95611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613e3b565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b611c106127af565b73ffffffffffffffffffffffffffffffffffffffff16611c2e611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613e3b565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611cd990613f88565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0590613f88565b8015611d525780601f10611d2757610100808354040283529160200191611d52565b820191906000526020600020905b815481529060010190602001808311611d3557829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290614340565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ebc91906133ce565b60405180910390a35050565b611ed06127af565b73ffffffffffffffffffffffffffffffffffffffff16611eee611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613e3b565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600063a8fcc41760e01b905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611fcb91906135de565b602060405180830381865afa158015611fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200c9190614375565b73ffffffffffffffffffffffffffffffffffffffff1661202a6127af565b73ffffffffffffffffffffffffffffffffffffffff1614612080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612077906143ee565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016120db91906135de565b602060405180830381865afa1580156120f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211c9190614375565b73ffffffffffffffffffffffffffffffffffffffff1661213a6127af565b73ffffffffffffffffffffffffffffffffffffffff1614612190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612187906143ee565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead856040518463ffffffff1660e01b81526004016121f19392919061440e565b600060405180830381600087803b15801561220b57600080fd5b505af115801561221f573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead846040518463ffffffff1660e01b81526004016122849392919061440e565b600060405180830381600087803b15801561229e57600080fd5b505af11580156122b2573d6000803e3d6000fd5b505050505050565b6122c26127af565b73ffffffffffffffffffffffffffffffffffffffff166122e0611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90613e3b565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b600860009054906101000a900460ff1681565b61237033836128fa565b6123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a69061414a565b60405180910390fd5b6123bb84848484612cf8565b50505050565b60606123cc826127d5565b61240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614491565b60405180910390fd5b6060600d60009054906101000a900460ff161561245457600361242d84612d54565b60405160200161243e9291906145cd565b6040516020818303038152906040529050612478565b60036040516020016124669190614648565b60405160208183030381529060405290505b80915050919050565b6124896127af565b73ffffffffffffffffffffffffffffffffffffffff166124a7611ca1565b73ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490613e3b565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6125226127af565b73ffffffffffffffffffffffffffffffffffffffff16612540611ca1565b73ffffffffffffffffffffffffffffffffffffffff1614612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90613e3b565b60405180910390fd5b80600c8190555050565b606060036040516020016125b491906146b6565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126646127af565b73ffffffffffffffffffffffffffffffffffffffff16612682611ca1565b73ffffffffffffffffffffffffffffffffffffffff16146126d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cf90613e3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614724565b60405180910390fd5b61275181612c34565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a89190614773565b9050919050565b600033905090565b6127d1828260405180602001604052806000815250612eb5565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128b483611977565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612905826127d5565b612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906147f0565b60405180910390fd5b600061294f83611977565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129be57508373ffffffffffffffffffffffffffffffffffffffff166129a684611148565b73ffffffffffffffffffffffffffffffffffffffff16145b806129cf57506129ce81856125c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129f882611977565b73ffffffffffffffffffffffffffffffffffffffff1614612a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a459061485c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab5906148c8565b60405180910390fd5b612ac9838383612f10565b612ad4600082612841565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2491906148e8565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b7b9190613be6565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d038484846129d8565b612d0f84848484612f15565b612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614968565b60405180910390fd5b50505050565b60606000821415612d9c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eb0565b600082905060005b60008214612dce578080612db790613da6565b915050600a82612dc79190614773565b9150612da4565b60008167ffffffffffffffff811115612dea57612de9613656565b5b6040519080825280601f01601f191660200182016040528015612e1c5781602001600182028036833780820191505090505b5090505b60008514612ea957600182612e3591906148e8565b9150600a85612e449190614988565b6030612e509190613be6565b60f81b818381518110612e6657612e656149b9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ea29190614773565b9450612e20565b8093505050505b919050565b612ebf8383613096565b612ecc6000848484612f15565b612f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0290614968565b60405180910390fd5b505050565b505050565b6000612f368473ffffffffffffffffffffffffffffffffffffffff16613264565b15613089578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612f7a9493929190614a3d565b6020604051808303816000875af1925050508015612fb657506040513d601f19601f82011682018060405250810190612fb39190614a9e565b60015b613039573d8060008114612fe6576040519150601f19603f3d011682016040523d82523d6000602084013e612feb565b606091505b50600081511415613031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302890614968565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061308e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd90614b17565b60405180910390fd5b61310f816127d5565b1561314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314690614b83565b60405180910390fd5b61315b60008383612f10565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ab9190613be6565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461328390613f88565b90600052602060002090601f0160209004810192826132a557600085556132ec565b82601f106132be57805160ff19168380011785556132ec565b828001600101855582156132ec579182015b828111156132eb5782518255916020019190600101906132d0565b5b5090506132f991906132fd565b5090565b5b808211156133165760008160009055506001016132fe565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133638161332e565b811461336e57600080fd5b50565b6000813590506133808161335a565b92915050565b60006020828403121561339c5761339b613324565b5b60006133aa84828501613371565b91505092915050565b60008115159050919050565b6133c8816133b3565b82525050565b60006020820190506133e360008301846133bf565b92915050565b6000819050919050565b6133fc816133e9565b811461340757600080fd5b50565b600081359050613419816133f3565b92915050565b60006020828403121561343557613434613324565b5b60006134438482850161340a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134778261344c565b9050919050565b6134878161346c565b811461349257600080fd5b50565b6000813590506134a48161347e565b92915050565b600080604083850312156134c1576134c0613324565b5b60006134cf85828601613495565b92505060206134e08582860161340a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613524578082015181840152602081019050613509565b83811115613533576000848401525b50505050565b6000601f19601f8301169050919050565b6000613555826134ea565b61355f81856134f5565b935061356f818560208601613506565b61357881613539565b840191505092915050565b6000602082019050818103600083015261359d818461354a565b905092915050565b6135ae8161346c565b82525050565b60006020820190506135c960008301846135a5565b92915050565b6135d8816133e9565b82525050565b60006020820190506135f360008301846135cf565b92915050565b60008060006060848603121561361257613611613324565b5b600061362086828701613495565b935050602061363186828701613495565b92505060406136428682870161340a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61368e82613539565b810181811067ffffffffffffffff821117156136ad576136ac613656565b5b80604052505050565b60006136c061331a565b90506136cc8282613685565b919050565b600067ffffffffffffffff8211156136ec576136eb613656565b5b6136f582613539565b9050602081019050919050565b82818337600083830152505050565b600061372461371f846136d1565b6136b6565b9050828152602081018484840111156137405761373f613651565b5b61374b848285613702565b509392505050565b600082601f8301126137685761376761364c565b5b8135613778848260208601613711565b91505092915050565b60006020828403121561379757613796613324565b5b600082013567ffffffffffffffff8111156137b5576137b4613329565b5b6137c184828501613753565b91505092915050565b6000602082840312156137e0576137df613324565b5b60006137ee84828501613495565b91505092915050565b613800816133b3565b811461380b57600080fd5b50565b60008135905061381d816137f7565b92915050565b6000806040838503121561383a57613839613324565b5b600061384885828601613495565b92505060206138598582860161380e565b9150509250929050565b61386c8161332e565b82525050565b60006020820190506138876000830184613863565b92915050565b600080604083850312156138a4576138a3613324565b5b60006138b28582860161340a565b92505060206138c38582860161340a565b9150509250929050565b600067ffffffffffffffff8211156138e8576138e7613656565b5b6138f182613539565b9050602081019050919050565b600061391161390c846138cd565b6136b6565b90508281526020810184848401111561392d5761392c613651565b5b613938848285613702565b509392505050565b600082601f8301126139555761395461364c565b5b81356139658482602086016138fe565b91505092915050565b6000806000806080858703121561398857613987613324565b5b600061399687828801613495565b94505060206139a787828801613495565b93505060406139b88782880161340a565b925050606085013567ffffffffffffffff8111156139d9576139d8613329565b5b6139e587828801613940565b91505092959194509250565b60008060408385031215613a0857613a07613324565b5b6000613a1685828601613495565b9250506020613a2785828601613495565b9150509250929050565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b6000613a67601f836134f5565b9150613a7282613a31565b602082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b600081519050613aac816133f3565b92915050565b600060208284031215613ac857613ac7613324565b5b6000613ad684828501613a9d565b91505092915050565b7f4d757374206861766520417669757320546f6b656e0000000000000000000000600082015250565b6000613b156015836134f5565b9150613b2082613adf565b602082019050919050565b60006020820190508181036000830152613b4481613b08565b9050919050565b7f4d696e74204e6f74204163746976650000000000000000000000000000000000600082015250565b6000613b81600f836134f5565b9150613b8c82613b4b565b602082019050919050565b60006020820190508181036000830152613bb081613b74565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bf1826133e9565b9150613bfc836133e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c3157613c30613bb7565b5b828201905092915050565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c986021836134f5565b9150613ca382613c3c565b604082019050919050565b60006020820190508181036000830152613cc781613c8b565b9050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b6000613d046013836134f5565b9150613d0f82613cce565b602082019050919050565b60006020820190508181036000830152613d3381613cf7565b9050919050565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b6000613d706010836134f5565b9150613d7b82613d3a565b602082019050919050565b60006020820190508181036000830152613d9f81613d63565b9050919050565b6000613db1826133e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613de457613de3613bb7565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e256020836134f5565b9150613e3082613def565b602082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f4d696e742069732041637469766520666972737420646561637469766174652060008201527f6974206279206f776e6572000000000000000000000000000000000000000000602082015250565b6000613eb7602b836134f5565b9150613ec282613e5b565b604082019050919050565b60006020820190508181036000830152613ee681613eaa565b9050919050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6000613f236013836134f5565b9150613f2e82613eed565b602082019050919050565b60006020820190508181036000830152613f5281613f16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fa057607f821691505b60208210811415613fb457613fb3613f59565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b6000613ff06020836134f5565b9150613ffb82613fba565b602082019050919050565b6000602082019050818103600083015261401f81613fe3565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b600061405c601e836134f5565b915061406782614026565b602082019050919050565b6000602082019050818103600083015261408b8161404f565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b60006140c8601f836134f5565b91506140d382614092565b602082019050919050565b600060208201905081810360008301526140f7816140bb565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b6000614134601c836134f5565b915061413f826140fe565b602082019050919050565b6000602082019050818103600083015261416381614127565b9050919050565b600081905092915050565b50565b600061418560008361416a565b915061419082614175565b600082019050919050565b60006141a682614178565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b60006141e66018836134f5565b91506141f1826141b0565b602082019050919050565b60006020820190508181036000830152614215816141d9565b9050919050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000614252601e836134f5565b915061425d8261421c565b602082019050919050565b6000602082019050818103600083015261428181614245565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b60006142be6020836134f5565b91506142c982614288565b602082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061432a6019836134f5565b9150614335826142f4565b602082019050919050565b600060208201905081810360008301526143598161431d565b9050919050565b60008151905061436f8161347e565b92915050565b60006020828403121561438b5761438a613324565b5b600061439984828501614360565b91505092915050565b7f4f6e6c7920746f6b656e206f776e65722063616e2063616c6c206275726e0000600082015250565b60006143d8601e836134f5565b91506143e3826143a2565b602082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b600060608201905061442360008301866135a5565b61443060208301856135a5565b61443d60408301846135cf565b949350505050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b600061447b601d836134f5565b915061448682614445565b602082019050919050565b600060208201905081810360008301526144aa8161446e565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546144de81613f88565b6144e881866144b1565b94506001821660008114614503576001811461451457614547565b60ff19831686528186019350614547565b61451d856144bc565b60005b8381101561453f57815481890152600182019150602081019050614520565b838801955050505b50505092915050565b600061455b826134ea565b61456581856144b1565b9350614575818560208601613506565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006145b76005836144b1565b91506145c282614581565b600582019050919050565b60006145d982856144d1565b91506145e58284614550565b91506145f0826145aa565b91508190509392505050565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b6000614632600c836144b1565b915061463d826145fc565b600c82019050919050565b600061465482846144d1565b915061465f82614625565b915081905092915050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b60006146a0600d836144b1565b91506146ab8261466a565b600d82019050919050565b60006146c282846144d1565b91506146cd82614693565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b600061470e6020836134f5565b9150614719826146d8565b602082019050919050565b6000602082019050818103600083015261473d81614701565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061477e826133e9565b9150614789836133e9565b92508261479957614798614744565b5b828204905092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b60006147da6020836134f5565b91506147e5826147a4565b602082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b6000614846601c836134f5565b915061485182614810565b602082019050919050565b6000602082019050818103600083015261487581614839565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b60006148b2601b836134f5565b91506148bd8261487c565b602082019050919050565b600060208201905081810360008301526148e1816148a5565b9050919050565b60006148f3826133e9565b91506148fe836133e9565b92508282101561491157614910613bb7565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b6000614952601a836134f5565b915061495d8261491c565b602082019050919050565b6000602082019050818103600083015261498181614945565b9050919050565b6000614993826133e9565b915061499e836133e9565b9250826149ae576149ad614744565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000614a0f826149e8565b614a1981856149f3565b9350614a29818560208601613506565b614a3281613539565b840191505092915050565b6000608082019050614a5260008301876135a5565b614a5f60208301866135a5565b614a6c60408301856135cf565b8181036060830152614a7e8184614a04565b905095945050505050565b600081519050614a988161335a565b92915050565b600060208284031215614ab457614ab3613324565b5b6000614ac284828501614a89565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b016020836134f5565b9150614b0c82614acb565b602082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b6d601c836134f5565b9150614b7882614b37565b602082019050919050565b60006020820190508181036000830152614b9c81614b60565b905091905056fea2646970667358221220f47ca8958f7dc480aa75264062d24cd0cc67c85b17ebc0687ec38dc09b4c230e64736f6c634300080a0033

Deployed Bytecode Sourcemap

17780:18730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19502:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21438:680;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20182:638;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35471:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25182:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24744:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23628:94;;;;;;;;;;;;;:::i;:::-;;23733:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26052:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20823:609;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18561:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18659:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19942:228;;;;;;;;;;;;;:::i;:::-;;22929:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26437:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18690:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18625:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23219:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24454:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18755:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24194:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14921:94;;;;;;;;;;;;;:::i;:::-;;23527:89;;;;;;;;;;;;;:::i;:::-;;23326;;;;;;;;;;;;;:::i;:::-;;14270:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35612:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25461:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22861:63;;;;;;;;;;;;;:::i;:::-;;34482:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22188:460;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23029:62;;;;;;;;;;;;;:::i;:::-;;18526:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26693:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35787:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23427:92;;;;;;;;;;;;;:::i;:::-;;23099:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36201:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25821:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15170:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23871:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19502:358;19587:4;19627:25;19612:40;;;:11;:40;;;;:109;;;;19688:33;19673:48;;;:11;:48;;;;19612:109;:170;;;;19757:25;19742:40;;;:11;:40;;;;19612:170;:240;;;;19818:34;;;19803:49;;;:11;:49;;;;19612:240;19604:248;;19502:358;;;:::o;21438:680::-;16204:11;;;;;;;;;;;16203:12;16195:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16276:4;16262:11;;:18;;;;;;;;;;;;;;;;;;21545:1:::1;21516:2;;;;;;;;;;;:12;;;21529;:10;:12::i;:::-;21516:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;21508:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21585:15;;;;;;;;;;;21577:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;21675:12;;21667:3;21640:12;:24;21653:10;21640:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;21639:48;;21631:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21766:10;;21759:3;21744:12;;:18;;;;:::i;:::-;:32;;21736:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21832:1;21819:9;:14;;21811:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;21873:9;21862:8;:20;;;;21887:21;21911:12;;21887:36;;21944:3;21928:12;;:19;;;;;;;:::i;:::-;;;;;;;;22006:3;21979:12;:24;21992:10;21979:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;21952:12;:24;21965:10;21952:24;;;;;;;;;;;;;;;:57;;;;22018:9;22030:1;22018:13;;22014:100;22038:3;22033:1;:8;22014:100;;22060:42;22070:12;:10;:12::i;:::-;22100:1;22084:13;:17;;;;:::i;:::-;22060:9;:42::i;:::-;22043:3;;;;;:::i;:::-;;;;22014:100;;;;21503:615;16317:5:::0;16303:11;;:19;;;;;;;;;;;;;;;;;;21438:680;:::o;20182:638::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20264:16:::1;;;;;;;;;;;20263:17;:37;;;;;20285:15;;;;;;;;;;;20284:16;20263:37;20255:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;20390:12;;20383:3;20368:12;;:18;;;;:::i;:::-;20367:35;20359:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20474:12;;20466:3;20446:12;:17;20459:3;20446:17;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;20445:41;;20437:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;20535:21;20559:12;;20535:36;;20622:3;20602:12;:17;20615:3;20602:17;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;20582:12;:17;20595:3;20582:17;;;;;;;;;;;;;;;:43;;;;20640:9;20652:1;20640:13;;20636:177;20660:3;20655:1;:8;20636:177;;20685:33;20695:3;20716:1;20700:13;:17;;;;:::i;:::-;20685:9;:33::i;:::-;20733:12;;:15;;;;;;;;;:::i;:::-;;;;;;20665:3;;;;;:::i;:::-;;;;20636:177;;;;20244:576;20182:638:::0;;:::o;35471:84::-;35510:13;35542:5;35535:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35471:84;:::o;25182:207::-;25258:7;25286:16;25294:7;25286;:16::i;:::-;25278:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25357:15;:24;25373:7;25357:24;;;;;;;;;;;;;;;;;;;;;25350:31;;25182:207;;;:::o;24744:372::-;24825:13;24841:16;24849:7;24841;:16::i;:::-;24825:32;;24882:5;24876:11;;:2;:11;;;;24868:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24971:5;24957:19;;:10;:19;;;:58;;;;24980:35;24997:5;25004:10;24980:16;:35::i;:::-;24957:58;24935:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25087:21;25096:2;25100:7;25087:8;:21::i;:::-;24814:302;24744:372;;:::o;23628:94::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23709:5:::1;23691:15;;:23;;;;;;;;;;;;;;;;;;23628:94::o:0;23733:126::-;23779:7;23806:12;;23799:19;;23733:126;:::o;26052:314::-;26247:39;26266:10;26278:7;26247:18;:39::i;:::-;26239:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26330:28;26340:4;26346:2;26350:7;26330:9;:28::i;:::-;26052:314;;;:::o;20823:609::-;16204:11;;;;;;;;;;;16203:12;16195:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16276:4;16262:11;;:18;;;;;;;;;;;;;;;;;;20898:16:::1;;;;;;;;;;;20890:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20989:12;;20981:3;20954:12;:24;20967:10;20954:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;20953:48;;20945:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21080:10;;21073:3;21058:12;;:18;;;;:::i;:::-;:32;;21050:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21146:1;21133:9;:14;;21125:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;21187:9;21176:8;:20;;;;21201:21;21225:12;;21201:36;;21258:3;21242:12;;:19;;;;;;;:::i;:::-;;;;;;;;21320:3;21293:12;:24;21306:10;21293:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;21266:12;:24;21279:10;21266:24;;;;;;;;;;;;;;;:57;;;;21332:9;21344:1;21332:13;;21328:100;21352:3;21347:1;:8;21328:100;;21374:42;21384:12;:10;:12::i;:::-;21414:1;21398:13;:17;;;;:::i;:::-;21374:9;:42::i;:::-;21357:3;;;;;:::i;:::-;;;;21328:100;;;;20885:547;16317:5:::0;16303:11;;:19;;;;;;;;;;;;;;;;;;20823:609;:::o;18561:27::-;;;;;;;;;;;;;:::o;18659:24::-;;;;:::o;19942:228::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19992:18:::1;20013:21;19992:42;;20046:12;20064:15;;;;;;;;;;;:20;;20092:10;20064:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20045:62;;;20126:7;20118:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19981:189;;19942:228::o:0;22929:95::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23011:8:::1;22998:10;:21;;;;22929:95:::0;:::o;26437:185::-;26575:39;26592:4;26598:2;26602:7;26575:39;;;;;;;;;;;;:16;:39::i;:::-;26437:185;;;:::o;18690:32::-;;;;:::o;18625:27::-;;;;:::o;23219:95::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23300:6:::1;23289:8;:17;;;;;;;;;;;;:::i;:::-;;23219:95:::0;:::o;24454:228::-;24526:7;24546:13;24562:7;:16;24570:7;24562:16;;;;;;;;;;;;;;;;;;;;;24546:32;;24614:1;24597:19;;:5;:19;;;;24589:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24669:5;24662:12;;;24454:228;;;:::o;18755:23::-;;;;:::o;24194:198::-;24266:7;24311:1;24294:19;;:5;:19;;;;24286:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24368:9;:16;24378:5;24368:16;;;;;;;;;;;;;;;;24361:23;;24194:198;;;:::o;14921:94::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14986:21:::1;15004:1;14986:9;:21::i;:::-;14921:94::o:0;23527:89::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:4:::1;23586:15;;:22;;;;;;;;;;;;;;;;;;23527:89::o:0;23326:::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23403:4:::1;23384:16;;:23;;;;;;;;;;;;;;;;;;23326:89::o:0;14270:87::-;14316:7;14343:6;;;;;;;;;;;14336:13;;14270:87;:::o;35612:88::-;35653:13;35685:7;35678:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35612:88;:::o;25461:289::-;25576:10;25564:22;;:8;:22;;;;25556:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25672:8;25629:18;:30;25648:10;25629:30;;;;;;;;;;;;;;;:40;25660:8;25629:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;25723:8;25696:46;;25711:10;25696:46;;;25733:8;25696:46;;;;;;:::i;:::-;;;;;;;;25461:289;;:::o;22861:63::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22915:4:::1;22903:9;;:16;;;;;;;;;;;;;;;;;;22861:63::o:0;34482:148::-;34532:6;34592:30;;;34585:37;;34482:148;:::o;22188:460::-;22284:2;;;;;;;;;;;22283:12;;;22296:7;22283:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22267:37;;:12;:10;:12::i;:::-;:37;;;22259:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22375:2;;;;;;;;;;;22374:12;;;22387:10;22374:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22358:40;;:12;:10;:12::i;:::-;:40;;;22350:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:2;;;;;;;;;;;22444:17;;;22462:10;22482:42;22527:7;22444:91;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22547:2;;;;;;;;;;;22546:17;;;22564:10;22584:42;22629:10;22546:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22188:460;;:::o;23029:62::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23081:5:::1;23069:9;;:17;;;;;;;;;;;;;;;;;;23029:62::o:0;18526:28::-;;;;;;;;;;;;;:::o;26693:305::-;26868:39;26887:10;26899:7;26868:18;:39::i;:::-;26860:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26951:39;26965:4;26971:2;26975:7;26984:5;26951:13;:39::i;:::-;26693:305;;;;:::o;35787:402::-;35845:13;35878:16;35886:7;35878;:16::i;:::-;35870:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35939:22;35976:9;;;;;;;;;;;35972:184;;;36033:8;36043:17;36052:7;36043:8;:17::i;:::-;36016:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35998:73;;35972:184;;;36124:8;36107:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;36089:61;;35972:184;36173:8;36166:15;;;35787:402;;;:::o;23427:92::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23506:5:::1;23487:16;;:24;;;;;;;;;;;;;;;;;;23427:92::o:0;23099:108::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23191:8:::1;23176:12;:23;;;;23099:108:::0;:::o;36201:139::-;36245:13;36306:8;36289:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;36275:57;;36201:139;:::o;25821:164::-;25918:4;25942:18;:25;25961:5;25942:25;;;;;;;;;;;;;;;:35;25968:8;25942:35;;;;;;;;;;;;;;;;;;;;;;;;;25935:42;;25821:164;;;;:::o;15170:186::-;14501:12;:10;:12::i;:::-;14490:23;;:7;:5;:7::i;:::-;:23;;;14482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15279:1:::1;15259:22;;:8;:22;;;;15251:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15329:19;15339:8;15329:9;:19::i;:::-;15170:186:::0;:::o;23871:259::-;23936:7;24078:6;24051:9;:23;24061:12;24051:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;24044:41;;23871:259;;;:::o;13653:98::-;13706:7;13733:10;13726:17;;13653:98;:::o;29449:110::-;29525:26;29535:2;29539:7;29525:26;;;;;;;;;;;;:9;:26::i;:::-;29449:110;;:::o;28484:127::-;28549:4;28601:1;28573:30;;:7;:16;28581:7;28573:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28566:37;;28484:127;;;:::o;32385:167::-;32487:2;32460:15;:24;32476:7;32460:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32536:7;32532:2;32505:39;;32514:16;32522:7;32514;:16::i;:::-;32505:39;;;;;;;;;;;;32385:167;;:::o;28778:329::-;28871:4;28896:16;28904:7;28896;:16::i;:::-;28888:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28960:13;28976:16;28984:7;28976;:16::i;:::-;28960:32;;29022:5;29011:16;;:7;:16;;;:51;;;;29055:7;29031:31;;:20;29043:7;29031:11;:20::i;:::-;:31;;;29011:51;:87;;;;29066:32;29083:5;29090:7;29066:16;:32::i;:::-;29011:87;29003:96;;;28778:329;;;;:::o;31720:547::-;31872:4;31852:24;;:16;31860:7;31852;:16::i;:::-;:24;;;31844:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31942:1;31928:16;;:2;:16;;;;31920:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31987:39;32008:4;32014:2;32018:7;31987:20;:39::i;:::-;32091:29;32108:1;32112:7;32091:8;:29::i;:::-;32152:1;32133:9;:15;32143:4;32133:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32181:1;32164:9;:13;32174:2;32164:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32212:2;32193:7;:16;32201:7;32193:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32251:7;32247:2;32232:27;;32241:4;32232:27;;;;;;;;;;;;31720:547;;;:::o;15364:173::-;15420:16;15439:6;;;;;;;;;;;15420:25;;15465:8;15456:6;;:17;;;;;;;;;;;;;;;;;;15520:8;15489:40;;15510:8;15489:40;;;;;;;;;;;;15409:128;15364:173;:::o;27880:291::-;28037:28;28047:4;28053:2;28057:7;28037:9;:28::i;:::-;28084:48;28107:4;28113:2;28117:7;28126:5;28084:22;:48::i;:::-;28076:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27880:291;;;;:::o;15580:532::-;15636:13;15675:1;15666:5;:10;15662:53;;;15693:10;;;;;;;;;;;;;;;;;;;;;15662:53;15725:12;15740:5;15725:20;;15756:14;15781:78;15796:1;15788:4;:9;15781:78;;15814:8;;;;;:::i;:::-;;;;15845:2;15837:10;;;;;:::i;:::-;;;15781:78;;;15869:19;15901:6;15891:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15869:39;;15919:154;15935:1;15926:5;:10;15919:154;;15963:1;15953:11;;;;;:::i;:::-;;;16030:2;16022:5;:10;;;;:::i;:::-;16009:2;:24;;;;:::i;:::-;15996:39;;15979:6;15986;15979:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16059:2;16050:11;;;;;:::i;:::-;;;15919:154;;;16097:6;16083:21;;;;;15580:532;;;;:::o;29786:297::-;29916:18;29922:2;29926:7;29916:5;:18::i;:::-;29967:54;29998:1;30002:2;30006:7;30015:5;29967:22;:54::i;:::-;29945:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;29786:297;;;:::o;35202:126::-;;;;:::o;33117:777::-;33272:4;33293:15;:2;:13;;;:15::i;:::-;33289:598;;;33345:2;33329:36;;;33366:10;33378:4;33384:7;33393:5;33329:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33325:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33590:1;33573:6;:13;:18;33569:248;;;33616:36;;;;;;;;;;:::i;:::-;;;;;;;;33569:248;33767:6;33761:13;33752:6;33748:2;33744:15;33737:38;33325:507;33460:45;;;33450:55;;;:6;:55;;;;33443:62;;;;;33289:598;33871:4;33864:11;;33117:777;;;;;;;:::o;30419:382::-;30513:1;30499:16;;:2;:16;;;;30491:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30572:16;30580:7;30572;:16::i;:::-;30571:17;30563:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30634:45;30663:1;30667:2;30671:7;30634:20;:45::i;:::-;30709:1;30692:9;:13;30702:2;30692:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30740:2;30721:7;:16;30729:7;30721:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30785:7;30781:2;30760:33;;30777:1;30760:33;;;;;;;;;;;;30419:382;;:::o;6574:387::-;6634:4;6842:12;6909:7;6897:20;6889:28;;6952:1;6945:4;:8;6938:15;;;6574:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:329::-;1933:6;1982:2;1970:9;1961:7;1957:23;1953:32;1950:119;;;1988:79;;:::i;:::-;1950:119;2108:1;2133:53;2178:7;2169:6;2158:9;2154:22;2133:53;:::i;:::-;2123:63;;2079:117;1874:329;;;;:::o;2209:126::-;2246:7;2286:42;2279:5;2275:54;2264:65;;2209:126;;;:::o;2341:96::-;2378:7;2407:24;2425:5;2407:24;:::i;:::-;2396:35;;2341:96;;;:::o;2443:122::-;2516:24;2534:5;2516:24;:::i;:::-;2509:5;2506:35;2496:63;;2555:1;2552;2545:12;2496:63;2443:122;:::o;2571:139::-;2617:5;2655:6;2642:20;2633:29;;2671:33;2698:5;2671:33;:::i;:::-;2571:139;;;;:::o;2716:474::-;2784:6;2792;2841:2;2829:9;2820:7;2816:23;2812:32;2809:119;;;2847:79;;:::i;:::-;2809:119;2967:1;2992:53;3037:7;3028:6;3017:9;3013:22;2992:53;:::i;:::-;2982:63;;2938:117;3094:2;3120:53;3165:7;3156:6;3145:9;3141:22;3120:53;:::i;:::-;3110:63;;3065:118;2716:474;;;;;:::o;3196:99::-;3248:6;3282:5;3276:12;3266:22;;3196:99;;;:::o;3301:169::-;3385:11;3419:6;3414:3;3407:19;3459:4;3454:3;3450:14;3435:29;;3301:169;;;;:::o;3476:307::-;3544:1;3554:113;3568:6;3565:1;3562:13;3554:113;;;3653:1;3648:3;3644:11;3638:18;3634:1;3629:3;3625:11;3618:39;3590:2;3587:1;3583:10;3578:15;;3554:113;;;3685:6;3682:1;3679:13;3676:101;;;3765:1;3756:6;3751:3;3747:16;3740:27;3676:101;3525:258;3476:307;;;:::o;3789:102::-;3830:6;3881:2;3877:7;3872:2;3865:5;3861:14;3857:28;3847:38;;3789:102;;;:::o;3897:364::-;3985:3;4013:39;4046:5;4013:39;:::i;:::-;4068:71;4132:6;4127:3;4068:71;:::i;:::-;4061:78;;4148:52;4193:6;4188:3;4181:4;4174:5;4170:16;4148:52;:::i;:::-;4225:29;4247:6;4225:29;:::i;:::-;4220:3;4216:39;4209:46;;3989:272;3897:364;;;;:::o;4267:313::-;4380:4;4418:2;4407:9;4403:18;4395:26;;4467:9;4461:4;4457:20;4453:1;4442:9;4438:17;4431:47;4495:78;4568:4;4559:6;4495:78;:::i;:::-;4487:86;;4267:313;;;;:::o;4586:118::-;4673:24;4691:5;4673:24;:::i;:::-;4668:3;4661:37;4586:118;;:::o;4710:222::-;4803:4;4841:2;4830:9;4826:18;4818:26;;4854:71;4922:1;4911:9;4907:17;4898:6;4854:71;:::i;:::-;4710:222;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:115::-;9691:23;9708:5;9691:23;:::i;:::-;9686:3;9679:36;9606:115;;:::o;9727:218::-;9818:4;9856:2;9845:9;9841:18;9833:26;;9869:69;9935:1;9924:9;9920:17;9911:6;9869:69;:::i;:::-;9727:218;;;;:::o;9951:474::-;10019:6;10027;10076:2;10064:9;10055:7;10051:23;10047:32;10044:119;;;10082:79;;:::i;:::-;10044:119;10202:1;10227:53;10272:7;10263:6;10252:9;10248:22;10227:53;:::i;:::-;10217:63;;10173:117;10329:2;10355:53;10400:7;10391:6;10380:9;10376:22;10355:53;:::i;:::-;10345:63;;10300:118;9951:474;;;;;:::o;10431:307::-;10492:4;10582:18;10574:6;10571:30;10568:56;;;10604:18;;:::i;:::-;10568:56;10642:29;10664:6;10642:29;:::i;:::-;10634:37;;10726:4;10720;10716:15;10708:23;;10431:307;;;:::o;10744:410::-;10821:5;10846:65;10862:48;10903:6;10862:48;:::i;:::-;10846:65;:::i;:::-;10837:74;;10934:6;10927:5;10920:21;10972:4;10965:5;10961:16;11010:3;11001:6;10996:3;10992:16;10989:25;10986:112;;;11017:79;;:::i;:::-;10986:112;11107:41;11141:6;11136:3;11131;11107:41;:::i;:::-;10827:327;10744:410;;;;;:::o;11173:338::-;11228:5;11277:3;11270:4;11262:6;11258:17;11254:27;11244:122;;11285:79;;:::i;:::-;11244:122;11402:6;11389:20;11427:78;11501:3;11493:6;11486:4;11478:6;11474:17;11427:78;:::i;:::-;11418:87;;11234:277;11173:338;;;;:::o;11517:943::-;11612:6;11620;11628;11636;11685:3;11673:9;11664:7;11660:23;11656:33;11653:120;;;11692:79;;:::i;:::-;11653:120;11812:1;11837:53;11882:7;11873:6;11862:9;11858:22;11837:53;:::i;:::-;11827:63;;11783:117;11939:2;11965:53;12010:7;12001:6;11990:9;11986:22;11965:53;:::i;:::-;11955:63;;11910:118;12067:2;12093:53;12138:7;12129:6;12118:9;12114:22;12093:53;:::i;:::-;12083:63;;12038:118;12223:2;12212:9;12208:18;12195:32;12254:18;12246:6;12243:30;12240:117;;;12276:79;;:::i;:::-;12240:117;12381:62;12435:7;12426:6;12415:9;12411:22;12381:62;:::i;:::-;12371:72;;12166:287;11517:943;;;;;;;:::o;12466:474::-;12534:6;12542;12591:2;12579:9;12570:7;12566:23;12562:32;12559:119;;;12597:79;;:::i;:::-;12559:119;12717:1;12742:53;12787:7;12778:6;12767:9;12763:22;12742:53;:::i;:::-;12732:63;;12688:117;12844:2;12870:53;12915:7;12906:6;12895:9;12891:22;12870:53;:::i;:::-;12860:63;;12815:118;12466:474;;;;;:::o;12946:181::-;13086:33;13082:1;13074:6;13070:14;13063:57;12946:181;:::o;13133:366::-;13275:3;13296:67;13360:2;13355:3;13296:67;:::i;:::-;13289:74;;13372:93;13461:3;13372:93;:::i;:::-;13490:2;13485:3;13481:12;13474:19;;13133:366;;;:::o;13505:419::-;13671:4;13709:2;13698:9;13694:18;13686:26;;13758:9;13752:4;13748:20;13744:1;13733:9;13729:17;13722:47;13786:131;13912:4;13786:131;:::i;:::-;13778:139;;13505:419;;;:::o;13930:143::-;13987:5;14018:6;14012:13;14003:22;;14034:33;14061:5;14034:33;:::i;:::-;13930:143;;;;:::o;14079:351::-;14149:6;14198:2;14186:9;14177:7;14173:23;14169:32;14166:119;;;14204:79;;:::i;:::-;14166:119;14324:1;14349:64;14405:7;14396:6;14385:9;14381:22;14349:64;:::i;:::-;14339:74;;14295:128;14079:351;;;;:::o;14436:171::-;14576:23;14572:1;14564:6;14560:14;14553:47;14436:171;:::o;14613:366::-;14755:3;14776:67;14840:2;14835:3;14776:67;:::i;:::-;14769:74;;14852:93;14941:3;14852:93;:::i;:::-;14970:2;14965:3;14961:12;14954:19;;14613:366;;;:::o;14985:419::-;15151:4;15189:2;15178:9;15174:18;15166:26;;15238:9;15232:4;15228:20;15224:1;15213:9;15209:17;15202:47;15266:131;15392:4;15266:131;:::i;:::-;15258:139;;14985:419;;;:::o;15410:165::-;15550:17;15546:1;15538:6;15534:14;15527:41;15410:165;:::o;15581:366::-;15723:3;15744:67;15808:2;15803:3;15744:67;:::i;:::-;15737:74;;15820:93;15909:3;15820:93;:::i;:::-;15938:2;15933:3;15929:12;15922:19;;15581:366;;;:::o;15953:419::-;16119:4;16157:2;16146:9;16142:18;16134:26;;16206:9;16200:4;16196:20;16192:1;16181:9;16177:17;16170:47;16234:131;16360:4;16234:131;:::i;:::-;16226:139;;15953:419;;;:::o;16378:180::-;16426:77;16423:1;16416:88;16523:4;16520:1;16513:15;16547:4;16544:1;16537:15;16564:305;16604:3;16623:20;16641:1;16623:20;:::i;:::-;16618:25;;16657:20;16675:1;16657:20;:::i;:::-;16652:25;;16811:1;16743:66;16739:74;16736:1;16733:81;16730:107;;;16817:18;;:::i;:::-;16730:107;16861:1;16858;16854:9;16847:16;;16564:305;;;;:::o;16875:220::-;17015:34;17011:1;17003:6;16999:14;16992:58;17084:3;17079:2;17071:6;17067:15;17060:28;16875:220;:::o;17101:366::-;17243:3;17264:67;17328:2;17323:3;17264:67;:::i;:::-;17257:74;;17340:93;17429:3;17340:93;:::i;:::-;17458:2;17453:3;17449:12;17442:19;;17101:366;;;:::o;17473:419::-;17639:4;17677:2;17666:9;17662:18;17654:26;;17726:9;17720:4;17716:20;17712:1;17701:9;17697:17;17690:47;17754:131;17880:4;17754:131;:::i;:::-;17746:139;;17473:419;;;:::o;17898:169::-;18038:21;18034:1;18026:6;18022:14;18015:45;17898:169;:::o;18073:366::-;18215:3;18236:67;18300:2;18295:3;18236:67;:::i;:::-;18229:74;;18312:93;18401:3;18312:93;:::i;:::-;18430:2;18425:3;18421:12;18414:19;;18073:366;;;:::o;18445:419::-;18611:4;18649:2;18638:9;18634:18;18626:26;;18698:9;18692:4;18688:20;18684:1;18673:9;18669:17;18662:47;18726:131;18852:4;18726:131;:::i;:::-;18718:139;;18445:419;;;:::o;18870:166::-;19010:18;19006:1;18998:6;18994:14;18987:42;18870:166;:::o;19042:366::-;19184:3;19205:67;19269:2;19264:3;19205:67;:::i;:::-;19198:74;;19281:93;19370:3;19281:93;:::i;:::-;19399:2;19394:3;19390:12;19383:19;;19042:366;;;:::o;19414:419::-;19580:4;19618:2;19607:9;19603:18;19595:26;;19667:9;19661:4;19657:20;19653:1;19642:9;19638:17;19631:47;19695:131;19821:4;19695:131;:::i;:::-;19687:139;;19414:419;;;:::o;19839:233::-;19878:3;19901:24;19919:5;19901:24;:::i;:::-;19892:33;;19947:66;19940:5;19937:77;19934:103;;;20017:18;;:::i;:::-;19934:103;20064:1;20057:5;20053:13;20046:20;;19839:233;;;:::o;20078:182::-;20218:34;20214:1;20206:6;20202:14;20195:58;20078:182;:::o;20266:366::-;20408:3;20429:67;20493:2;20488:3;20429:67;:::i;:::-;20422:74;;20505:93;20594:3;20505:93;:::i;:::-;20623:2;20618:3;20614:12;20607:19;;20266:366;;;:::o;20638:419::-;20804:4;20842:2;20831:9;20827:18;20819:26;;20891:9;20885:4;20881:20;20877:1;20866:9;20862:17;20855:47;20919:131;21045:4;20919:131;:::i;:::-;20911:139;;20638:419;;;:::o;21063:230::-;21203:34;21199:1;21191:6;21187:14;21180:58;21272:13;21267:2;21259:6;21255:15;21248:38;21063:230;:::o;21299:366::-;21441:3;21462:67;21526:2;21521:3;21462:67;:::i;:::-;21455:74;;21538:93;21627:3;21538:93;:::i;:::-;21656:2;21651:3;21647:12;21640:19;;21299:366;;;:::o;21671:419::-;21837:4;21875:2;21864:9;21860:18;21852:26;;21924:9;21918:4;21914:20;21910:1;21899:9;21895:17;21888:47;21952:131;22078:4;21952:131;:::i;:::-;21944:139;;21671:419;;;:::o;22096:169::-;22236:21;22232:1;22224:6;22220:14;22213:45;22096:169;:::o;22271:366::-;22413:3;22434:67;22498:2;22493:3;22434:67;:::i;:::-;22427:74;;22510:93;22599:3;22510:93;:::i;:::-;22628:2;22623:3;22619:12;22612:19;;22271:366;;;:::o;22643:419::-;22809:4;22847:2;22836:9;22832:18;22824:26;;22896:9;22890:4;22886:20;22882:1;22871:9;22867:17;22860:47;22924:131;23050:4;22924:131;:::i;:::-;22916:139;;22643:419;;;:::o;23068:180::-;23116:77;23113:1;23106:88;23213:4;23210:1;23203:15;23237:4;23234:1;23227:15;23254:320;23298:6;23335:1;23329:4;23325:12;23315:22;;23382:1;23376:4;23372:12;23403:18;23393:81;;23459:4;23451:6;23447:17;23437:27;;23393:81;23521:2;23513:6;23510:14;23490:18;23487:38;23484:84;;;23540:18;;:::i;:::-;23484:84;23305:269;23254:320;;;:::o;23580:182::-;23720:34;23716:1;23708:6;23704:14;23697:58;23580:182;:::o;23768:366::-;23910:3;23931:67;23995:2;23990:3;23931:67;:::i;:::-;23924:74;;24007:93;24096:3;24007:93;:::i;:::-;24125:2;24120:3;24116:12;24109:19;;23768:366;;;:::o;24140:419::-;24306:4;24344:2;24333:9;24329:18;24321:26;;24393:9;24387:4;24383:20;24379:1;24368:9;24364:17;24357:47;24421:131;24547:4;24421:131;:::i;:::-;24413:139;;24140:419;;;:::o;24565:180::-;24705:32;24701:1;24693:6;24689:14;24682:56;24565:180;:::o;24751:366::-;24893:3;24914:67;24978:2;24973:3;24914:67;:::i;:::-;24907:74;;24990:93;25079:3;24990:93;:::i;:::-;25108:2;25103:3;25099:12;25092:19;;24751:366;;;:::o;25123:419::-;25289:4;25327:2;25316:9;25312:18;25304:26;;25376:9;25370:4;25366:20;25362:1;25351:9;25347:17;25340:47;25404:131;25530:4;25404:131;:::i;:::-;25396:139;;25123:419;;;:::o;25548:181::-;25688:33;25684:1;25676:6;25672:14;25665:57;25548:181;:::o;25735:366::-;25877:3;25898:67;25962:2;25957:3;25898:67;:::i;:::-;25891:74;;25974:93;26063:3;25974:93;:::i;:::-;26092:2;26087:3;26083:12;26076:19;;25735:366;;;:::o;26107:419::-;26273:4;26311:2;26300:9;26296:18;26288:26;;26360:9;26354:4;26350:20;26346:1;26335:9;26331:17;26324:47;26388:131;26514:4;26388:131;:::i;:::-;26380:139;;26107:419;;;:::o;26532:178::-;26672:30;26668:1;26660:6;26656:14;26649:54;26532:178;:::o;26716:366::-;26858:3;26879:67;26943:2;26938:3;26879:67;:::i;:::-;26872:74;;26955:93;27044:3;26955:93;:::i;:::-;27073:2;27068:3;27064:12;27057:19;;26716:366;;;:::o;27088:419::-;27254:4;27292:2;27281:9;27277:18;27269:26;;27341:9;27335:4;27331:20;27327:1;27316:9;27312:17;27305:47;27369:131;27495:4;27369:131;:::i;:::-;27361:139;;27088:419;;;:::o;27513:147::-;27614:11;27651:3;27636:18;;27513:147;;;;:::o;27666:114::-;;:::o;27786:398::-;27945:3;27966:83;28047:1;28042:3;27966:83;:::i;:::-;27959:90;;28058:93;28147:3;28058:93;:::i;:::-;28176:1;28171:3;28167:11;28160:18;;27786:398;;;:::o;28190:379::-;28374:3;28396:147;28539:3;28396:147;:::i;:::-;28389:154;;28560:3;28553:10;;28190:379;;;:::o;28575:174::-;28715:26;28711:1;28703:6;28699:14;28692:50;28575:174;:::o;28755:366::-;28897:3;28918:67;28982:2;28977:3;28918:67;:::i;:::-;28911:74;;28994:93;29083:3;28994:93;:::i;:::-;29112:2;29107:3;29103:12;29096:19;;28755:366;;;:::o;29127:419::-;29293:4;29331:2;29320:9;29316:18;29308:26;;29380:9;29374:4;29370:20;29366:1;29355:9;29351:17;29344:47;29408:131;29534:4;29408:131;:::i;:::-;29400:139;;29127:419;;;:::o;29552:180::-;29692:32;29688:1;29680:6;29676:14;29669:56;29552:180;:::o;29738:366::-;29880:3;29901:67;29965:2;29960:3;29901:67;:::i;:::-;29894:74;;29977:93;30066:3;29977:93;:::i;:::-;30095:2;30090:3;30086:12;30079:19;;29738:366;;;:::o;30110:419::-;30276:4;30314:2;30303:9;30299:18;30291:26;;30363:9;30357:4;30353:20;30349:1;30338:9;30334:17;30327:47;30391:131;30517:4;30391:131;:::i;:::-;30383:139;;30110:419;;;:::o;30535:182::-;30675:34;30671:1;30663:6;30659:14;30652:58;30535:182;:::o;30723:366::-;30865:3;30886:67;30950:2;30945:3;30886:67;:::i;:::-;30879:74;;30962:93;31051:3;30962:93;:::i;:::-;31080:2;31075:3;31071:12;31064:19;;30723:366;;;:::o;31095:419::-;31261:4;31299:2;31288:9;31284:18;31276:26;;31348:9;31342:4;31338:20;31334:1;31323:9;31319:17;31312:47;31376:131;31502:4;31376:131;:::i;:::-;31368:139;;31095:419;;;:::o;31520:175::-;31660:27;31656:1;31648:6;31644:14;31637:51;31520:175;:::o;31701:366::-;31843:3;31864:67;31928:2;31923:3;31864:67;:::i;:::-;31857:74;;31940:93;32029:3;31940:93;:::i;:::-;32058:2;32053:3;32049:12;32042:19;;31701:366;;;:::o;32073:419::-;32239:4;32277:2;32266:9;32262:18;32254:26;;32326:9;32320:4;32316:20;32312:1;32301:9;32297:17;32290:47;32354:131;32480:4;32354:131;:::i;:::-;32346:139;;32073:419;;;:::o;32498:143::-;32555:5;32586:6;32580:13;32571:22;;32602:33;32629:5;32602:33;:::i;:::-;32498:143;;;;:::o;32647:351::-;32717:6;32766:2;32754:9;32745:7;32741:23;32737:32;32734:119;;;32772:79;;:::i;:::-;32734:119;32892:1;32917:64;32973:7;32964:6;32953:9;32949:22;32917:64;:::i;:::-;32907:74;;32863:128;32647:351;;;;:::o;33004:180::-;33144:32;33140:1;33132:6;33128:14;33121:56;33004:180;:::o;33190:366::-;33332:3;33353:67;33417:2;33412:3;33353:67;:::i;:::-;33346:74;;33429:93;33518:3;33429:93;:::i;:::-;33547:2;33542:3;33538:12;33531:19;;33190:366;;;:::o;33562:419::-;33728:4;33766:2;33755:9;33751:18;33743:26;;33815:9;33809:4;33805:20;33801:1;33790:9;33786:17;33779:47;33843:131;33969:4;33843:131;:::i;:::-;33835:139;;33562:419;;;:::o;33987:442::-;34136:4;34174:2;34163:9;34159:18;34151:26;;34187:71;34255:1;34244:9;34240:17;34231:6;34187:71;:::i;:::-;34268:72;34336:2;34325:9;34321:18;34312:6;34268:72;:::i;:::-;34350;34418:2;34407:9;34403:18;34394:6;34350:72;:::i;:::-;33987:442;;;;;;:::o;34435:179::-;34575:31;34571:1;34563:6;34559:14;34552:55;34435:179;:::o;34620:366::-;34762:3;34783:67;34847:2;34842:3;34783:67;:::i;:::-;34776:74;;34859:93;34948:3;34859:93;:::i;:::-;34977:2;34972:3;34968:12;34961:19;;34620:366;;;:::o;34992:419::-;35158:4;35196:2;35185:9;35181:18;35173:26;;35245:9;35239:4;35235:20;35231:1;35220:9;35216:17;35209:47;35273:131;35399:4;35273:131;:::i;:::-;35265:139;;34992:419;;;:::o;35417:148::-;35519:11;35556:3;35541:18;;35417:148;;;;:::o;35571:141::-;35620:4;35643:3;35635:11;;35666:3;35663:1;35656:14;35700:4;35697:1;35687:18;35679:26;;35571:141;;;:::o;35742:845::-;35845:3;35882:5;35876:12;35911:36;35937:9;35911:36;:::i;:::-;35963:89;36045:6;36040:3;35963:89;:::i;:::-;35956:96;;36083:1;36072:9;36068:17;36099:1;36094:137;;;;36245:1;36240:341;;;;36061:520;;36094:137;36178:4;36174:9;36163;36159:25;36154:3;36147:38;36214:6;36209:3;36205:16;36198:23;;36094:137;;36240:341;36307:38;36339:5;36307:38;:::i;:::-;36367:1;36381:154;36395:6;36392:1;36389:13;36381:154;;;36469:7;36463:14;36459:1;36454:3;36450:11;36443:35;36519:1;36510:7;36506:15;36495:26;;36417:4;36414:1;36410:12;36405:17;;36381:154;;;36564:6;36559:3;36555:16;36548:23;;36247:334;;36061:520;;35849:738;;35742:845;;;;:::o;36593:377::-;36699:3;36727:39;36760:5;36727:39;:::i;:::-;36782:89;36864:6;36859:3;36782:89;:::i;:::-;36775:96;;36880:52;36925:6;36920:3;36913:4;36906:5;36902:16;36880:52;:::i;:::-;36957:6;36952:3;36948:16;36941:23;;36703:267;36593:377;;;;:::o;36976:155::-;37116:7;37112:1;37104:6;37100:14;37093:31;36976:155;:::o;37137:400::-;37297:3;37318:84;37400:1;37395:3;37318:84;:::i;:::-;37311:91;;37411:93;37500:3;37411:93;:::i;:::-;37529:1;37524:3;37520:11;37513:18;;37137:400;;;:::o;37543:695::-;37821:3;37843:92;37931:3;37922:6;37843:92;:::i;:::-;37836:99;;37952:95;38043:3;38034:6;37952:95;:::i;:::-;37945:102;;38064:148;38208:3;38064:148;:::i;:::-;38057:155;;38229:3;38222:10;;37543:695;;;;;:::o;38244:162::-;38384:14;38380:1;38372:6;38368:14;38361:38;38244:162;:::o;38412:402::-;38572:3;38593:85;38675:2;38670:3;38593:85;:::i;:::-;38586:92;;38687:93;38776:3;38687:93;:::i;:::-;38805:2;38800:3;38796:12;38789:19;;38412:402;;;:::o;38820:535::-;39050:3;39072:92;39160:3;39151:6;39072:92;:::i;:::-;39065:99;;39181:148;39325:3;39181:148;:::i;:::-;39174:155;;39346:3;39339:10;;38820:535;;;;:::o;39361:163::-;39501:15;39497:1;39489:6;39485:14;39478:39;39361:163;:::o;39530:402::-;39690:3;39711:85;39793:2;39788:3;39711:85;:::i;:::-;39704:92;;39805:93;39894:3;39805:93;:::i;:::-;39923:2;39918:3;39914:12;39907:19;;39530:402;;;:::o;39938:535::-;40168:3;40190:92;40278:3;40269:6;40190:92;:::i;:::-;40183:99;;40299:148;40443:3;40299:148;:::i;:::-;40292:155;;40464:3;40457:10;;39938:535;;;;:::o;40479:182::-;40619:34;40615:1;40607:6;40603:14;40596:58;40479:182;:::o;40667:366::-;40809:3;40830:67;40894:2;40889:3;40830:67;:::i;:::-;40823:74;;40906:93;40995:3;40906:93;:::i;:::-;41024:2;41019:3;41015:12;41008:19;;40667:366;;;:::o;41039:419::-;41205:4;41243:2;41232:9;41228:18;41220:26;;41292:9;41286:4;41282:20;41278:1;41267:9;41263:17;41256:47;41320:131;41446:4;41320:131;:::i;:::-;41312:139;;41039:419;;;:::o;41464:180::-;41512:77;41509:1;41502:88;41609:4;41606:1;41599:15;41633:4;41630:1;41623:15;41650:185;41690:1;41707:20;41725:1;41707:20;:::i;:::-;41702:25;;41741:20;41759:1;41741:20;:::i;:::-;41736:25;;41780:1;41770:35;;41785:18;;:::i;:::-;41770:35;41827:1;41824;41820:9;41815:14;;41650:185;;;;:::o;41841:182::-;41981:34;41977:1;41969:6;41965:14;41958:58;41841:182;:::o;42029:366::-;42171:3;42192:67;42256:2;42251:3;42192:67;:::i;:::-;42185:74;;42268:93;42357:3;42268:93;:::i;:::-;42386:2;42381:3;42377:12;42370:19;;42029:366;;;:::o;42401:419::-;42567:4;42605:2;42594:9;42590:18;42582:26;;42654:9;42648:4;42644:20;42640:1;42629:9;42625:17;42618:47;42682:131;42808:4;42682:131;:::i;:::-;42674:139;;42401:419;;;:::o;42826:178::-;42966:30;42962:1;42954:6;42950:14;42943:54;42826:178;:::o;43010:366::-;43152:3;43173:67;43237:2;43232:3;43173:67;:::i;:::-;43166:74;;43249:93;43338:3;43249:93;:::i;:::-;43367:2;43362:3;43358:12;43351:19;;43010:366;;;:::o;43382:419::-;43548:4;43586:2;43575:9;43571:18;43563:26;;43635:9;43629:4;43625:20;43621:1;43610:9;43606:17;43599:47;43663:131;43789:4;43663:131;:::i;:::-;43655:139;;43382:419;;;:::o;43807:177::-;43947:29;43943:1;43935:6;43931:14;43924:53;43807:177;:::o;43990:366::-;44132:3;44153:67;44217:2;44212:3;44153:67;:::i;:::-;44146:74;;44229:93;44318:3;44229:93;:::i;:::-;44347:2;44342:3;44338:12;44331:19;;43990:366;;;:::o;44362:419::-;44528:4;44566:2;44555:9;44551:18;44543:26;;44615:9;44609:4;44605:20;44601:1;44590:9;44586:17;44579:47;44643:131;44769:4;44643:131;:::i;:::-;44635:139;;44362:419;;;:::o;44787:191::-;44827:4;44847:20;44865:1;44847:20;:::i;:::-;44842:25;;44881:20;44899:1;44881:20;:::i;:::-;44876:25;;44920:1;44917;44914:8;44911:34;;;44925:18;;:::i;:::-;44911:34;44970:1;44967;44963:9;44955:17;;44787:191;;;;:::o;44984:176::-;45124:28;45120:1;45112:6;45108:14;45101:52;44984:176;:::o;45166:366::-;45308:3;45329:67;45393:2;45388:3;45329:67;:::i;:::-;45322:74;;45405:93;45494:3;45405:93;:::i;:::-;45523:2;45518:3;45514:12;45507:19;;45166:366;;;:::o;45538:419::-;45704:4;45742:2;45731:9;45727:18;45719:26;;45791:9;45785:4;45781:20;45777:1;45766:9;45762:17;45755:47;45819:131;45945:4;45819:131;:::i;:::-;45811:139;;45538:419;;;:::o;45963:176::-;45995:1;46012:20;46030:1;46012:20;:::i;:::-;46007:25;;46046:20;46064:1;46046:20;:::i;:::-;46041:25;;46085:1;46075:35;;46090:18;;:::i;:::-;46075:35;46131:1;46128;46124:9;46119:14;;45963:176;;;;:::o;46145:180::-;46193:77;46190:1;46183:88;46290:4;46287:1;46280:15;46314:4;46311:1;46304:15;46331:98;46382:6;46416:5;46410:12;46400:22;;46331:98;;;:::o;46435:168::-;46518:11;46552:6;46547:3;46540:19;46592:4;46587:3;46583:14;46568:29;;46435:168;;;;:::o;46609:360::-;46695:3;46723:38;46755:5;46723:38;:::i;:::-;46777:70;46840:6;46835:3;46777:70;:::i;:::-;46770:77;;46856:52;46901:6;46896:3;46889:4;46882:5;46878:16;46856:52;:::i;:::-;46933:29;46955:6;46933:29;:::i;:::-;46928:3;46924:39;46917:46;;46699:270;46609:360;;;;:::o;46975:640::-;47170:4;47208:3;47197:9;47193:19;47185:27;;47222:71;47290:1;47279:9;47275:17;47266:6;47222:71;:::i;:::-;47303:72;47371:2;47360:9;47356:18;47347:6;47303:72;:::i;:::-;47385;47453:2;47442:9;47438:18;47429:6;47385:72;:::i;:::-;47504:9;47498:4;47494:20;47489:2;47478:9;47474:18;47467:48;47532:76;47603:4;47594:6;47532:76;:::i;:::-;47524:84;;46975:640;;;;;;;:::o;47621:141::-;47677:5;47708:6;47702:13;47693:22;;47724:32;47750:5;47724:32;:::i;:::-;47621:141;;;;:::o;47768:349::-;47837:6;47886:2;47874:9;47865:7;47861:23;47857:32;47854:119;;;47892:79;;:::i;:::-;47854:119;48012:1;48037:63;48092:7;48083:6;48072:9;48068:22;48037:63;:::i;:::-;48027:73;;47983:127;47768:349;;;;:::o;48123:182::-;48263:34;48259:1;48251:6;48247:14;48240:58;48123:182;:::o;48311:366::-;48453:3;48474:67;48538:2;48533:3;48474:67;:::i;:::-;48467:74;;48550:93;48639:3;48550:93;:::i;:::-;48668:2;48663:3;48659:12;48652:19;;48311:366;;;:::o;48683:419::-;48849:4;48887:2;48876:9;48872:18;48864:26;;48936:9;48930:4;48926:20;48922:1;48911:9;48907:17;48900:47;48964:131;49090:4;48964:131;:::i;:::-;48956:139;;48683:419;;;:::o;49108:178::-;49248:30;49244:1;49236:6;49232:14;49225:54;49108:178;:::o;49292:366::-;49434:3;49455:67;49519:2;49514:3;49455:67;:::i;:::-;49448:74;;49531:93;49620:3;49531:93;:::i;:::-;49649:2;49644:3;49640:12;49633:19;;49292:366;;;:::o;49664:419::-;49830:4;49868:2;49857:9;49853:18;49845:26;;49917:9;49911:4;49907:20;49903:1;49892:9;49888:17;49881:47;49945:131;50071:4;49945:131;:::i;:::-;49937:139;;49664:419;;;:::o

Swarm Source

ipfs://f47ca8958f7dc480aa75264062d24cd0cc67c85b17ebc0687ec38dc09b4c230e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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