ETH Price: $3,450.72 (-1.04%)

Token

AVIUS OBSCURIS NEW (AVONew)
 

Overview

Max Total Supply

989 AVONew

Holders

261

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
36 AVONew
0xB3dAB9F560e32DA2e91D2e114a16c727Fa24ABC1
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:
AVIUSNEW

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

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


pragma solidity ^0.8.0;

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

contract AVIUSNEW is IERC721, Ownable, Functional {

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

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

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

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

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

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

        _maxSupply = 5000; // 5000
    }

    //@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 == AVIUSNEW.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        (bool success, ) = nftOwnerAddress.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function airDrop(address _to, uint256 qty, uint256[] memory ids) external onlyOwner {
        require(!publicMintActive && !whiteListActive, "Mint is Active first deactivate it by owner");
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((_mintTracker[_to] + qty) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        require(qty == (ids.length)/2, "Please exclude 2x tokens to mintx new token");
        uint256 mintSeedValue = numberMinted;
        uint256 length = ids.length;
       
        for(uint i =0; i <length ; i++)
        {
            require(!excludedToken[ids[i]],"Anima Token must not be excluded ");
            excludedToken[ids[i]] = true;
            tokens.push(ids[i]);
            excludeCount ++;
        }
        _mintTracker[_to] = _mintTracker[_to] + qty;
       for(uint256 i = 1; i <= qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
       }
    }

    function excludeAnimaToken(uint256 _id1) public view returns(bool )
    {
        return (excludedToken[_id1]);
    }

    function getAll() public view returns (uint256[] memory)
    {
    uint256[] memory  ret = new uint256[](excludeCount);
    
    for (uint i = 0; i < excludeCount; i++) {
        ret[i] = tokens[i];
    }
    return ret;
    }
    
	function publicMint(uint256 qty) external payable reentryLock {
		require(publicMintActive, "Mint Not Active");
        require((_mintTracker[msg.sender] + qty) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        require(numberMinted + qty <= _maxSupply, "Max supply exceeded");
        require((msg.value >= 0) && (msg.value <= 100000000000000000), "Wrong Eth Amount");
    
        require(qty > 0, "Pease mint foronly 1 qunatity");
      
    	nftprice = msg.value;
		uint256 mintSeedValue = numberMinted;
		numberMinted += qty;
		_mintTracker[msg.sender] = _mintTracker[msg.sender] + qty;
		for(uint256 i = 1; i <= qty; i++) {
        	_safeMint(_msgSender(), mintSeedValue + qty);
        }
	}
    function whiteListMint(uint256 qty, uint256[] memory ids) external payable reentryLock {
		require(CC.balanceOf(_msgSender()) >= 2, "Must have Avius Token");
		require(whiteListActive, "Mint Not Active");
        
        require((_mintTracker[msg.sender] + qty) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        require(numberMinted + qty <= _maxSupply, "Max supply exceeded");
        require(msg.value >= 0, "Wrong Eth Amount");
        require(qty == (ids.length)/2, "Please exclude 2x tokens to mintx new token");
        for(uint i =0; i <ids.length ; i++)
        {
          require(!excludedToken[ids[i]],"Anima Token must not be excluded ");
           require(msg.sender == (CC).ownerOf(ids[i]),"Called does not hold these token IDs");
            }
        uint length = ids.length;
        
        for(uint i =0; i <length ; i++)
        {
           
            excludedToken[ids[i]] = true;
            tokens.push(ids[i]);
            excludeCount++;
        }

    	nftprice = msg.value;
		uint256 mintSeedValue = numberMinted;
		numberMinted += qty;
		_mintTracker[msg.sender] = _mintTracker[msg.sender] + qty;
		for(uint256 i = 1; i <= qty; i++) {
        	_safeMint(_msgSender(), mintSeedValue + i);
        }
	}
   
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID, uint256 tokenIDTwo) external {
        require(_msgSender() == (CC).ownerOf(tokenID), "Only token owner can call burn");
        require(_msgSender() == (CC).ownerOf(tokenIDTwo), "Only token owner can call burn");
        (CC).transferFrom(msg.sender, address(0x000000000000000000000000000000000000dEaD), tokenID);
        (CC).transferFrom(msg.sender, address(0x000000000000000000000000000000000000dEaD), tokenIDTwo);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
	function reveal() external onlyOwner {
		_revealed = true;
	}

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: bal qry for zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: own query nonexist tkn");
        return owner;
    }

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

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

        _approve(to, tokenId);
    }

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

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

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "txfr to non ERC721Reciever");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: op query nonexistent tkn");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ownerOf(tokenId) == from, "ERC721: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 address");
        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received() external pure returns(bytes4) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activatePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeWhiteListMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"uint256","name":"tokenIDTwo","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivatePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWhiteListMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id1","type":"uint256"}],"name":"excludeAnimaToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"excludeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excludedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAll","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":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMints","type":"uint256"}],"name":"setMaxMintThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"whiteListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff021916908315150217905550600a600c557389ac334a1c882217916cb90f2a45cba88ce35a52601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008557600080fd5b50620000a66200009a620001d860201b60201c565b620001e060201b60201c565b6040518060400160405280601381526020017f204156495553204f42534355524953204e45570000000000000000000000000081525060019080519060200190620000f3929190620002a4565b506040518060400160405280600681526020017f41564f4e657700000000000000000000000000000000000000000000000000008152506002908051906020019062000141929190620002a4565b5060405180606001604052806021815260200162005d0f602191396003908051906020019062000173929190620002a4565b50730eda3c383f13c36db1c96bd9c56f715b09b9e350601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611388600981905550620003b9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b29062000354565b90600052602060002090601f016020900481019282620002d6576000855562000322565b82601f10620002f157805160ff191683800117855562000322565b8280016001018555821562000322579182015b828111156200032157825182559160200191906001019062000304565b5b50905062000331919062000335565b5090565b5b808211156200035057600081600090555060010162000336565b5090565b600060028204905060018216806200036d57607f821691505b602082108114156200038457620003836200038a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61594680620003c96000396000f3fe6080604052600436106102815760003560e01c80636352211e1161014f578063b390c0ab116100c1578063d3bd8f921161007a578063d3bd8f9214610916578063d78c06fa1461092d578063e8a3d48514610956578063e985e9c514610981578063f2fde38b146109be578063f8b2cb4f146109e757610288565b8063b390c0ab1461081c578063b62a762514610845578063b67c25a31461085c578063b88d4fde14610887578063be23b508146108b0578063c87b56dd146108d957610288565b80637dad95e9116101135780637dad95e9146107445780638da5cb5b1461075b57806395d89b4114610786578063a22cb465146107b1578063a475b5dd146107da578063a8fcc417146107f157610288565b80636352211e146106715780636fe3edef146106ae57806370a08231146106d9578063715018a614610716578063765577431461072d57610288565b80633cb51994116101f3578063470945e2116101ac578063470945e21461056e57806349a772b51461058a5780634f64b2be146105b557806350a2354e146105f257806353ed51431461061d57806355f804b31461064857610288565b80633cb51994146104725780633ccfd60b1461049d5780633f9a7109146104b4578063404c7cdd146104f157806342842e0e1461051a578063453c23101461054357610288565b806318160ddd1161024557806318160ddd1461036f5780631dfea9ff1461039a57806322f4596f146103d757806323b872dd146104025780632db115441461042b5780632e4355cd1461044757610288565b806301ffc9a71461028a57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f578063120ef1d71461035857610288565b3661028857005b005b34801561029657600080fd5b506102b160048036038101906102ac91906140c7565b610a24565b6040516102be9190614a0d565b60405180910390f35b3480156102d357600080fd5b506102dc610bad565b6040516102e99190614a43565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061415a565b610c3f565b604051610326919061494d565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190614024565b610cc4565b005b34801561036457600080fd5b5061036d610dce565b005b34801561037b57600080fd5b50610384610e67565b6040516103919190614e25565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061415a565b610e71565b6040516103ce9190614a0d565b60405180910390f35b3480156103e357600080fd5b506103ec610e9b565b6040516103f99190614e25565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190613f1e565b610ea1565b005b6104456004803603810190610440919061415a565b610efa565b005b34801561045357600080fd5b5061045c611241565b6040516104699190614a0d565b60405180910390f35b34801561047e57600080fd5b50610487611254565b6040516104949190614e25565b60405180910390f35b3480156104a957600080fd5b506104b261125a565b005b3480156104c057600080fd5b506104db60048036038101906104d6919061415a565b6113ad565b6040516104e89190614a0d565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061415a565b6113cd565b005b34801561052657600080fd5b50610541600480360381019061053c9190613f1e565b611453565b005b34801561054f57600080fd5b50610558611473565b6040516105659190614e25565b60405180910390f35b610588600480360381019061058391906141ac565b611479565b005b34801561059657600080fd5b5061059f611bda565b6040516105ac9190614e25565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d7919061415a565b611be0565b6040516105e99190614e25565b60405180910390f35b3480156105fe57600080fd5b50610607611c04565b6040516106149190614e25565b60405180910390f35b34801561062957600080fd5b50610632611c0a565b60405161063f91906149eb565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190614119565b611d33565b005b34801561067d57600080fd5b506106986004803603810190610693919061415a565b611dc9565b6040516106a5919061494d565b60405180910390f35b3480156106ba57600080fd5b506106c3611e7b565b6040516106d09190614e25565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190613e90565b611e81565b60405161070d9190614e25565b60405180910390f35b34801561072257600080fd5b5061072b611f39565b005b34801561073957600080fd5b50610742611fc1565b005b34801561075057600080fd5b5061075961205a565b005b34801561076757600080fd5b506107706120f3565b60405161077d919061494d565b60405180910390f35b34801561079257600080fd5b5061079b61211c565b6040516107a89190614a43565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190613fe8565b6121ae565b005b3480156107e657600080fd5b506107ef61231a565b005b3480156107fd57600080fd5b506108066123b3565b6040516108139190614a28565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190614200565b6123c2565b005b34801561085157600080fd5b5061085a61272a565b005b34801561086857600080fd5b506108716127c3565b60405161087e9190614a0d565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613f6d565b6127d6565b005b3480156108bc57600080fd5b506108d760048036038101906108d29190614060565b612831565b005b3480156108e557600080fd5b5061090060048036038101906108fb919061415a565b612ce3565b60405161090d9190614a43565b60405180910390f35b34801561092257600080fd5b5061092b612da3565b005b34801561093957600080fd5b50610954600480360381019061094f919061415a565b612e3c565b005b34801561096257600080fd5b5061096b612ec2565b6040516109789190614a43565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613ee2565b612eea565b6040516109b59190614a0d565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190613e90565b612f7e565b005b3480156109f357600080fd5b50610a0e6004803603810190610a099190613e90565b613076565b604051610a1b9190614e25565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aef57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ba6575063a8fcc41760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610bbc90615100565b80601f0160208091040260200160405190810160405280929190818152602001828054610be890615100565b8015610c355780601f10610c0a57610100808354040283529160200191610c35565b820191906000526020600020905b815481529060010190602001808311610c1857829003601f168201915b5050505050905090565b6000610c4a826130d1565b610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090614b45565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ccf82611dc9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790614b65565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d805750610d7f8133612eea565b5b610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690614c65565b60405180910390fd5b610dc9838361313d565b505050565b610dd66131f6565b73ffffffffffffffffffffffffffffffffffffffff16610df46120f3565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190614d05565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6000600a54905090565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b610eab33826131fe565b610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee190614d45565b60405180910390fd5b610ef58383836132dc565b505050565b600060149054906101000a900460ff1615610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190614c85565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff16610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614a65565b60405180910390fd5b600c5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110029190614f8f565b1115611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90614d85565b60405180910390fd5b60095481600a546110549190614f8f565b1115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c90614ac5565b60405180910390fd5b600034101580156110ae575067016345785d8a00003411155b6110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490614ae5565b60405180910390fd5b60008111611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790614de5565b60405180910390fd5b34600e819055506000600a54905081600a60008282546111509190614f8f565b9250508190555081601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111a29190614f8f565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b8281116112225761120f6111fe6131f6565b848461120a9190614f8f565b613538565b808061121a90615163565b9150506111ec565b505060008060146101000a81548160ff02191690831515021790555050565b600860019054906101000a900460ff1681565b600b5481565b6112626131f6565b73ffffffffffffffffffffffffffffffffffffffff166112806120f3565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90614d05565b60405180910390fd5b60004790506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161132390614938565b60006040518083038185875af1925050503d8060008114611360576040519150601f19603f3d011682016040523d82523d6000602084013e611365565b606091505b50509050806113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090614ba5565b60405180910390fd5b5050565b60126020528060005260406000206000915054906101000a900460ff1681565b6113d56131f6565b73ffffffffffffffffffffffffffffffffffffffff166113f36120f3565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614d05565b60405180910390fd5b8060098190555050565b61146e838383604051806020016040528060008152506127d6565b505050565b600c5481565b600060149054906101000a900460ff16156114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614c85565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506002601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161152c6131f6565b6040518263ffffffff1660e01b8152600401611548919061494d565b60206040518083038186803b15801561156057600080fd5b505afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190614183565b10156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614b85565b60405180910390fd5b600860019054906101000a900460ff16611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614a65565b60405180910390fd5b600c5482601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116769190614f8f565b11156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae90614d85565b60405180910390fd5b60095482600a546116c89190614f8f565b1115611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614ac5565b60405180910390fd5b600034101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614ae5565b60405180910390fd5b6002815161175b9190614fe5565b821461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614a85565b60405180910390fd5b60005b81518110156119b457601260008383815181106117e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614c05565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8383815181106118c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016118e49190614e25565b60206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119349190613eb9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890614d65565b60405180910390fd5b80806119ac90615163565b91505061179f565b5060008151905060005b81811015611ac657600160126000858481518110611a05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506010838281518110611a6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190915055600f6000815480929190611aae90615163565b91905055508080611abe90615163565b9150506119be565b5034600e819055506000600a54905083600a6000828254611ae79190614f8f565b9250508190555083601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b399190614f8f565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b848111611bb957611ba6611b956131f6565b8284611ba19190614f8f565b613538565b8080611bb190615163565b915050611b83565b50505060008060146101000a81548160ff0219169083151502179055505050565b600a5481565b60108181548110611bf057600080fd5b906000526020600020016000915090505481565b600f5481565b60606000600f5467ffffffffffffffff811115611c50577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c7e5781602001602082028036833780820191505090505b50905060005b600f54811015611d2b5760108181548110611cc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154828281518110611d0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611d2390615163565b915050611c84565b508091505090565b611d3b6131f6565b73ffffffffffffffffffffffffffffffffffffffff16611d596120f3565b73ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690614d05565b60405180910390fd5b8060039080519060200190611dc5929190613bf4565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614c25565b60405180910390fd5b80915050919050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614cc5565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f416131f6565b73ffffffffffffffffffffffffffffffffffffffff16611f5f6120f3565b73ffffffffffffffffffffffffffffffffffffffff1614611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90614d05565b60405180910390fd5b611fbf6000613556565b565b611fc96131f6565b73ffffffffffffffffffffffffffffffffffffffff16611fe76120f3565b73ffffffffffffffffffffffffffffffffffffffff161461203d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203490614d05565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6120626131f6565b73ffffffffffffffffffffffffffffffffffffffff166120806120f3565b73ffffffffffffffffffffffffffffffffffffffff16146120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd90614d05565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461212b90615100565b80601f016020809104026020016040519081016040528092919081815260200182805461215790615100565b80156121a45780601f10612179576101008083540402835291602001916121a4565b820191906000526020600020905b81548152906001019060200180831161218757829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490614be5565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161230e9190614a0d565b60405180910390a35050565b6123226131f6565b73ffffffffffffffffffffffffffffffffffffffff166123406120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614d05565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600063a8fcc41760e01b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161241d9190614e25565b60206040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246d9190613eb9565b73ffffffffffffffffffffffffffffffffffffffff1661248b6131f6565b73ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614d25565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b815260040161253c9190614e25565b60206040518083038186803b15801561255457600080fd5b505afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190613eb9565b73ffffffffffffffffffffffffffffffffffffffff166125aa6131f6565b73ffffffffffffffffffffffffffffffffffffffff1614612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614d25565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead856040518463ffffffff1660e01b815260040161266193929190614968565b600060405180830381600087803b15801561267b57600080fd5b505af115801561268f573d6000803e3d6000fd5b50505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead846040518463ffffffff1660e01b81526004016126f493929190614968565b600060405180830381600087803b15801561270e57600080fd5b505af1158015612722573d6000803e3d6000fd5b505050505050565b6127326131f6565b73ffffffffffffffffffffffffffffffffffffffff166127506120f3565b73ffffffffffffffffffffffffffffffffffffffff16146127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90614d05565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b600860009054906101000a900460ff1681565b6127e033836131fe565b61281f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281690614d45565b60405180910390fd5b61282b8484848461361a565b50505050565b6128396131f6565b73ffffffffffffffffffffffffffffffffffffffff166128576120f3565b73ffffffffffffffffffffffffffffffffffffffff16146128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490614d05565b60405180910390fd5b600860009054906101000a900460ff161580156128d75750600860019054906101000a900460ff16155b612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d90614dc5565b60405180910390fd5b600a5482600a546129279190614f8f565b11612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614e05565b60405180910390fd5b600c5482601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b59190614f8f565b11156129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed90614d85565b60405180910390fd5b60028151612a049190614fe5565b8214612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614a85565b60405180910390fd5b6000600a54905060008251905060005b81811015612bfe5760126000858381518110612a9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615612afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af590614c05565b60405180910390fd5b600160126000868481518110612b3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506010848281518110612ba5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190915055600f6000815480929190612be690615163565b91905055508080612bf690615163565b915050612a55565b5083601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c4a9190614f8f565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b848111612cdb57612cb0868285612cab9190614f8f565b613538565b600a6000815480929190612cc390615163565b91905055508080612cd390615163565b915050612c94565b505050505050565b6060612cee826130d1565b612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2490614da5565b60405180910390fd5b6060600d60009054906101000a900460ff1615612d76576003612d4f84613676565b604051602001612d609291906148c5565b6040516020818303038152906040529050612d9a565b6003604051602001612d889190614916565b60405160208183030381529060405290505b80915050919050565b612dab6131f6565b73ffffffffffffffffffffffffffffffffffffffff16612dc96120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1690614d05565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b612e446131f6565b73ffffffffffffffffffffffffffffffffffffffff16612e626120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614d05565b60405180910390fd5b80600c8190555050565b60606003604051602001612ed691906148f4565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f866131f6565b73ffffffffffffffffffffffffffffffffffffffff16612fa46120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff190614d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614bc5565b60405180910390fd5b61307381613556565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130ca9190614fe5565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166131b083611dc9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600033905090565b6000613209826130d1565b613248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323f90614aa5565b60405180910390fd5b600061325383611dc9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132c257508373ffffffffffffffffffffffffffffffffffffffff166132aa84610c3f565b73ffffffffffffffffffffffffffffffffffffffff16145b806132d357506132d28185612eea565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166132fc82611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614613352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334990614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b990614b05565b60405180910390fd5b6133cd838383613823565b6133d860008261313d565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134289190615016565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461347f9190614f8f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b613552828260405180602001604052806000815250613828565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6136258484846132dc565b61363184848484613883565b613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790614c45565b60405180910390fd5b50505050565b606060008214156136be576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061381e565b600082905060005b600082146136f05780806136d990615163565b915050600a826136e99190614fe5565b91506136c6565b60008167ffffffffffffffff811115613732577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156137645781602001600182028036833780820191505090505b5090505b600085146138175760018261377d9190615016565b9150600a8561378c91906151ac565b60306137989190614f8f565b60f81b8183815181106137d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856138109190614fe5565b9450613768565b8093505050505b919050565b505050565b6138328383613a13565b61383f6000848484613883565b61387e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387590614c45565b60405180910390fd5b505050565b60006138a48473ffffffffffffffffffffffffffffffffffffffff16613be1565b15613a06578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016138e8949392919061499f565b602060405180830381600087803b15801561390257600080fd5b505af192505050801561393357506040513d601f19601f8201168201806040525081019061393091906140f0565b60015b6139b6573d8060008114613963576040519150601f19603f3d011682016040523d82523d6000602084013e613968565b606091505b506000815114156139ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a590614c45565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a0b565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7a90614ca5565b60405180910390fd5b613a8c816130d1565b15613acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac390614b25565b60405180910390fd5b613ad860008383613823565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b289190614f8f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613c0090615100565b90600052602060002090601f016020900481019282613c225760008555613c69565b82601f10613c3b57805160ff1916838001178555613c69565b82800160010185558215613c69579182015b82811115613c68578251825591602001919060010190613c4d565b5b509050613c769190613c7a565b5090565b5b80821115613c93576000816000905550600101613c7b565b5090565b6000613caa613ca584614e65565b614e40565b90508083825260208201905082856020860282011115613cc957600080fd5b60005b85811015613cf95781613cdf8882613e66565b845260208401935060208301925050600181019050613ccc565b5050509392505050565b6000613d16613d1184614e91565b614e40565b905082815260208101848484011115613d2e57600080fd5b613d398482856150be565b509392505050565b6000613d54613d4f84614ec2565b614e40565b905082815260208101848484011115613d6c57600080fd5b613d778482856150be565b509392505050565b600081359050613d8e816158b4565b92915050565b600081519050613da3816158b4565b92915050565b600082601f830112613dba57600080fd5b8135613dca848260208601613c97565b91505092915050565b600081359050613de2816158cb565b92915050565b600081359050613df7816158e2565b92915050565b600081519050613e0c816158e2565b92915050565b600082601f830112613e2357600080fd5b8135613e33848260208601613d03565b91505092915050565b600082601f830112613e4d57600080fd5b8135613e5d848260208601613d41565b91505092915050565b600081359050613e75816158f9565b92915050565b600081519050613e8a816158f9565b92915050565b600060208284031215613ea257600080fd5b6000613eb084828501613d7f565b91505092915050565b600060208284031215613ecb57600080fd5b6000613ed984828501613d94565b91505092915050565b60008060408385031215613ef557600080fd5b6000613f0385828601613d7f565b9250506020613f1485828601613d7f565b9150509250929050565b600080600060608486031215613f3357600080fd5b6000613f4186828701613d7f565b9350506020613f5286828701613d7f565b9250506040613f6386828701613e66565b9150509250925092565b60008060008060808587031215613f8357600080fd5b6000613f9187828801613d7f565b9450506020613fa287828801613d7f565b9350506040613fb387828801613e66565b925050606085013567ffffffffffffffff811115613fd057600080fd5b613fdc87828801613e12565b91505092959194509250565b60008060408385031215613ffb57600080fd5b600061400985828601613d7f565b925050602061401a85828601613dd3565b9150509250929050565b6000806040838503121561403757600080fd5b600061404585828601613d7f565b925050602061405685828601613e66565b9150509250929050565b60008060006060848603121561407557600080fd5b600061408386828701613d7f565b935050602061409486828701613e66565b925050604084013567ffffffffffffffff8111156140b157600080fd5b6140bd86828701613da9565b9150509250925092565b6000602082840312156140d957600080fd5b60006140e784828501613de8565b91505092915050565b60006020828403121561410257600080fd5b600061411084828501613dfd565b91505092915050565b60006020828403121561412b57600080fd5b600082013567ffffffffffffffff81111561414557600080fd5b61415184828501613e3c565b91505092915050565b60006020828403121561416c57600080fd5b600061417a84828501613e66565b91505092915050565b60006020828403121561419557600080fd5b60006141a384828501613e7b565b91505092915050565b600080604083850312156141bf57600080fd5b60006141cd85828601613e66565b925050602083013567ffffffffffffffff8111156141ea57600080fd5b6141f685828601613da9565b9150509250929050565b6000806040838503121561421357600080fd5b600061422185828601613e66565b925050602061423285828601613e66565b9150509250929050565b600061424883836148a7565b60208301905092915050565b61425d8161504a565b82525050565b600061426e82614f18565b6142788185614f46565b935061428383614ef3565b8060005b838110156142b457815161429b888261423c565b97506142a683614f39565b925050600181019050614287565b5085935050505092915050565b6142ca8161505c565b82525050565b6142d981615068565b82525050565b60006142ea82614f23565b6142f48185614f57565b93506143048185602086016150cd565b61430d81615299565b840191505092915050565b600061432382614f2e565b61432d8185614f73565b935061433d8185602086016150cd565b61434681615299565b840191505092915050565b600061435c82614f2e565b6143668185614f84565b93506143768185602086016150cd565b80840191505092915050565b6000815461438f81615100565b6143998186614f84565b945060018216600081146143b457600181146143c5576143f8565b60ff198316865281860193506143f8565b6143ce85614f03565b60005b838110156143f0578154818901526001820191506020810190506143d1565b838801955050505b50505092915050565b600061440e600f83614f73565b9150614419826152aa565b602082019050919050565b6000614431602b83614f73565b915061443c826152d3565b604082019050919050565b6000614454602083614f73565b915061445f82615322565b602082019050919050565b6000614477601383614f73565b91506144828261534b565b602082019050919050565b600061449a601083614f73565b91506144a582615374565b602082019050919050565b60006144bd600d83614f84565b91506144c88261539d565b600d82019050919050565b60006144e0601b83614f73565b91506144eb826153c6565b602082019050919050565b6000614503601c83614f73565b915061450e826153ef565b602082019050919050565b6000614526602083614f73565b915061453182615418565b602082019050919050565b6000614549601e83614f73565b915061455482615441565b602082019050919050565b600061456c601583614f73565b91506145778261546a565b602082019050919050565b600061458f601883614f73565b915061459a82615493565b602082019050919050565b60006145b2602083614f73565b91506145bd826154bc565b602082019050919050565b60006145d5601983614f73565b91506145e0826154e5565b602082019050919050565b60006145f8602183614f73565b91506146038261550e565b604082019050919050565b600061461b600c83614f84565b91506146268261555d565b600c82019050919050565b600061463e601e83614f73565b915061464982615586565b602082019050919050565b6000614661601a83614f73565b915061466c826155af565b602082019050919050565b6000614684601f83614f73565b915061468f826155d8565b602082019050919050565b60006146a7601f83614f73565b91506146b282615601565b602082019050919050565b60006146ca602083614f73565b91506146d58261562a565b602082019050919050565b60006146ed602083614f73565b91506146f882615653565b602082019050919050565b6000614710600583614f84565b915061471b8261567c565b600582019050919050565b6000614733601c83614f73565b915061473e826156a5565b602082019050919050565b6000614756602083614f73565b9150614761826156ce565b602082019050919050565b6000614779601e83614f73565b9150614784826156f7565b602082019050919050565b600061479c601c83614f73565b91506147a782615720565b602082019050919050565b60006147bf602483614f73565b91506147ca82615749565b604082019050919050565b60006147e2602183614f73565b91506147ed82615798565b604082019050919050565b6000614805600083614f68565b9150614810826157e7565b600082019050919050565b6000614828601d83614f73565b9150614833826157ea565b602082019050919050565b600061484b602b83614f73565b915061485682615813565b604082019050919050565b600061486e601d83614f73565b915061487982615862565b602082019050919050565b6000614891601383614f73565b915061489c8261588b565b602082019050919050565b6148b0816150b4565b82525050565b6148bf816150b4565b82525050565b60006148d18285614382565b91506148dd8284614351565b91506148e882614703565b91508190509392505050565b60006149008284614382565b915061490b826144b0565b915081905092915050565b60006149228284614382565b915061492d8261460e565b915081905092915050565b6000614943826147f8565b9150819050919050565b60006020820190506149626000830184614254565b92915050565b600060608201905061497d6000830186614254565b61498a6020830185614254565b61499760408301846148b6565b949350505050565b60006080820190506149b46000830187614254565b6149c16020830186614254565b6149ce60408301856148b6565b81810360608301526149e081846142df565b905095945050505050565b60006020820190508181036000830152614a058184614263565b905092915050565b6000602082019050614a2260008301846142c1565b92915050565b6000602082019050614a3d60008301846142d0565b92915050565b60006020820190508181036000830152614a5d8184614318565b905092915050565b60006020820190508181036000830152614a7e81614401565b9050919050565b60006020820190508181036000830152614a9e81614424565b9050919050565b60006020820190508181036000830152614abe81614447565b9050919050565b60006020820190508181036000830152614ade8161446a565b9050919050565b60006020820190508181036000830152614afe8161448d565b9050919050565b60006020820190508181036000830152614b1e816144d3565b9050919050565b60006020820190508181036000830152614b3e816144f6565b9050919050565b60006020820190508181036000830152614b5e81614519565b9050919050565b60006020820190508181036000830152614b7e8161453c565b9050919050565b60006020820190508181036000830152614b9e8161455f565b9050919050565b60006020820190508181036000830152614bbe81614582565b9050919050565b60006020820190508181036000830152614bde816145a5565b9050919050565b60006020820190508181036000830152614bfe816145c8565b9050919050565b60006020820190508181036000830152614c1e816145eb565b9050919050565b60006020820190508181036000830152614c3e81614631565b9050919050565b60006020820190508181036000830152614c5e81614654565b9050919050565b60006020820190508181036000830152614c7e81614677565b9050919050565b60006020820190508181036000830152614c9e8161469a565b9050919050565b60006020820190508181036000830152614cbe816146bd565b9050919050565b60006020820190508181036000830152614cde816146e0565b9050919050565b60006020820190508181036000830152614cfe81614726565b9050919050565b60006020820190508181036000830152614d1e81614749565b9050919050565b60006020820190508181036000830152614d3e8161476c565b9050919050565b60006020820190508181036000830152614d5e8161478f565b9050919050565b60006020820190508181036000830152614d7e816147b2565b9050919050565b60006020820190508181036000830152614d9e816147d5565b9050919050565b60006020820190508181036000830152614dbe8161481b565b9050919050565b60006020820190508181036000830152614dde8161483e565b9050919050565b60006020820190508181036000830152614dfe81614861565b9050919050565b60006020820190508181036000830152614e1e81614884565b9050919050565b6000602082019050614e3a60008301846148b6565b92915050565b6000614e4a614e5b565b9050614e568282615132565b919050565b6000604051905090565b600067ffffffffffffffff821115614e8057614e7f61526a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614eac57614eab61526a565b5b614eb582615299565b9050602081019050919050565b600067ffffffffffffffff821115614edd57614edc61526a565b5b614ee682615299565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f9a826150b4565b9150614fa5836150b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fda57614fd96151dd565b5b828201905092915050565b6000614ff0826150b4565b9150614ffb836150b4565b92508261500b5761500a61520c565b5b828204905092915050565b6000615021826150b4565b915061502c836150b4565b92508282101561503f5761503e6151dd565b5b828203905092915050565b600061505582615094565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150eb5780820151818401526020810190506150d0565b838111156150fa576000848401525b50505050565b6000600282049050600182168061511857607f821691505b6020821081141561512c5761512b61523b565b5b50919050565b61513b82615299565b810181811067ffffffffffffffff8211171561515a5761515961526a565b5b80604052505050565b600061516e826150b4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151a1576151a06151dd565b5b600182019050919050565b60006151b7826150b4565b91506151c2836150b4565b9250826151d2576151d161520c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d696e74204e6f74204163746976650000000000000000000000000000000000600082015250565b7f506c65617365206578636c75646520327820746f6b656e7320746f206d696e7460008201527f78206e657720746f6b656e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f4d757374206861766520417669757320546f6b656e0000000000000000000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416e696d6120546f6b656e206d757374206e6f74206265206578636c7564656460008201527f2000000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4f6e6c7920746f6b656e206f776e65722063616e2063616c6c206275726e0000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f43616c6c656420646f6573206e6f7420686f6c6420746865736520746f6b656e60008201527f2049447300000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d696e742069732041637469766520666972737420646561637469766174652060008201527f6974206279206f776e6572000000000000000000000000000000000000000000602082015250565b7f5065617365206d696e7420666f726f6e6c7920312071756e6174697479000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6158bd8161504a565b81146158c857600080fd5b50565b6158d48161505c565b81146158df57600080fd5b50565b6158eb81615068565b81146158f657600080fd5b50565b615902816150b4565b811461590d57600080fd5b5056fea2646970667358221220ff1daeaca030b3337293bfa50913761982ad1f79ea9347626c72e10189283aa364736f6c6343000801003368747470733a2f2f6176697573616e696d61652e78797a2f6d657461646174612f

