ETH Price: $3,471.77 (+2.09%)

Token

0xChams (0xC)
 

Overview

Max Total Supply

6,970 0xC

Holders

2,002

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 0xC
0xA6d873e66874780a03C5Fd7fb86996bb310271bb
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:
XCham

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


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

interface IERC721 is IERC165 {
    //@dev Emitted when `tokenId` token is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    //@dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    //@dev Returns the number of tokens in ``owner``'s account.
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from,address to,uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    //@dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface IERC721Metadata is IERC721 {
    //@dev Returns the token collection name.
    function name() external view returns (string memory);

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

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

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

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Addr: cant send val, rcpt revert");
    }

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is 0x address");
        _setOwner(newOwner);
    }

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

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

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 XCham 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 mintActive;
	uint256 private _maxSupply;
    uint256 public price;
	uint256 public discountPrice;
    uint256 public numberMinted;
    uint256 public maxPerTxn;
	bool private _revealed;
    
    mapping(address => uint256) private _mintTracker;
    
    //whitelist for holders
    ERC721 CC; ///Elephants of Chameleons
    ERC721 APE; // 0xApes
	ERC721 BAYC;
	ERC721 MAYC;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "0xChams";
        _symbol = "0xC";
        _baseURI = "https://chameleoncollective.io/0xChams/metadata/";
        
        CC = ERC721(0xFD3C3717164831916E6D2D7cdde9904dd793eC84);
        APE = ERC721(0x22C08C358f62f35B742D023Bf2fAF67e30e5376E);
		BAYC = ERC721(0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D);
		MAYC = ERC721(0x60E4d786628Fea6478F785A6d7e704777c86a7c6);

        price = 20 * (10 ** 15); // Replace leading value with price in finney
        discountPrice = 10 * (10 ** 15);
        _maxSupply = 10000;

        maxPerTxn = 20;
    }

    //@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 == XCham.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        (bool success, ) = msg.sender.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
	function chamMint() external reentryLock {
		require(_maxSupply >= 3 + numberMinted, "sold out");
		require(CC.balanceOf(_msgSender()) > 0, "must have cham");
		require(_mintTracker[_msgSender()] == 0, "already claimed");
		require(mintActive);
		
		_mintTracker[_msgSender()] = 3;
		uint256 mintSeedValue = numberMinted;
		numberMinted += 3;
		
		for(uint256 i = 0; i < 3; i++) {
        	_safeMint(_msgSender(), mintSeedValue + i);
        }
	}
    
    function apeMint(uint256 qty) external payable reentryLock {
		require(_maxSupply >= qty + numberMinted, "sold out");
		uint256 hasDiscount = 0;

		if( MAYC.balanceOf(_msgSender()) > 0 ){
			hasDiscount++;
		}
		if( BAYC.balanceOf(_msgSender()) > 0 ){
			hasDiscount++;
		}
		if( APE.balanceOf(_msgSender()) > 0 ){
			hasDiscount++;
		}
		if( CC.balanceOf( _msgSender()) > 0 ){
			hasDiscount++;
		}

		require(hasDiscount > 0, "must have affiliate account");
		require(qty <= maxPerTxn, "max 20 per txn");
		require(mintActive, "not active");
		require(msg.value == qty * discountPrice, "Wrong Eth Amount");

		uint256 mintSeedValue = numberMinted;
		numberMinted += qty;
		
		for(uint256 i = 0; i < qty; i++) {
        	_safeMint(_msgSender(), mintSeedValue + i);
        }
    }
    
    function mint(uint256 qty) external payable reentryLock {
		require(_maxSupply >= qty + numberMinted, "sold out");
    	require(qty <= maxPerTxn, "max 20 per txn");
    	require(mintActive);
    	require(msg.value == qty * price, "Wrong Eth Amount");
    	
		uint256 mintSeedValue = numberMinted;
		numberMinted += qty;
		
		for(uint256 i = 0; i < qty; i++) {
        	_safeMint(_msgSender(), mintSeedValue + i);
        }
    }
    
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
	function 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 {
        maxPerTxn = maxMints;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setDiscountPrice(uint256 newPrice) public onlyOwner {
    	discountPrice = newPrice;
    }

    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(address _operator, address _from, uint256 _tokenId, bytes calldata _data) 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":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"apeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chamMint","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":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"discountPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"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":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"newPrice","type":"uint256"}],"name":"setDiscountPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxMintThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506200004c62000040620002a160201b60201c565b620002a960201b60201c565b6040518060400160405280600781526020017f30784368616d730000000000000000000000000000000000000000000000000081525060019080519060200190620000999291906200036d565b506040518060400160405280600381526020017f307843000000000000000000000000000000000000000000000000000000000081525060029080519060200190620000e79291906200036d565b5060405180606001604052806030815260200162004f0a6030913960039080519060200190620001199291906200036d565b5073fd3c3717164831916e6d2d7cdde9904dd793ec84601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507322c08c358f62f35b742d023bf2faf67e30e5376e601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bc4ca0eda7647a8ab7c2061c2e118a18a936f13d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360e4d786628fea6478f785a6d7e704777c86a7c6601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066470de4df820000600a81905550662386f26fc10000600b819055506127106009819055506014600d8190555062000482565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200037b906200041d565b90600052602060002090601f0160209004810192826200039f5760008555620003eb565b82601f10620003ba57805160ff1916838001178555620003eb565b82800160010185558215620003eb579182015b82811115620003ea578251825591602001919060010190620003cd565b5b509050620003fa9190620003fe565b5090565b5b8082111562000419576000816000905550600101620003ff565b5090565b600060028204905060018216806200043657607f821691505b602082108114156200044d576200044c62000453565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614a7880620004926000396000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063b62a7625116100ab578063d78c06fa1161006f578063d78c06fa146107a1578063e8a3d485146107ca578063e985e9c5146107f5578063f2fde38b14610832578063f8b2cb4f1461085b5761023b565b8063b62a7625146106f6578063b88d4fde1461070d578063c87b56dd14610736578063c91c046214610773578063d68c6db51461078a5761023b565b806395d89b41116100f257806395d89b4114610644578063a035b1fe1461066f578063a0712d681461069a578063a22cb465146106b6578063a475b5dd146106df5761023b565b8063715018a61461058557806384ad8e8f1461059c5780638b78c116146105c75780638da5cb5b146105f057806391b7f5ed1461061b5761023b565b80633cb51994116101bc57806349a772b51161018057806349a772b51461049b57806355f804b3146104c65780636352211e146104ef5780636cfec76a1461052c57806370a08231146105485761023b565b80633cb51994146103de5780633ccfd60b14610409578063404c7cdd1461042057806342842e0e1461044957806342966c68146104725761023b565b8063150b7a0211610203578063150b7a021461030b57806318160ddd1461034857806323b872dd1461037357806325fd90f31461039c5780632e56f71e146103c75761023b565b806301ffc9a71461023d57806306fdde031461027a578063081812fc146102a5578063095ea7b3146102e25761023b565b3661023b57005b005b34801561024957600080fd5b50610264600480360381019061025f91906135e7565b610898565b6040516102719190613d28565b60405180910390f35b34801561028657600080fd5b5061028f610a21565b60405161029c9190613d5e565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c7919061368a565b610ab3565b6040516102d99190613cc1565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906135a7565b610b38565b005b34801561031757600080fd5b50610332600480360381019061032d919061345c565b610c42565b60405161033f9190613d43565b60405180910390f35b34801561035457600080fd5b5061035d610c57565b60405161036a91906140a0565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190613409565b610c61565b005b3480156103a857600080fd5b506103b1610cba565b6040516103be9190613d28565b60405180910390f35b3480156103d357600080fd5b506103dc610ccd565b005b3480156103ea57600080fd5b506103f3610d66565b60405161040091906140a0565b60405180910390f35b34801561041557600080fd5b5061041e610d6c565b005b34801561042c57600080fd5b506104476004803603810190610442919061368a565b610e9d565b005b34801561045557600080fd5b50610470600480360381019061046b9190613409565b610f23565b005b34801561047e57600080fd5b506104996004803603810190610494919061368a565b610f43565b005b3480156104a757600080fd5b506104b0610f96565b6040516104bd91906140a0565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190613641565b610f9c565b005b3480156104fb57600080fd5b506105166004803603810190610511919061368a565b611032565b6040516105239190613cc1565b60405180910390f35b6105466004803603810190610541919061368a565b6110e4565b005b34801561055457600080fd5b5061056f600480360381019061056a919061339c565b611666565b60405161057c91906140a0565b60405180910390f35b34801561059157600080fd5b5061059a61171e565b005b3480156105a857600080fd5b506105b16117a6565b6040516105be91906140a0565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e9919061368a565b6117ac565b005b3480156105fc57600080fd5b50610605611832565b6040516106129190613cc1565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d919061368a565b61185b565b005b34801561065057600080fd5b506106596118e1565b6040516106669190613d5e565b60405180910390f35b34801561067b57600080fd5b50610684611973565b60405161069191906140a0565b60405180910390f35b6106b460048036038101906106af919061368a565b611979565b005b3480156106c257600080fd5b506106dd60048036038101906106d89190613567565b611b5c565b005b3480156106eb57600080fd5b506106f4611cc8565b005b34801561070257600080fd5b5061070b611d61565b005b34801561071957600080fd5b50610734600480360381019061072f91906134e4565b611dfa565b005b34801561074257600080fd5b5061075d6004803603810190610758919061368a565b611e55565b60405161076a9190613d5e565b60405180910390f35b34801561077f57600080fd5b50610788611f15565b005b34801561079657600080fd5b5061079f611fae565b005b3480156107ad57600080fd5b506107c860048036038101906107c3919061368a565b6122c8565b005b3480156107d657600080fd5b506107df61234e565b6040516107ec9190613d5e565b60405180910390f35b34801561080157600080fd5b5061081c600480360381019061081791906133c9565b612376565b6040516108299190613d28565b60405180910390f35b34801561083e57600080fd5b506108596004803603810190610854919061339c565b61240a565b005b34801561086757600080fd5b50610882600480360381019061087d919061339c565b612502565b60405161088f91906140a0565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cb57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1a575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610a3090614370565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c90614370565b8015610aa95780601f10610a7e57610100808354040283529160200191610aa9565b820191906000526020600020905b815481529060010190602001808311610a8c57829003601f168201915b5050505050905090565b6000610abe8261255d565b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490613e00565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4382611032565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90613e20565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bf45750610bf38133612376565b5b610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90613f60565b60405180910390fd5b610c3d83836125c9565b505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b610c6b3382612682565b610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614040565b60405180910390fd5b610cb5838383612760565b505050565b600860009054906101000a900460ff1681565b610cd56129bc565b73ffffffffffffffffffffffffffffffffffffffff16610cf3611832565b73ffffffffffffffffffffffffffffffffffffffff1614610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090614020565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b600d5481565b610d746129bc565b73ffffffffffffffffffffffffffffffffffffffff16610d92611832565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614020565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610e1390613cac565b60006040518083038185875af1925050503d8060008114610e50576040519150601f19603f3d011682016040523d82523d6000602084013e610e55565b606091505b5050905080610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613e80565b60405180910390fd5b5050565b610ea56129bc565b73ffffffffffffffffffffffffffffffffffffffff16610ec3611832565b73ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090614020565b60405180910390fd5b8060098190555050565b610f3e83838360405180602001604052806000815250611dfa565b505050565b610f4c81611032565b73ffffffffffffffffffffffffffffffffffffffff16610f6a6129bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f8a57600080fd5b610f93816129c4565b50565b600c5481565b610fa46129bc565b73ffffffffffffffffffffffffffffffffffffffff16610fc2611832565b73ffffffffffffffffffffffffffffffffffffffff1614611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90614020565b60405180910390fd5b806003908051906020019061102e929190613145565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290613ee0565b60405180910390fd5b80915050919050565b600060149054906101000a900460ff1615611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90613f80565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c548161115d91906141a5565b60095410156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613f00565b60405180910390fd5b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316111ea6129bc565b6040518263ffffffff1660e01b81526004016112069190613cc1565b60206040518083038186803b15801561121e57600080fd5b505afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125691906136b7565b111561126b578080611267906143d3565b9150505b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316112b36129bc565b6040518263ffffffff1660e01b81526004016112cf9190613cc1565b60206040518083038186803b1580156112e757600080fd5b505afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f91906136b7565b1115611334578080611330906143d3565b9150505b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161137c6129bc565b6040518263ffffffff1660e01b81526004016113989190613cc1565b60206040518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e891906136b7565b11156113fd5780806113f9906143d3565b9150505b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316114456129bc565b6040518263ffffffff1660e01b81526004016114619190613cc1565b60206040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b191906136b7565b11156114c65780806114c2906143d3565b9150505b60008111611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150090614080565b60405180910390fd5b600d5482111561154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613fe0565b60405180910390fd5b600860009054906101000a900460ff1661159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613e60565b60405180910390fd5b600b54826115ab919061422c565b34146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390613da0565b60405180910390fd5b6000600c54905082600c600082825461160591906141a5565b9250508190555060005b83811015611646576116336116226129bc565b828461162e91906141a5565b612ad5565b808061163e906143d3565b91505061160f565b50505060008060146101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613fc0565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117266129bc565b73ffffffffffffffffffffffffffffffffffffffff16611744611832565b73ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190614020565b60405180910390fd5b6117a46000612af3565b565b600b5481565b6117b46129bc565b73ffffffffffffffffffffffffffffffffffffffff166117d2611832565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90614020565b60405180910390fd5b80600b8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118636129bc565b73ffffffffffffffffffffffffffffffffffffffff16611881611832565b73ffffffffffffffffffffffffffffffffffffffff16146118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614020565b60405180910390fd5b80600a8190555050565b6060600280546118f090614370565b80601f016020809104026020016040519081016040528092919081815260200182805461191c90614370565b80156119695780601f1061193e57610100808354040283529160200191611969565b820191906000526020600020905b81548152906001019060200180831161194c57829003601f168201915b5050505050905090565b600a5481565b600060149054906101000a900460ff16156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613f80565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c54816119f291906141a5565b6009541015611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90613f00565b60405180910390fd5b600d54811115611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613fe0565b60405180910390fd5b600860009054906101000a900460ff16611a9457600080fd5b600a5481611aa2919061422c565b3414611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613da0565b60405180910390fd5b6000600c54905081600c6000828254611afc91906141a5565b9250508190555060005b82811015611b3d57611b2a611b196129bc565b8284611b2591906141a5565b612ad5565b8080611b35906143d3565b915050611b06565b505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290613ec0565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cbc9190613d28565b60405180910390a35050565b611cd06129bc565b73ffffffffffffffffffffffffffffffffffffffff16611cee611832565b73ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90614020565b60405180910390fd5b6001600e60006101000a81548160ff021916908315150217905550565b611d696129bc565b73ffffffffffffffffffffffffffffffffffffffff16611d87611832565b73ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614020565b60405180910390fd5b6000600e60006101000a81548160ff021916908315150217905550565b611e043383612682565b611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90614040565b60405180910390fd5b611e4f84848484612bb7565b50505050565b6060611e608261255d565b611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690614060565b60405180910390fd5b6060600e60009054906101000a900460ff1615611ee8576003611ec184612c13565b604051602001611ed2929190613c39565b6040516020818303038152906040529050611f0c565b6003604051602001611efa9190613c8a565b60405160208183030381529060405290505b80915050919050565b611f1d6129bc565b73ffffffffffffffffffffffffffffffffffffffff16611f3b611832565b73ffffffffffffffffffffffffffffffffffffffff1614611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614020565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613f80565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c54600361202891906141a5565b600954101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613f00565b60405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316120b46129bc565b6040518263ffffffff1660e01b81526004016120d09190613cc1565b60206040518083038186803b1580156120e857600080fd5b505afa1580156120fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212091906136b7565b11612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613f40565b60405180910390fd5b6000600f600061216e6129bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090613e40565b60405180910390fd5b600860009054906101000a900460ff1661220257600080fd5b6003600f60006122106129bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c5490506003600c600082825461226891906141a5565b9250508190555060005b60038110156122aa576122976122866129bc565b828461229291906141a5565b612ad5565b80806122a2906143d3565b915050612272565b505060008060146101000a81548160ff021916908315150217905550565b6122d06129bc565b73ffffffffffffffffffffffffffffffffffffffff166122ee611832565b73ffffffffffffffffffffffffffffffffffffffff1614612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b90614020565b60405180910390fd5b80600d8190555050565b606060036040516020016123629190613c68565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124126129bc565b73ffffffffffffffffffffffffffffffffffffffff16612430611832565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614020565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90613ea0565b60405180910390fd5b6124ff81612af3565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461255691906141fb565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661263c83611032565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061268d8261255d565b6126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390613d80565b60405180910390fd5b60006126d783611032565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061274657508373ffffffffffffffffffffffffffffffffffffffff1661272e84610ab3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061275757506127568185612376565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278082611032565b73ffffffffffffffffffffffffffffffffffffffff16146127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614000565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d90613dc0565b60405180910390fd5b612851838383612d74565b61285c6000826125c9565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ac9190614286565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461290391906141a5565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b60006129cf82611032565b90506129dd81600084612d74565b6129e86000836125c9565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a389190614286565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612aef828260405180602001604052806000815250612d79565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bc2848484612760565b612bce84848484612dd4565b612c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0490613f20565b60405180910390fd5b50505050565b60606000821415612c5b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d6f565b600082905060005b60008214612c8d578080612c76906143d3565b915050600a82612c8691906141fb565b9150612c63565b60008167ffffffffffffffff811115612ca957612ca8614509565b5b6040519080825280601f01601f191660200182016040528015612cdb5781602001600182028036833780820191505090505b5090505b60008514612d6857600182612cf49190614286565b9150600a85612d03919061441c565b6030612d0f91906141a5565b60f81b818381518110612d2557612d246144da565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d6191906141fb565b9450612cdf565b8093505050505b919050565b505050565b612d838383612f64565b612d906000848484612dd4565b612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690613f20565b60405180910390fd5b505050565b6000612df58473ffffffffffffffffffffffffffffffffffffffff16613132565b15612f57578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612e399493929190613cdc565b602060405180830381600087803b158015612e5357600080fd5b505af1925050508015612e8457506040513d601f19601f82011682018060405250810190612e819190613614565b60015b612f07573d8060008114612eb4576040519150601f19603f3d011682016040523d82523d6000602084013e612eb9565b606091505b50600081511415612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613f20565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f5c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb90613fa0565b60405180910390fd5b612fdd8161255d565b1561301d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301490613de0565b60405180910390fd5b61302960008383612d74565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307991906141a5565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461315190614370565b90600052602060002090601f01602090048101928261317357600085556131ba565b82601f1061318c57805160ff19168380011785556131ba565b828001600101855582156131ba579182015b828111156131b957825182559160200191906001019061319e565b5b5090506131c791906131cb565b5090565b5b808211156131e45760008160009055506001016131cc565b5090565b60006131fb6131f6846140e0565b6140bb565b90508281526020810184848401111561321757613216614547565b5b61322284828561432e565b509392505050565b600061323d61323884614111565b6140bb565b90508281526020810184848401111561325957613258614547565b5b61326484828561432e565b509392505050565b60008135905061327b816149e6565b92915050565b600081359050613290816149fd565b92915050565b6000813590506132a581614a14565b92915050565b6000815190506132ba81614a14565b92915050565b60008083601f8401126132d6576132d561453d565b5b8235905067ffffffffffffffff8111156132f3576132f2614538565b5b60208301915083600182028301111561330f5761330e614542565b5b9250929050565b600082601f83011261332b5761332a61453d565b5b813561333b8482602086016131e8565b91505092915050565b600082601f8301126133595761335861453d565b5b813561336984826020860161322a565b91505092915050565b60008135905061338181614a2b565b92915050565b60008151905061339681614a2b565b92915050565b6000602082840312156133b2576133b1614551565b5b60006133c08482850161326c565b91505092915050565b600080604083850312156133e0576133df614551565b5b60006133ee8582860161326c565b92505060206133ff8582860161326c565b9150509250929050565b60008060006060848603121561342257613421614551565b5b60006134308682870161326c565b93505060206134418682870161326c565b925050604061345286828701613372565b9150509250925092565b60008060008060006080868803121561347857613477614551565b5b60006134868882890161326c565b95505060206134978882890161326c565b94505060406134a888828901613372565b935050606086013567ffffffffffffffff8111156134c9576134c861454c565b5b6134d5888289016132c0565b92509250509295509295909350565b600080600080608085870312156134fe576134fd614551565b5b600061350c8782880161326c565b945050602061351d8782880161326c565b935050604061352e87828801613372565b925050606085013567ffffffffffffffff81111561354f5761354e61454c565b5b61355b87828801613316565b91505092959194509250565b6000806040838503121561357e5761357d614551565b5b600061358c8582860161326c565b925050602061359d85828601613281565b9150509250929050565b600080604083850312156135be576135bd614551565b5b60006135cc8582860161326c565b92505060206135dd85828601613372565b9150509250929050565b6000602082840312156135fd576135fc614551565b5b600061360b84828501613296565b91505092915050565b60006020828403121561362a57613629614551565b5b6000613638848285016132ab565b91505092915050565b60006020828403121561365757613656614551565b5b600082013567ffffffffffffffff8111156136755761367461454c565b5b61368184828501613344565b91505092915050565b6000602082840312156136a05761369f614551565b5b60006136ae84828501613372565b91505092915050565b6000602082840312156136cd576136cc614551565b5b60006136db84828501613387565b91505092915050565b6136ed816142ba565b82525050565b6136fc816142cc565b82525050565b61370b816142d8565b82525050565b600061371c82614157565b613726818561416d565b935061373681856020860161433d565b61373f81614556565b840191505092915050565b600061375582614162565b61375f8185614189565b935061376f81856020860161433d565b61377881614556565b840191505092915050565b600061378e82614162565b613798818561419a565b93506137a881856020860161433d565b80840191505092915050565b600081546137c181614370565b6137cb818661419a565b945060018216600081146137e657600181146137f75761382a565b60ff1983168652818601935061382a565b61380085614142565b60005b8381101561382257815481890152600182019150602081019050613803565b838801955050505b50505092915050565b6000613840602083614189565b915061384b82614567565b602082019050919050565b6000613863601083614189565b915061386e82614590565b602082019050919050565b6000613886600d8361419a565b9150613891826145b9565b600d82019050919050565b60006138a9601b83614189565b91506138b4826145e2565b602082019050919050565b60006138cc601c83614189565b91506138d78261460b565b602082019050919050565b60006138ef602083614189565b91506138fa82614634565b602082019050919050565b6000613912601e83614189565b915061391d8261465d565b602082019050919050565b6000613935600f83614189565b915061394082614686565b602082019050919050565b6000613958600a83614189565b9150613963826146af565b602082019050919050565b600061397b601883614189565b9150613986826146d8565b602082019050919050565b600061399e602083614189565b91506139a982614701565b602082019050919050565b60006139c1601983614189565b91506139cc8261472a565b602082019050919050565b60006139e4600c8361419a565b91506139ef82614753565b600c82019050919050565b6000613a07601e83614189565b9150613a128261477c565b602082019050919050565b6000613a2a600883614189565b9150613a35826147a5565b602082019050919050565b6000613a4d601a83614189565b9150613a58826147ce565b602082019050919050565b6000613a70600e83614189565b9150613a7b826147f7565b602082019050919050565b6000613a93601f83614189565b9150613a9e82614820565b602082019050919050565b6000613ab6601f83614189565b9150613ac182614849565b602082019050919050565b6000613ad9602083614189565b9150613ae482614872565b602082019050919050565b6000613afc602083614189565b9150613b078261489b565b602082019050919050565b6000613b1f60058361419a565b9150613b2a826148c4565b600582019050919050565b6000613b42600e83614189565b9150613b4d826148ed565b602082019050919050565b6000613b65601c83614189565b9150613b7082614916565b602082019050919050565b6000613b88602083614189565b9150613b938261493f565b602082019050919050565b6000613bab601c83614189565b9150613bb682614968565b602082019050919050565b6000613bce60008361417e565b9150613bd982614991565b600082019050919050565b6000613bf1601d83614189565b9150613bfc82614994565b602082019050919050565b6000613c14601b83614189565b9150613c1f826149bd565b602082019050919050565b613c3381614324565b82525050565b6000613c4582856137b4565b9150613c518284613783565b9150613c5c82613b12565b91508190509392505050565b6000613c7482846137b4565b9150613c7f82613879565b915081905092915050565b6000613c9682846137b4565b9150613ca1826139d7565b915081905092915050565b6000613cb782613bc1565b9150819050919050565b6000602082019050613cd660008301846136e4565b92915050565b6000608082019050613cf160008301876136e4565b613cfe60208301866136e4565b613d0b6040830185613c2a565b8181036060830152613d1d8184613711565b905095945050505050565b6000602082019050613d3d60008301846136f3565b92915050565b6000602082019050613d586000830184613702565b92915050565b60006020820190508181036000830152613d78818461374a565b905092915050565b60006020820190508181036000830152613d9981613833565b9050919050565b60006020820190508181036000830152613db981613856565b9050919050565b60006020820190508181036000830152613dd98161389c565b9050919050565b60006020820190508181036000830152613df9816138bf565b9050919050565b60006020820190508181036000830152613e19816138e2565b9050919050565b60006020820190508181036000830152613e3981613905565b9050919050565b60006020820190508181036000830152613e5981613928565b9050919050565b60006020820190508181036000830152613e798161394b565b9050919050565b60006020820190508181036000830152613e998161396e565b9050919050565b60006020820190508181036000830152613eb981613991565b9050919050565b60006020820190508181036000830152613ed9816139b4565b9050919050565b60006020820190508181036000830152613ef9816139fa565b9050919050565b60006020820190508181036000830152613f1981613a1d565b9050919050565b60006020820190508181036000830152613f3981613a40565b9050919050565b60006020820190508181036000830152613f5981613a63565b9050919050565b60006020820190508181036000830152613f7981613a86565b9050919050565b60006020820190508181036000830152613f9981613aa9565b9050919050565b60006020820190508181036000830152613fb981613acc565b9050919050565b60006020820190508181036000830152613fd981613aef565b9050919050565b60006020820190508181036000830152613ff981613b35565b9050919050565b6000602082019050818103600083015261401981613b58565b9050919050565b6000602082019050818103600083015261403981613b7b565b9050919050565b6000602082019050818103600083015261405981613b9e565b9050919050565b6000602082019050818103600083015261407981613be4565b9050919050565b6000602082019050818103600083015261409981613c07565b9050919050565b60006020820190506140b56000830184613c2a565b92915050565b60006140c56140d6565b90506140d182826143a2565b919050565b6000604051905090565b600067ffffffffffffffff8211156140fb576140fa614509565b5b61410482614556565b9050602081019050919050565b600067ffffffffffffffff82111561412c5761412b614509565b5b61413582614556565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006141b082614324565b91506141bb83614324565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141f0576141ef61444d565b5b828201905092915050565b600061420682614324565b915061421183614324565b9250826142215761422061447c565b5b828204905092915050565b600061423782614324565b915061424283614324565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561427b5761427a61444d565b5b828202905092915050565b600061429182614324565b915061429c83614324565b9250828210156142af576142ae61444d565b5b828203905092915050565b60006142c582614304565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561435b578082015181840152602081019050614340565b8381111561436a576000848401525b50505050565b6000600282049050600182168061438857607f821691505b6020821081141561439c5761439b6144ab565b5b50919050565b6143ab82614556565b810181811067ffffffffffffffff821117156143ca576143c9614509565b5b80604052505050565b60006143de82614324565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144115761441061444d565b5b600182019050919050565b600061442782614324565b915061443283614324565b9250826144425761444161447c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f616c726561647920636c61696d65640000000000000000000000000000000000600082015250565b7f6e6f742061637469766500000000000000000000000000000000000000000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f6d7573742068617665206368616d000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f6d6178203230207065722074786e000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f6d757374206861766520616666696c69617465206163636f756e740000000000600082015250565b6149ef816142ba565b81146149fa57600080fd5b50565b614a06816142cc565b8114614a1157600080fd5b50565b614a1d816142d8565b8114614a2857600080fd5b50565b614a3481614324565b8114614a3f57600080fd5b5056fea2646970667358221220d261b55c67d3c266f8eaa0a4bc2fbd42c91d1e2ab58010336011eae584da843464736f6c6343000807003368747470733a2f2f6368616d656c656f6e636f6c6c6563746976652e696f2f30784368616d732f6d657461646174612f

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063b62a7625116100ab578063d78c06fa1161006f578063d78c06fa146107a1578063e8a3d485146107ca578063e985e9c5146107f5578063f2fde38b14610832578063f8b2cb4f1461085b5761023b565b8063b62a7625146106f6578063b88d4fde1461070d578063c87b56dd14610736578063c91c046214610773578063d68c6db51461078a5761023b565b806395d89b41116100f257806395d89b4114610644578063a035b1fe1461066f578063a0712d681461069a578063a22cb465146106b6578063a475b5dd146106df5761023b565b8063715018a61461058557806384ad8e8f1461059c5780638b78c116146105c75780638da5cb5b146105f057806391b7f5ed1461061b5761023b565b80633cb51994116101bc57806349a772b51161018057806349a772b51461049b57806355f804b3146104c65780636352211e146104ef5780636cfec76a1461052c57806370a08231146105485761023b565b80633cb51994146103de5780633ccfd60b14610409578063404c7cdd1461042057806342842e0e1461044957806342966c68146104725761023b565b8063150b7a0211610203578063150b7a021461030b57806318160ddd1461034857806323b872dd1461037357806325fd90f31461039c5780632e56f71e146103c75761023b565b806301ffc9a71461023d57806306fdde031461027a578063081812fc146102a5578063095ea7b3146102e25761023b565b3661023b57005b005b34801561024957600080fd5b50610264600480360381019061025f91906135e7565b610898565b6040516102719190613d28565b60405180910390f35b34801561028657600080fd5b5061028f610a21565b60405161029c9190613d5e565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c7919061368a565b610ab3565b6040516102d99190613cc1565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906135a7565b610b38565b005b34801561031757600080fd5b50610332600480360381019061032d919061345c565b610c42565b60405161033f9190613d43565b60405180910390f35b34801561035457600080fd5b5061035d610c57565b60405161036a91906140a0565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190613409565b610c61565b005b3480156103a857600080fd5b506103b1610cba565b6040516103be9190613d28565b60405180910390f35b3480156103d357600080fd5b506103dc610ccd565b005b3480156103ea57600080fd5b506103f3610d66565b60405161040091906140a0565b60405180910390f35b34801561041557600080fd5b5061041e610d6c565b005b34801561042c57600080fd5b506104476004803603810190610442919061368a565b610e9d565b005b34801561045557600080fd5b50610470600480360381019061046b9190613409565b610f23565b005b34801561047e57600080fd5b506104996004803603810190610494919061368a565b610f43565b005b3480156104a757600080fd5b506104b0610f96565b6040516104bd91906140a0565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190613641565b610f9c565b005b3480156104fb57600080fd5b506105166004803603810190610511919061368a565b611032565b6040516105239190613cc1565b60405180910390f35b6105466004803603810190610541919061368a565b6110e4565b005b34801561055457600080fd5b5061056f600480360381019061056a919061339c565b611666565b60405161057c91906140a0565b60405180910390f35b34801561059157600080fd5b5061059a61171e565b005b3480156105a857600080fd5b506105b16117a6565b6040516105be91906140a0565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e9919061368a565b6117ac565b005b3480156105fc57600080fd5b50610605611832565b6040516106129190613cc1565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d919061368a565b61185b565b005b34801561065057600080fd5b506106596118e1565b6040516106669190613d5e565b60405180910390f35b34801561067b57600080fd5b50610684611973565b60405161069191906140a0565b60405180910390f35b6106b460048036038101906106af919061368a565b611979565b005b3480156106c257600080fd5b506106dd60048036038101906106d89190613567565b611b5c565b005b3480156106eb57600080fd5b506106f4611cc8565b005b34801561070257600080fd5b5061070b611d61565b005b34801561071957600080fd5b50610734600480360381019061072f91906134e4565b611dfa565b005b34801561074257600080fd5b5061075d6004803603810190610758919061368a565b611e55565b60405161076a9190613d5e565b60405180910390f35b34801561077f57600080fd5b50610788611f15565b005b34801561079657600080fd5b5061079f611fae565b005b3480156107ad57600080fd5b506107c860048036038101906107c3919061368a565b6122c8565b005b3480156107d657600080fd5b506107df61234e565b6040516107ec9190613d5e565b60405180910390f35b34801561080157600080fd5b5061081c600480360381019061081791906133c9565b612376565b6040516108299190613d28565b60405180910390f35b34801561083e57600080fd5b506108596004803603810190610854919061339c565b61240a565b005b34801561086757600080fd5b50610882600480360381019061087d919061339c565b612502565b60405161088f91906140a0565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cb57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1a575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610a3090614370565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c90614370565b8015610aa95780601f10610a7e57610100808354040283529160200191610aa9565b820191906000526020600020905b815481529060010190602001808311610a8c57829003601f168201915b5050505050905090565b6000610abe8261255d565b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490613e00565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4382611032565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90613e20565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bf45750610bf38133612376565b5b610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90613f60565b60405180910390fd5b610c3d83836125c9565b505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b610c6b3382612682565b610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614040565b60405180910390fd5b610cb5838383612760565b505050565b600860009054906101000a900460ff1681565b610cd56129bc565b73ffffffffffffffffffffffffffffffffffffffff16610cf3611832565b73ffffffffffffffffffffffffffffffffffffffff1614610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090614020565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b600d5481565b610d746129bc565b73ffffffffffffffffffffffffffffffffffffffff16610d92611832565b73ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614020565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051610e1390613cac565b60006040518083038185875af1925050503d8060008114610e50576040519150601f19603f3d011682016040523d82523d6000602084013e610e55565b606091505b5050905080610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613e80565b60405180910390fd5b5050565b610ea56129bc565b73ffffffffffffffffffffffffffffffffffffffff16610ec3611832565b73ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090614020565b60405180910390fd5b8060098190555050565b610f3e83838360405180602001604052806000815250611dfa565b505050565b610f4c81611032565b73ffffffffffffffffffffffffffffffffffffffff16610f6a6129bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f8a57600080fd5b610f93816129c4565b50565b600c5481565b610fa46129bc565b73ffffffffffffffffffffffffffffffffffffffff16610fc2611832565b73ffffffffffffffffffffffffffffffffffffffff1614611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90614020565b60405180910390fd5b806003908051906020019061102e929190613145565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290613ee0565b60405180910390fd5b80915050919050565b600060149054906101000a900460ff1615611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90613f80565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c548161115d91906141a5565b60095410156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613f00565b60405180910390fd5b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316111ea6129bc565b6040518263ffffffff1660e01b81526004016112069190613cc1565b60206040518083038186803b15801561121e57600080fd5b505afa158015611232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125691906136b7565b111561126b578080611267906143d3565b9150505b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316112b36129bc565b6040518263ffffffff1660e01b81526004016112cf9190613cc1565b60206040518083038186803b1580156112e757600080fd5b505afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f91906136b7565b1115611334578080611330906143d3565b9150505b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161137c6129bc565b6040518263ffffffff1660e01b81526004016113989190613cc1565b60206040518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e891906136b7565b11156113fd5780806113f9906143d3565b9150505b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316114456129bc565b6040518263ffffffff1660e01b81526004016114619190613cc1565b60206040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b191906136b7565b11156114c65780806114c2906143d3565b9150505b60008111611509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150090614080565b60405180910390fd5b600d5482111561154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590613fe0565b60405180910390fd5b600860009054906101000a900460ff1661159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613e60565b60405180910390fd5b600b54826115ab919061422c565b34146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390613da0565b60405180910390fd5b6000600c54905082600c600082825461160591906141a5565b9250508190555060005b83811015611646576116336116226129bc565b828461162e91906141a5565b612ad5565b808061163e906143d3565b91505061160f565b50505060008060146101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613fc0565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117266129bc565b73ffffffffffffffffffffffffffffffffffffffff16611744611832565b73ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190614020565b60405180910390fd5b6117a46000612af3565b565b600b5481565b6117b46129bc565b73ffffffffffffffffffffffffffffffffffffffff166117d2611832565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90614020565b60405180910390fd5b80600b8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118636129bc565b73ffffffffffffffffffffffffffffffffffffffff16611881611832565b73ffffffffffffffffffffffffffffffffffffffff16146118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614020565b60405180910390fd5b80600a8190555050565b6060600280546118f090614370565b80601f016020809104026020016040519081016040528092919081815260200182805461191c90614370565b80156119695780601f1061193e57610100808354040283529160200191611969565b820191906000526020600020905b81548152906001019060200180831161194c57829003601f168201915b5050505050905090565b600a5481565b600060149054906101000a900460ff16156119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613f80565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c54816119f291906141a5565b6009541015611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90613f00565b60405180910390fd5b600d54811115611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613fe0565b60405180910390fd5b600860009054906101000a900460ff16611a9457600080fd5b600a5481611aa2919061422c565b3414611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613da0565b60405180910390fd5b6000600c54905081600c6000828254611afc91906141a5565b9250508190555060005b82811015611b3d57611b2a611b196129bc565b8284611b2591906141a5565b612ad5565b8080611b35906143d3565b915050611b06565b505060008060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290613ec0565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cbc9190613d28565b60405180910390a35050565b611cd06129bc565b73ffffffffffffffffffffffffffffffffffffffff16611cee611832565b73ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b90614020565b60405180910390fd5b6001600e60006101000a81548160ff021916908315150217905550565b611d696129bc565b73ffffffffffffffffffffffffffffffffffffffff16611d87611832565b73ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614020565b60405180910390fd5b6000600e60006101000a81548160ff021916908315150217905550565b611e043383612682565b611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90614040565b60405180910390fd5b611e4f84848484612bb7565b50505050565b6060611e608261255d565b611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690614060565b60405180910390fd5b6060600e60009054906101000a900460ff1615611ee8576003611ec184612c13565b604051602001611ed2929190613c39565b6040516020818303038152906040529050611f0c565b6003604051602001611efa9190613c8a565b60405160208183030381529060405290505b80915050919050565b611f1d6129bc565b73ffffffffffffffffffffffffffffffffffffffff16611f3b611832565b73ffffffffffffffffffffffffffffffffffffffff1614611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614020565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff1615611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590613f80565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600c54600361202891906141a5565b600954101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613f00565b60405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082316120b46129bc565b6040518263ffffffff1660e01b81526004016120d09190613cc1565b60206040518083038186803b1580156120e857600080fd5b505afa1580156120fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212091906136b7565b11612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613f40565b60405180910390fd5b6000600f600061216e6129bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090613e40565b60405180910390fd5b600860009054906101000a900460ff1661220257600080fd5b6003600f60006122106129bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c5490506003600c600082825461226891906141a5565b9250508190555060005b60038110156122aa576122976122866129bc565b828461229291906141a5565b612ad5565b80806122a2906143d3565b915050612272565b505060008060146101000a81548160ff021916908315150217905550565b6122d06129bc565b73ffffffffffffffffffffffffffffffffffffffff166122ee611832565b73ffffffffffffffffffffffffffffffffffffffff1614612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b90614020565b60405180910390fd5b80600d8190555050565b606060036040516020016123629190613c68565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124126129bc565b73ffffffffffffffffffffffffffffffffffffffff16612430611832565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614020565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90613ea0565b60405180910390fd5b6124ff81612af3565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461255691906141fb565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661263c83611032565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061268d8261255d565b6126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390613d80565b60405180910390fd5b60006126d783611032565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061274657508373ffffffffffffffffffffffffffffffffffffffff1661272e84610ab3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061275757506127568185612376565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278082611032565b73ffffffffffffffffffffffffffffffffffffffff16146127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90614000565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d90613dc0565b60405180910390fd5b612851838383612d74565b61285c6000826125c9565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ac9190614286565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461290391906141a5565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600033905090565b60006129cf82611032565b90506129dd81600084612d74565b6129e86000836125c9565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a389190614286565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612aef828260405180602001604052806000815250612d79565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bc2848484612760565b612bce84848484612dd4565b612c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0490613f20565b60405180910390fd5b50505050565b60606000821415612c5b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d6f565b600082905060005b60008214612c8d578080612c76906143d3565b915050600a82612c8691906141fb565b9150612c63565b60008167ffffffffffffffff811115612ca957612ca8614509565b5b6040519080825280601f01601f191660200182016040528015612cdb5781602001600182028036833780820191505090505b5090505b60008514612d6857600182612cf49190614286565b9150600a85612d03919061441c565b6030612d0f91906141a5565b60f81b818381518110612d2557612d246144da565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d6191906141fb565b9450612cdf565b8093505050505b919050565b505050565b612d838383612f64565b612d906000848484612dd4565b612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690613f20565b60405180910390fd5b505050565b6000612df58473ffffffffffffffffffffffffffffffffffffffff16613132565b15612f57578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612e399493929190613cdc565b602060405180830381600087803b158015612e5357600080fd5b505af1925050508015612e8457506040513d601f19601f82011682018060405250810190612e819190613614565b60015b612f07573d8060008114612eb4576040519150601f19603f3d011682016040523d82523d6000602084013e612eb9565b606091505b50600081511415612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613f20565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f5c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb90613fa0565b60405180910390fd5b612fdd8161255d565b1561301d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301490613de0565b60405180910390fd5b61302960008383612d74565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461307991906141a5565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461315190614370565b90600052602060002090601f01602090048101928261317357600085556131ba565b82601f1061318c57805160ff19168380011785556131ba565b828001600101855582156131ba579182015b828111156131b957825182559160200191906001019061319e565b5b5090506131c791906131cb565b5090565b5b808211156131e45760008160009055506001016131cc565b5090565b60006131fb6131f6846140e0565b6140bb565b90508281526020810184848401111561321757613216614547565b5b61322284828561432e565b509392505050565b600061323d61323884614111565b6140bb565b90508281526020810184848401111561325957613258614547565b5b61326484828561432e565b509392505050565b60008135905061327b816149e6565b92915050565b600081359050613290816149fd565b92915050565b6000813590506132a581614a14565b92915050565b6000815190506132ba81614a14565b92915050565b60008083601f8401126132d6576132d561453d565b5b8235905067ffffffffffffffff8111156132f3576132f2614538565b5b60208301915083600182028301111561330f5761330e614542565b5b9250929050565b600082601f83011261332b5761332a61453d565b5b813561333b8482602086016131e8565b91505092915050565b600082601f8301126133595761335861453d565b5b813561336984826020860161322a565b91505092915050565b60008135905061338181614a2b565b92915050565b60008151905061339681614a2b565b92915050565b6000602082840312156133b2576133b1614551565b5b60006133c08482850161326c565b91505092915050565b600080604083850312156133e0576133df614551565b5b60006133ee8582860161326c565b92505060206133ff8582860161326c565b9150509250929050565b60008060006060848603121561342257613421614551565b5b60006134308682870161326c565b93505060206134418682870161326c565b925050604061345286828701613372565b9150509250925092565b60008060008060006080868803121561347857613477614551565b5b60006134868882890161326c565b95505060206134978882890161326c565b94505060406134a888828901613372565b935050606086013567ffffffffffffffff8111156134c9576134c861454c565b5b6134d5888289016132c0565b92509250509295509295909350565b600080600080608085870312156134fe576134fd614551565b5b600061350c8782880161326c565b945050602061351d8782880161326c565b935050604061352e87828801613372565b925050606085013567ffffffffffffffff81111561354f5761354e61454c565b5b61355b87828801613316565b91505092959194509250565b6000806040838503121561357e5761357d614551565b5b600061358c8582860161326c565b925050602061359d85828601613281565b9150509250929050565b600080604083850312156135be576135bd614551565b5b60006135cc8582860161326c565b92505060206135dd85828601613372565b9150509250929050565b6000602082840312156135fd576135fc614551565b5b600061360b84828501613296565b91505092915050565b60006020828403121561362a57613629614551565b5b6000613638848285016132ab565b91505092915050565b60006020828403121561365757613656614551565b5b600082013567ffffffffffffffff8111156136755761367461454c565b5b61368184828501613344565b91505092915050565b6000602082840312156136a05761369f614551565b5b60006136ae84828501613372565b91505092915050565b6000602082840312156136cd576136cc614551565b5b60006136db84828501613387565b91505092915050565b6136ed816142ba565b82525050565b6136fc816142cc565b82525050565b61370b816142d8565b82525050565b600061371c82614157565b613726818561416d565b935061373681856020860161433d565b61373f81614556565b840191505092915050565b600061375582614162565b61375f8185614189565b935061376f81856020860161433d565b61377881614556565b840191505092915050565b600061378e82614162565b613798818561419a565b93506137a881856020860161433d565b80840191505092915050565b600081546137c181614370565b6137cb818661419a565b945060018216600081146137e657600181146137f75761382a565b60ff1983168652818601935061382a565b61380085614142565b60005b8381101561382257815481890152600182019150602081019050613803565b838801955050505b50505092915050565b6000613840602083614189565b915061384b82614567565b602082019050919050565b6000613863601083614189565b915061386e82614590565b602082019050919050565b6000613886600d8361419a565b9150613891826145b9565b600d82019050919050565b60006138a9601b83614189565b91506138b4826145e2565b602082019050919050565b60006138cc601c83614189565b91506138d78261460b565b602082019050919050565b60006138ef602083614189565b91506138fa82614634565b602082019050919050565b6000613912601e83614189565b915061391d8261465d565b602082019050919050565b6000613935600f83614189565b915061394082614686565b602082019050919050565b6000613958600a83614189565b9150613963826146af565b602082019050919050565b600061397b601883614189565b9150613986826146d8565b602082019050919050565b600061399e602083614189565b91506139a982614701565b602082019050919050565b60006139c1601983614189565b91506139cc8261472a565b602082019050919050565b60006139e4600c8361419a565b91506139ef82614753565b600c82019050919050565b6000613a07601e83614189565b9150613a128261477c565b602082019050919050565b6000613a2a600883614189565b9150613a35826147a5565b602082019050919050565b6000613a4d601a83614189565b9150613a58826147ce565b602082019050919050565b6000613a70600e83614189565b9150613a7b826147f7565b602082019050919050565b6000613a93601f83614189565b9150613a9e82614820565b602082019050919050565b6000613ab6601f83614189565b9150613ac182614849565b602082019050919050565b6000613ad9602083614189565b9150613ae482614872565b602082019050919050565b6000613afc602083614189565b9150613b078261489b565b602082019050919050565b6000613b1f60058361419a565b9150613b2a826148c4565b600582019050919050565b6000613b42600e83614189565b9150613b4d826148ed565b602082019050919050565b6000613b65601c83614189565b9150613b7082614916565b602082019050919050565b6000613b88602083614189565b9150613b938261493f565b602082019050919050565b6000613bab601c83614189565b9150613bb682614968565b602082019050919050565b6000613bce60008361417e565b9150613bd982614991565b600082019050919050565b6000613bf1601d83614189565b9150613bfc82614994565b602082019050919050565b6000613c14601b83614189565b9150613c1f826149bd565b602082019050919050565b613c3381614324565b82525050565b6000613c4582856137b4565b9150613c518284613783565b9150613c5c82613b12565b91508190509392505050565b6000613c7482846137b4565b9150613c7f82613879565b915081905092915050565b6000613c9682846137b4565b9150613ca1826139d7565b915081905092915050565b6000613cb782613bc1565b9150819050919050565b6000602082019050613cd660008301846136e4565b92915050565b6000608082019050613cf160008301876136e4565b613cfe60208301866136e4565b613d0b6040830185613c2a565b8181036060830152613d1d8184613711565b905095945050505050565b6000602082019050613d3d60008301846136f3565b92915050565b6000602082019050613d586000830184613702565b92915050565b60006020820190508181036000830152613d78818461374a565b905092915050565b60006020820190508181036000830152613d9981613833565b9050919050565b60006020820190508181036000830152613db981613856565b9050919050565b60006020820190508181036000830152613dd98161389c565b9050919050565b60006020820190508181036000830152613df9816138bf565b9050919050565b60006020820190508181036000830152613e19816138e2565b9050919050565b60006020820190508181036000830152613e3981613905565b9050919050565b60006020820190508181036000830152613e5981613928565b9050919050565b60006020820190508181036000830152613e798161394b565b9050919050565b60006020820190508181036000830152613e998161396e565b9050919050565b60006020820190508181036000830152613eb981613991565b9050919050565b60006020820190508181036000830152613ed9816139b4565b9050919050565b60006020820190508181036000830152613ef9816139fa565b9050919050565b60006020820190508181036000830152613f1981613a1d565b9050919050565b60006020820190508181036000830152613f3981613a40565b9050919050565b60006020820190508181036000830152613f5981613a63565b9050919050565b60006020820190508181036000830152613f7981613a86565b9050919050565b60006020820190508181036000830152613f9981613aa9565b9050919050565b60006020820190508181036000830152613fb981613acc565b9050919050565b60006020820190508181036000830152613fd981613aef565b9050919050565b60006020820190508181036000830152613ff981613b35565b9050919050565b6000602082019050818103600083015261401981613b58565b9050919050565b6000602082019050818103600083015261403981613b7b565b9050919050565b6000602082019050818103600083015261405981613b9e565b9050919050565b6000602082019050818103600083015261407981613be4565b9050919050565b6000602082019050818103600083015261409981613c07565b9050919050565b60006020820190506140b56000830184613c2a565b92915050565b60006140c56140d6565b90506140d182826143a2565b919050565b6000604051905090565b600067ffffffffffffffff8211156140fb576140fa614509565b5b61410482614556565b9050602081019050919050565b600067ffffffffffffffff82111561412c5761412b614509565b5b61413582614556565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006141b082614324565b91506141bb83614324565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141f0576141ef61444d565b5b828201905092915050565b600061420682614324565b915061421183614324565b9250826142215761422061447c565b5b828204905092915050565b600061423782614324565b915061424283614324565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561427b5761427a61444d565b5b828202905092915050565b600061429182614324565b915061429c83614324565b9250828210156142af576142ae61444d565b5b828203905092915050565b60006142c582614304565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561435b578082015181840152602081019050614340565b8381111561436a576000848401525b50505050565b6000600282049050600182168061438857607f821691505b6020821081141561439c5761439b6144ab565b5b50919050565b6143ab82614556565b810181811067ffffffffffffffff821117156143ca576143c9614509565b5b80604052505050565b60006143de82614324565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144115761441061444d565b5b600182019050919050565b600061442782614324565b915061443283614324565b9250826144425761444161447c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f616c726561647920636c61696d65640000000000000000000000000000000000600082015250565b7f6e6f742061637469766500000000000000000000000000000000000000000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f6d7573742068617665206368616d000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f6d6178203230207065722074786e000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f6d757374206861766520616666696c69617465206163636f756e740000000000600082015250565b6149ef816142ba565b81146149fa57600080fd5b50565b614a06816142cc565b8114614a1157600080fd5b50565b614a1d816142d8565b8114614a2857600080fd5b50565b614a3481614324565b8114614a3f57600080fd5b5056fea2646970667358221220d261b55c67d3c266f8eaa0a4bc2fbd42c91d1e2ab58010336011eae584da843464736f6c63430008070033

Deployed Bytecode Sourcemap

17624:18469:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19576:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35054:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24693:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24255:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33993:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23244:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25563:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18367:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22943:80;;;;;;;;;;;;;:::i;:::-;;18519:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20013:223;;;;;;;;;;;;;:::i;:::-;;22460:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25948:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22054:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18485:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22747:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23965:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20716:809;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23705:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:94;;;;;;;;;;;;;:::i;:::-;;18450:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23135:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23035:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35195;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18426:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21537:440;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24972:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22392:63;;;;;;;;;;;;;:::i;:::-;;22560:62;;;;;;;;;;;;;:::i;:::-;;26204:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35370:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22854:77;;;;;;;;;;;;;:::i;:::-;;20245:459;;;;;;;;;;;;;:::i;:::-;;22630:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35784:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25332:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23382:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19576:355;19661:4;19701:25;19686:40;;;:11;:40;;;;:109;;;;19762:33;19747:48;;;:11;:48;;;;19686:109;:170;;;;19831:25;19816:40;;;:11;:40;;;;19686:170;:237;;;;19892:31;;;19877:46;;;:11;:46;;;;19686:237;19678:245;;19576:355;;;:::o;35054:84::-;35093:13;35125:5;35118:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35054:84;:::o;24693:207::-;24769:7;24797:16;24805:7;24797;:16::i;:::-;24789:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24868:15;:24;24884:7;24868:24;;;;;;;;;;;;;;;;;;;;;24861:31;;24693:207;;;:::o;24255:372::-;24336:13;24352:16;24360:7;24352;:16::i;:::-;24336:32;;24393:5;24387:11;;:2;:11;;;;24379:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24482:5;24468:19;;:10;:19;;;:58;;;;24491:35;24508:5;24515:10;24491:16;:35::i;:::-;24468:58;24446:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;24598:21;24607:2;24611:7;24598:8;:21::i;:::-;24325:302;24255:372;;:::o;33993:220::-;34115:6;34175:30;;;34168:37;;33993:220;;;;;;;:::o;23244:126::-;23290:7;23317:12;;23310:19;;23244:126;:::o;25563:314::-;25758:39;25777:10;25789:7;25758:18;:39::i;:::-;25750:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25841:28;25851:4;25857:2;25861:7;25841:9;:28::i;:::-;25563:314;;;:::o;18367:22::-;;;;;;;;;;;;;:::o;22943:80::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23010:5:::1;22997:10;;:18;;;;;;;;;;;;;;;;;;22943:80::o:0;18519:24::-;;;;:::o;20013:223::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20063:18:::1;20084:21;20063:42;;20117:12;20135:10;:15;;20158:10;20135:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20116:57;;;20192:7;20184:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;20052:184;;20013:223::o:0;22460:95::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22542:8:::1;22529:10;:21;;;;22460:95:::0;:::o;25948:185::-;26086:39;26103:4;26109:2;26113:7;26086:39;;;;;;;;;;;;:16;:39::i;:::-;25948:185;;;:::o;22054:125::-;22129:16;22137:7;22129;:16::i;:::-;22113:32;;:12;:10;:12::i;:::-;:32;;;22105:41;;;;;;22157:14;22163:7;22157:5;:14::i;:::-;22054:125;:::o;18485:27::-;;;;:::o;22747:95::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22828:6:::1;22817:8;:17;;;;;;;;;;;;:::i;:::-;;22747:95:::0;:::o;23965:228::-;24037:7;24057:13;24073:7;:16;24081:7;24073:16;;;;;;;;;;;;;;;;;;;;;24057:32;;24125:1;24108:19;;:5;:19;;;;24100:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24180:5;24173:12;;;23965:228;;;:::o;20716:809::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;20808:12:::1;;20802:3;:18;;;;:::i;:::-;20788:10;;:32;;20780:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;20838:19;20903:1:::0;20872:4:::1;;;;;;;;;;;:14;;;20887:12;:10;:12::i;:::-;20872:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;20868:63;;;20912:13;;;;;:::i;:::-;;;;20868:63;20970:1;20939:4;;;;;;;;;;;:14;;;20954:12;:10;:12::i;:::-;20939:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;20935:63;;;20979:13;;;;;:::i;:::-;;;;20935:63;21036:1;21006:3;;;;;;;;;;;:13;;;21020:12;:10;:12::i;:::-;21006:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;21002:62;;;21045:13;;;;;:::i;:::-;;;;21002:62;21102:1;21072:2;;;;;;;;;;;:12;;;21086;:10;:12::i;:::-;21072:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;21068:62;;;21111:13;;;;;:::i;:::-;;;;21068:62;21158:1;21144:11;:15;21136:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21211:9;;21204:3;:16;;21196:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;21252:10;;;;;;;;;;;21244:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;21309:13;;21303:3;:19;;;;:::i;:::-;21290:9;:32;21282:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21350:21;21374:12;;21350:36;;21407:3;21391:12;;:19;;;;;;;:::i;:::-;;;;;;;;21423:9;21419:99;21442:3;21438:1;:7;21419:99;;;21464:42;21474:12;:10;:12::i;:::-;21504:1;21488:13;:17;;;;:::i;:::-;21464:9;:42::i;:::-;21447:3;;;;;:::i;:::-;;;;21419:99;;;;20775:750;;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;20716:809;:::o;23705:198::-;23777:7;23822:1;23805:19;;:5;:19;;;;23797:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23879:9;:16;23889:5;23879:16;;;;;;;;;;;;;;;;23872:23;;23705:198;;;:::o;14765:94::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14830:21:::1;14848:1;14830:9;:21::i;:::-;14765:94::o:0;18450:28::-;;;;:::o;23135:101::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23220:8:::1;23204:13;:24;;;;23135:101:::0;:::o;14114:87::-;14160:7;14187:6;;;;;;;;;;;14180:13;;14114:87;:::o;23035:88::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23107:8:::1;23099:5;:16;;;;23035:88:::0;:::o;35195:::-;35236:13;35268:7;35261:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35195:88;:::o;18426:20::-;;;;:::o;21537:440::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;21626:12:::1;;21620:3;:18;;;;:::i;:::-;21606:10;;:32;;21598:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21674:9;;21667:3;:16;;21659:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;21718:10;;;;;;;;;;;21710:19;;;::::0;::::1;;21764:5;;21758:3;:11;;;;:::i;:::-;21745:9;:24;21737:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21802:21;21826:12;;21802:36;;21859:3;21843:12;;:19;;;;;;;:::i;:::-;;;;;;;;21875:9;21871:99;21894:3;21890:1;:7;21871:99;;;21916:42;21926:12;:10;:12::i;:::-;21956:1;21940:13;:17;;;;:::i;:::-;21916:9;:42::i;:::-;21899:3;;;;;:::i;:::-;;;;21871:99;;;;21593:384;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;21537:440;:::o;24972:289::-;25087:10;25075:22;;:8;:22;;;;25067:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25183:8;25140:18;:30;25159:10;25140:30;;;;;;;;;;;;;;;:40;25171:8;25140:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;25234:8;25207:46;;25222:10;25207:46;;;25244:8;25207:46;;;;;;:::i;:::-;;;;;;;;24972:289;;:::o;22392:63::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22446:4:::1;22434:9;;:16;;;;;;;;;;;;;;;;;;22392:63::o:0;22560:62::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22612:5:::1;22600:9;;:17;;;;;;;;;;;;;;;;;;22560:62::o:0;26204:305::-;26379:39;26398:10;26410:7;26379:18;:39::i;:::-;26371:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26462:39;26476:4;26482:2;26486:7;26495:5;26462:13;:39::i;:::-;26204:305;;;;:::o;35370:402::-;35428:13;35461:16;35469:7;35461;:16::i;:::-;35453:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35522:22;35559:9;;;;;;;;;;;35555:184;;;35616:8;35626:17;35635:7;35626:8;:17::i;:::-;35599:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35581:73;;35555:184;;;35707:8;35690:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;35672:61;;35555:184;35756:8;35749:15;;;35370:402;;;:::o;22854:77::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22919:4:::1;22906:10;;:17;;;;;;;;;;;;;;;;;;22854:77::o:0;20245:459::-;16048:11;;;;;;;;;;;16047:12;16039:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16120:4;16106:11;;:18;;;;;;;;;;;;;;;;;;20317:12:::1;;20313:1;:16;;;;:::i;:::-;20299:10;;:30;;20291:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;20384:1;20355:2;;;;;;;;;;;:12;;;20368;:10;:12::i;:::-;20355:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;20347:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20447:1;20417:12;:26;20430:12;:10;:12::i;:::-;20417:26;;;;;;;;;;;;;;;;:31;20409:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20481:10;;;;;;;;;;;20473:19;;;::::0;::::1;;20530:1;20501:12;:26;20514:12;:10;:12::i;:::-;20501:26;;;;;;;;;;;;;;;:30;;;;20536:21;20560:12;;20536:36;;20593:1;20577:12;;:17;;;;;;;:::i;:::-;;;;;;;;20607:9;20603:97;20626:1;20622;:5;20603:97;;;20646:42;20656:12;:10;:12::i;:::-;20686:1;20670:13;:17;;;;:::i;:::-;20646:9;:42::i;:::-;20629:3;;;;;:::i;:::-;;;;20603:97;;;;20286:418;16161:5:::0;16147:11;;:19;;;;;;;;;;;;;;;;;;20245:459::o;22630:105::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22719:8:::1;22707:9;:20;;;;22630:105:::0;:::o;35784:139::-;35828:13;35889:8;35872:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;35858:57;;35784:139;:::o;25332:164::-;25429:4;25453:18;:25;25472:5;25453:25;;;;;;;;;;;;;;;:35;25479:8;25453:35;;;;;;;;;;;;;;;;;;;;;;;;;25446:42;;25332:164;;;;:::o;15014:186::-;14345:12;:10;:12::i;:::-;14334:23;;:7;:5;:7::i;:::-;:23;;;14326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15123:1:::1;15103:22;;:8;:22;;;;15095:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15173:19;15183:8;15173:9;:19::i;:::-;15014:186:::0;:::o;23382:259::-;23447:7;23589:6;23562:9;:23;23572:12;23562:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;23555:41;;23382:259;;;:::o;27995:127::-;28060:4;28112:1;28084:30;;:7;:16;28092:7;28084:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28077:37;;27995:127;;;:::o;31896:167::-;31998:2;31971:15;:24;31987:7;31971:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32047:7;32043:2;32016:39;;32025:16;32033:7;32025;:16::i;:::-;32016:39;;;;;;;;;;;;31896:167;;:::o;28289:329::-;28382:4;28407:16;28415:7;28407;:16::i;:::-;28399:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28471:13;28487:16;28495:7;28487;:16::i;:::-;28471:32;;28533:5;28522:16;;:7;:16;;;:51;;;;28566:7;28542:31;;:20;28554:7;28542:11;:20::i;:::-;:31;;;28522:51;:87;;;;28577:32;28594:5;28601:7;28577:16;:32::i;:::-;28522:87;28514:96;;;28289:329;;;;:::o;31231:547::-;31383:4;31363:24;;:16;31371:7;31363;:16::i;:::-;:24;;;31355:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:1;31439:16;;:2;:16;;;;31431:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31498:39;31519:4;31525:2;31529:7;31498:20;:39::i;:::-;31602:29;31619:1;31623:7;31602:8;:29::i;:::-;31663:1;31644:9;:15;31654:4;31644:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31692:1;31675:9;:13;31685:2;31675:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31723:2;31704:7;:16;31712:7;31704:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31762:7;31758:2;31743:27;;31752:4;31743:27;;;;;;;;;;;;31231:547;;;:::o;13497:98::-;13550:7;13577:10;13570:17;;13497:98;:::o;30541:353::-;30601:13;30617:16;30625:7;30617;:16::i;:::-;30601:32;;30646:48;30667:5;30682:1;30686:7;30646:20;:48::i;:::-;30735:29;30752:1;30756:7;30735:8;:29::i;:::-;30797:1;30777:9;:16;30787:5;30777:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30816:7;:16;30824:7;30816:16;;;;;;;;;;;;30809:23;;;;;;;;;;;30878:7;30874:1;30850:36;;30859:5;30850:36;;;;;;;;;;;;30590:304;30541:353;:::o;28960:110::-;29036:26;29046:2;29050:7;29036:26;;;;;;;;;;;;:9;:26::i;:::-;28960:110;;:::o;15208:173::-;15264:16;15283:6;;;;;;;;;;;15264:25;;15309:8;15300:6;;:17;;;;;;;;;;;;;;;;;;15364:8;15333:40;;15354:8;15333:40;;;;;;;;;;;;15253:128;15208:173;:::o;27391:291::-;27548:28;27558:4;27564:2;27568:7;27548:9;:28::i;:::-;27595:48;27618:4;27624:2;27628:7;27637:5;27595:22;:48::i;:::-;27587:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27391:291;;;;:::o;15424:532::-;15480:13;15519:1;15510:5;:10;15506:53;;;15537:10;;;;;;;;;;;;;;;;;;;;;15506:53;15569:12;15584:5;15569:20;;15600:14;15625:78;15640:1;15632:4;:9;15625:78;;15658:8;;;;;:::i;:::-;;;;15689:2;15681:10;;;;;:::i;:::-;;;15625:78;;;15713:19;15745:6;15735:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15713:39;;15763:154;15779:1;15770:5;:10;15763:154;;15807:1;15797:11;;;;;:::i;:::-;;;15874:2;15866:5;:10;;;;:::i;:::-;15853:2;:24;;;;:::i;:::-;15840:39;;15823:6;15830;15823:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15903:2;15894:11;;;;;:::i;:::-;;;15763:154;;;15941:6;15927:21;;;;;15424:532;;;;:::o;34785:126::-;;;;:::o;29297:297::-;29427:18;29433:2;29437:7;29427:5;:18::i;:::-;29478:54;29509:1;29513:2;29517:7;29526:5;29478:22;:54::i;:::-;29456:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;29297:297;;;:::o;32628:777::-;32783:4;32804:15;:2;:13;;;:15::i;:::-;32800:598;;;32856:2;32840:36;;;32877:10;32889:4;32895:7;32904:5;32840:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32836:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33101:1;33084:6;:13;:18;33080:248;;;33127:36;;;;;;;;;;:::i;:::-;;;;;;;;33080:248;33278:6;33272:13;33263:6;33259:2;33255:15;33248:38;32836:507;32971:45;;;32961:55;;;:6;:55;;;;32954:62;;;;;32800:598;33382:4;33375:11;;32628:777;;;;;;;:::o;29930:382::-;30024:1;30010:16;;:2;:16;;;;30002:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30083:16;30091:7;30083;:16::i;:::-;30082:17;30074:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30145:45;30174:1;30178:2;30182:7;30145:20;:45::i;:::-;30220:1;30203:9;:13;30213:2;30203:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30251:2;30232:7;:16;30240:7;30232:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30296:7;30292:2;30271:33;;30288:1;30271:33;;;;;;;;;;;;29930:382;;:::o;6418:387::-;6478:4;6686:12;6753:7;6741:20;6733:28;;6796:1;6789:4;:8;6782:15;;;6418:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:552::-;1485:8;1495:6;1545:3;1538:4;1530:6;1526:17;1522:27;1512:122;;1553:79;;:::i;:::-;1512:122;1666:6;1653:20;1643:30;;1696:18;1688:6;1685:30;1682:117;;;1718:79;;:::i;:::-;1682:117;1832:4;1824:6;1820:17;1808:29;;1886:3;1878:4;1870:6;1866:17;1856:8;1852:32;1849:41;1846:128;;;1893:79;;:::i;:::-;1846:128;1428:552;;;;;:::o;1999:338::-;2054:5;2103:3;2096:4;2088:6;2084:17;2080:27;2070:122;;2111:79;;:::i;:::-;2070:122;2228:6;2215:20;2253:78;2327:3;2319:6;2312:4;2304:6;2300:17;2253:78;:::i;:::-;2244:87;;2060:277;1999:338;;;;:::o;2357:340::-;2413:5;2462:3;2455:4;2447:6;2443:17;2439:27;2429:122;;2470:79;;:::i;:::-;2429:122;2587:6;2574:20;2612:79;2687:3;2679:6;2672:4;2664:6;2660:17;2612:79;:::i;:::-;2603:88;;2419:278;2357:340;;;;:::o;2703:139::-;2749:5;2787:6;2774:20;2765:29;;2803:33;2830:5;2803:33;:::i;:::-;2703:139;;;;:::o;2848:143::-;2905:5;2936:6;2930:13;2921:22;;2952:33;2979:5;2952:33;:::i;:::-;2848:143;;;;:::o;2997:329::-;3056:6;3105:2;3093:9;3084:7;3080:23;3076:32;3073:119;;;3111:79;;:::i;:::-;3073:119;3231:1;3256:53;3301:7;3292:6;3281:9;3277:22;3256:53;:::i;:::-;3246:63;;3202:117;2997:329;;;;:::o;3332:474::-;3400:6;3408;3457:2;3445:9;3436:7;3432:23;3428:32;3425:119;;;3463:79;;:::i;:::-;3425:119;3583:1;3608:53;3653:7;3644:6;3633:9;3629:22;3608:53;:::i;:::-;3598:63;;3554:117;3710:2;3736:53;3781:7;3772:6;3761:9;3757:22;3736:53;:::i;:::-;3726:63;;3681:118;3332:474;;;;;:::o;3812:619::-;3889:6;3897;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;4335:2;4361:53;4406:7;4397:6;4386:9;4382:22;4361:53;:::i;:::-;4351:63;;4306:118;3812:619;;;;;:::o;4437:963::-;4534:6;4542;4550;4558;4566;4615:3;4603:9;4594:7;4590:23;4586:33;4583:120;;;4622:79;;:::i;:::-;4583:120;4742:1;4767:53;4812:7;4803:6;4792:9;4788:22;4767:53;:::i;:::-;4757:63;;4713:117;4869:2;4895:53;4940:7;4931:6;4920:9;4916:22;4895:53;:::i;:::-;4885:63;;4840:118;4997:2;5023:53;5068:7;5059:6;5048:9;5044:22;5023:53;:::i;:::-;5013:63;;4968:118;5153:2;5142:9;5138:18;5125:32;5184:18;5176:6;5173:30;5170:117;;;5206:79;;:::i;:::-;5170:117;5319:64;5375:7;5366:6;5355:9;5351:22;5319:64;:::i;:::-;5301:82;;;;5096:297;4437:963;;;;;;;;:::o;5406:943::-;5501:6;5509;5517;5525;5574:3;5562:9;5553:7;5549:23;5545:33;5542:120;;;5581:79;;:::i;:::-;5542:120;5701:1;5726:53;5771:7;5762:6;5751:9;5747:22;5726:53;:::i;:::-;5716:63;;5672:117;5828:2;5854:53;5899:7;5890:6;5879:9;5875:22;5854:53;:::i;:::-;5844:63;;5799:118;5956:2;5982:53;6027:7;6018:6;6007:9;6003:22;5982:53;:::i;:::-;5972:63;;5927:118;6112:2;6101:9;6097:18;6084:32;6143:18;6135:6;6132:30;6129:117;;;6165:79;;:::i;:::-;6129:117;6270:62;6324:7;6315:6;6304:9;6300:22;6270:62;:::i;:::-;6260:72;;6055:287;5406:943;;;;;;;:::o;6355:468::-;6420:6;6428;6477:2;6465:9;6456:7;6452:23;6448:32;6445:119;;;6483:79;;:::i;:::-;6445:119;6603:1;6628:53;6673:7;6664:6;6653:9;6649:22;6628:53;:::i;:::-;6618:63;;6574:117;6730:2;6756:50;6798:7;6789:6;6778:9;6774:22;6756:50;:::i;:::-;6746:60;;6701:115;6355:468;;;;;:::o;6829:474::-;6897:6;6905;6954:2;6942:9;6933:7;6929:23;6925:32;6922:119;;;6960:79;;:::i;:::-;6922:119;7080:1;7105:53;7150:7;7141:6;7130:9;7126:22;7105:53;:::i;:::-;7095:63;;7051:117;7207:2;7233:53;7278:7;7269:6;7258:9;7254:22;7233:53;:::i;:::-;7223:63;;7178:118;6829:474;;;;;:::o;7309:327::-;7367:6;7416:2;7404:9;7395:7;7391:23;7387:32;7384:119;;;7422:79;;:::i;:::-;7384:119;7542:1;7567:52;7611:7;7602:6;7591:9;7587:22;7567:52;:::i;:::-;7557:62;;7513:116;7309:327;;;;:::o;7642:349::-;7711:6;7760:2;7748:9;7739:7;7735:23;7731:32;7728:119;;;7766:79;;:::i;:::-;7728:119;7886:1;7911:63;7966:7;7957:6;7946:9;7942:22;7911:63;:::i;:::-;7901:73;;7857:127;7642:349;;;;:::o;7997:509::-;8066:6;8115:2;8103:9;8094:7;8090:23;8086:32;8083:119;;;8121:79;;:::i;:::-;8083:119;8269:1;8258:9;8254:17;8241:31;8299:18;8291:6;8288:30;8285:117;;;8321:79;;:::i;:::-;8285:117;8426:63;8481:7;8472:6;8461:9;8457:22;8426:63;:::i;:::-;8416:73;;8212:287;7997:509;;;;:::o;8512:329::-;8571:6;8620:2;8608:9;8599:7;8595:23;8591:32;8588:119;;;8626:79;;:::i;:::-;8588:119;8746:1;8771:53;8816:7;8807:6;8796:9;8792:22;8771:53;:::i;:::-;8761:63;;8717:117;8512:329;;;;:::o;8847:351::-;8917:6;8966:2;8954:9;8945:7;8941:23;8937:32;8934:119;;;8972:79;;:::i;:::-;8934:119;9092:1;9117:64;9173:7;9164:6;9153:9;9149:22;9117:64;:::i;:::-;9107:74;;9063:128;8847:351;;;;:::o;9204:118::-;9291:24;9309:5;9291:24;:::i;:::-;9286:3;9279:37;9204:118;;:::o;9328:109::-;9409:21;9424:5;9409:21;:::i;:::-;9404:3;9397:34;9328:109;;:::o;9443:115::-;9528:23;9545:5;9528:23;:::i;:::-;9523:3;9516:36;9443:115;;:::o;9564:360::-;9650:3;9678:38;9710:5;9678:38;:::i;:::-;9732:70;9795:6;9790:3;9732:70;:::i;:::-;9725:77;;9811:52;9856:6;9851:3;9844:4;9837:5;9833:16;9811:52;:::i;:::-;9888:29;9910:6;9888:29;:::i;:::-;9883:3;9879:39;9872:46;;9654:270;9564:360;;;;:::o;9930:364::-;10018:3;10046:39;10079:5;10046:39;:::i;:::-;10101:71;10165:6;10160:3;10101:71;:::i;:::-;10094:78;;10181:52;10226:6;10221:3;10214:4;10207:5;10203:16;10181:52;:::i;:::-;10258:29;10280:6;10258:29;:::i;:::-;10253:3;10249:39;10242:46;;10022:272;9930:364;;;;:::o;10300:377::-;10406:3;10434:39;10467:5;10434:39;:::i;:::-;10489:89;10571:6;10566:3;10489:89;:::i;:::-;10482:96;;10587:52;10632:6;10627:3;10620:4;10613:5;10609:16;10587:52;:::i;:::-;10664:6;10659:3;10655:16;10648:23;;10410:267;10300:377;;;;:::o;10707:845::-;10810:3;10847:5;10841:12;10876:36;10902:9;10876:36;:::i;:::-;10928:89;11010:6;11005:3;10928:89;:::i;:::-;10921:96;;11048:1;11037:9;11033:17;11064:1;11059:137;;;;11210:1;11205:341;;;;11026:520;;11059:137;11143:4;11139:9;11128;11124:25;11119:3;11112:38;11179:6;11174:3;11170:16;11163:23;;11059:137;;11205:341;11272:38;11304:5;11272:38;:::i;:::-;11332:1;11346:154;11360:6;11357:1;11354:13;11346:154;;;11434:7;11428:14;11424:1;11419:3;11415:11;11408:35;11484:1;11475:7;11471:15;11460:26;;11382:4;11379:1;11375:12;11370:17;;11346:154;;;11529:6;11524:3;11520:16;11513:23;;11212:334;;11026:520;;10814:738;;10707:845;;;;:::o;11558:366::-;11700:3;11721:67;11785:2;11780:3;11721:67;:::i;:::-;11714:74;;11797:93;11886:3;11797:93;:::i;:::-;11915:2;11910:3;11906:12;11899:19;;11558:366;;;:::o;11930:::-;12072:3;12093:67;12157:2;12152:3;12093:67;:::i;:::-;12086:74;;12169:93;12258:3;12169:93;:::i;:::-;12287:2;12282:3;12278:12;12271:19;;11930:366;;;:::o;12302:402::-;12462:3;12483:85;12565:2;12560:3;12483:85;:::i;:::-;12476:92;;12577:93;12666:3;12577:93;:::i;:::-;12695:2;12690:3;12686:12;12679:19;;12302:402;;;:::o;12710:366::-;12852:3;12873:67;12937:2;12932:3;12873:67;:::i;:::-;12866:74;;12949:93;13038:3;12949:93;:::i;:::-;13067:2;13062:3;13058:12;13051:19;;12710:366;;;:::o;13082:::-;13224:3;13245:67;13309:2;13304:3;13245:67;:::i;:::-;13238:74;;13321:93;13410:3;13321:93;:::i;:::-;13439:2;13434:3;13430:12;13423:19;;13082:366;;;:::o;13454:::-;13596:3;13617:67;13681:2;13676:3;13617:67;:::i;:::-;13610:74;;13693:93;13782:3;13693:93;:::i;:::-;13811:2;13806:3;13802:12;13795:19;;13454:366;;;:::o;13826:::-;13968:3;13989:67;14053:2;14048:3;13989:67;:::i;:::-;13982:74;;14065:93;14154:3;14065:93;:::i;:::-;14183:2;14178:3;14174:12;14167:19;;13826:366;;;:::o;14198:::-;14340:3;14361:67;14425:2;14420:3;14361:67;:::i;:::-;14354:74;;14437:93;14526:3;14437:93;:::i;:::-;14555:2;14550:3;14546:12;14539:19;;14198:366;;;:::o;14570:::-;14712:3;14733:67;14797:2;14792:3;14733:67;:::i;:::-;14726:74;;14809:93;14898:3;14809:93;:::i;:::-;14927:2;14922:3;14918:12;14911:19;;14570:366;;;:::o;14942:::-;15084:3;15105:67;15169:2;15164:3;15105:67;:::i;:::-;15098:74;;15181:93;15270:3;15181:93;:::i;:::-;15299:2;15294:3;15290:12;15283:19;;14942:366;;;:::o;15314:::-;15456:3;15477:67;15541:2;15536:3;15477:67;:::i;:::-;15470:74;;15553:93;15642:3;15553:93;:::i;:::-;15671:2;15666:3;15662:12;15655:19;;15314:366;;;:::o;15686:::-;15828:3;15849:67;15913:2;15908:3;15849:67;:::i;:::-;15842:74;;15925:93;16014:3;15925:93;:::i;:::-;16043:2;16038:3;16034:12;16027:19;;15686:366;;;:::o;16058:402::-;16218:3;16239:85;16321:2;16316:3;16239:85;:::i;:::-;16232:92;;16333:93;16422:3;16333:93;:::i;:::-;16451:2;16446:3;16442:12;16435:19;;16058:402;;;:::o;16466:366::-;16608:3;16629:67;16693:2;16688:3;16629:67;:::i;:::-;16622:74;;16705:93;16794:3;16705:93;:::i;:::-;16823:2;16818:3;16814:12;16807:19;;16466:366;;;:::o;16838:365::-;16980:3;17001:66;17065:1;17060:3;17001:66;:::i;:::-;16994:73;;17076:93;17165:3;17076:93;:::i;:::-;17194:2;17189:3;17185:12;17178:19;;16838:365;;;:::o;17209:366::-;17351:3;17372:67;17436:2;17431:3;17372:67;:::i;:::-;17365:74;;17448:93;17537:3;17448:93;:::i;:::-;17566:2;17561:3;17557:12;17550:19;;17209:366;;;:::o;17581:::-;17723:3;17744:67;17808:2;17803:3;17744:67;:::i;:::-;17737:74;;17820:93;17909:3;17820:93;:::i;:::-;17938:2;17933:3;17929:12;17922:19;;17581:366;;;:::o;17953:::-;18095:3;18116:67;18180:2;18175:3;18116:67;:::i;:::-;18109:74;;18192:93;18281:3;18192:93;:::i;:::-;18310:2;18305:3;18301:12;18294:19;;17953:366;;;:::o;18325:::-;18467:3;18488:67;18552:2;18547:3;18488:67;:::i;:::-;18481:74;;18564:93;18653:3;18564:93;:::i;:::-;18682:2;18677:3;18673:12;18666:19;;18325:366;;;:::o;18697:::-;18839:3;18860:67;18924:2;18919:3;18860:67;:::i;:::-;18853:74;;18936:93;19025:3;18936:93;:::i;:::-;19054:2;19049:3;19045:12;19038:19;;18697:366;;;:::o;19069:::-;19211:3;19232:67;19296:2;19291:3;19232:67;:::i;:::-;19225:74;;19308:93;19397:3;19308:93;:::i;:::-;19426:2;19421:3;19417:12;19410:19;;19069:366;;;:::o;19441:400::-;19601:3;19622:84;19704:1;19699:3;19622:84;:::i;:::-;19615:91;;19715:93;19804:3;19715:93;:::i;:::-;19833:1;19828:3;19824:11;19817:18;;19441:400;;;:::o;19847:366::-;19989:3;20010:67;20074:2;20069:3;20010:67;:::i;:::-;20003:74;;20086:93;20175:3;20086:93;:::i;:::-;20204:2;20199:3;20195:12;20188:19;;19847:366;;;:::o;20219:::-;20361:3;20382:67;20446:2;20441:3;20382:67;:::i;:::-;20375:74;;20458:93;20547:3;20458:93;:::i;:::-;20576:2;20571:3;20567:12;20560:19;;20219:366;;;:::o;20591:::-;20733:3;20754:67;20818:2;20813:3;20754:67;:::i;:::-;20747:74;;20830:93;20919:3;20830:93;:::i;:::-;20948:2;20943:3;20939:12;20932:19;;20591:366;;;:::o;20963:::-;21105:3;21126:67;21190:2;21185:3;21126:67;:::i;:::-;21119:74;;21202:93;21291:3;21202:93;:::i;:::-;21320:2;21315:3;21311:12;21304:19;;20963:366;;;:::o;21335:398::-;21494:3;21515:83;21596:1;21591:3;21515:83;:::i;:::-;21508:90;;21607:93;21696:3;21607:93;:::i;:::-;21725:1;21720:3;21716:11;21709:18;;21335:398;;;:::o;21739:366::-;21881:3;21902:67;21966:2;21961:3;21902:67;:::i;:::-;21895:74;;21978:93;22067:3;21978:93;:::i;:::-;22096:2;22091:3;22087:12;22080:19;;21739:366;;;:::o;22111:::-;22253:3;22274:67;22338:2;22333:3;22274:67;:::i;:::-;22267:74;;22350:93;22439:3;22350:93;:::i;:::-;22468:2;22463:3;22459:12;22452:19;;22111:366;;;:::o;22483:118::-;22570:24;22588:5;22570:24;:::i;:::-;22565:3;22558:37;22483:118;;:::o;22607:695::-;22885:3;22907:92;22995:3;22986:6;22907:92;:::i;:::-;22900:99;;23016:95;23107:3;23098:6;23016:95;:::i;:::-;23009:102;;23128:148;23272:3;23128:148;:::i;:::-;23121:155;;23293:3;23286:10;;22607:695;;;;;:::o;23308:535::-;23538:3;23560:92;23648:3;23639:6;23560:92;:::i;:::-;23553:99;;23669:148;23813:3;23669:148;:::i;:::-;23662:155;;23834:3;23827:10;;23308:535;;;;:::o;23849:::-;24079:3;24101:92;24189:3;24180:6;24101:92;:::i;:::-;24094:99;;24210:148;24354:3;24210:148;:::i;:::-;24203:155;;24375:3;24368:10;;23849:535;;;;:::o;24390:379::-;24574:3;24596:147;24739:3;24596:147;:::i;:::-;24589:154;;24760:3;24753:10;;24390:379;;;:::o;24775:222::-;24868:4;24906:2;24895:9;24891:18;24883:26;;24919:71;24987:1;24976:9;24972:17;24963:6;24919:71;:::i;:::-;24775:222;;;;:::o;25003:640::-;25198:4;25236:3;25225:9;25221:19;25213:27;;25250:71;25318:1;25307:9;25303:17;25294:6;25250:71;:::i;:::-;25331:72;25399:2;25388:9;25384:18;25375:6;25331:72;:::i;:::-;25413;25481:2;25470:9;25466:18;25457:6;25413:72;:::i;:::-;25532:9;25526:4;25522:20;25517:2;25506:9;25502:18;25495:48;25560:76;25631:4;25622:6;25560:76;:::i;:::-;25552:84;;25003:640;;;;;;;:::o;25649:210::-;25736:4;25774:2;25763:9;25759:18;25751:26;;25787:65;25849:1;25838:9;25834:17;25825:6;25787:65;:::i;:::-;25649:210;;;;:::o;25865:218::-;25956:4;25994:2;25983:9;25979:18;25971:26;;26007:69;26073:1;26062:9;26058:17;26049:6;26007:69;:::i;:::-;25865:218;;;;:::o;26089:313::-;26202:4;26240:2;26229:9;26225:18;26217:26;;26289:9;26283:4;26279:20;26275:1;26264:9;26260:17;26253:47;26317:78;26390:4;26381:6;26317:78;:::i;:::-;26309:86;;26089:313;;;;:::o;26408:419::-;26574:4;26612:2;26601:9;26597:18;26589:26;;26661:9;26655:4;26651:20;26647:1;26636:9;26632:17;26625:47;26689:131;26815:4;26689:131;:::i;:::-;26681:139;;26408:419;;;:::o;26833:::-;26999:4;27037:2;27026:9;27022:18;27014:26;;27086:9;27080:4;27076:20;27072:1;27061:9;27057:17;27050:47;27114:131;27240:4;27114:131;:::i;:::-;27106:139;;26833:419;;;:::o;27258:::-;27424:4;27462:2;27451:9;27447:18;27439:26;;27511:9;27505:4;27501:20;27497:1;27486:9;27482:17;27475:47;27539:131;27665:4;27539:131;:::i;:::-;27531:139;;27258:419;;;:::o;27683:::-;27849:4;27887:2;27876:9;27872:18;27864:26;;27936:9;27930:4;27926:20;27922:1;27911:9;27907:17;27900:47;27964:131;28090:4;27964:131;:::i;:::-;27956:139;;27683:419;;;:::o;28108:::-;28274:4;28312:2;28301:9;28297:18;28289:26;;28361:9;28355:4;28351:20;28347:1;28336:9;28332:17;28325:47;28389:131;28515:4;28389:131;:::i;:::-;28381:139;;28108:419;;;:::o;28533:::-;28699:4;28737:2;28726:9;28722:18;28714:26;;28786:9;28780:4;28776:20;28772:1;28761:9;28757:17;28750:47;28814:131;28940:4;28814:131;:::i;:::-;28806:139;;28533:419;;;:::o;28958:::-;29124:4;29162:2;29151:9;29147:18;29139:26;;29211:9;29205:4;29201:20;29197:1;29186:9;29182:17;29175:47;29239:131;29365:4;29239:131;:::i;:::-;29231:139;;28958:419;;;:::o;29383:::-;29549:4;29587:2;29576:9;29572:18;29564:26;;29636:9;29630:4;29626:20;29622:1;29611:9;29607:17;29600:47;29664:131;29790:4;29664:131;:::i;:::-;29656:139;;29383:419;;;:::o;29808:::-;29974:4;30012:2;30001:9;29997:18;29989:26;;30061:9;30055:4;30051:20;30047:1;30036:9;30032:17;30025:47;30089:131;30215:4;30089:131;:::i;:::-;30081:139;;29808:419;;;:::o;30233:::-;30399:4;30437:2;30426:9;30422:18;30414:26;;30486:9;30480:4;30476:20;30472:1;30461:9;30457:17;30450:47;30514:131;30640:4;30514:131;:::i;:::-;30506:139;;30233:419;;;:::o;30658:::-;30824:4;30862:2;30851:9;30847:18;30839:26;;30911:9;30905:4;30901:20;30897:1;30886:9;30882:17;30875:47;30939:131;31065:4;30939:131;:::i;:::-;30931:139;;30658:419;;;:::o;31083:::-;31249:4;31287:2;31276:9;31272:18;31264:26;;31336:9;31330:4;31326:20;31322:1;31311:9;31307:17;31300:47;31364:131;31490:4;31364:131;:::i;:::-;31356:139;;31083:419;;;:::o;31508:::-;31674:4;31712:2;31701:9;31697:18;31689:26;;31761:9;31755:4;31751:20;31747:1;31736:9;31732:17;31725:47;31789:131;31915:4;31789:131;:::i;:::-;31781:139;;31508:419;;;:::o;31933:::-;32099:4;32137:2;32126:9;32122:18;32114:26;;32186:9;32180:4;32176:20;32172:1;32161:9;32157:17;32150:47;32214:131;32340:4;32214:131;:::i;:::-;32206:139;;31933:419;;;:::o;32358:::-;32524:4;32562:2;32551:9;32547:18;32539:26;;32611:9;32605:4;32601:20;32597:1;32586:9;32582:17;32575:47;32639:131;32765:4;32639:131;:::i;:::-;32631:139;;32358:419;;;:::o;32783:::-;32949:4;32987:2;32976:9;32972:18;32964:26;;33036:9;33030:4;33026:20;33022:1;33011:9;33007:17;33000:47;33064:131;33190:4;33064:131;:::i;:::-;33056:139;;32783:419;;;:::o;33208:::-;33374:4;33412:2;33401:9;33397:18;33389:26;;33461:9;33455:4;33451:20;33447:1;33436:9;33432:17;33425:47;33489:131;33615:4;33489:131;:::i;:::-;33481:139;;33208:419;;;:::o;33633:::-;33799:4;33837:2;33826:9;33822:18;33814:26;;33886:9;33880:4;33876:20;33872:1;33861:9;33857:17;33850:47;33914:131;34040:4;33914:131;:::i;:::-;33906:139;;33633:419;;;:::o;34058:::-;34224:4;34262:2;34251:9;34247:18;34239:26;;34311:9;34305:4;34301:20;34297:1;34286:9;34282:17;34275:47;34339:131;34465:4;34339:131;:::i;:::-;34331:139;;34058:419;;;:::o;34483:::-;34649:4;34687:2;34676:9;34672:18;34664:26;;34736:9;34730:4;34726:20;34722:1;34711:9;34707:17;34700:47;34764:131;34890:4;34764:131;:::i;:::-;34756:139;;34483:419;;;:::o;34908:::-;35074:4;35112:2;35101:9;35097:18;35089:26;;35161:9;35155:4;35151:20;35147:1;35136:9;35132:17;35125:47;35189:131;35315:4;35189:131;:::i;:::-;35181:139;;34908:419;;;:::o;35333:::-;35499:4;35537:2;35526:9;35522:18;35514:26;;35586:9;35580:4;35576:20;35572:1;35561:9;35557:17;35550:47;35614:131;35740:4;35614:131;:::i;:::-;35606:139;;35333:419;;;:::o;35758:::-;35924:4;35962:2;35951:9;35947:18;35939:26;;36011:9;36005:4;36001:20;35997:1;35986:9;35982:17;35975:47;36039:131;36165:4;36039:131;:::i;:::-;36031:139;;35758:419;;;:::o;36183:::-;36349:4;36387:2;36376:9;36372:18;36364:26;;36436:9;36430:4;36426:20;36422:1;36411:9;36407:17;36400:47;36464:131;36590:4;36464:131;:::i;:::-;36456:139;;36183:419;;;:::o;36608:::-;36774:4;36812:2;36801:9;36797:18;36789:26;;36861:9;36855:4;36851:20;36847:1;36836:9;36832:17;36825:47;36889:131;37015:4;36889:131;:::i;:::-;36881:139;;36608:419;;;:::o;37033:222::-;37126:4;37164:2;37153:9;37149:18;37141:26;;37177:71;37245:1;37234:9;37230:17;37221:6;37177:71;:::i;:::-;37033:222;;;;:::o;37261:129::-;37295:6;37322:20;;:::i;:::-;37312:30;;37351:33;37379:4;37371:6;37351:33;:::i;:::-;37261:129;;;:::o;37396:75::-;37429:6;37462:2;37456:9;37446:19;;37396:75;:::o;37477:307::-;37538:4;37628:18;37620:6;37617:30;37614:56;;;37650:18;;:::i;:::-;37614:56;37688:29;37710:6;37688:29;:::i;:::-;37680:37;;37772:4;37766;37762:15;37754:23;;37477:307;;;:::o;37790:308::-;37852:4;37942:18;37934:6;37931:30;37928:56;;;37964:18;;:::i;:::-;37928:56;38002:29;38024:6;38002:29;:::i;:::-;37994:37;;38086:4;38080;38076:15;38068:23;;37790:308;;;:::o;38104:141::-;38153:4;38176:3;38168:11;;38199:3;38196:1;38189:14;38233:4;38230:1;38220:18;38212:26;;38104:141;;;:::o;38251:98::-;38302:6;38336:5;38330:12;38320:22;;38251:98;;;:::o;38355:99::-;38407:6;38441:5;38435:12;38425:22;;38355:99;;;:::o;38460:168::-;38543:11;38577:6;38572:3;38565:19;38617:4;38612:3;38608:14;38593:29;;38460:168;;;;:::o;38634:147::-;38735:11;38772:3;38757:18;;38634:147;;;;:::o;38787:169::-;38871:11;38905:6;38900:3;38893:19;38945:4;38940:3;38936:14;38921:29;;38787:169;;;;:::o;38962:148::-;39064:11;39101:3;39086:18;;38962:148;;;;:::o;39116:305::-;39156:3;39175:20;39193:1;39175:20;:::i;:::-;39170:25;;39209:20;39227:1;39209:20;:::i;:::-;39204:25;;39363:1;39295:66;39291:74;39288:1;39285:81;39282:107;;;39369:18;;:::i;:::-;39282:107;39413:1;39410;39406:9;39399:16;;39116:305;;;;:::o;39427:185::-;39467:1;39484:20;39502:1;39484:20;:::i;:::-;39479:25;;39518:20;39536:1;39518:20;:::i;:::-;39513:25;;39557:1;39547:35;;39562:18;;:::i;:::-;39547:35;39604:1;39601;39597:9;39592:14;;39427:185;;;;:::o;39618:348::-;39658:7;39681:20;39699:1;39681:20;:::i;:::-;39676:25;;39715:20;39733:1;39715:20;:::i;:::-;39710:25;;39903:1;39835:66;39831:74;39828:1;39825:81;39820:1;39813:9;39806:17;39802:105;39799:131;;;39910:18;;:::i;:::-;39799:131;39958:1;39955;39951:9;39940:20;;39618:348;;;;:::o;39972:191::-;40012:4;40032:20;40050:1;40032:20;:::i;:::-;40027:25;;40066:20;40084:1;40066:20;:::i;:::-;40061:25;;40105:1;40102;40099:8;40096:34;;;40110:18;;:::i;:::-;40096:34;40155:1;40152;40148:9;40140:17;;39972:191;;;;:::o;40169:96::-;40206:7;40235:24;40253:5;40235:24;:::i;:::-;40224:35;;40169:96;;;:::o;40271:90::-;40305:7;40348:5;40341:13;40334:21;40323:32;;40271:90;;;:::o;40367:149::-;40403:7;40443:66;40436:5;40432:78;40421:89;;40367:149;;;:::o;40522:126::-;40559:7;40599:42;40592:5;40588:54;40577:65;;40522:126;;;:::o;40654:77::-;40691:7;40720:5;40709:16;;40654:77;;;:::o;40737:154::-;40821:6;40816:3;40811;40798:30;40883:1;40874:6;40869:3;40865:16;40858:27;40737:154;;;:::o;40897:307::-;40965:1;40975:113;40989:6;40986:1;40983:13;40975:113;;;41074:1;41069:3;41065:11;41059:18;41055:1;41050:3;41046:11;41039:39;41011:2;41008:1;41004:10;40999:15;;40975:113;;;41106:6;41103:1;41100:13;41097:101;;;41186:1;41177:6;41172:3;41168:16;41161:27;41097:101;40946:258;40897:307;;;:::o;41210:320::-;41254:6;41291:1;41285:4;41281:12;41271:22;;41338:1;41332:4;41328:12;41359:18;41349:81;;41415:4;41407:6;41403:17;41393:27;;41349:81;41477:2;41469:6;41466:14;41446:18;41443:38;41440:84;;;41496:18;;:::i;:::-;41440:84;41261:269;41210:320;;;:::o;41536:281::-;41619:27;41641:4;41619:27;:::i;:::-;41611:6;41607:40;41749:6;41737:10;41734:22;41713:18;41701:10;41698:34;41695:62;41692:88;;;41760:18;;:::i;:::-;41692:88;41800:10;41796:2;41789:22;41579:238;41536:281;;:::o;41823:233::-;41862:3;41885:24;41903:5;41885:24;:::i;:::-;41876:33;;41931:66;41924:5;41921:77;41918:103;;;42001:18;;:::i;:::-;41918:103;42048:1;42041:5;42037:13;42030:20;;41823:233;;;:::o;42062:176::-;42094:1;42111:20;42129:1;42111:20;:::i;:::-;42106:25;;42145:20;42163:1;42145:20;:::i;:::-;42140:25;;42184:1;42174:35;;42189:18;;:::i;:::-;42174:35;42230:1;42227;42223:9;42218:14;;42062:176;;;;:::o;42244:180::-;42292:77;42289:1;42282:88;42389:4;42386:1;42379:15;42413:4;42410:1;42403:15;42430:180;42478:77;42475:1;42468:88;42575:4;42572:1;42565:15;42599:4;42596:1;42589:15;42616:180;42664:77;42661:1;42654:88;42761:4;42758:1;42751:15;42785:4;42782:1;42775:15;42802:180;42850:77;42847:1;42840:88;42947:4;42944:1;42937:15;42971:4;42968:1;42961:15;42988:180;43036:77;43033:1;43026:88;43133:4;43130:1;43123:15;43157:4;43154:1;43147:15;43174:117;43283:1;43280;43273:12;43297:117;43406:1;43403;43396:12;43420:117;43529:1;43526;43519:12;43543:117;43652:1;43649;43642:12;43666:117;43775:1;43772;43765:12;43789:117;43898:1;43895;43888:12;43912:102;43953:6;44004:2;44000:7;43995:2;43988:5;43984:14;43980:28;43970:38;;43912:102;;;:::o;44020:182::-;44160:34;44156:1;44148:6;44144:14;44137:58;44020:182;:::o;44208:166::-;44348:18;44344:1;44336:6;44332:14;44325:42;44208:166;:::o;44380:163::-;44520:15;44516:1;44508:6;44504:14;44497:39;44380:163;:::o;44549:177::-;44689:29;44685:1;44677:6;44673:14;44666:53;44549:177;:::o;44732:178::-;44872:30;44868:1;44860:6;44856:14;44849:54;44732:178;:::o;44916:182::-;45056:34;45052:1;45044:6;45040:14;45033:58;44916:182;:::o;45104:180::-;45244:32;45240:1;45232:6;45228:14;45221:56;45104:180;:::o;45290:165::-;45430:17;45426:1;45418:6;45414:14;45407:41;45290:165;:::o;45461:160::-;45601:12;45597:1;45589:6;45585:14;45578:36;45461:160;:::o;45627:174::-;45767:26;45763:1;45755:6;45751:14;45744:50;45627:174;:::o;45807:182::-;45947:34;45943:1;45935:6;45931:14;45924:58;45807:182;:::o;45995:175::-;46135:27;46131:1;46123:6;46119:14;46112:51;45995:175;:::o;46176:162::-;46316:14;46312:1;46304:6;46300:14;46293:38;46176:162;:::o;46344:180::-;46484:32;46480:1;46472:6;46468:14;46461:56;46344:180;:::o;46530:158::-;46670:10;46666:1;46658:6;46654:14;46647:34;46530:158;:::o;46694:176::-;46834:28;46830:1;46822:6;46818:14;46811:52;46694:176;:::o;46876:164::-;47016:16;47012:1;47004:6;47000:14;46993:40;46876:164;:::o;47046:181::-;47186:33;47182:1;47174:6;47170:14;47163:57;47046:181;:::o;47233:::-;47373:33;47369:1;47361:6;47357:14;47350:57;47233:181;:::o;47420:182::-;47560:34;47556:1;47548:6;47544:14;47537:58;47420:182;:::o;47608:::-;47748:34;47744:1;47736:6;47732:14;47725:58;47608:182;:::o;47796:155::-;47936:7;47932:1;47924:6;47920:14;47913:31;47796:155;:::o;47957:164::-;48097:16;48093:1;48085:6;48081:14;48074:40;47957:164;:::o;48127:178::-;48267:30;48263:1;48255:6;48251:14;48244:54;48127:178;:::o;48311:182::-;48451:34;48447:1;48439:6;48435:14;48428:58;48311:182;:::o;48499:178::-;48639:30;48635:1;48627:6;48623:14;48616:54;48499:178;:::o;48683:114::-;;:::o;48803:179::-;48943:31;48939:1;48931:6;48927:14;48920:55;48803:179;:::o;48988:177::-;49128:29;49124:1;49116:6;49112:14;49105:53;48988:177;:::o;49171:122::-;49244:24;49262:5;49244:24;:::i;:::-;49237:5;49234:35;49224:63;;49283:1;49280;49273:12;49224:63;49171:122;:::o;49299:116::-;49369:21;49384:5;49369:21;:::i;:::-;49362:5;49359:32;49349:60;;49405:1;49402;49395:12;49349:60;49299:116;:::o;49421:120::-;49493:23;49510:5;49493:23;:::i;:::-;49486:5;49483:34;49473:62;;49531:1;49528;49521:12;49473:62;49421:120;:::o;49547:122::-;49620:24;49638:5;49620:24;:::i;:::-;49613:5;49610:35;49600:63;;49659:1;49656;49649:12;49600:63;49547:122;:::o

Swarm Source

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

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