Deployed Bytecode

0x6080604052600436106102815760003560e01c80636352211e1161014f578063b390c0ab116100c1578063d3bd8f921161007a578063d3bd8f9214610916578063d78c06fa1461092d578063e8a3d48514610956578063e985e9c514610981578063f2fde38b146109be578063f8b2cb4f146109e757610288565b8063b390c0ab1461081c578063b62a762514610845578063b67c25a31461085c578063b88d4fde14610887578063be23b508146108b0578063c87b56dd146108d957610288565b80637dad95e9116101135780637dad95e9146107445780638da5cb5b1461075b57806395d89b4114610786578063a22cb465146107b1578063a475b5dd146107da578063a8fcc417146107f157610288565b80636352211e146106715780636fe3edef146106ae57806370a08231146106d9578063715018a614610716578063765577431461072d57610288565b80633cb51994116101f3578063470945e2116101ac578063470945e21461056e57806349a772b51461058a5780634f64b2be146105b557806350a2354e146105f257806353ed51431461061d57806355f804b31461064857610288565b80633cb51994146104725780633ccfd60b1461049d5780633f9a7109146104b4578063404c7cdd146104f157806342842e0e1461051a578063453c23101461054357610288565b806318160ddd1161024557806318160ddd1461036f5780631dfea9ff1461039a57806322f4596f146103d757806323b872dd146104025780632db115441461042b5780632e4355cd1461044757610288565b806301ffc9a71461028a57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f578063120ef1d71461035857610288565b3661028857005b005b34801561029657600080fd5b506102b160048036038101906102ac91906140c7565b610a24565b6040516102be9190614a0d565b60405180910390f35b3480156102d357600080fd5b506102dc610bad565b6040516102e99190614a43565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061415a565b610c3f565b604051610326919061494d565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190614024565b610cc4565b005b34801561036457600080fd5b5061036d610dce565b005b34801561037b57600080fd5b50610384610e67565b6040516103919190614e25565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc919061415a565b610e71565b6040516103ce9190614a0d565b60405180910390f35b3480156103e357600080fd5b506103ec610e9b565b6040516103f99190614e25565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190613f1e565b610ea1565b005b6104456004803603810190610440919061415a565b610efa565b005b34801561045357600080fd5b5061045c611241565b6040516104699190614a0d565b60405180910390f35b34801561047e57600080fd5b50610487611254565b6040516104949190614e25565b60405180910390f35b3480156104a957600080fd5b506104b261125a565b005b3480156104c057600080fd5b506104db60048036038101906104d6919061415a565b6113ad565b6040516104e89190614a0d565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061415a565b6113cd565b005b34801561052657600080fd5b50610541600480360381019061053c9190613f1e565b611453565b005b34801561054f57600080fd5b50610558611473565b6040516105659190614e25565b60405180910390f35b610588600480360381019061058391906141ac565b611479565b005b34801561059657600080fd5b5061059f611bda565b6040516105ac9190614e25565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d7919061415a565b611be0565b6040516105e99190614e25565b60405180910390f35b3480156105fe57600080fd5b50610607611c04565b6040516106149190614e25565b60405180910390f35b34801561062957600080fd5b50610632611c0a565b60405161063f91906149eb565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190614119565b611d33565b005b34801561067d57600080fd5b506106986004803603810190610693919061415a565b611dc9565b6040516106a5919061494d565b60405180910390f35b3480156106ba57600080fd5b506106c3611e7b565b6040516106d09190614e25565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190613e90565b611e81565b60405161070d9190614e25565b60405180910390f35b34801561072257600080fd5b5061072b611f39565b005b34801561073957600080fd5b50610742611fc1565b005b34801561075057600080fd5b5061075961205a565b005b34801561076757600080fd5b506107706120f3565b60405161077d919061494d565b60405180910390f35b34801561079257600080fd5b5061079b61211c565b6040516107a89190614a43565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190613fe8565b6121ae565b005b3480156107e657600080fd5b506107ef61231a565b005b3480156107fd57600080fd5b506108066123b3565b6040516108139190614a28565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190614200565b6123c2565b005b34801561085157600080fd5b5061085a61272a565b005b34801561086857600080fd5b506108716127c3565b60405161087e9190614a0d565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613f6d565b6127d6565b005b3480156108bc57600080fd5b506108d760048036038101906108d29190614060565b612831565b005b3480156108e557600080fd5b5061090060048036038101906108fb919061415a565b612ce3565b60405161090d9190614a43565b60405180910390f35b34801561092257600080fd5b5061092b612da3565b005b34801561093957600080fd5b50610954600480360381019061094f919061415a565b612e3c565b005b34801561096257600080fd5b5061096b612ec2565b6040516109789190614a43565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613ee2565b612eea565b6040516109b59190614a0d565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190613e90565b612f7e565b005b3480156109f357600080fd5b50610a0e6004803603810190610a099190613e90565b613076565b604051610a1b9190614e25565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aef57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5757507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ba6575063a8fcc41760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060018054610bbc90615100565b80601f0160208091040260200160405190810160405280929190818152602001828054610be890615100565b8015610c355780601f10610c0a57610100808354040283529160200191610c35565b820191906000526020600020905b815481529060010190602001808311610c1857829003601f168201915b5050505050905090565b6000610c4a826130d1565b610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090614b45565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ccf82611dc9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790614b65565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d805750610d7f8133612eea565b5b610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690614c65565b60405180910390fd5b610dc9838361313d565b505050565b610dd66131f6565b73ffffffffffffffffffffffffffffffffffffffff16610df46120f3565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190614d05565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6000600a54905090565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b60095481565b610eab33826131fe565b610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee190614d45565b60405180910390fd5b610ef58383836132dc565b505050565b600060149054906101000a900460ff1615610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190614c85565b60405180910390fd5b6001600060146101000a81548160ff021916908315150217905550600860009054906101000a900460ff16610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614a65565b60405180910390fd5b600c5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110029190614f8f565b1115611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90614d85565b60405180910390fd5b60095481600a546110549190614f8f565b1115611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108c90614ac5565b60405180910390fd5b600034101580156110ae575067016345785d8a00003411155b6110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e490614ae5565b60405180910390fd5b60008111611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790614de5565b60405180910390fd5b34600e819055506000600a54905081600a60008282546111509190614f8f565b9250508190555081601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111a29190614f8f565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b8281116112225761120f6111fe6131f6565b848461120a9190614f8f565b613538565b808061121a90615163565b9150506111ec565b505060008060146101000a81548160ff02191690831515021790555050565b600860019054906101000a900460ff1681565b600b5481565b6112626131f6565b73ffffffffffffffffffffffffffffffffffffffff166112806120f3565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90614d05565b60405180910390fd5b60004790506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161132390614938565b60006040518083038185875af1925050503d8060008114611360576040519150601f19603f3d011682016040523d82523d6000602084013e611365565b606091505b50509050806113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090614ba5565b60405180910390fd5b5050565b60126020528060005260406000206000915054906101000a900460ff1681565b6113d56131f6565b73ffffffffffffffffffffffffffffffffffffffff166113f36120f3565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614d05565b60405180910390fd5b8060098190555050565b61146e838383604051806020016040528060008152506127d6565b505050565b600c5481565b600060149054906101000a900460ff16156114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614c85565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506002601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161152c6131f6565b6040518263ffffffff1660e01b8152600401611548919061494d565b60206040518083038186803b15801561156057600080fd5b505afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190614183565b10156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614b85565b60405180910390fd5b600860019054906101000a900460ff16611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614a65565b60405180910390fd5b600c5482601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116769190614f8f565b11156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae90614d85565b60405180910390fd5b60095482600a546116c89190614f8f565b1115611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614ac5565b60405180910390fd5b600034101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614ae5565b60405180910390fd5b6002815161175b9190614fe5565b821461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614a85565b60405180910390fd5b60005b81518110156119b457601260008383815181106117e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614c05565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8383815181106118c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016118e49190614e25565b60206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119349190613eb9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890614d65565b60405180910390fd5b80806119ac90615163565b91505061179f565b5060008151905060005b81811015611ac657600160126000858481518110611a05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506010838281518110611a6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190915055600f6000815480929190611aae90615163565b91905055508080611abe90615163565b9150506119be565b5034600e819055506000600a54905083600a6000828254611ae79190614f8f565b9250508190555083601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b399190614f8f565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b848111611bb957611ba6611b956131f6565b8284611ba19190614f8f565b613538565b8080611bb190615163565b915050611b83565b50505060008060146101000a81548160ff0219169083151502179055505050565b600a5481565b60108181548110611bf057600080fd5b906000526020600020016000915090505481565b600f5481565b60606000600f5467ffffffffffffffff811115611c50577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611c7e5781602001602082028036833780820191505090505b50905060005b600f54811015611d2b5760108181548110611cc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154828281518110611d0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611d2390615163565b915050611c84565b508091505090565b611d3b6131f6565b73ffffffffffffffffffffffffffffffffffffffff16611d596120f3565b73ffffffffffffffffffffffffffffffffffffffff1614611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690614d05565b60405180910390fd5b8060039080519060200190611dc5929190613bf4565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990614c25565b60405180910390fd5b80915050919050565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990614cc5565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f416131f6565b73ffffffffffffffffffffffffffffffffffffffff16611f5f6120f3565b73ffffffffffffffffffffffffffffffffffffffff1614611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90614d05565b60405180910390fd5b611fbf6000613556565b565b611fc96131f6565b73ffffffffffffffffffffffffffffffffffffffff16611fe76120f3565b73ffffffffffffffffffffffffffffffffffffffff161461203d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203490614d05565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b6120626131f6565b73ffffffffffffffffffffffffffffffffffffffff166120806120f3565b73ffffffffffffffffffffffffffffffffffffffff16146120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd90614d05565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461212b90615100565b80601f016020809104026020016040519081016040528092919081815260200182805461215790615100565b80156121a45780601f10612179576101008083540402835291602001916121a4565b820191906000526020600020905b81548152906001019060200180831161218757829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490614be5565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161230e9190614a0d565b60405180910390a35050565b6123226131f6565b73ffffffffffffffffffffffffffffffffffffffff166123406120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614d05565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600063a8fcc41760e01b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161241d9190614e25565b60206040518083038186803b15801561243557600080fd5b505afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246d9190613eb9565b73ffffffffffffffffffffffffffffffffffffffff1661248b6131f6565b73ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d890614d25565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b815260040161253c9190614e25565b60206040518083038186803b15801561255457600080fd5b505afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190613eb9565b73ffffffffffffffffffffffffffffffffffffffff166125aa6131f6565b73ffffffffffffffffffffffffffffffffffffffff1614612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614d25565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead856040518463ffffffff1660e01b815260040161266193929190614968565b600060405180830381600087803b15801561267b57600080fd5b505af115801561268f573d6000803e3d6000fd5b50505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead846040518463ffffffff1660e01b81526004016126f493929190614968565b600060405180830381600087803b15801561270e57600080fd5b505af1158015612722573d6000803e3d6000fd5b505050505050565b6127326131f6565b73ffffffffffffffffffffffffffffffffffffffff166127506120f3565b73ffffffffffffffffffffffffffffffffffffffff16146127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90614d05565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b600860009054906101000a900460ff1681565b6127e033836131fe565b61281f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281690614d45565b60405180910390fd5b61282b8484848461361a565b50505050565b6128396131f6565b73ffffffffffffffffffffffffffffffffffffffff166128576120f3565b73ffffffffffffffffffffffffffffffffffffffff16146128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490614d05565b60405180910390fd5b600860009054906101000a900460ff161580156128d75750600860019054906101000a900460ff16155b612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d90614dc5565b60405180910390fd5b600a5482600a546129279190614f8f565b11612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614e05565b60405180910390fd5b600c5482601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b59190614f8f565b11156129f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ed90614d85565b60405180910390fd5b60028151612a049190614fe5565b8214612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614a85565b60405180910390fd5b6000600a54905060008251905060005b81811015612bfe5760126000858381518110612a9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615612afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af590614c05565b60405180910390fd5b600160126000868481518110612b3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506010848281518110612ba5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190915055600f6000815480929190612be690615163565b91905055508080612bf690615163565b915050612a55565b5083601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c4a9190614f8f565b601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600190505b848111612cdb57612cb0868285612cab9190614f8f565b613538565b600a6000815480929190612cc390615163565b91905055508080612cd390615163565b915050612c94565b505050505050565b6060612cee826130d1565b612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2490614da5565b60405180910390fd5b6060600d60009054906101000a900460ff1615612d76576003612d4f84613676565b604051602001612d609291906148c5565b6040516020818303038152906040529050612d9a565b6003604051602001612d889190614916565b60405160208183030381529060405290505b80915050919050565b612dab6131f6565b73ffffffffffffffffffffffffffffffffffffffff16612dc96120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1690614d05565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b612e446131f6565b73ffffffffffffffffffffffffffffffffffffffff16612e626120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614d05565b60405180910390fd5b80600c8190555050565b60606003604051602001612ed691906148f4565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f866131f6565b73ffffffffffffffffffffffffffffffffffffffff16612fa46120f3565b73ffffffffffffffffffffffffffffffffffffffff1614612ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff190614d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561306a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306190614bc5565b60405180910390fd5b61307381613556565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130ca9190614fe5565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166131b083611dc9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600033905090565b6000613209826130d1565b613248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323f90614aa5565b60405180910390fd5b600061325383611dc9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132c257508373ffffffffffffffffffffffffffffffffffffffff166132aa84610c3f565b73ffffffffffffffffffffffffffffffffffffffff16145b806132d357506132d28185612eea565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166132fc82611dc9565b73ffffffffffffffffffffffffffffffffffffffff1614613352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334990614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b990614b05565b60405180910390fd5b6133cd838383613823565b6133d860008261313d565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134289190615016565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461347f9190614f8f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b613552828260405180602001604052806000815250613828565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6136258484846132dc565b61363184848484613883565b613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790614c45565b60405180910390fd5b50505050565b606060008214156136be576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061381e565b600082905060005b600082146136f05780806136d990615163565b915050600a826136e99190614fe5565b91506136c6565b60008167ffffffffffffffff811115613732577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156137645781602001600182028036833780820191505090505b5090505b600085146138175760018261377d9190615016565b9150600a8561378c91906151ac565b60306137989190614f8f565b60f81b8183815181106137d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856138109190614fe5565b9450613768565b8093505050505b919050565b505050565b6138328383613a13565b61383f6000848484613883565b61387e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387590614c45565b60405180910390fd5b505050565b60006138a48473ffffffffffffffffffffffffffffffffffffffff16613be1565b15613a06578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016138e8949392919061499f565b602060405180830381600087803b15801561390257600080fd5b505af192505050801561393357506040513d601f19601f8201168201806040525081019061393091906140f0565b60015b6139b6573d8060008114613963576040519150601f19603f3d011682016040523d82523d6000602084013e613968565b606091505b506000815114156139ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a590614c45565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a0b565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7a90614ca5565b60405180910390fd5b613a8c816130d1565b15613acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac390614b25565b60405180910390fd5b613ad860008383613823565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b289190614f8f565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613c0090615100565b90600052602060002090601f016020900481019282613c225760008555613c69565b82601f10613c3b57805160ff1916838001178555613c69565b82800160010185558215613c69579182015b82811115613c68578251825591602001919060010190613c4d565b5b509050613c769190613c7a565b5090565b5b80821115613c93576000816000905550600101613c7b565b5090565b6000613caa613ca584614e65565b614e40565b90508083825260208201905082856020860282011115613cc957600080fd5b60005b85811015613cf95781613cdf8882613e66565b845260208401935060208301925050600181019050613ccc565b5050509392505050565b6000613d16613d1184614e91565b614e40565b905082815260208101848484011115613d2e57600080fd5b613d398482856150be565b509392505050565b6000613d54613d4f84614ec2565b614e40565b905082815260208101848484011115613d6c57600080fd5b613d778482856150be565b509392505050565b600081359050613d8e816158b4565b92915050565b600081519050613da3816158b4565b92915050565b600082601f830112613dba57600080fd5b8135613dca848260208601613c97565b91505092915050565b600081359050613de2816158cb565b92915050565b600081359050613df7816158e2565b92915050565b600081519050613e0c816158e2565b92915050565b600082601f830112613e2357600080fd5b8135613e33848260208601613d03565b91505092915050565b600082601f830112613e4d57600080fd5b8135613e5d848260208601613d41565b91505092915050565b600081359050613e75816158f9565b92915050565b600081519050613e8a816158f9565b92915050565b600060208284031215613ea257600080fd5b6000613eb084828501613d7f565b91505092915050565b600060208284031215613ecb57600080fd5b6000613ed984828501613d94565b91505092915050565b60008060408385031215613ef557600080fd5b6000613f0385828601613d7f565b9250506020613f1485828601613d7f565b9150509250929050565b600080600060608486031215613f3357600080fd5b6000613f4186828701613d7f565b9350506020613f5286828701613d7f565b9250506040613f6386828701613e66565b9150509250925092565b60008060008060808587031215613f8357600080fd5b6000613f9187828801613d7f565b9450506020613fa287828801613d7f565b9350506040613fb387828801613e66565b925050606085013567ffffffffffffffff811115613fd057600080fd5b613fdc87828801613e12565b91505092959194509250565b60008060408385031215613ffb57600080fd5b600061400985828601613d7f565b925050602061401a85828601613dd3565b9150509250929050565b6000806040838503121561403757600080fd5b600061404585828601613d7f565b925050602061405685828601613e66565b9150509250929050565b60008060006060848603121561407557600080fd5b600061408386828701613d7f565b935050602061409486828701613e66565b925050604084013567ffffffffffffffff8111156140b157600080fd5b6140bd86828701613da9565b9150509250925092565b6000602082840312156140d957600080fd5b60006140e784828501613de8565b91505092915050565b60006020828403121561410257600080fd5b600061411084828501613dfd565b91505092915050565b60006020828403121561412b57600080fd5b600082013567ffffffffffffffff81111561414557600080fd5b61415184828501613e3c565b91505092915050565b60006020828403121561416c57600080fd5b600061417a84828501613e66565b91505092915050565b60006020828403121561419557600080fd5b60006141a384828501613e7b565b91505092915050565b600080604083850312156141bf57600080fd5b60006141cd85828601613e66565b925050602083013567ffffffffffffffff8111156141ea57600080fd5b6141f685828601613da9565b9150509250929050565b6000806040838503121561421357600080fd5b600061422185828601613e66565b925050602061423285828601613e66565b9150509250929050565b600061424883836148a7565b60208301905092915050565b61425d8161504a565b82525050565b600061426e82614f18565b6142788185614f46565b935061428383614ef3565b8060005b838110156142b457815161429b888261423c565b97506142a683614f39565b925050600181019050614287565b5085935050505092915050565b6142ca8161505c565b82525050565b6142d981615068565b82525050565b60006142ea82614f23565b6142f48185614f57565b93506143048185602086016150cd565b61430d81615299565b840191505092915050565b600061432382614f2e565b61432d8185614f73565b935061433d8185602086016150cd565b61434681615299565b840191505092915050565b600061435c82614f2e565b6143668185614f84565b93506143768185602086016150cd565b80840191505092915050565b6000815461438f81615100565b6143998186614f84565b945060018216600081146143b457600181146143c5576143f8565b60ff198316865281860193506143f8565b6143ce85614f03565b60005b838110156143f0578154818901526001820191506020810190506143d1565b838801955050505b50505092915050565b600061440e600f83614f73565b9150614419826152aa565b602082019050919050565b6000614431602b83614f73565b915061443c826152d3565b604082019050919050565b6000614454602083614f73565b915061445f82615322565b602082019050919050565b6000614477601383614f73565b91506144828261534b565b602082019050919050565b600061449a601083614f73565b91506144a582615374565b602082019050919050565b60006144bd600d83614f84565b91506144c88261539d565b600d82019050919050565b60006144e0601b83614f73565b91506144eb826153c6565b602082019050919050565b6000614503601c83614f73565b915061450e826153ef565b602082019050919050565b6000614526602083614f73565b915061453182615418565b602082019050919050565b6000614549601e83614f73565b915061455482615441565b602082019050919050565b600061456c601583614f73565b91506145778261546a565b602082019050919050565b600061458f601883614f73565b915061459a82615493565b602082019050919050565b60006145b2602083614f73565b91506145bd826154bc565b602082019050919050565b60006145d5601983614f73565b91506145e0826154e5565b602082019050919050565b60006145f8602183614f73565b91506146038261550e565b604082019050919050565b600061461b600c83614f84565b91506146268261555d565b600c82019050919050565b600061463e601e83614f73565b915061464982615586565b602082019050919050565b6000614661601a83614f73565b915061466c826155af565b602082019050919050565b6000614684601f83614f73565b915061468f826155d8565b602082019050919050565b60006146a7601f83614f73565b91506146b282615601565b602082019050919050565b60006146ca602083614f73565b91506146d58261562a565b602082019050919050565b60006146ed602083614f73565b91506146f882615653565b602082019050919050565b6000614710600583614f84565b915061471b8261567c565b600582019050919050565b6000614733601c83614f73565b915061473e826156a5565b602082019050919050565b6000614756602083614f73565b9150614761826156ce565b602082019050919050565b6000614779601e83614f73565b9150614784826156f7565b602082019050919050565b600061479c601c83614f73565b91506147a782615720565b602082019050919050565b60006147bf602483614f73565b91506147ca82615749565b604082019050919050565b60006147e2602183614f73565b91506147ed82615798565b604082019050919050565b6000614805600083614f68565b9150614810826157e7565b600082019050919050565b6000614828601d83614f73565b9150614833826157ea565b602082019050919050565b600061484b602b83614f73565b915061485682615813565b604082019050919050565b600061486e601d83614f73565b915061487982615862565b602082019050919050565b6000614891601383614f73565b915061489c8261588b565b602082019050919050565b6148b0816150b4565b82525050565b6148bf816150b4565b82525050565b60006148d18285614382565b91506148dd8284614351565b91506148e882614703565b91508190509392505050565b60006149008284614382565b915061490b826144b0565b915081905092915050565b60006149228284614382565b915061492d8261460e565b915081905092915050565b6000614943826147f8565b9150819050919050565b60006020820190506149626000830184614254565b92915050565b600060608201905061497d6000830186614254565b61498a6020830185614254565b61499760408301846148b6565b949350505050565b60006080820190506149b46000830187614254565b6149c16020830186614254565b6149ce60408301856148b6565b81810360608301526149e081846142df565b905095945050505050565b60006020820190508181036000830152614a058184614263565b905092915050565b6000602082019050614a2260008301846142c1565b92915050565b6000602082019050614a3d60008301846142d0565b92915050565b60006020820190508181036000830152614a5d8184614318565b905092915050565b60006020820190508181036000830152614a7e81614401565b9050919050565b60006020820190508181036000830152614a9e81614424565b9050919050565b60006020820190508181036000830152614abe81614447565b9050919050565b60006020820190508181036000830152614ade8161446a565b9050919050565b60006020820190508181036000830152614afe8161448d565b9050919050565b60006020820190508181036000830152614b1e816144d3565b9050919050565b60006020820190508181036000830152614b3e816144f6565b9050919050565b60006020820190508181036000830152614b5e81614519565b9050919050565b60006020820190508181036000830152614b7e8161453c565b9050919050565b60006020820190508181036000830152614b9e8161455f565b9050919050565b60006020820190508181036000830152614bbe81614582565b9050919050565b60006020820190508181036000830152614bde816145a5565b9050919050565b60006020820190508181036000830152614bfe816145c8565b9050919050565b60006020820190508181036000830152614c1e816145eb565b9050919050565b60006020820190508181036000830152614c3e81614631565b9050919050565b60006020820190508181036000830152614c5e81614654565b9050919050565b60006020820190508181036000830152614c7e81614677565b9050919050565b60006020820190508181036000830152614c9e8161469a565b9050919050565b60006020820190508181036000830152614cbe816146bd565b9050919050565b60006020820190508181036000830152614cde816146e0565b9050919050565b60006020820190508181036000830152614cfe81614726565b9050919050565b60006020820190508181036000830152614d1e81614749565b9050919050565b60006020820190508181036000830152614d3e8161476c565b9050919050565b60006020820190508181036000830152614d5e8161478f565b9050919050565b60006020820190508181036000830152614d7e816147b2565b9050919050565b60006020820190508181036000830152614d9e816147d5565b9050919050565b60006020820190508181036000830152614dbe8161481b565b9050919050565b60006020820190508181036000830152614dde8161483e565b9050919050565b60006020820190508181036000830152614dfe81614861565b9050919050565b60006020820190508181036000830152614e1e81614884565b9050919050565b6000602082019050614e3a60008301846148b6565b92915050565b6000614e4a614e5b565b9050614e568282615132565b919050565b6000604051905090565b600067ffffffffffffffff821115614e8057614e7f61526a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614eac57614eab61526a565b5b614eb582615299565b9050602081019050919050565b600067ffffffffffffffff821115614edd57614edc61526a565b5b614ee682615299565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f9a826150b4565b9150614fa5836150b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fda57614fd96151dd565b5b828201905092915050565b6000614ff0826150b4565b9150614ffb836150b4565b92508261500b5761500a61520c565b5b828204905092915050565b6000615021826150b4565b915061502c836150b4565b92508282101561503f5761503e6151dd565b5b828203905092915050565b600061505582615094565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150eb5780820151818401526020810190506150d0565b838111156150fa576000848401525b50505050565b6000600282049050600182168061511857607f821691505b6020821081141561512c5761512b61523b565b5b50919050565b61513b82615299565b810181811067ffffffffffffffff8211171561515a5761515961526a565b5b80604052505050565b600061516e826150b4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151a1576151a06151dd565b5b600182019050919050565b60006151b7826150b4565b91506151c2836150b4565b9250826151d2576151d161520c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d696e74204e6f74204163746976650000000000000000000000000000000000600082015250565b7f506c65617365206578636c75646520327820746f6b656e7320746f206d696e7460008201527f78206e657720746f6b656e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b7f57726f6e672045746820416d6f756e7400000000000000000000000000000000600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f4d757374206861766520417669757320546f6b656e0000000000000000000000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416e696d6120546f6b656e206d757374206e6f74206265206578636c7564656460008201527f2000000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4f6e6c7920746f6b656e206f776e65722063616e2063616c6c206275726e0000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f43616c6c656420646f6573206e6f7420686f6c6420746865736520746f6b656e60008201527f2049447300000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d696e742069732041637469766520666972737420646561637469766174652060008201527f6974206279206f776e6572000000000000000000000000000000000000000000602082015250565b7f5065617365206d696e7420666f726f6e6c7920312071756e6174697479000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6158bd8161504a565b81146158c857600080fd5b50565b6158d48161505c565b81146158df57600080fd5b50565b6158eb81615068565b81146158f657600080fd5b50565b615902816150b4565b811461590d57600080fd5b5056fea2646970667358221220ff1daeaca030b3337293bfa50913761982ad1f79ea9347626c72e10189283aa364736f6c63430008010033

Deployed Bytecode Sourcemap

17851:20356:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19704:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37168:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26879:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26441:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25325:94;;;;;;;;;;;;;:::i;:::-;;25430:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21437:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18663:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27749:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21808:724;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18632:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18729:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20144:228;;;;;;;;;;;;;:::i;:::-;;18972:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24626:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28134:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18760:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22538:1277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18695:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18887:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18855:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21565:234;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24916:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26151:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18825:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25891:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14992:94;;;;;;;;;;;;;:::i;:::-;;25224:89;;;;;;;;;;;;;:::i;:::-;;25023;;;;;;;;;;;;;:::i;:::-;;14341:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37309:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27158:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24558:63;;;;;;;;;;;;;:::i;:::-;;36179:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23885:460;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24726:62;;;;;;;;;;;;;:::i;:::-;;18597:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28390:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20384:1045;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37484:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25124:92;;;;;;;;;;;;;:::i;:::-;;24796:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37898:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27518:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15241:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25568:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19704:358;19789:4;19829:25;19814:40;;;:11;:40;;;;:109;;;;19890:33;19875:48;;;:11;:48;;;;19814:109;:170;;;;19959:25;19944:40;;;:11;:40;;;;19814:170;:240;;;;20020:34;;;20005:49;;;:11;:49;;;;19814:240;19806:248;;19704:358;;;:::o;37168:84::-;37207:13;37239:5;37232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37168:84;:::o;26879:207::-;26955:7;26983:16;26991:7;26983;:16::i;:::-;26975:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27054:15;:24;27070:7;27054:24;;;;;;;;;;;;;;;;;;;;;27047:31;;26879:207;;;:::o;26441:372::-;26522:13;26538:16;26546:7;26538;:16::i;:::-;26522:32;;26579:5;26573:11;;:2;:11;;;;26565:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26668:5;26654:19;;:10;:19;;;:58;;;;26677:35;26694:5;26701:10;26677:16;:35::i;:::-;26654:58;26632:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;26784:21;26793:2;26797:7;26784:8;:21::i;:::-;26441:372;;;:::o;25325:94::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25406:5:::1;25388:15;;:23;;;;;;;;;;;;;;;;;;25325:94::o:0;25430:126::-;25476:7;25503:12;;25496:19;;25430:126;:::o;21437:120::-;21498:4;21529:13;:19;21543:4;21529:19;;;;;;;;;;;;;;;;;;;;;21521:28;;21437:120;;;:::o;18663:25::-;;;;:::o;27749:314::-;27944:39;27963:10;27975:7;27944:18;:39::i;:::-;27936:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28027:28;28037:4;28043:2;28047:7;28027:9;:28::i;:::-;27749:314;;;:::o;21808:724::-;16275:11;;;;;;;;;;;16274:12;16266:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16347:4;16333:11;;:18;;;;;;;;;;;;;;;;;;21883:16:::1;;;;;;;;;;;21875:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;21974:12;;21966:3;21939:12;:24;21952:10;21939:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;21938:48;;21930:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;22065:10;;22058:3;22043:12;;:18;;;;:::i;:::-;:32;;22035:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:1;22119:9;:14;;22118:53;;;;;22152:18;22139:9;:31;;22118:53;22110:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;22223:1;22217:3;:7;22209:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22285:9;22274:8;:20;;;;22299:21;22323:12;;22299:36;;22356:3;22340:12;;:19;;;;;;;:::i;:::-;;;;;;;;22418:3;22391:12;:24;22404:10;22391:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;22364:12;:24;22377:10;22364:24;;;;;;;;;;;;;;;:57;;;;22430:9;22442:1;22430:13;;22426:102;22450:3;22445:1;:8;22426:102;;22472:44;22482:12;:10;:12::i;:::-;22512:3;22496:13;:19;;;;:::i;:::-;22472:9;:44::i;:::-;22455:3;;;;;:::i;:::-;;;;22426:102;;;;16362:1;16388:5:::0;16374:11;;:19;;;;;;;;;;;;;;;;;;21808:724;:::o;18632:27::-;;;;;;;;;;;;;:::o;18729:24::-;;;;:::o;20144:228::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20194:18:::1;20215:21;20194:42;;20248:12;20266:15;;;;;;;;;;;:20;;20294:10;20266:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20247:62;;;20328:7;20320:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;14632:1;;20144:228::o:0;18972:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;24626:95::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24708:8:::1;24695:10;:21;;;;24626:95:::0;:::o;28134:185::-;28272:39;28289:4;28295:2;28299:7;28272:39;;;;;;;;;;;;:16;:39::i;:::-;28134:185;;;:::o;18760:32::-;;;;:::o;22538:1277::-;16275:11;;;;;;;;;;;16274:12;16266:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16347:4;16333:11;;:18;;;;;;;;;;;;;;;;;;22668:1:::1;22638:2;;;;;;;;;;;:12;;;22651;:10;:12::i;:::-;22638:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;22630:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22708:15;;;;;;;;;;;22700:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22808:12;;22800:3;22773:12;:24;22786:10;22773:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;22772:48;;22764:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;22899:10;;22892:3;22877:12;;:18;;;;:::i;:::-;:32;;22869:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22965:1;22952:9;:14;;22944:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;23026:1;23014:3;:10;23013:14;;;;:::i;:::-;23006:3;:21;22998:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23090:6;23086:237;23104:3;:10;23101:1;:13;23086:237;;;23153:13;:21;23167:3;23171:1;23167:6;;;;;;;;;;;;;;;;;;;;;;23153:21;;;;;;;;;;;;;;;;;;;;;23152:22;23144:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23248:2;;;;;;;;;;;23247:12;;;23260:3;23264:1;23260:6;;;;;;;;;;;;;;;;;;;;;;23247:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23233:34;;:10;:34;;;23225:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;23117:3;;;;;:::i;:::-;;;;23086:237;;;;23333:11;23347:3;:10;23333:24;;23382:6;23378:172;23396:6;23393:1;:9;23378:172;;;23471:4;23447:13;:21;23461:3;23465:1;23461:6;;;;;;;;;;;;;;;;;;;;;;23447:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23490:6;23502:3;23506:1;23502:6;;;;;;;;;;;;;;;;;;;;;;23490:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23524:12;;:14;;;;;;;;;:::i;:::-;;;;;;23405:3;;;;;:::i;:::-;;;;23378:172;;;;23570:9;23559:8;:20;;;;23584:21;23608:12;;23584:36;;23641:3;23625:12;;:19;;;;;;;:::i;:::-;;;;;;;;23703:3;23676:12;:24;23689:10;23676:24;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;23649:12;:24;23662:10;23649:24;;;;;;;;;;;;;;;:57;;;;23715:9;23727:1;23715:13;;23711:100;23735:3;23730:1;:8;23711:100;;23757:42;23767:12;:10;:12::i;:::-;23797:1;23781:13;:17;;;;:::i;:::-;23757:9;:42::i;:::-;23740:3;;;;;:::i;:::-;;;;23711:100;;;;16362:1;;16388:5:::0;16374:11;;:19;;;;;;;;;;;;;;;;;;22538:1277;;:::o;18695:27::-;;;;:::o;18887:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18855:24::-;;;;:::o;21565:234::-;21604:16;21634:21;21672:12;;21658:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21634:51;;21703:6;21698:77;21719:12;;21715:1;:16;21698:77;;;21758:6;21765:1;21758:9;;;;;;;;;;;;;;;;;;;;;;;;21749:3;21753:1;21749:6;;;;;;;;;;;;;;;;;;;;;:18;;;;;21733:3;;;;;:::i;:::-;;;;21698:77;;;;21788:3;21781:10;;;21565:234;:::o;24916:95::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24997:6:::1;24986:8;:17;;;;;;;;;;;;:::i;:::-;;24916:95:::0;:::o;26151:228::-;26223:7;26243:13;26259:7;:16;26267:7;26259:16;;;;;;;;;;;;;;;;;;;;;26243:32;;26311:1;26294:19;;:5;:19;;;;26286:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26366:5;26359:12;;;26151:228;;;:::o;18825:23::-;;;;:::o;25891:198::-;25963:7;26008:1;25991:19;;:5;:19;;;;25983:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26065:9;:16;26075:5;26065:16;;;;;;;;;;;;;;;;26058:23;;25891:198;;;:::o;14992:94::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15057:21:::1;15075:1;15057:9;:21::i;:::-;14992:94::o:0;25224:89::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25301:4:::1;25283:15;;:22;;;;;;;;;;;;;;;;;;25224:89::o:0;25023:::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25100:4:::1;25081:16;;:23;;;;;;;;;;;;;;;;;;25023:89::o:0;14341:87::-;14387:7;14414:6;;;;;;;;;;;14407:13;;14341:87;:::o;37309:88::-;37350:13;37382:7;37375:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37309:88;:::o;27158:289::-;27273:10;27261:22;;:8;:22;;;;27253:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27369:8;27326:18;:30;27345:10;27326:30;;;;;;;;;;;;;;;:40;27357:8;27326:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;27420:8;27393:46;;27408:10;27393:46;;;27430:8;27393:46;;;;;;:::i;:::-;;;;;;;;27158:289;;:::o;24558:63::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24612:4:::1;24600:9;;:16;;;;;;;;;;;;;;;;;;24558:63::o:0;36179:148::-;36229:6;36289:30;;;36282:37;;36179:148;:::o;23885:460::-;23981:2;;;;;;;;;;;23980:12;;;23993:7;23980:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23964:37;;:12;:10;:12::i;:::-;:37;;;23956:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24072:2;;;;;;;;;;;24071:12;;;24084:10;24071:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24055:40;;:12;:10;:12::i;:::-;:40;;;24047:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24142:2;;;;;;;;;;;24141:17;;;24159:10;24179:42;24224:7;24141:91;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24244:2;;;;;;;;;;;24243:17;;;24261:10;24281:42;24326:10;24243:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23885:460;;:::o;24726:62::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24778:5:::1;24766:9;;:17;;;;;;;;;;;;;;;;;;24726:62::o:0;18597:28::-;;;;;;;;;;;;;:::o;28390:305::-;28565:39;28584:10;28596:7;28565:18;:39::i;:::-;28557:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28648:39;28662:4;28668:2;28672:7;28681:5;28648:13;:39::i;:::-;28390:305;;;;:::o;20384:1045::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20488:16:::1;;;;;;;;;;;20487:17;:37;;;;;20509:15;;;;;;;;;;;20508:16;20487:37;20479:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;20614:12;;20607:3;20592:12;;:18;;;;:::i;:::-;20591:35;20583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20698:12;;20690:3;20670:12;:17;20683:3;20670:17;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;20669:41;;20661:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;20787:1;20775:3;:10;20774:14;;;;:::i;:::-;20767:3;:21;20759:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20847:21;20871:12;;20847:36;;20894:14;20911:3;:10;20894:27;;20945:6;20941:242;20959:6;20956:1;:9;20941:242;;;21006:13;:21;21020:3;21024:1;21020:6;;;;;;;;;;;;;;;;;;;;;;21006:21;;;;;;;;;;;;;;;;;;;;;21005:22;20997:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21103:4;21079:13;:21;21093:3;21097:1;21093:6;;;;;;;;;;;;;;;;;;;;;;21079:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21122:6;21134:3;21138:1;21134:6;;;;;;;;;;;;;;;;;;;;;;21122:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21156:12;;:15;;;;;;;;;:::i;:::-;;;;;;20968:3;;;;;:::i;:::-;;;;20941:242;;;;21233:3;21213:12;:17;21226:3;21213:17;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;21193:12;:17;21206:3;21193:17;;;;;;;;;;;;;;;:43;;;;21250:9;21262:1;21250:13;;21246:176;21270:3;21265:1;:8;21246:176;;21295:33;21305:3;21326:1;21310:13;:17;;;;:::i;:::-;21295:9;:33::i;:::-;21343:12;;:15;;;;;;;;;:::i;:::-;;;;;;21275:3;;;;;:::i;:::-;;;;21246:176;;;;14632:1;;20384:1045:::0;;;:::o;37484:402::-;37542:13;37575:16;37583:7;37575;:16::i;:::-;37567:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37636:22;37673:9;;;;;;;;;;;37669:184;;;37730:8;37740:17;37749:7;37740:8;:17::i;:::-;37713:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37695:73;;37669:184;;;37821:8;37804:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37786:61;;37669:184;37870:8;37863:15;;;37484:402;;;:::o;25124:92::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25203:5:::1;25184:16;;:24;;;;;;;;;;;;;;;;;;25124:92::o:0;24796:108::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24888:8:::1;24873:12;:23;;;;24796:108:::0;:::o;37898:139::-;37942:13;38003:8;37986:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37972:57;;37898:139;:::o;27518:164::-;27615:4;27639:18;:25;27658:5;27639:25;;;;;;;;;;;;;;;:35;27665:8;27639:35;;;;;;;;;;;;;;;;;;;;;;;;;27632:42;;27518:164;;;;:::o;15241:186::-;14572:12;:10;:12::i;:::-;14561:23;;:7;:5;:7::i;:::-;:23;;;14553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15350:1:::1;15330:22;;:8;:22;;;;15322:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15400:19;15410:8;15400:9;:19::i;:::-;15241:186:::0;:::o;25568:259::-;25633:7;25775:6;25748:9;:23;25758:12;25748:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;25741:41;;25568:259;;;:::o;30181:127::-;30246:4;30298:1;30270:30;;:7;:16;30278:7;30270:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30263:37;;30181:127;;;:::o;34082:167::-;34184:2;34157:15;:24;34173:7;34157:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34233:7;34229:2;34202:39;;34211:16;34219:7;34211;:16::i;:::-;34202:39;;;;;;;;;;;;34082:167;;:::o;13724:98::-;13777:7;13804:10;13797:17;;13724:98;:::o;30475:329::-;30568:4;30593:16;30601:7;30593;:16::i;:::-;30585:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30657:13;30673:16;30681:7;30673;:16::i;:::-;30657:32;;30719:5;30708:16;;:7;:16;;;:51;;;;30752:7;30728:31;;:20;30740:7;30728:11;:20::i;:::-;:31;;;30708:51;:87;;;;30763:32;30780:5;30787:7;30763:16;:32::i;:::-;30708:87;30700:96;;;30475:329;;;;:::o;33417:547::-;33569:4;33549:24;;:16;33557:7;33549;:16::i;:::-;:24;;;33541:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33639:1;33625:16;;:2;:16;;;;33617:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33684:39;33705:4;33711:2;33715:7;33684:20;:39::i;:::-;33788:29;33805:1;33809:7;33788:8;:29::i;:::-;33849:1;33830:9;:15;33840:4;33830:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33878:1;33861:9;:13;33871:2;33861:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33909:2;33890:7;:16;33898:7;33890:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33948:7;33944:2;33929:27;;33938:4;33929:27;;;;;;;;;;;;33417:547;;;:::o;31146:110::-;31222:26;31232:2;31236:7;31222:26;;;;;;;;;;;;:9;:26::i;:::-;31146:110;;:::o;15435:173::-;15491:16;15510:6;;;;;;;;;;;15491:25;;15536:8;15527:6;;:17;;;;;;;;;;;;;;;;;;15591:8;15560:40;;15581:8;15560:40;;;;;;;;;;;;15435:173;;:::o;29577:291::-;29734:28;29744:4;29750:2;29754:7;29734:9;:28::i;:::-;29781:48;29804:4;29810:2;29814:7;29823:5;29781:22;:48::i;:::-;29773:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;29577:291;;;;:::o;15651:532::-;15707:13;15746:1;15737:5;:10;15733:53;;;15764:10;;;;;;;;;;;;;;;;;;;;;15733:53;15796:12;15811:5;15796:20;;15827:14;15852:78;15867:1;15859:4;:9;15852:78;;15885:8;;;;;:::i;:::-;;;;15916:2;15908:10;;;;;:::i;:::-;;;15852:78;;;15940:19;15972:6;15962:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15940:39;;15990:154;16006:1;15997:5;:10;15990:154;;16034:1;16024:11;;;;;:::i;:::-;;;16101:2;16093:5;:10;;;;:::i;:::-;16080:2;:24;;;;:::i;:::-;16067:39;;16050:6;16057;16050:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;16130:2;16121:11;;;;;:::i;:::-;;;15990:154;;;16168:6;16154:21;;;;;15651:532;;;;:::o;36899:126::-;;;;:::o;31483:297::-;31613:18;31619:2;31623:7;31613:5;:18::i;:::-;31664:54;31695:1;31699:2;31703:7;31712:5;31664:22;:54::i;:::-;31642:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;31483:297;;;:::o;34814:777::-;34969:4;34990:15;:2;:13;;;:15::i;:::-;34986:598;;;35042:2;35026:36;;;35063:10;35075:4;35081:7;35090:5;35026:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35022:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35287:1;35270:6;:13;:18;35266:248;;;35313:36;;;;;;;;;;:::i;:::-;;;;;;;;35266:248;35464:6;35458:13;35449:6;35445:2;35441:15;35434:38;35022:507;35157:45;;;35147:55;;;:6;:55;;;;35140:62;;;;;34986:598;35568:4;35561:11;;34814:777;;;;;;;:::o;32116:382::-;32210:1;32196:16;;:2;:16;;;;32188:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32269:16;32277:7;32269;:16::i;:::-;32268:17;32260:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32331:45;32360:1;32364:2;32368:7;32331:20;:45::i;:::-;32406:1;32389:9;:13;32399:2;32389:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32437:2;32418:7;:16;32426:7;32418:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32482:7;32478:2;32457:33;;32474:1;32457:33;;;;;;;;;;;;32116:382;;:::o;6645:387::-;6705:4;6913:12;6980:7;6968:20;6960:28;;7023:1;7016:4;:8;7009:15;;;6645:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;653:343::-;;755:65;771:48;812:6;771:48;:::i;:::-;755:65;:::i;:::-;746:74;;843:6;836:5;829:21;881:4;874:5;870:16;919:3;910:6;905:3;901:16;898:25;895:2;;;936:1;933;926:12;895:2;949:41;983:6;978:3;973;949:41;:::i;:::-;736:260;;;;;;:::o;1002:345::-;;1105:66;1121:49;1163:6;1121:49;:::i;:::-;1105:66;:::i;:::-;1096:75;;1194:6;1187:5;1180:21;1232:4;1225:5;1221:16;1270:3;1261:6;1256:3;1252:16;1249:25;1246:2;;;1287:1;1284;1277:12;1246:2;1300:41;1334:6;1329:3;1324;1300:41;:::i;:::-;1086:261;;;;;;:::o;1353:139::-;;1437:6;1424:20;1415:29;;1453:33;1480:5;1453:33;:::i;:::-;1405:87;;;;:::o;1498:143::-;;1586:6;1580:13;1571:22;;1602:33;1629:5;1602:33;:::i;:::-;1561:80;;;;:::o;1664:303::-;;1784:3;1777:4;1769:6;1765:17;1761:27;1751:2;;1802:1;1799;1792:12;1751:2;1842:6;1829:20;1867:94;1957:3;1949:6;1942:4;1934:6;1930:17;1867:94;:::i;:::-;1858:103;;1741:226;;;;;:::o;1973:133::-;;2054:6;2041:20;2032:29;;2070:30;2094:5;2070:30;:::i;:::-;2022:84;;;;:::o;2112:137::-;;2195:6;2182:20;2173:29;;2211:32;2237:5;2211:32;:::i;:::-;2163:86;;;;:::o;2255:141::-;;2342:6;2336:13;2327:22;;2358:32;2384:5;2358:32;:::i;:::-;2317:79;;;;:::o;2415:271::-;;2519:3;2512:4;2504:6;2500:17;2496:27;2486:2;;2537:1;2534;2527:12;2486:2;2577:6;2564:20;2602:78;2676:3;2668:6;2661:4;2653:6;2649:17;2602:78;:::i;:::-;2593:87;;2476:210;;;;;:::o;2706:273::-;;2811:3;2804:4;2796:6;2792:17;2788:27;2778:2;;2829:1;2826;2819:12;2778:2;2869:6;2856:20;2894:79;2969:3;2961:6;2954:4;2946:6;2942:17;2894:79;:::i;:::-;2885:88;;2768:211;;;;;:::o;2985:139::-;;3069:6;3056:20;3047:29;;3085:33;3112:5;3085:33;:::i;:::-;3037:87;;;;:::o;3130:143::-;;3218:6;3212:13;3203:22;;3234:33;3261:5;3234:33;:::i;:::-;3193:80;;;;:::o;3279:262::-;;3387:2;3375:9;3366:7;3362:23;3358:32;3355:2;;;3403:1;3400;3393:12;3355:2;3446:1;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3417:117;3345:196;;;;:::o;3547:284::-;;3666:2;3654:9;3645:7;3641:23;3637:32;3634:2;;;3682:1;3679;3672:12;3634:2;3725:1;3750:64;3806:7;3797:6;3786:9;3782:22;3750:64;:::i;:::-;3740:74;;3696:128;3624:207;;;;:::o;3837:407::-;;;3962:2;3950:9;3941:7;3937:23;3933:32;3930:2;;;3978:1;3975;3968:12;3930:2;4021:1;4046:53;4091:7;4082:6;4071:9;4067:22;4046:53;:::i;:::-;4036:63;;3992:117;4148:2;4174:53;4219:7;4210:6;4199:9;4195:22;4174:53;:::i;:::-;4164:63;;4119:118;3920:324;;;;;:::o;4250:552::-;;;;4392:2;4380:9;4371:7;4367:23;4363:32;4360:2;;;4408:1;4405;4398:12;4360:2;4451:1;4476:53;4521:7;4512:6;4501:9;4497:22;4476:53;:::i;:::-;4466:63;;4422:117;4578:2;4604:53;4649:7;4640:6;4629:9;4625:22;4604:53;:::i;:::-;4594:63;;4549:118;4706:2;4732:53;4777:7;4768:6;4757:9;4753:22;4732:53;:::i;:::-;4722:63;;4677:118;4350:452;;;;;:::o;4808:809::-;;;;;4976:3;4964:9;4955:7;4951:23;4947:33;4944:2;;;4993:1;4990;4983:12;4944:2;5036:1;5061:53;5106:7;5097:6;5086:9;5082:22;5061:53;:::i;:::-;5051:63;;5007:117;5163:2;5189:53;5234:7;5225:6;5214:9;5210:22;5189:53;:::i;:::-;5179:63;;5134:118;5291:2;5317:53;5362:7;5353:6;5342:9;5338:22;5317:53;:::i;:::-;5307:63;;5262:118;5447:2;5436:9;5432:18;5419:32;5478:18;5470:6;5467:30;5464:2;;;5510:1;5507;5500:12;5464:2;5538:62;5592:7;5583:6;5572:9;5568:22;5538:62;:::i;:::-;5528:72;;5390:220;4934:683;;;;;;;:::o;5623:401::-;;;5745:2;5733:9;5724:7;5720:23;5716:32;5713:2;;;5761:1;5758;5751:12;5713:2;5804:1;5829:53;5874:7;5865:6;5854:9;5850:22;5829:53;:::i;:::-;5819:63;;5775:117;5931:2;5957:50;5999:7;5990:6;5979:9;5975:22;5957:50;:::i;:::-;5947:60;;5902:115;5703:321;;;;;:::o;6030:407::-;;;6155:2;6143:9;6134:7;6130:23;6126:32;6123:2;;;6171:1;6168;6161:12;6123:2;6214:1;6239:53;6284:7;6275:6;6264:9;6260:22;6239:53;:::i;:::-;6229:63;;6185:117;6341:2;6367:53;6412:7;6403:6;6392:9;6388:22;6367:53;:::i;:::-;6357:63;;6312:118;6113:324;;;;;:::o;6443:695::-;;;;6610:2;6598:9;6589:7;6585:23;6581:32;6578:2;;;6626:1;6623;6616:12;6578:2;6669:1;6694:53;6739:7;6730:6;6719:9;6715:22;6694:53;:::i;:::-;6684:63;;6640:117;6796:2;6822:53;6867:7;6858:6;6847:9;6843:22;6822:53;:::i;:::-;6812:63;;6767:118;6952:2;6941:9;6937:18;6924:32;6983:18;6975:6;6972:30;6969:2;;;7015:1;7012;7005:12;6969:2;7043:78;7113:7;7104:6;7093:9;7089:22;7043:78;:::i;:::-;7033:88;;6895:236;6568:570;;;;;:::o;7144:260::-;;7251:2;7239:9;7230:7;7226:23;7222:32;7219:2;;;7267:1;7264;7257:12;7219:2;7310:1;7335:52;7379:7;7370:6;7359:9;7355:22;7335:52;:::i;:::-;7325:62;;7281:116;7209:195;;;;:::o;7410:282::-;;7528:2;7516:9;7507:7;7503:23;7499:32;7496:2;;;7544:1;7541;7534:12;7496:2;7587:1;7612:63;7667:7;7658:6;7647:9;7643:22;7612:63;:::i;:::-;7602:73;;7558:127;7486:206;;;;:::o;7698:375::-;;7816:2;7804:9;7795:7;7791:23;7787:32;7784:2;;;7832:1;7829;7822:12;7784:2;7903:1;7892:9;7888:17;7875:31;7933:18;7925:6;7922:30;7919:2;;;7965:1;7962;7955:12;7919:2;7993:63;8048:7;8039:6;8028:9;8024:22;7993:63;:::i;:::-;7983:73;;7846:220;7774:299;;;;:::o;8079:262::-;;8187:2;8175:9;8166:7;8162:23;8158:32;8155:2;;;8203:1;8200;8193:12;8155:2;8246:1;8271:53;8316:7;8307:6;8296:9;8292:22;8271:53;:::i;:::-;8261:63;;8217:117;8145:196;;;;:::o;8347:284::-;;8466:2;8454:9;8445:7;8441:23;8437:32;8434:2;;;8482:1;8479;8472:12;8434:2;8525:1;8550:64;8606:7;8597:6;8586:9;8582:22;8550:64;:::i;:::-;8540:74;;8496:128;8424:207;;;;:::o;8637:550::-;;;8787:2;8775:9;8766:7;8762:23;8758:32;8755:2;;;8803:1;8800;8793:12;8755:2;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;9001:2;8990:9;8986:18;8973:32;9032:18;9024:6;9021:30;9018:2;;;9064:1;9061;9054:12;9018:2;9092:78;9162:7;9153:6;9142:9;9138:22;9092:78;:::i;:::-;9082:88;;8944:236;8745:442;;;;;:::o;9193:407::-;;;9318:2;9306:9;9297:7;9293:23;9289:32;9286:2;;;9334:1;9331;9324:12;9286:2;9377:1;9402:53;9447:7;9438:6;9427:9;9423:22;9402:53;:::i;:::-;9392:63;;9348:117;9504:2;9530:53;9575:7;9566:6;9555:9;9551:22;9530:53;:::i;:::-;9520:63;;9475:118;9276:324;;;;;:::o;9606:179::-;;9696:46;9738:3;9730:6;9696:46;:::i;:::-;9774:4;9769:3;9765:14;9751:28;;9686:99;;;;:::o;9791:118::-;9878:24;9896:5;9878:24;:::i;:::-;9873:3;9866:37;9856:53;;:::o;9945:732::-;;10093:54;10141:5;10093:54;:::i;:::-;10163:86;10242:6;10237:3;10163:86;:::i;:::-;10156:93;;10273:56;10323:5;10273:56;:::i;:::-;10352:7;10383:1;10368:284;10393:6;10390:1;10387:13;10368:284;;;10469:6;10463:13;10496:63;10555:3;10540:13;10496:63;:::i;:::-;10489:70;;10582:60;10635:6;10582:60;:::i;:::-;10572:70;;10428:224;10415:1;10412;10408:9;10403:14;;10368:284;;;10372:14;10668:3;10661:10;;10069:608;;;;;;;:::o;10683:109::-;10764:21;10779:5;10764:21;:::i;:::-;10759:3;10752:34;10742:50;;:::o;10798:115::-;10883:23;10900:5;10883:23;:::i;:::-;10878:3;10871:36;10861:52;;:::o;10919:360::-;;11033:38;11065:5;11033:38;:::i;:::-;11087:70;11150:6;11145:3;11087:70;:::i;:::-;11080:77;;11166:52;11211:6;11206:3;11199:4;11192:5;11188:16;11166:52;:::i;:::-;11243:29;11265:6;11243:29;:::i;:::-;11238:3;11234:39;11227:46;;11009:270;;;;;:::o;11285:364::-;;11401:39;11434:5;11401:39;:::i;:::-;11456:71;11520:6;11515:3;11456:71;:::i;:::-;11449:78;;11536:52;11581:6;11576:3;11569:4;11562:5;11558:16;11536:52;:::i;:::-;11613:29;11635:6;11613:29;:::i;:::-;11608:3;11604:39;11597:46;;11377:272;;;;;:::o;11655:377::-;;11789:39;11822:5;11789:39;:::i;:::-;11844:89;11926:6;11921:3;11844:89;:::i;:::-;11837:96;;11942:52;11987:6;11982:3;11975:4;11968:5;11964:16;11942:52;:::i;:::-;12019:6;12014:3;12010:16;12003:23;;11765:267;;;;;:::o;12062:845::-;;12202:5;12196:12;12231:36;12257:9;12231:36;:::i;:::-;12283:89;12365:6;12360:3;12283:89;:::i;:::-;12276:96;;12403:1;12392:9;12388:17;12419:1;12414:137;;;;12565:1;12560:341;;;;12381:520;;12414:137;12498:4;12494:9;12483;12479:25;12474:3;12467:38;12534:6;12529:3;12525:16;12518:23;;12414:137;;12560:341;12627:38;12659:5;12627:38;:::i;:::-;12687:1;12701:154;12715:6;12712:1;12709:13;12701:154;;;12789:7;12783:14;12779:1;12774:3;12770:11;12763:35;12839:1;12830:7;12826:15;12815:26;;12737:4;12734:1;12730:12;12725:17;;12701:154;;;12884:6;12879:3;12875:16;12868:23;;12567:334;;12381:520;;12169:738;;;;;;:::o;12913:366::-;;13076:67;13140:2;13135:3;13076:67;:::i;:::-;13069:74;;13152:93;13241:3;13152:93;:::i;:::-;13270:2;13265:3;13261:12;13254:19;;13059:220;;;:::o;13285:366::-;;13448:67;13512:2;13507:3;13448:67;:::i;:::-;13441:74;;13524:93;13613:3;13524:93;:::i;:::-;13642:2;13637:3;13633:12;13626:19;;13431:220;;;:::o;13657:366::-;;13820:67;13884:2;13879:3;13820:67;:::i;:::-;13813:74;;13896:93;13985:3;13896:93;:::i;:::-;14014:2;14009:3;14005:12;13998:19;;13803:220;;;:::o;14029:366::-;;14192:67;14256:2;14251:3;14192:67;:::i;:::-;14185:74;;14268:93;14357:3;14268:93;:::i;:::-;14386:2;14381:3;14377:12;14370:19;;14175:220;;;:::o;14401:366::-;;14564:67;14628:2;14623:3;14564:67;:::i;:::-;14557:74;;14640:93;14729:3;14640:93;:::i;:::-;14758:2;14753:3;14749:12;14742:19;;14547:220;;;:::o;14773:402::-;;14954:85;15036:2;15031:3;14954:85;:::i;:::-;14947:92;;15048:93;15137:3;15048:93;:::i;:::-;15166:2;15161:3;15157:12;15150:19;;14937:238;;;:::o;15181:366::-;;15344:67;15408:2;15403:3;15344:67;:::i;:::-;15337:74;;15420:93;15509:3;15420:93;:::i;:::-;15538:2;15533:3;15529:12;15522:19;;15327:220;;;:::o;15553:366::-;;15716:67;15780:2;15775:3;15716:67;:::i;:::-;15709:74;;15792:93;15881:3;15792:93;:::i;:::-;15910:2;15905:3;15901:12;15894:19;;15699:220;;;:::o;15925:366::-;;16088:67;16152:2;16147:3;16088:67;:::i;:::-;16081:74;;16164:93;16253:3;16164:93;:::i;:::-;16282:2;16277:3;16273:12;16266:19;;16071:220;;;:::o;16297:366::-;;16460:67;16524:2;16519:3;16460:67;:::i;:::-;16453:74;;16536:93;16625:3;16536:93;:::i;:::-;16654:2;16649:3;16645:12;16638:19;;16443:220;;;:::o;16669:366::-;;16832:67;16896:2;16891:3;16832:67;:::i;:::-;16825:74;;16908:93;16997:3;16908:93;:::i;:::-;17026:2;17021:3;17017:12;17010:19;;16815:220;;;:::o;17041:366::-;;17204:67;17268:2;17263:3;17204:67;:::i;:::-;17197:74;;17280:93;17369:3;17280:93;:::i;:::-;17398:2;17393:3;17389:12;17382:19;;17187:220;;;:::o;17413:366::-;;17576:67;17640:2;17635:3;17576:67;:::i;:::-;17569:74;;17652:93;17741:3;17652:93;:::i;:::-;17770:2;17765:3;17761:12;17754:19;;17559:220;;;:::o;17785:366::-;;17948:67;18012:2;18007:3;17948:67;:::i;:::-;17941:74;;18024:93;18113:3;18024:93;:::i;:::-;18142:2;18137:3;18133:12;18126:19;;17931:220;;;:::o;18157:366::-;;18320:67;18384:2;18379:3;18320:67;:::i;:::-;18313:74;;18396:93;18485:3;18396:93;:::i;:::-;18514:2;18509:3;18505:12;18498:19;;18303:220;;;:::o;18529:402::-;;18710:85;18792:2;18787:3;18710:85;:::i;:::-;18703:92;;18804:93;18893:3;18804:93;:::i;:::-;18922:2;18917:3;18913:12;18906:19;;18693:238;;;:::o;18937:366::-;;19100:67;19164:2;19159:3;19100:67;:::i;:::-;19093:74;;19176:93;19265:3;19176:93;:::i;:::-;19294:2;19289:3;19285:12;19278:19;;19083:220;;;:::o;19309:366::-;;19472:67;19536:2;19531:3;19472:67;:::i;:::-;19465:74;;19548:93;19637:3;19548:93;:::i;:::-;19666:2;19661:3;19657:12;19650:19;;19455:220;;;:::o;19681:366::-;;19844:67;19908:2;19903:3;19844:67;:::i;:::-;19837:74;;19920:93;20009:3;19920:93;:::i;:::-;20038:2;20033:3;20029:12;20022:19;;19827:220;;;:::o;20053:366::-;;20216:67;20280:2;20275:3;20216:67;:::i;:::-;20209:74;;20292:93;20381:3;20292:93;:::i;:::-;20410:2;20405:3;20401:12;20394:19;;20199:220;;;:::o;20425:366::-;;20588:67;20652:2;20647:3;20588:67;:::i;:::-;20581:74;;20664:93;20753:3;20664:93;:::i;:::-;20782:2;20777:3;20773:12;20766:19;;20571:220;;;:::o;20797:366::-;;20960:67;21024:2;21019:3;20960:67;:::i;:::-;20953:74;;21036:93;21125:3;21036:93;:::i;:::-;21154:2;21149:3;21145:12;21138:19;;20943:220;;;:::o;21169:400::-;;21350:84;21432:1;21427:3;21350:84;:::i;:::-;21343:91;;21443:93;21532:3;21443:93;:::i;:::-;21561:1;21556:3;21552:11;21545:18;;21333:236;;;:::o;21575:366::-;;21738:67;21802:2;21797:3;21738:67;:::i;:::-;21731:74;;21814:93;21903:3;21814:93;:::i;:::-;21932:2;21927:3;21923:12;21916:19;;21721:220;;;:::o;21947:366::-;;22110:67;22174:2;22169:3;22110:67;:::i;:::-;22103:74;;22186:93;22275:3;22186:93;:::i;:::-;22304:2;22299:3;22295:12;22288:19;;22093:220;;;:::o;22319:366::-;;22482:67;22546:2;22541:3;22482:67;:::i;:::-;22475:74;;22558:93;22647:3;22558:93;:::i;:::-;22676:2;22671:3;22667:12;22660:19;;22465:220;;;:::o;22691:366::-;;22854:67;22918:2;22913:3;22854:67;:::i;:::-;22847:74;;22930:93;23019:3;22930:93;:::i;:::-;23048:2;23043:3;23039:12;23032:19;;22837:220;;;:::o;23063:366::-;;23226:67;23290:2;23285:3;23226:67;:::i;:::-;23219:74;;23302:93;23391:3;23302:93;:::i;:::-;23420:2;23415:3;23411:12;23404:19;;23209:220;;;:::o;23435:366::-;;23598:67;23662:2;23657:3;23598:67;:::i;:::-;23591:74;;23674:93;23763:3;23674:93;:::i;:::-;23792:2;23787:3;23783:12;23776:19;;23581:220;;;:::o;23807:398::-;;23987:83;24068:1;24063:3;23987:83;:::i;:::-;23980:90;;24079:93;24168:3;24079:93;:::i;:::-;24197:1;24192:3;24188:11;24181:18;;23970:235;;;:::o;24211:366::-;;24374:67;24438:2;24433:3;24374:67;:::i;:::-;24367:74;;24450:93;24539:3;24450:93;:::i;:::-;24568:2;24563:3;24559:12;24552:19;;24357:220;;;:::o;24583:366::-;;24746:67;24810:2;24805:3;24746:67;:::i;:::-;24739:74;;24822:93;24911:3;24822:93;:::i;:::-;24940:2;24935:3;24931:12;24924:19;;24729:220;;;:::o;24955:366::-;;25118:67;25182:2;25177:3;25118:67;:::i;:::-;25111:74;;25194:93;25283:3;25194:93;:::i;:::-;25312:2;25307:3;25303:12;25296:19;;25101:220;;;:::o;25327:366::-;;25490:67;25554:2;25549:3;25490:67;:::i;:::-;25483:74;;25566:93;25655:3;25566:93;:::i;:::-;25684:2;25679:3;25675:12;25668:19;;25473:220;;;:::o;25699:108::-;25776:24;25794:5;25776:24;:::i;:::-;25771:3;25764:37;25754:53;;:::o;25813:118::-;25900:24;25918:5;25900:24;:::i;:::-;25895:3;25888:37;25878:53;;:::o;25937:695::-;;26237:92;26325:3;26316:6;26237:92;:::i;:::-;26230:99;;26346:95;26437:3;26428:6;26346:95;:::i;:::-;26339:102;;26458:148;26602:3;26458:148;:::i;:::-;26451:155;;26623:3;26616:10;;26219:413;;;;;:::o;26638:535::-;;26890:92;26978:3;26969:6;26890:92;:::i;:::-;26883:99;;26999:148;27143:3;26999:148;:::i;:::-;26992:155;;27164:3;27157:10;;26872:301;;;;:::o;27179:535::-;;27431:92;27519:3;27510:6;27431:92;:::i;:::-;27424:99;;27540:148;27684:3;27540:148;:::i;:::-;27533:155;;27705:3;27698:10;;27413:301;;;;:::o;27720:379::-;;27926:147;28069:3;27926:147;:::i;:::-;27919:154;;28090:3;28083:10;;27908:191;;;:::o;28105:222::-;;28236:2;28225:9;28221:18;28213:26;;28249:71;28317:1;28306:9;28302:17;28293:6;28249:71;:::i;:::-;28203:124;;;;:::o;28333:442::-;;28520:2;28509:9;28505:18;28497:26;;28533:71;28601:1;28590:9;28586:17;28577:6;28533:71;:::i;:::-;28614:72;28682:2;28671:9;28667:18;28658:6;28614:72;:::i;:::-;28696;28764:2;28753:9;28749:18;28740:6;28696:72;:::i;:::-;28487:288;;;;;;:::o;28781:640::-;;29014:3;29003:9;28999:19;28991:27;;29028:71;29096:1;29085:9;29081:17;29072:6;29028:71;:::i;:::-;29109:72;29177:2;29166:9;29162:18;29153:6;29109:72;:::i;:::-;29191;29259:2;29248:9;29244:18;29235:6;29191:72;:::i;:::-;29310:9;29304:4;29300:20;29295:2;29284:9;29280:18;29273:48;29338:76;29409:4;29400:6;29338:76;:::i;:::-;29330:84;;28981:440;;;;;;;:::o;29427:373::-;;29608:2;29597:9;29593:18;29585:26;;29657:9;29651:4;29647:20;29643:1;29632:9;29628:17;29621:47;29685:108;29788:4;29779:6;29685:108;:::i;:::-;29677:116;;29575:225;;;;:::o;29806:210::-;;29931:2;29920:9;29916:18;29908:26;;29944:65;30006:1;29995:9;29991:17;29982:6;29944:65;:::i;:::-;29898:118;;;;:::o;30022:218::-;;30151:2;30140:9;30136:18;30128:26;;30164:69;30230:1;30219:9;30215:17;30206:6;30164:69;:::i;:::-;30118:122;;;;:::o;30246:313::-;;30397:2;30386:9;30382:18;30374:26;;30446:9;30440:4;30436:20;30432:1;30421:9;30417:17;30410:47;30474:78;30547:4;30538:6;30474:78;:::i;:::-;30466:86;;30364:195;;;;:::o;30565:419::-;;30769:2;30758:9;30754:18;30746:26;;30818:9;30812:4;30808:20;30804:1;30793:9;30789:17;30782:47;30846:131;30972:4;30846:131;:::i;:::-;30838:139;;30736:248;;;:::o;30990:419::-;;31194:2;31183:9;31179:18;31171:26;;31243:9;31237:4;31233:20;31229:1;31218:9;31214:17;31207:47;31271:131;31397:4;31271:131;:::i;:::-;31263:139;;31161:248;;;:::o;31415:419::-;;31619:2;31608:9;31604:18;31596:26;;31668:9;31662:4;31658:20;31654:1;31643:9;31639:17;31632:47;31696:131;31822:4;31696:131;:::i;:::-;31688:139;;31586:248;;;:::o;31840:419::-;;32044:2;32033:9;32029:18;32021:26;;32093:9;32087:4;32083:20;32079:1;32068:9;32064:17;32057:47;32121:131;32247:4;32121:131;:::i;:::-;32113:139;;32011:248;;;:::o;32265:419::-;;32469:2;32458:9;32454:18;32446:26;;32518:9;32512:4;32508:20;32504:1;32493:9;32489:17;32482:47;32546:131;32672:4;32546:131;:::i;:::-;32538:139;;32436:248;;;:::o;32690:419::-;;32894:2;32883:9;32879:18;32871:26;;32943:9;32937:4;32933:20;32929:1;32918:9;32914:17;32907:47;32971:131;33097:4;32971:131;:::i;:::-;32963:139;;32861:248;;;:::o;33115:419::-;;33319:2;33308:9;33304:18;33296:26;;33368:9;33362:4;33358:20;33354:1;33343:9;33339:17;33332:47;33396:131;33522:4;33396:131;:::i;:::-;33388:139;;33286:248;;;:::o;33540:419::-;;33744:2;33733:9;33729:18;33721:26;;33793:9;33787:4;33783:20;33779:1;33768:9;33764:17;33757:47;33821:131;33947:4;33821:131;:::i;:::-;33813:139;;33711:248;;;:::o;33965:419::-;;34169:2;34158:9;34154:18;34146:26;;34218:9;34212:4;34208:20;34204:1;34193:9;34189:17;34182:47;34246:131;34372:4;34246:131;:::i;:::-;34238:139;;34136:248;;;:::o;34390:419::-;;34594:2;34583:9;34579:18;34571:26;;34643:9;34637:4;34633:20;34629:1;34618:9;34614:17;34607:47;34671:131;34797:4;34671:131;:::i;:::-;34663:139;;34561:248;;;:::o;34815:419::-;;35019:2;35008:9;35004:18;34996:26;;35068:9;35062:4;35058:20;35054:1;35043:9;35039:17;35032:47;35096:131;35222:4;35096:131;:::i;:::-;35088:139;;34986:248;;;:::o;35240:419::-;;35444:2;35433:9;35429:18;35421:26;;35493:9;35487:4;35483:20;35479:1;35468:9;35464:17;35457:47;35521:131;35647:4;35521:131;:::i;:::-;35513:139;;35411:248;;;:::o;35665:419::-;;35869:2;35858:9;35854:18;35846:26;;35918:9;35912:4;35908:20;35904:1;35893:9;35889:17;35882:47;35946:131;36072:4;35946:131;:::i;:::-;35938:139;;35836:248;;;:::o;36090:419::-;;36294:2;36283:9;36279:18;36271:26;;36343:9;36337:4;36333:20;36329:1;36318:9;36314:17;36307:47;36371:131;36497:4;36371:131;:::i;:::-;36363:139;;36261:248;;;:::o;36515:419::-;;36719:2;36708:9;36704:18;36696:26;;36768:9;36762:4;36758:20;36754:1;36743:9;36739:17;36732:47;36796:131;36922:4;36796:131;:::i;:::-;36788:139;;36686:248;;;:::o;36940:419::-;;37144:2;37133:9;37129:18;37121:26;;37193:9;37187:4;37183:20;37179:1;37168:9;37164:17;37157:47;37221:131;37347:4;37221:131;:::i;:::-;37213:139;;37111:248;;;:::o;37365:419::-;;37569:2;37558:9;37554:18;37546:26;;37618:9;37612:4;37608:20;37604:1;37593:9;37589:17;37582:47;37646:131;37772:4;37646:131;:::i;:::-;37638:139;;37536:248;;;:::o;37790:419::-;;37994:2;37983:9;37979:18;37971:26;;38043:9;38037:4;38033:20;38029:1;38018:9;38014:17;38007:47;38071:131;38197:4;38071:131;:::i;:::-;38063:139;;37961:248;;;:::o;38215:419::-;;38419:2;38408:9;38404:18;38396:26;;38468:9;38462:4;38458:20;38454:1;38443:9;38439:17;38432:47;38496:131;38622:4;38496:131;:::i;:::-;38488:139;;38386:248;;;:::o;38640:419::-;;38844:2;38833:9;38829:18;38821:26;;38893:9;38887:4;38883:20;38879:1;38868:9;38864:17;38857:47;38921:131;39047:4;38921:131;:::i;:::-;38913:139;;38811:248;;;:::o;39065:419::-;;39269:2;39258:9;39254:18;39246:26;;39318:9;39312:4;39308:20;39304:1;39293:9;39289:17;39282:47;39346:131;39472:4;39346:131;:::i;:::-;39338:139;;39236:248;;;:::o;39490:419::-;;39694:2;39683:9;39679:18;39671:26;;39743:9;39737:4;39733:20;39729:1;39718:9;39714:17;39707:47;39771:131;39897:4;39771:131;:::i;:::-;39763:139;;39661:248;;;:::o;39915:419::-;;40119:2;40108:9;40104:18;40096:26;;40168:9;40162:4;40158:20;40154:1;40143:9;40139:17;40132:47;40196:131;40322:4;40196:131;:::i;:::-;40188:139;;40086:248;;;:::o;40340:419::-;;40544:2;40533:9;40529:18;40521:26;;40593:9;40587:4;40583:20;40579:1;40568:9;40564:17;40557:47;40621:131;40747:4;40621:131;:::i;:::-;40613:139;;40511:248;;;:::o;40765:419::-;;40969:2;40958:9;40954:18;40946:26;;41018:9;41012:4;41008:20;41004:1;40993:9;40989:17;40982:47;41046:131;41172:4;41046:131;:::i;:::-;41038:139;;40936:248;;;:::o;41190:419::-;;41394:2;41383:9;41379:18;41371:26;;41443:9;41437:4;41433:20;41429:1;41418:9;41414:17;41407:47;41471:131;41597:4;41471:131;:::i;:::-;41463:139;;41361:248;;;:::o;41615:419::-;;41819:2;41808:9;41804:18;41796:26;;41868:9;41862:4;41858:20;41854:1;41843:9;41839:17;41832:47;41896:131;42022:4;41896:131;:::i;:::-;41888:139;;41786:248;;;:::o;42040:419::-;;42244:2;42233:9;42229:18;42221:26;;42293:9;42287:4;42283:20;42279:1;42268:9;42264:17;42257:47;42321:131;42447:4;42321:131;:::i;:::-;42313:139;;42211:248;;;:::o;42465:419::-;;42669:2;42658:9;42654:18;42646:26;;42718:9;42712:4;42708:20;42704:1;42693:9;42689:17;42682:47;42746:131;42872:4;42746:131;:::i;:::-;42738:139;;42636:248;;;:::o;42890:419::-;;43094:2;43083:9;43079:18;43071:26;;43143:9;43137:4;43133:20;43129:1;43118:9;43114:17;43107:47;43171:131;43297:4;43171:131;:::i;:::-;43163:139;;43061:248;;;:::o;43315:222::-;;43446:2;43435:9;43431:18;43423:26;;43459:71;43527:1;43516:9;43512:17;43503:6;43459:71;:::i;:::-;43413:124;;;;:::o;43543:129::-;;43604:20;;:::i;:::-;43594:30;;43633:33;43661:4;43653:6;43633:33;:::i;:::-;43584:88;;;:::o;43678:75::-;;43744:2;43738:9;43728:19;;43718:35;:::o;43759:311::-;;43926:18;43918:6;43915:30;43912:2;;;43948:18;;:::i;:::-;43912:2;43998:4;43990:6;43986:17;43978:25;;44058:4;44052;44048:15;44040:23;;43841:229;;;:::o;44076:307::-;;44227:18;44219:6;44216:30;44213:2;;;44249:18;;:::i;:::-;44213:2;44287:29;44309:6;44287:29;:::i;:::-;44279:37;;44371:4;44365;44361:15;44353:23;;44142:241;;;:::o;44389:308::-;;44541:18;44533:6;44530:30;44527:2;;;44563:18;;:::i;:::-;44527:2;44601:29;44623:6;44601:29;:::i;:::-;44593:37;;44685:4;44679;44675:15;44667:23;;44456:241;;;:::o;44703:132::-;;44793:3;44785:11;;44823:4;44818:3;44814:14;44806:22;;44775:60;;;:::o;44841:141::-;;44913:3;44905:11;;44936:3;44933:1;44926:14;44970:4;44967:1;44957:18;44949:26;;44895:87;;;:::o;44988:114::-;;45089:5;45083:12;45073:22;;45062:40;;;:::o;45108:98::-;;45193:5;45187:12;45177:22;;45166:40;;;:::o;45212:99::-;;45298:5;45292:12;45282:22;;45271:40;;;:::o;45317:113::-;;45419:4;45414:3;45410:14;45402:22;;45392:38;;;:::o;45436:184::-;;45569:6;45564:3;45557:19;45609:4;45604:3;45600:14;45585:29;;45547:73;;;;:::o;45626:168::-;;45743:6;45738:3;45731:19;45783:4;45778:3;45774:14;45759:29;;45721:73;;;;:::o;45800:147::-;;45938:3;45923:18;;45913:34;;;;:::o;45953:169::-;;46071:6;46066:3;46059:19;46111:4;46106:3;46102:14;46087:29;;46049:73;;;;:::o;46128:148::-;;46267:3;46252:18;;46242:34;;;;:::o;46282:305::-;;46341:20;46359:1;46341:20;:::i;:::-;46336:25;;46375:20;46393:1;46375:20;:::i;:::-;46370:25;;46529:1;46461:66;46457:74;46454:1;46451:81;46448:2;;;46535:18;;:::i;:::-;46448:2;46579:1;46576;46572:9;46565:16;;46326:261;;;;:::o;46593:185::-;;46650:20;46668:1;46650:20;:::i;:::-;46645:25;;46684:20;46702:1;46684:20;:::i;:::-;46679:25;;46723:1;46713:2;;46728:18;;:::i;:::-;46713:2;46770:1;46767;46763:9;46758:14;;46635:143;;;;:::o;46784:191::-;;46844:20;46862:1;46844:20;:::i;:::-;46839:25;;46878:20;46896:1;46878:20;:::i;:::-;46873:25;;46917:1;46914;46911:8;46908:2;;;46922:18;;:::i;:::-;46908:2;46967:1;46964;46960:9;46952:17;;46829:146;;;;:::o;46981:96::-;;47047:24;47065:5;47047:24;:::i;:::-;47036:35;;47026:51;;;:::o;47083:90::-;;47160:5;47153:13;47146:21;47135:32;;47125:48;;;:::o;47179:149::-;;47255:66;47248:5;47244:78;47233:89;;47223:105;;;:::o;47334:126::-;;47411:42;47404:5;47400:54;47389:65;;47379:81;;;:::o;47466:77::-;;47532:5;47521:16;;47511:32;;;:::o;47549:154::-;47633:6;47628:3;47623;47610:30;47695:1;47686:6;47681:3;47677:16;47670:27;47600:103;;;:::o;47709:307::-;47777:1;47787:113;47801:6;47798:1;47795:13;47787:113;;;47886:1;47881:3;47877:11;47871:18;47867:1;47862:3;47858:11;47851:39;47823:2;47820:1;47816:10;47811:15;;47787:113;;;47918:6;47915:1;47912:13;47909:2;;;47998:1;47989:6;47984:3;47980:16;47973:27;47909:2;47758:258;;;;:::o;48022:320::-;;48103:1;48097:4;48093:12;48083:22;;48150:1;48144:4;48140:12;48171:18;48161:2;;48227:4;48219:6;48215:17;48205:27;;48161:2;48289;48281:6;48278:14;48258:18;48255:38;48252:2;;;48308:18;;:::i;:::-;48252:2;48073:269;;;;:::o;48348:281::-;48431:27;48453:4;48431:27;:::i;:::-;48423:6;48419:40;48561:6;48549:10;48546:22;48525:18;48513:10;48510:34;48507:62;48504:2;;;48572:18;;:::i;:::-;48504:2;48612:10;48608:2;48601:22;48391:238;;;:::o;48635:233::-;;48697:24;48715:5;48697:24;:::i;:::-;48688:33;;48743:66;48736:5;48733:77;48730:2;;;48813:18;;:::i;:::-;48730:2;48860:1;48853:5;48849:13;48842:20;;48678:190;;;:::o;48874:176::-;;48923:20;48941:1;48923:20;:::i;:::-;48918:25;;48957:20;48975:1;48957:20;:::i;:::-;48952:25;;48996:1;48986:2;;49001:18;;:::i;:::-;48986:2;49042:1;49039;49035:9;49030:14;;48908:142;;;;:::o;49056:180::-;49104:77;49101:1;49094:88;49201:4;49198:1;49191:15;49225:4;49222:1;49215:15;49242:180;49290:77;49287:1;49280:88;49387:4;49384:1;49377:15;49411:4;49408:1;49401:15;49428:180;49476:77;49473:1;49466:88;49573:4;49570:1;49563:15;49597:4;49594:1;49587:15;49614:180;49662:77;49659:1;49652:88;49759:4;49756:1;49749:15;49783:4;49780:1;49773:15;49800:102;;49892:2;49888:7;49883:2;49876:5;49872:14;49868:28;49858:38;;49848:54;;;:::o;49908:165::-;50048:17;50044:1;50036:6;50032:14;50025:41;50014:59;:::o;50079:230::-;50219:34;50215:1;50207:6;50203:14;50196:58;50288:13;50283:2;50275:6;50271:15;50264:38;50185:124;:::o;50315:182::-;50455:34;50451:1;50443:6;50439:14;50432:58;50421:76;:::o;50503:169::-;50643:21;50639:1;50631:6;50627:14;50620:45;50609:63;:::o;50678:166::-;50818:18;50814:1;50806:6;50802:14;50795:42;50784:60;:::o;50850:163::-;50990:15;50986:1;50978:6;50974:14;50967:39;50956:57;:::o;51019:177::-;51159:29;51155:1;51147:6;51143:14;51136:53;51125:71;:::o;51202:178::-;51342:30;51338:1;51330:6;51326:14;51319:54;51308:72;:::o;51386:182::-;51526:34;51522:1;51514:6;51510:14;51503:58;51492:76;:::o;51574:180::-;51714:32;51710:1;51702:6;51698:14;51691:56;51680:74;:::o;51760:171::-;51900:23;51896:1;51888:6;51884:14;51877:47;51866:65;:::o;51937:174::-;52077:26;52073:1;52065:6;52061:14;52054:50;52043:68;:::o;52117:182::-;52257:34;52253:1;52245:6;52241:14;52234:58;52223:76;:::o;52305:175::-;52445:27;52441:1;52433:6;52429:14;52422:51;52411:69;:::o;52486:220::-;52626:34;52622:1;52614:6;52610:14;52603:58;52695:3;52690:2;52682:6;52678:15;52671:28;52592:114;:::o;52712:162::-;52852:14;52848:1;52840:6;52836:14;52829:38;52818:56;:::o;52880:180::-;53020:32;53016:1;53008:6;53004:14;52997:56;52986:74;:::o;53066:176::-;53206:28;53202:1;53194:6;53190:14;53183:52;53172:70;:::o;53248:181::-;53388:33;53384:1;53376:6;53372:14;53365:57;53354:75;:::o;53435:181::-;53575:33;53571:1;53563:6;53559:14;53552:57;53541:75;:::o;53622:182::-;53762:34;53758:1;53750:6;53746:14;53739:58;53728:76;:::o;53810:182::-;53950:34;53946:1;53938:6;53934:14;53927:58;53916:76;:::o;53998:155::-;54138:7;54134:1;54126:6;54122:14;54115:31;54104:49;:::o;54159:178::-;54299:30;54295:1;54287:6;54283:14;54276:54;54265:72;:::o;54343:182::-;54483:34;54479:1;54471:6;54467:14;54460:58;54449:76;:::o;54531:180::-;54671:32;54667:1;54659:6;54655:14;54648:56;54637:74;:::o;54717:178::-;54857:30;54853:1;54845:6;54841:14;54834:54;54823:72;:::o;54901:223::-;55041:34;55037:1;55029:6;55025:14;55018:58;55110:6;55105:2;55097:6;55093:15;55086:31;55007:117;:::o;55130:220::-;55270:34;55266:1;55258:6;55254:14;55247:58;55339:3;55334:2;55326:6;55322:15;55315:28;55236:114;:::o;55356:::-;55462:8;:::o;55476:179::-;55616:31;55612:1;55604:6;55600:14;55593:55;55582:73;:::o;55661:230::-;55801:34;55797:1;55789:6;55785:14;55778:58;55870:13;55865:2;55857:6;55853:15;55846:38;55767:124;:::o;55897:179::-;56037:31;56033:1;56025:6;56021:14;56014:55;56003:73;:::o;56082:169::-;56222:21;56218:1;56210:6;56206:14;56199:45;56188:63;:::o;56257:122::-;56330:24;56348:5;56330:24;:::i;:::-;56323:5;56320:35;56310:2;;56369:1;56366;56359:12;56310:2;56300:79;:::o;56385:116::-;56455:21;56470:5;56455:21;:::i;:::-;56448:5;56445:32;56435:2;;56491:1;56488;56481:12;56435:2;56425:76;:::o;56507:120::-;56579:23;56596:5;56579:23;:::i;:::-;56572:5;56569:34;56559:2;;56617:1;56614;56607:12;56559:2;56549:78;:::o;56633:122::-;56706:24;56724:5;56706:24;:::i;:::-;56699:5;56696:35;56686:2;;56745:1;56742;56735:12;56686:2;56676:79;:::o

Swarm Source

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