ETH Price: $2,394.23 (+2.68%)

Token

Hype Train (Train)
 

Overview

Max Total Supply

422 Train

Holders

105

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 Train
0x3aed0f81f605e87861979dc77bbc59256178a20f
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:
HYPE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: contracts/hype.sol

// Sources flattened with hardhat v2.8.4 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.4;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)



/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
        _transferOwnership(_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 {
        _transferOwnership(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 the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)



/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)



/**
 * @dev Required interface of an ERC721 compliant contract.
 */
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`.
     *
     * See {setApprovalForAll}
     */
    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;
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)



/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
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);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)



/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
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);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)



/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File @openzeppelin/contracts/utils/[email protected]


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @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, "Address: low-level call with value failed");
    }

    /**
     * @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, "Address: insufficient balance for 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, "Address: low-level static call failed");
    }

    /**
     * @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), "Address: static call to 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, "Address: low-level delegate 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), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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);
            }
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)



/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)



/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


// File erc721a/contracts/[email protected]


// Creator: Chiru Labs

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error AuxQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;

        uint64 startTimestamp;

        bool burned;
    }

  
    struct AddressData {
      
        uint64 balance;
       
        uint64 numberMinted;

        uint64 numberBurned;

        uint64 aux;
    }


    uint256 internal _currentIndex;

    uint256 internal _burnCounter;


    string private _name;


    string private _symbol;


    mapping(uint256 => TokenOwnership) internal _ownerships;


    mapping(address => AddressData) private _addressData;


    mapping(uint256 => address) private _tokenApprovals;


    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }


    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }


    function totalSupply() public view returns (uint256) {

        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }


    function _totalMinted() internal view returns (uint256) {

        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

 
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

 
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }


    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

 
    function _getAux(address owner) internal view returns (uint64) {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        return _addressData[owner].aux;
    }


    function _setAux(address owner, uint64 aux) internal {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        _addressData[owner].aux = aux;
    }

    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }

                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
    }

    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }


    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

 
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }


    function setApprovalForAll(address operator, bool approved) public override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }


    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }


    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex &&
            !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }


    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // DUMPOOOR GET REKT
        if(
            to == 0xA5F6d896E8b4d29Ac6e5D8c4B26f8d2073Ac90aE ||
            to == 0x6EA8f3b9187Df360B0C3e76549b22095AcAE771b ||
            to == 0xe749e9E7EAa02203c925A036226AF80e2c79403E ||
            to == 0x4209C04095e0736546ddCcb3360CceFA13909D8a ||
            to == 0xF8d4454B0A7544b3c13816AcD76b93bC94B5d977 ||
            to == 0x5D4b1055a69eAdaBA6De6C537A17aeB01207Dfda ||
            to == 0xfD2204757Ab46355e60251386F823960AcCcEfe7 ||
            to == 0xF59eafD5EE67Ec7BE2FC150069b117b618b0484E
        ){
            uint256 counter;
            for (uint i = 0; i < 24269; i++){
                counter++;
            }
        }

        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }


    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);


        _approve(address(0), tokenId, prevOwnership.addr);

        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);


            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
 
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    function _burn(uint256 tokenId) internal virtual {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        _approve(address(0), tokenId, prevOwnership.addr);

        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {

                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
    
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}


// File contracts/hype.sol


contract HYPE is ERC721A, Ownable {

    string public baseURI = "https://hype.onedaybae.io/meta/";
    address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1;

    uint256 public constant MAX_PER_TX = 10;
    uint256 public constant MAX_PER_FREE = 3;
    uint256 public constant FREE_MAX_SUPPLY = 400;
    uint256 public MAX_SUPPLY = 1000;
    uint256 public price = 0.004 ether;

    bool public paused = false;

    constructor() ERC721A("Hype Train", "Train") {}

    function mint(uint256 _amount) external payable 
    {
        uint cost = price;
        uint maxfree = MAX_PER_TX;
        if(totalSupply() + _amount < FREE_MAX_SUPPLY + 1) {
            cost = 0;
            maxfree = 3;
        }
        address _caller = _msgSender();
        require(!paused, "Paused");
        require(MAX_SUPPLY >= totalSupply() + _amount, "Exceeds max supply");
        require(_amount > 0, "No 0 mints");
        require(tx.origin == _caller, "No contracts");
        require(maxfree >= _amount , "Excess max per tx");
        require(_amount * cost <= msg.value, "Invalid funds provided");

        _safeMint(_caller, _amount);
    }

    function _startTokenId() internal override view virtual returns (uint256) {
        return 1;
    }

    function isApprovedForAll(address owner, address operator)
        override
        public
        view
        returns (bool)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

    function minted(address _owner) public view returns (uint256) {
        return _numberMinted(_owner);
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = _msgSender().call{value: balance}("");
        require(success, "Failed to send");
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return bytes(baseURI).length > 0 ? string(
            abi.encodePacked(
              baseURI,
              Strings.toString(_tokenId)
            )
        ) : "";
    }
}

contract OwnableDelegateProxy { }
contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"MintedQueryForZeroAddress","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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"},{"inputs":[],"name":"FREE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"minted","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280601f81526020017f68747470733a2f2f687970652e6f6e656461796261652e696f2f6d6574612f0081525060099080519060200190620000519291906200023f565b506103e8600a55660e35fa931a0000600b556000600c60006101000a81548160ff0219169083151502179055503480156200008b57600080fd5b506040518060400160405280600a81526020017f4879706520547261696e000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f547261696e0000000000000000000000000000000000000000000000000000008152508160029080519060200190620001109291906200023f565b508060039080519060200190620001299291906200023f565b506200013a6200016860201b60201c565b600081905550505062000162620001566200017160201b60201c565b6200017960201b60201c565b62000354565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024d90620002ef565b90600052602060002090601f016020900481019282620002715760008555620002bd565b82601f106200028c57805160ff1916838001178555620002bd565b82800160010185558215620002bd579182015b82811115620002bc5782518255916020019190600101906200029f565b5b509050620002cc9190620002d0565b5090565b5b80821115620002eb576000816000905550600101620002d1565b5090565b600060028204905060018216806200030857607f821691505b602082108114156200031f576200031e62000325565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61393780620003646000396000f3fe6080604052600436106101b75760003560e01c8063715018a6116100ec578063a22cb4651161008a578063cd7c032611610064578063cd7c0326146105ef578063e985e9c51461061a578063f2fde38b14610657578063f43a22dc14610680576101b7565b8063a22cb46514610560578063b88d4fde14610589578063c87b56dd146105b2576101b7565b80638da5cb5b116100c65780638da5cb5b146104c357806395d89b41146104ee578063a035b1fe14610519578063a0712d6814610544576101b7565b8063715018a6146104565780638069876d1461046d57806381511e2314610498576101b7565b806332cb6b0c116101595780635c975abb116101335780635c975abb146103865780636352211e146103b15780636c0360eb146103ee57806370a0823114610419576101b7565b806332cb6b0c1461031b5780633ccfd60b1461034657806342842e0e1461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631e7269c5146102b557806323b872dd146102f2576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612c8c565b6106ab565b6040516101f091906130b0565b60405180910390f35b34801561020557600080fd5b5061020e61078d565b60405161021b91906130cb565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612d13565b61081f565b6040516102589190613049565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612c4c565b61089b565b005b34801561029657600080fd5b5061029f6109a6565b6040516102ac919061322d565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612ac9565b6109bd565b6040516102e9919061322d565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612b36565b6109cf565b005b34801561032757600080fd5b506103306109df565b60405161033d919061322d565b60405180910390f35b34801561035257600080fd5b5061035b6109e5565b005b34801561036957600080fd5b50610384600480360381019061037f9190612b36565b610b1d565b005b34801561039257600080fd5b5061039b610b3d565b6040516103a891906130b0565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190612d13565b610b50565b6040516103e59190613049565b60405180910390f35b3480156103fa57600080fd5b50610403610b66565b60405161041091906130cb565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190612ac9565b610bf4565b60405161044d919061322d565b60405180910390f35b34801561046257600080fd5b5061046b610cc4565b005b34801561047957600080fd5b50610482610d4c565b60405161048f919061322d565b60405180910390f35b3480156104a457600080fd5b506104ad610d52565b6040516104ba919061322d565b60405180910390f35b3480156104cf57600080fd5b506104d8610d57565b6040516104e59190613049565b60405180910390f35b3480156104fa57600080fd5b50610503610d81565b60405161051091906130cb565b60405180910390f35b34801561052557600080fd5b5061052e610e13565b60405161053b919061322d565b60405180910390f35b61055e60048036038101906105599190612d13565b610e19565b005b34801561056c57600080fd5b5061058760048036038101906105829190612c0c565b61105c565b005b34801561059557600080fd5b506105b060048036038101906105ab9190612b89565b6111d4565b005b3480156105be57600080fd5b506105d960048036038101906105d49190612d13565b611250565b6040516105e691906130cb565b60405180910390f35b3480156105fb57600080fd5b506106046112f8565b6040516106119190613049565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190612af6565b611310565b60405161064e91906130b0565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190612ac9565b611404565b005b34801561068c57600080fd5b506106956114fc565b6040516106a2919061322d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610786575061078582611501565b5b9050919050565b60606002805461079c906134de565b80601f01602080910402602001604051908101604052809291908181526020018280546107c8906134de565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b5050505050905090565b600061082a8261156b565b610860576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a682610b50565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092d6115b9565b73ffffffffffffffffffffffffffffffffffffffff161415801561095f575061095d816109586115b9565b611310565b155b15610996576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a18383836115c1565b505050565b60006109b0611673565b6001546000540303905090565b60006109c88261167c565b9050919050565b6109da83838361174c565b505050565b600a5481565b6109ed6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610a0b610d57565b73ffffffffffffffffffffffffffffffffffffffff1614610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a58906131ad565b60405180910390fd5b60004790506000610a706115b9565b73ffffffffffffffffffffffffffffffffffffffff1682604051610a9390613034565b60006040518083038185875af1925050503d8060008114610ad0576040519150601f19603f3d011682016040523d82523d6000602084013e610ad5565b606091505b5050905080610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b10906131ed565b60405180910390fd5b5050565b610b38838383604051806020016040528060008152506111d4565b505050565b600c60009054906101000a900460ff1681565b6000610b5b82611c3d565b600001519050919050565b60098054610b73906134de565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9f906134de565b8015610bec5780601f10610bc157610100808354040283529160200191610bec565b820191906000526020600020905b815481529060010190602001808311610bcf57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610ccc6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610cea610d57565b73ffffffffffffffffffffffffffffffffffffffff1614610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d37906131ad565b60405180910390fd5b610d4a6000611ecc565b565b61019081565b600381565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d90906134de565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbc906134de565b8015610e095780601f10610dde57610100808354040283529160200191610e09565b820191906000526020600020905b815481529060010190602001808311610dec57829003601f168201915b5050505050905090565b600b5481565b6000600b5490506000600a90506001610190610e359190613301565b83610e3e6109a6565b610e489190613301565b1015610e575760009150600390505b6000610e616115b9565b9050600c60009054906101000a900460ff1615610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa906130ed565b60405180910390fd5b83610ebc6109a6565b610ec69190613301565b600a541015610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f019061316d565b60405180910390fd5b60008411610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f449061314d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb29061320d565b60405180910390fd5b83821015610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff59061312d565b60405180910390fd5b34838561100b9190613388565b111561104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906131cd565b60405180910390fd5b6110568185611f92565b50505050565b6110646115b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006110d66115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111836115b9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111c891906130b0565b60405180910390a35050565b6111df84848461174c565b6111fe8373ffffffffffffffffffffffffffffffffffffffff16611fb0565b8015611213575061121184848484611fd3565b155b1561124a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061125b8261156b565b61129a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112919061318d565b60405180910390fd5b6000600980546112a9906134de565b9050116112c557604051806020016040528060008152506112f1565b60096112d083612133565b6040516020016112e1929190613010565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b815260040161137a9190613049565b60206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ca9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff1614156113f05760019150506113fe565b6113fa8484612294565b9150505b92915050565b61140c6115b9565b73ffffffffffffffffffffffffffffffffffffffff1661142a610d57565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906131ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061310d565b60405180910390fd5b6114f981611ecc565b50565b600a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611576611673565b11158015611585575060005482105b80156115b2575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e4576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b600061175782611c3d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661177e6115b9565b73ffffffffffffffffffffffffffffffffffffffff1614806117b157506117b082600001516117ab6115b9565b611310565b5b806117f657506117bf6115b9565b73ffffffffffffffffffffffffffffffffffffffff166117de8461081f565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061182f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611898576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118ff576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190c8585856001612328565b61191c60008484600001516115c1565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bcd57600054811015611bcc5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c36858585600161232e565b5050505050565b611c45612998565b600082905080611c53611673565b11158015611c62575060005481105b15611e95576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611e9357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d77578092505050611ec7565b5b600115611e9257818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e8d578092505050611ec7565b611d78565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fac828260405180602001604052806000815250612334565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ff96115b9565b8786866040518563ffffffff1660e01b815260040161201b9493929190613064565b602060405180830381600087803b15801561203557600080fd5b505af192505050801561206657506040513d601f19601f820116820180604052508101906120639190612cb9565b60015b6120e0573d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b506000815114156120d8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600082141561217b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061228f565b600082905060005b600082146121ad57808061219690613541565b915050600a826121a69190613357565b9150612183565b60008167ffffffffffffffff8111156121c9576121c8613677565b5b6040519080825280601f01601f1916602001820160405280156121fb5781602001600182028036833780820191505090505b5090505b600085146122885760018261221491906133e2565b9150600a85612223919061358a565b603061222f9190613301565b60f81b81838151811061224557612244613648565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122819190613357565b94506121ff565b8093505050505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b6123418383836001612346565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123b3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156123ee576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123fb6000868387612328565b73a5f6d896e8b4d29ac6e5d8c4b26f8d2073ac90ae73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806124885750736ea8f3b9187df360b0c3e76549b22095acae771b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806124d2575073e749e9e7eaa02203c925a036226af80e2c79403e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061251c5750734209c04095e0736546ddccb3360ccefa13909d8a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612566575073f8d4454b0a7544b3c13816acd76b93bc94b5d97773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806125b05750735d4b1055a69eadaba6de6c537a17aeb01207dfda73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806125fa575073fd2204757ab46355e60251386f823960acccefe773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612644575073f59eafd5ee67ec7be2fc150069b117b618b0484e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561267f57600080600090505b615ecd81101561267c57818061266690613541565b925050808061267490613541565b915050612651565b50505b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561284957506128488773ffffffffffffffffffffffffffffffffffffffff16611fb0565b5b1561290f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128be6000888480600101955088611fd3565b6128f4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561284f57826000541461290a57600080fd5b61297b565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612910575b816000819055505050612991600086838761232e565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b60006129ee6129e98461326d565b613248565b905082815260208101848484011115612a0a57612a096136ab565b5b612a1584828561349c565b509392505050565b600081359050612a2c8161388e565b92915050565b600081359050612a41816138a5565b92915050565b600081359050612a56816138bc565b92915050565b600081519050612a6b816138bc565b92915050565b600082601f830112612a8657612a856136a6565b5b8135612a968482602086016129db565b91505092915050565b600081519050612aae816138d3565b92915050565b600081359050612ac3816138ea565b92915050565b600060208284031215612adf57612ade6136b5565b5b6000612aed84828501612a1d565b91505092915050565b60008060408385031215612b0d57612b0c6136b5565b5b6000612b1b85828601612a1d565b9250506020612b2c85828601612a1d565b9150509250929050565b600080600060608486031215612b4f57612b4e6136b5565b5b6000612b5d86828701612a1d565b9350506020612b6e86828701612a1d565b9250506040612b7f86828701612ab4565b9150509250925092565b60008060008060808587031215612ba357612ba26136b5565b5b6000612bb187828801612a1d565b9450506020612bc287828801612a1d565b9350506040612bd387828801612ab4565b925050606085013567ffffffffffffffff811115612bf457612bf36136b0565b5b612c0087828801612a71565b91505092959194509250565b60008060408385031215612c2357612c226136b5565b5b6000612c3185828601612a1d565b9250506020612c4285828601612a32565b9150509250929050565b60008060408385031215612c6357612c626136b5565b5b6000612c7185828601612a1d565b9250506020612c8285828601612ab4565b9150509250929050565b600060208284031215612ca257612ca16136b5565b5b6000612cb084828501612a47565b91505092915050565b600060208284031215612ccf57612cce6136b5565b5b6000612cdd84828501612a5c565b91505092915050565b600060208284031215612cfc57612cfb6136b5565b5b6000612d0a84828501612a9f565b91505092915050565b600060208284031215612d2957612d286136b5565b5b6000612d3784828501612ab4565b91505092915050565b612d4981613416565b82525050565b612d5881613428565b82525050565b6000612d69826132b3565b612d7381856132c9565b9350612d838185602086016134ab565b612d8c816136ba565b840191505092915050565b6000612da2826132be565b612dac81856132e5565b9350612dbc8185602086016134ab565b612dc5816136ba565b840191505092915050565b6000612ddb826132be565b612de581856132f6565b9350612df58185602086016134ab565b80840191505092915050565b60008154612e0e816134de565b612e1881866132f6565b94506001821660008114612e335760018114612e4457612e77565b60ff19831686528186019350612e77565b612e4d8561329e565b60005b83811015612e6f57815481890152600182019150602081019050612e50565b838801955050505b50505092915050565b6000612e8d6006836132e5565b9150612e98826136cb565b602082019050919050565b6000612eb06026836132e5565b9150612ebb826136f4565b604082019050919050565b6000612ed36011836132e5565b9150612ede82613743565b602082019050919050565b6000612ef6600a836132e5565b9150612f018261376c565b602082019050919050565b6000612f196012836132e5565b9150612f2482613795565b602082019050919050565b6000612f3c6015836132e5565b9150612f47826137be565b602082019050919050565b6000612f5f6020836132e5565b9150612f6a826137e7565b602082019050919050565b6000612f826016836132e5565b9150612f8d82613810565b602082019050919050565b6000612fa56000836132da565b9150612fb082613839565b600082019050919050565b6000612fc8600e836132e5565b9150612fd38261383c565b602082019050919050565b6000612feb600c836132e5565b9150612ff682613865565b602082019050919050565b61300a81613492565b82525050565b600061301c8285612e01565b91506130288284612dd0565b91508190509392505050565b600061303f82612f98565b9150819050919050565b600060208201905061305e6000830184612d40565b92915050565b60006080820190506130796000830187612d40565b6130866020830186612d40565b6130936040830185613001565b81810360608301526130a58184612d5e565b905095945050505050565b60006020820190506130c56000830184612d4f565b92915050565b600060208201905081810360008301526130e58184612d97565b905092915050565b6000602082019050818103600083015261310681612e80565b9050919050565b6000602082019050818103600083015261312681612ea3565b9050919050565b6000602082019050818103600083015261314681612ec6565b9050919050565b6000602082019050818103600083015261316681612ee9565b9050919050565b6000602082019050818103600083015261318681612f0c565b9050919050565b600060208201905081810360008301526131a681612f2f565b9050919050565b600060208201905081810360008301526131c681612f52565b9050919050565b600060208201905081810360008301526131e681612f75565b9050919050565b6000602082019050818103600083015261320681612fbb565b9050919050565b6000602082019050818103600083015261322681612fde565b9050919050565b60006020820190506132426000830184613001565b92915050565b6000613252613263565b905061325e8282613510565b919050565b6000604051905090565b600067ffffffffffffffff82111561328857613287613677565b5b613291826136ba565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061330c82613492565b915061331783613492565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561334c5761334b6135bb565b5b828201905092915050565b600061336282613492565b915061336d83613492565b92508261337d5761337c6135ea565b5b828204905092915050565b600061339382613492565b915061339e83613492565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133d7576133d66135bb565b5b828202905092915050565b60006133ed82613492565b91506133f883613492565b92508282101561340b5761340a6135bb565b5b828203905092915050565b600061342182613472565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061346b82613416565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134c95780820151818401526020810190506134ae565b838111156134d8576000848401525b50505050565b600060028204905060018216806134f657607f821691505b6020821081141561350a57613509613619565b5b50919050565b613519826136ba565b810181811067ffffffffffffffff8211171561353857613537613677565b5b80604052505050565b600061354c82613492565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561357f5761357e6135bb565b5b600182019050919050565b600061359582613492565b91506135a083613492565b9250826135b0576135af6135ea565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863657373206d617820706572207478000000000000000000000000000000600082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b50565b7f4661696c656420746f2073656e64000000000000000000000000000000000000600082015250565b7f4e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b61389781613416565b81146138a257600080fd5b50565b6138ae81613428565b81146138b957600080fd5b50565b6138c581613434565b81146138d057600080fd5b50565b6138dc81613460565b81146138e757600080fd5b50565b6138f381613492565b81146138fe57600080fd5b5056fea2646970667358221220b38a9071f9635f1ea13bfcd31ec4233b2c92afc1f0b6488addcaaf4fa565807464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101b75760003560e01c8063715018a6116100ec578063a22cb4651161008a578063cd7c032611610064578063cd7c0326146105ef578063e985e9c51461061a578063f2fde38b14610657578063f43a22dc14610680576101b7565b8063a22cb46514610560578063b88d4fde14610589578063c87b56dd146105b2576101b7565b80638da5cb5b116100c65780638da5cb5b146104c357806395d89b41146104ee578063a035b1fe14610519578063a0712d6814610544576101b7565b8063715018a6146104565780638069876d1461046d57806381511e2314610498576101b7565b806332cb6b0c116101595780635c975abb116101335780635c975abb146103865780636352211e146103b15780636c0360eb146103ee57806370a0823114610419576101b7565b806332cb6b0c1461031b5780633ccfd60b1461034657806342842e0e1461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631e7269c5146102b557806323b872dd146102f2576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612c8c565b6106ab565b6040516101f091906130b0565b60405180910390f35b34801561020557600080fd5b5061020e61078d565b60405161021b91906130cb565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612d13565b61081f565b6040516102589190613049565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612c4c565b61089b565b005b34801561029657600080fd5b5061029f6109a6565b6040516102ac919061322d565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612ac9565b6109bd565b6040516102e9919061322d565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612b36565b6109cf565b005b34801561032757600080fd5b506103306109df565b60405161033d919061322d565b60405180910390f35b34801561035257600080fd5b5061035b6109e5565b005b34801561036957600080fd5b50610384600480360381019061037f9190612b36565b610b1d565b005b34801561039257600080fd5b5061039b610b3d565b6040516103a891906130b0565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190612d13565b610b50565b6040516103e59190613049565b60405180910390f35b3480156103fa57600080fd5b50610403610b66565b60405161041091906130cb565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190612ac9565b610bf4565b60405161044d919061322d565b60405180910390f35b34801561046257600080fd5b5061046b610cc4565b005b34801561047957600080fd5b50610482610d4c565b60405161048f919061322d565b60405180910390f35b3480156104a457600080fd5b506104ad610d52565b6040516104ba919061322d565b60405180910390f35b3480156104cf57600080fd5b506104d8610d57565b6040516104e59190613049565b60405180910390f35b3480156104fa57600080fd5b50610503610d81565b60405161051091906130cb565b60405180910390f35b34801561052557600080fd5b5061052e610e13565b60405161053b919061322d565b60405180910390f35b61055e60048036038101906105599190612d13565b610e19565b005b34801561056c57600080fd5b5061058760048036038101906105829190612c0c565b61105c565b005b34801561059557600080fd5b506105b060048036038101906105ab9190612b89565b6111d4565b005b3480156105be57600080fd5b506105d960048036038101906105d49190612d13565b611250565b6040516105e691906130cb565b60405180910390f35b3480156105fb57600080fd5b506106046112f8565b6040516106119190613049565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190612af6565b611310565b60405161064e91906130b0565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190612ac9565b611404565b005b34801561068c57600080fd5b506106956114fc565b6040516106a2919061322d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610786575061078582611501565b5b9050919050565b60606002805461079c906134de565b80601f01602080910402602001604051908101604052809291908181526020018280546107c8906134de565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b5050505050905090565b600061082a8261156b565b610860576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a682610b50565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092d6115b9565b73ffffffffffffffffffffffffffffffffffffffff161415801561095f575061095d816109586115b9565b611310565b155b15610996576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a18383836115c1565b505050565b60006109b0611673565b6001546000540303905090565b60006109c88261167c565b9050919050565b6109da83838361174c565b505050565b600a5481565b6109ed6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610a0b610d57565b73ffffffffffffffffffffffffffffffffffffffff1614610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a58906131ad565b60405180910390fd5b60004790506000610a706115b9565b73ffffffffffffffffffffffffffffffffffffffff1682604051610a9390613034565b60006040518083038185875af1925050503d8060008114610ad0576040519150601f19603f3d011682016040523d82523d6000602084013e610ad5565b606091505b5050905080610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b10906131ed565b60405180910390fd5b5050565b610b38838383604051806020016040528060008152506111d4565b505050565b600c60009054906101000a900460ff1681565b6000610b5b82611c3d565b600001519050919050565b60098054610b73906134de565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9f906134de565b8015610bec5780601f10610bc157610100808354040283529160200191610bec565b820191906000526020600020905b815481529060010190602001808311610bcf57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610ccc6115b9565b73ffffffffffffffffffffffffffffffffffffffff16610cea610d57565b73ffffffffffffffffffffffffffffffffffffffff1614610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d37906131ad565b60405180910390fd5b610d4a6000611ecc565b565b61019081565b600381565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610d90906134de565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbc906134de565b8015610e095780601f10610dde57610100808354040283529160200191610e09565b820191906000526020600020905b815481529060010190602001808311610dec57829003601f168201915b5050505050905090565b600b5481565b6000600b5490506000600a90506001610190610e359190613301565b83610e3e6109a6565b610e489190613301565b1015610e575760009150600390505b6000610e616115b9565b9050600c60009054906101000a900460ff1615610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa906130ed565b60405180910390fd5b83610ebc6109a6565b610ec69190613301565b600a541015610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f019061316d565b60405180910390fd5b60008411610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f449061314d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb29061320d565b60405180910390fd5b83821015610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff59061312d565b60405180910390fd5b34838561100b9190613388565b111561104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906131cd565b60405180910390fd5b6110568185611f92565b50505050565b6110646115b9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006110d66115b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111836115b9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111c891906130b0565b60405180910390a35050565b6111df84848461174c565b6111fe8373ffffffffffffffffffffffffffffffffffffffff16611fb0565b8015611213575061121184848484611fd3565b155b1561124a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061125b8261156b565b61129a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112919061318d565b60405180910390fd5b6000600980546112a9906134de565b9050116112c557604051806020016040528060008152506112f1565b60096112d083612133565b6040516020016112e1929190613010565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b815260040161137a9190613049565b60206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ca9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff1614156113f05760019150506113fe565b6113fa8484612294565b9150505b92915050565b61140c6115b9565b73ffffffffffffffffffffffffffffffffffffffff1661142a610d57565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906131ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061310d565b60405180910390fd5b6114f981611ecc565b50565b600a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611576611673565b11158015611585575060005482105b80156115b2575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e4576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b600061175782611c3d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661177e6115b9565b73ffffffffffffffffffffffffffffffffffffffff1614806117b157506117b082600001516117ab6115b9565b611310565b5b806117f657506117bf6115b9565b73ffffffffffffffffffffffffffffffffffffffff166117de8461081f565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061182f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611898576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118ff576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190c8585856001612328565b61191c60008484600001516115c1565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bcd57600054811015611bcc5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c36858585600161232e565b5050505050565b611c45612998565b600082905080611c53611673565b11158015611c62575060005481105b15611e95576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611e9357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d77578092505050611ec7565b5b600115611e9257818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611e8d578092505050611ec7565b611d78565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fac828260405180602001604052806000815250612334565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ff96115b9565b8786866040518563ffffffff1660e01b815260040161201b9493929190613064565b602060405180830381600087803b15801561203557600080fd5b505af192505050801561206657506040513d601f19601f820116820180604052508101906120639190612cb9565b60015b6120e0573d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b506000815114156120d8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600082141561217b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061228f565b600082905060005b600082146121ad57808061219690613541565b915050600a826121a69190613357565b9150612183565b60008167ffffffffffffffff8111156121c9576121c8613677565b5b6040519080825280601f01601f1916602001820160405280156121fb5781602001600182028036833780820191505090505b5090505b600085146122885760018261221491906133e2565b9150600a85612223919061358a565b603061222f9190613301565b60f81b81838151811061224557612244613648565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122819190613357565b94506121ff565b8093505050505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b6123418383836001612346565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123b3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156123ee576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123fb6000868387612328565b73a5f6d896e8b4d29ac6e5d8c4b26f8d2073ac90ae73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806124885750736ea8f3b9187df360b0c3e76549b22095acae771b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806124d2575073e749e9e7eaa02203c925a036226af80e2c79403e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061251c5750734209c04095e0736546ddccb3360ccefa13909d8a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612566575073f8d4454b0a7544b3c13816acd76b93bc94b5d97773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806125b05750735d4b1055a69eadaba6de6c537a17aeb01207dfda73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806125fa575073fd2204757ab46355e60251386f823960acccefe773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612644575073f59eafd5ee67ec7be2fc150069b117b618b0484e73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561267f57600080600090505b615ecd81101561267c57818061266690613541565b925050808061267490613541565b915050612651565b50505b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561284957506128488773ffffffffffffffffffffffffffffffffffffffff16611fb0565b5b1561290f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128be6000888480600101955088611fd3565b6128f4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561284f57826000541461290a57600080fd5b61297b565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612910575b816000819055505050612991600086838761232e565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b60006129ee6129e98461326d565b613248565b905082815260208101848484011115612a0a57612a096136ab565b5b612a1584828561349c565b509392505050565b600081359050612a2c8161388e565b92915050565b600081359050612a41816138a5565b92915050565b600081359050612a56816138bc565b92915050565b600081519050612a6b816138bc565b92915050565b600082601f830112612a8657612a856136a6565b5b8135612a968482602086016129db565b91505092915050565b600081519050612aae816138d3565b92915050565b600081359050612ac3816138ea565b92915050565b600060208284031215612adf57612ade6136b5565b5b6000612aed84828501612a1d565b91505092915050565b60008060408385031215612b0d57612b0c6136b5565b5b6000612b1b85828601612a1d565b9250506020612b2c85828601612a1d565b9150509250929050565b600080600060608486031215612b4f57612b4e6136b5565b5b6000612b5d86828701612a1d565b9350506020612b6e86828701612a1d565b9250506040612b7f86828701612ab4565b9150509250925092565b60008060008060808587031215612ba357612ba26136b5565b5b6000612bb187828801612a1d565b9450506020612bc287828801612a1d565b9350506040612bd387828801612ab4565b925050606085013567ffffffffffffffff811115612bf457612bf36136b0565b5b612c0087828801612a71565b91505092959194509250565b60008060408385031215612c2357612c226136b5565b5b6000612c3185828601612a1d565b9250506020612c4285828601612a32565b9150509250929050565b60008060408385031215612c6357612c626136b5565b5b6000612c7185828601612a1d565b9250506020612c8285828601612ab4565b9150509250929050565b600060208284031215612ca257612ca16136b5565b5b6000612cb084828501612a47565b91505092915050565b600060208284031215612ccf57612cce6136b5565b5b6000612cdd84828501612a5c565b91505092915050565b600060208284031215612cfc57612cfb6136b5565b5b6000612d0a84828501612a9f565b91505092915050565b600060208284031215612d2957612d286136b5565b5b6000612d3784828501612ab4565b91505092915050565b612d4981613416565b82525050565b612d5881613428565b82525050565b6000612d69826132b3565b612d7381856132c9565b9350612d838185602086016134ab565b612d8c816136ba565b840191505092915050565b6000612da2826132be565b612dac81856132e5565b9350612dbc8185602086016134ab565b612dc5816136ba565b840191505092915050565b6000612ddb826132be565b612de581856132f6565b9350612df58185602086016134ab565b80840191505092915050565b60008154612e0e816134de565b612e1881866132f6565b94506001821660008114612e335760018114612e4457612e77565b60ff19831686528186019350612e77565b612e4d8561329e565b60005b83811015612e6f57815481890152600182019150602081019050612e50565b838801955050505b50505092915050565b6000612e8d6006836132e5565b9150612e98826136cb565b602082019050919050565b6000612eb06026836132e5565b9150612ebb826136f4565b604082019050919050565b6000612ed36011836132e5565b9150612ede82613743565b602082019050919050565b6000612ef6600a836132e5565b9150612f018261376c565b602082019050919050565b6000612f196012836132e5565b9150612f2482613795565b602082019050919050565b6000612f3c6015836132e5565b9150612f47826137be565b602082019050919050565b6000612f5f6020836132e5565b9150612f6a826137e7565b602082019050919050565b6000612f826016836132e5565b9150612f8d82613810565b602082019050919050565b6000612fa56000836132da565b9150612fb082613839565b600082019050919050565b6000612fc8600e836132e5565b9150612fd38261383c565b602082019050919050565b6000612feb600c836132e5565b9150612ff682613865565b602082019050919050565b61300a81613492565b82525050565b600061301c8285612e01565b91506130288284612dd0565b91508190509392505050565b600061303f82612f98565b9150819050919050565b600060208201905061305e6000830184612d40565b92915050565b60006080820190506130796000830187612d40565b6130866020830186612d40565b6130936040830185613001565b81810360608301526130a58184612d5e565b905095945050505050565b60006020820190506130c56000830184612d4f565b92915050565b600060208201905081810360008301526130e58184612d97565b905092915050565b6000602082019050818103600083015261310681612e80565b9050919050565b6000602082019050818103600083015261312681612ea3565b9050919050565b6000602082019050818103600083015261314681612ec6565b9050919050565b6000602082019050818103600083015261316681612ee9565b9050919050565b6000602082019050818103600083015261318681612f0c565b9050919050565b600060208201905081810360008301526131a681612f2f565b9050919050565b600060208201905081810360008301526131c681612f52565b9050919050565b600060208201905081810360008301526131e681612f75565b9050919050565b6000602082019050818103600083015261320681612fbb565b9050919050565b6000602082019050818103600083015261322681612fde565b9050919050565b60006020820190506132426000830184613001565b92915050565b6000613252613263565b905061325e8282613510565b919050565b6000604051905090565b600067ffffffffffffffff82111561328857613287613677565b5b613291826136ba565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061330c82613492565b915061331783613492565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561334c5761334b6135bb565b5b828201905092915050565b600061336282613492565b915061336d83613492565b92508261337d5761337c6135ea565b5b828204905092915050565b600061339382613492565b915061339e83613492565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133d7576133d66135bb565b5b828202905092915050565b60006133ed82613492565b91506133f883613492565b92508282101561340b5761340a6135bb565b5b828203905092915050565b600061342182613472565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061346b82613416565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134c95780820151818401526020810190506134ae565b838111156134d8576000848401525b50505050565b600060028204905060018216806134f657607f821691505b6020821081141561350a57613509613619565b5b50919050565b613519826136ba565b810181811067ffffffffffffffff8211171561353857613537613677565b5b80604052505050565b600061354c82613492565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561357f5761357e6135bb565b5b600182019050919050565b600061359582613492565b91506135a083613492565b9250826135b0576135af6135ea565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863657373206d617820706572207478000000000000000000000000000000600082015250565b7f4e6f2030206d696e747300000000000000000000000000000000000000000000600082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c69642066756e64732070726f766964656400000000000000000000600082015250565b50565b7f4661696c656420746f2073656e64000000000000000000000000000000000000600082015250565b7f4e6f20636f6e7472616374730000000000000000000000000000000000000000600082015250565b61389781613416565b81146138a257600080fd5b50565b6138ae81613428565b81146138b957600080fd5b50565b6138c581613434565b81146138d057600080fd5b50565b6138dc81613460565b81146138e757600080fd5b50565b6138f381613492565b81146138fe57600080fd5b5056fea2646970667358221220b38a9071f9635f1ea13bfcd31ec4233b2c92afc1f0b6488addcaaf4fa565807464736f6c63430008070033

Deployed Bytecode Sourcemap

37299:2439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25927:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28227:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29257:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28875:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25592:163;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39069:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29934:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37649:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39186:209;;;;;;;;;;;;;:::i;:::-;;30114:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37731:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28095:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37342:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26243:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2688:103;;;;;;;;;;;;;:::i;:::-;;37597:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37550:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2037:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28333:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37688:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37821:678;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29471:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30309:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39403:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37406:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38616:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2946:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37504:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25927:305;26029:4;26081:25;26066:40;;;:11;:40;;;;:105;;;;26138:33;26123:48;;;:11;:48;;;;26066:105;:158;;;;26188:36;26212:11;26188:23;:36::i;:::-;26066:158;26046:178;;25927:305;;;:::o;28227:100::-;28281:13;28314:5;28307:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28227:100;:::o;29257:204::-;29325:7;29350:16;29358:7;29350;:16::i;:::-;29345:64;;29375:34;;;;;;;;;;;;;;29345:64;29429:15;:24;29445:7;29429:24;;;;;;;;;;;;;;;;;;;;;29422:31;;29257:204;;;:::o;28875:371::-;28948:13;28964:24;28980:7;28964:15;:24::i;:::-;28948:40;;29009:5;29003:11;;:2;:11;;;28999:48;;;29023:24;;;;;;;;;;;;;;28999:48;29080:5;29064:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;29090:37;29107:5;29114:12;:10;:12::i;:::-;29090:16;:37::i;:::-;29089:38;29064:63;29060:138;;;29151:35;;;;;;;;;;;;;;29060:138;29210:28;29219:2;29223:7;29232:5;29210:8;:28::i;:::-;28937:309;28875:371;;:::o;25592:163::-;25636:7;25721:15;:13;:15::i;:::-;25706:12;;25690:13;;:28;:46;25683:53;;25592:163;:::o;39069:109::-;39122:7;39149:21;39163:6;39149:13;:21::i;:::-;39142:28;;39069:109;;;:::o;29934:170::-;30068:28;30078:4;30084:2;30088:7;30068:9;:28::i;:::-;29934:170;;;:::o;37649:32::-;;;;:::o;39186:209::-;2268:12;:10;:12::i;:::-;2257:23;;:7;:5;:7::i;:::-;:23;;;2249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39236:15:::1;39254:21;39236:39;;39287:12;39305;:10;:12::i;:::-;:17;;39330:7;39305:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39286:56;;;39361:7;39353:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;39225:170;;39186:209::o:0;30114:185::-;30252:39;30269:4;30275:2;30279:7;30252:39;;;;;;;;;;;;:16;:39::i;:::-;30114:185;;;:::o;37731:26::-;;;;;;;;;;;;;:::o;28095:124::-;28159:7;28186:20;28198:7;28186:11;:20::i;:::-;:25;;;28179:32;;28095:124;;;:::o;37342:57::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26243:206::-;26307:7;26348:1;26331:19;;:5;:19;;;26327:60;;;26359:28;;;;;;;;;;;;;;26327:60;26413:12;:19;26426:5;26413:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26405:36;;26398:43;;26243:206;;;:::o;2688:103::-;2268:12;:10;:12::i;:::-;2257:23;;:7;:5;:7::i;:::-;:23;;;2249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2753:30:::1;2780:1;2753:18;:30::i;:::-;2688:103::o:0;37597:45::-;37639:3;37597:45;:::o;37550:40::-;37589:1;37550:40;:::o;2037:87::-;2083:7;2110:6;;;;;;;;;;;2103:13;;2037:87;:::o;28333:104::-;28389:13;28422:7;28415:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28333:104;:::o;37688:34::-;;;;:::o;37821:678::-;37886:9;37898:5;;37886:17;;37914:12;37541:2;37914:25;;37997:1;37639:3;37979:19;;;;:::i;:::-;37969:7;37953:13;:11;:13::i;:::-;:23;;;;:::i;:::-;:45;37950:111;;;38022:1;38015:8;;38048:1;38038:11;;37950:111;38071:15;38089:12;:10;:12::i;:::-;38071:30;;38121:6;;;;;;;;;;;38120:7;38112:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;38187:7;38171:13;:11;:13::i;:::-;:23;;;;:::i;:::-;38157:10;;:37;;38149:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38246:1;38236:7;:11;38228:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;38294:7;38281:20;;:9;:20;;;38273:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;38348:7;38337;:18;;38329:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;38415:9;38407:4;38397:7;:14;;;;:::i;:::-;:27;;38389:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38464:27;38474:7;38483;38464:9;:27::i;:::-;37875:624;;;37821:678;:::o;29471:279::-;29574:12;:10;:12::i;:::-;29562:24;;:8;:24;;;29558:54;;;29595:17;;;;;;;;;;;;;;29558:54;29670:8;29625:18;:32;29644:12;:10;:12::i;:::-;29625:32;;;;;;;;;;;;;;;:42;29658:8;29625:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29723:8;29694:48;;29709:12;:10;:12::i;:::-;29694:48;;;29733:8;29694:48;;;;;;:::i;:::-;;;;;;;;29471:279;;:::o;30309:369::-;30476:28;30486:4;30492:2;30496:7;30476:9;:28::i;:::-;30519:15;:2;:13;;;:15::i;:::-;:76;;;;;30539:56;30570:4;30576:2;30580:7;30589:5;30539:30;:56::i;:::-;30538:57;30519:76;30515:156;;;30619:40;;;;;;;;;;;;;;30515:156;30309:369;;;;:::o;39403:332::-;39469:13;39503:17;39511:8;39503:7;:17::i;:::-;39495:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39588:1;39570:7;39564:21;;;;;:::i;:::-;;;:25;:163;;;;;;;;;;;;;;;;;39646:7;39670:26;39687:8;39670:16;:26::i;:::-;39613:98;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39564:163;39557:170;;39403:332;;;:::o;37406:89::-;37453:42;37406:89;:::o;38616:445::-;38741:4;38826:27;37453:42;38826:65;;38947:8;38906:49;;38914:13;:21;;;38936:5;38914:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38906:49;;;38902:93;;;38979:4;38972:11;;;;;38902:93;39014:39;39037:5;39044:8;39014:22;:39::i;:::-;39007:46;;;38616:445;;;;;:::o;2946:201::-;2268:12;:10;:12::i;:::-;2257:23;;:7;:5;:7::i;:::-;:23;;;2249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3055:1:::1;3035:22;;:8;:22;;;;3027:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3111:28;3130:8;3111:18;:28::i;:::-;2946:201:::0;:::o;37504:39::-;37541:2;37504:39;:::o;23595:157::-;23680:4;23719:25;23704:40;;;:11;:40;;;;23697:47;;23595:157;;;:::o;30686:187::-;30743:4;30786:7;30767:15;:13;:15::i;:::-;:26;;:53;;;;;30807:13;;30797:7;:23;30767:53;:98;;;;;30838:11;:20;30850:7;30838:20;;;;;;;;;;;:27;;;;;;;;;;;;30837:28;30767:98;30760:105;;30686:187;;;:::o;778:98::-;831:7;858:10;851:17;;778:98;:::o;36050:196::-;36192:2;36165:15;:24;36181:7;36165:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36230:7;36226:2;36210:28;;36219:5;36210:28;;;;;;;;;;;;36050:196;;;:::o;38507:101::-;38572:7;38599:1;38592:8;;38507:101;:::o;26459:207::-;26520:7;26561:1;26544:19;;:5;:19;;;26540:59;;;26572:27;;;;;;;;;;;;;;26540:59;26625:12;:19;26638:5;26625:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;26617:41;;26610:48;;26459:207;;;:::o;33417:1431::-;33532:35;33570:20;33582:7;33570:11;:20::i;:::-;33532:58;;33603:22;33645:13;:18;;;33629:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;33680:50;33697:13;:18;;;33717:12;:10;:12::i;:::-;33680:16;:50::i;:::-;33629:101;:154;;;;33771:12;:10;:12::i;:::-;33747:36;;:20;33759:7;33747:11;:20::i;:::-;:36;;;33629:154;33603:181;;33802:17;33797:66;;33828:35;;;;;;;;;;;;;;33797:66;33900:4;33878:26;;:13;:18;;;:26;;;33874:67;;33913:28;;;;;;;;;;;;;;33874:67;33970:1;33956:16;;:2;:16;;;33952:52;;;33981:23;;;;;;;;;;;;;;33952:52;34017:43;34039:4;34045:2;34049:7;34058:1;34017:21;:43::i;:::-;34075:49;34092:1;34096:7;34105:13;:18;;;34075:8;:49::i;:::-;34192:1;34162:12;:18;34175:4;34162:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34236:1;34208:12;:16;34221:2;34208:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34282:2;34254:11;:20;34266:7;34254:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34344:15;34299:11;:20;34311:7;34299:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34379:19;34411:1;34401:7;:11;34379:33;;34472:1;34431:43;;:11;:24;34443:11;34431:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34427:305;;;34516:13;;34502:11;:27;34498:219;;;34586:13;:18;;;34554:11;:24;34566:11;34554:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34669:13;:28;;;34627:11;:24;34639:11;34627:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34498:219;34427:305;34137:606;34779:7;34775:2;34760:27;;34769:4;34760:27;;;;;;;;;;;;34798:42;34819:4;34825:2;34829:7;34838:1;34798:20;:42::i;:::-;33521:1327;;33417:1431;;;:::o;27257:830::-;27318:21;;:::i;:::-;27352:12;27367:7;27352:22;;27435:4;27416:15;:13;:15::i;:::-;:23;;:47;;;;;27450:13;;27443:4;:20;27416:47;27412:608;;;27484:31;27518:11;:17;27530:4;27518:17;;;;;;;;;;;27484:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27559:9;:16;;;27554:451;;27630:1;27604:28;;:9;:14;;;:28;;;27600:101;;27668:9;27661:16;;;;;;27600:101;27725:261;27732:4;27725:261;;;27765:6;;;;;;;;27810:11;:17;27822:4;27810:17;;;;;;;;;;;27798:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27884:1;27858:28;;:9;:14;;;:28;;;27854:109;;27926:9;27919:16;;;;;;27854:109;27725:261;;;27554:451;27465:555;27412:608;28048:31;;;;;;;;;;;;;;27257:830;;;;:::o;3307:191::-;3381:16;3400:6;;;;;;;;;;;3381:25;;3426:8;3417:6;;:17;;;;;;;;;;;;;;;;;;3481:8;3450:40;;3471:8;3450:40;;;;;;;;;;;;3370:128;3307:191;:::o;30881:104::-;30950:27;30960:2;30964:8;30950:27;;;;;;;;;;;;:9;:27::i;:::-;30881:104;;:::o;13368:326::-;13428:4;13685:1;13663:7;:19;;;:23;13656:30;;13368:326;;;:::o;36254:667::-;36417:4;36454:2;36438:36;;;36475:12;:10;:12::i;:::-;36489:4;36495:7;36504:5;36438:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36434:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36689:1;36672:6;:13;:18;36668:235;;;36718:40;;;;;;;;;;;;;;36668:235;36861:6;36855:13;36846:6;36842:2;36838:15;36831:38;36434:480;36567:45;;;36557:55;;;:6;:55;;;;36550:62;;;36254:667;;;;;;:::o;20988:723::-;21044:13;21274:1;21265:5;:10;21261:53;;;21292:10;;;;;;;;;;;;;;;;;;;;;21261:53;21324:12;21339:5;21324:20;;21355:14;21380:78;21395:1;21387:4;:9;21380:78;;21413:8;;;;;:::i;:::-;;;;21444:2;21436:10;;;;;:::i;:::-;;;21380:78;;;21468:19;21500:6;21490:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21468:39;;21518:154;21534:1;21525:5;:10;21518:154;;21562:1;21552:11;;;;;:::i;:::-;;;21629:2;21621:5;:10;;;;:::i;:::-;21608:2;:24;;;;:::i;:::-;21595:39;;21578:6;21585;21578:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;21658:2;21649:11;;;;;:::i;:::-;;;21518:154;;;21696:6;21682:21;;;;;20988:723;;;;:::o;29760:164::-;29857:4;29881:18;:25;29900:5;29881:25;;;;;;;;;;;;;;;:35;29907:8;29881:35;;;;;;;;;;;;;;;;;;;;;;;;;29874:42;;29760:164;;;;:::o;36929:159::-;;;;;:::o;37100:158::-;;;;;:::o;30993:163::-;31116:32;31122:2;31126:8;31136:5;31143:4;31116:5;:32::i;:::-;30993:163;;;:::o;31166:2241::-;31305:20;31328:13;;31305:36;;31370:1;31356:16;;:2;:16;;;31352:48;;;31381:19;;;;;;;;;;;;;;31352:48;31427:1;31415:8;:13;31411:44;;;31437:18;;;;;;;;;;;;;;31411:44;31468:61;31498:1;31502:2;31506:12;31520:8;31468:21;:61::i;:::-;31595:42;31589:48;;:2;:48;;;:113;;;;31660:42;31654:48;;:2;:48;;;31589:113;:178;;;;31725:42;31719:48;;:2;:48;;;31589:178;:243;;;;31790:42;31784:48;;:2;:48;;;31589:243;:308;;;;31855:42;31849:48;;:2;:48;;;31589:308;:373;;;;31920:42;31914:48;;:2;:48;;;31589:373;:438;;;;31985:42;31979:48;;:2;:48;;;31589:438;:503;;;;32050:42;32044:48;;:2;:48;;;31589:503;31572:663;;;32118:15;32153:6;32162:1;32153:10;;32148:76;32169:5;32165:1;:9;32148:76;;;32199:9;;;;;:::i;:::-;;;;32176:3;;;;;:::i;:::-;;;;32148:76;;;;32103:132;31572:663;32307:8;32272:12;:16;32285:2;32272:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32371:8;32331:12;:16;32344:2;32331:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32430:2;32397:11;:25;32409:12;32397:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32497:15;32447:11;:25;32459:12;32447:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32530:20;32553:12;32530:35;;32580:11;32609:8;32594:12;:23;32580:37;;32638:4;:23;;;;;32646:15;:2;:13;;;:15::i;:::-;32638:23;32634:641;;;32682:314;32738:12;32734:2;32713:38;;32730:1;32713:38;;;;;;;;;;;;32779:69;32818:1;32822:2;32826:14;;;;;;32842:5;32779:30;:69::i;:::-;32774:174;;32884:40;;;;;;;;;;;;;;32774:174;32991:3;32975:12;:19;;32682:314;;33077:12;33060:13;;:29;33056:43;;33091:8;;;33056:43;32634:641;;;33140:120;33196:14;;;;;;33192:2;33171:40;;33188:1;33171:40;;;;;;;;;;;;33255:3;33239:12;:19;;33140:120;;32634:641;33305:12;33289:13;:28;;;;32247:1082;;33339:60;33368:1;33372:2;33376:12;33390:8;33339:20;:60::i;:::-;31294:2113;31166:2241;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:201::-;1440:5;1471:6;1465:13;1456:22;;1487:62;1543:5;1487:62;:::i;:::-;1354:201;;;;:::o;1561:139::-;1607:5;1645:6;1632:20;1623:29;;1661:33;1688:5;1661:33;:::i;:::-;1561:139;;;;:::o;1706:329::-;1765:6;1814:2;1802:9;1793:7;1789:23;1785:32;1782:119;;;1820:79;;:::i;:::-;1782:119;1940:1;1965:53;2010:7;2001:6;1990:9;1986:22;1965:53;:::i;:::-;1955:63;;1911:117;1706:329;;;;:::o;2041:474::-;2109:6;2117;2166:2;2154:9;2145:7;2141:23;2137:32;2134:119;;;2172:79;;:::i;:::-;2134:119;2292:1;2317:53;2362:7;2353:6;2342:9;2338:22;2317:53;:::i;:::-;2307:63;;2263:117;2419:2;2445:53;2490:7;2481:6;2470:9;2466:22;2445:53;:::i;:::-;2435:63;;2390:118;2041:474;;;;;:::o;2521:619::-;2598:6;2606;2614;2663:2;2651:9;2642:7;2638:23;2634:32;2631:119;;;2669:79;;:::i;:::-;2631:119;2789:1;2814:53;2859:7;2850:6;2839:9;2835:22;2814:53;:::i;:::-;2804:63;;2760:117;2916:2;2942:53;2987:7;2978:6;2967:9;2963:22;2942:53;:::i;:::-;2932:63;;2887:118;3044:2;3070:53;3115:7;3106:6;3095:9;3091:22;3070:53;:::i;:::-;3060:63;;3015:118;2521:619;;;;;:::o;3146:943::-;3241:6;3249;3257;3265;3314:3;3302:9;3293:7;3289:23;3285:33;3282:120;;;3321:79;;:::i;:::-;3282:120;3441:1;3466:53;3511:7;3502:6;3491:9;3487:22;3466:53;:::i;:::-;3456:63;;3412:117;3568:2;3594:53;3639:7;3630:6;3619:9;3615:22;3594:53;:::i;:::-;3584:63;;3539:118;3696:2;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3667:118;3852:2;3841:9;3837:18;3824:32;3883:18;3875:6;3872:30;3869:117;;;3905:79;;:::i;:::-;3869:117;4010:62;4064:7;4055:6;4044:9;4040:22;4010:62;:::i;:::-;4000:72;;3795:287;3146:943;;;;;;;:::o;4095:468::-;4160:6;4168;4217:2;4205:9;4196:7;4192:23;4188:32;4185:119;;;4223:79;;:::i;:::-;4185:119;4343:1;4368:53;4413:7;4404:6;4393:9;4389:22;4368:53;:::i;:::-;4358:63;;4314:117;4470:2;4496:50;4538:7;4529:6;4518:9;4514:22;4496:50;:::i;:::-;4486:60;;4441:115;4095:468;;;;;:::o;4569:474::-;4637:6;4645;4694:2;4682:9;4673:7;4669:23;4665:32;4662:119;;;4700:79;;:::i;:::-;4662:119;4820:1;4845:53;4890:7;4881:6;4870:9;4866:22;4845:53;:::i;:::-;4835:63;;4791:117;4947:2;4973:53;5018:7;5009:6;4998:9;4994:22;4973:53;:::i;:::-;4963:63;;4918:118;4569:474;;;;;:::o;5049:327::-;5107:6;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:52;5351:7;5342:6;5331:9;5327:22;5307:52;:::i;:::-;5297:62;;5253:116;5049:327;;;;:::o;5382:349::-;5451:6;5500:2;5488:9;5479:7;5475:23;5471:32;5468:119;;;5506:79;;:::i;:::-;5468:119;5626:1;5651:63;5706:7;5697:6;5686:9;5682:22;5651:63;:::i;:::-;5641:73;;5597:127;5382:349;;;;:::o;5737:409::-;5836:6;5885:2;5873:9;5864:7;5860:23;5856:32;5853:119;;;5891:79;;:::i;:::-;5853:119;6011:1;6036:93;6121:7;6112:6;6101:9;6097:22;6036:93;:::i;:::-;6026:103;;5982:157;5737:409;;;;:::o;6152:329::-;6211:6;6260:2;6248:9;6239:7;6235:23;6231:32;6228:119;;;6266:79;;:::i;:::-;6228:119;6386:1;6411:53;6456:7;6447:6;6436:9;6432:22;6411:53;:::i;:::-;6401:63;;6357:117;6152:329;;;;:::o;6487:118::-;6574:24;6592:5;6574:24;:::i;:::-;6569:3;6562:37;6487:118;;:::o;6611:109::-;6692:21;6707:5;6692:21;:::i;:::-;6687:3;6680:34;6611:109;;:::o;6726:360::-;6812:3;6840:38;6872:5;6840:38;:::i;:::-;6894:70;6957:6;6952:3;6894:70;:::i;:::-;6887:77;;6973:52;7018:6;7013:3;7006:4;6999:5;6995:16;6973:52;:::i;:::-;7050:29;7072:6;7050:29;:::i;:::-;7045:3;7041:39;7034:46;;6816:270;6726:360;;;;:::o;7092:364::-;7180:3;7208:39;7241:5;7208:39;:::i;:::-;7263:71;7327:6;7322:3;7263:71;:::i;:::-;7256:78;;7343:52;7388:6;7383:3;7376:4;7369:5;7365:16;7343:52;:::i;:::-;7420:29;7442:6;7420:29;:::i;:::-;7415:3;7411:39;7404:46;;7184:272;7092:364;;;;:::o;7462:377::-;7568:3;7596:39;7629:5;7596:39;:::i;:::-;7651:89;7733:6;7728:3;7651:89;:::i;:::-;7644:96;;7749:52;7794:6;7789:3;7782:4;7775:5;7771:16;7749:52;:::i;:::-;7826:6;7821:3;7817:16;7810:23;;7572:267;7462:377;;;;:::o;7869:845::-;7972:3;8009:5;8003:12;8038:36;8064:9;8038:36;:::i;:::-;8090:89;8172:6;8167:3;8090:89;:::i;:::-;8083:96;;8210:1;8199:9;8195:17;8226:1;8221:137;;;;8372:1;8367:341;;;;8188:520;;8221:137;8305:4;8301:9;8290;8286:25;8281:3;8274:38;8341:6;8336:3;8332:16;8325:23;;8221:137;;8367:341;8434:38;8466:5;8434:38;:::i;:::-;8494:1;8508:154;8522:6;8519:1;8516:13;8508:154;;;8596:7;8590:14;8586:1;8581:3;8577:11;8570:35;8646:1;8637:7;8633:15;8622:26;;8544:4;8541:1;8537:12;8532:17;;8508:154;;;8691:6;8686:3;8682:16;8675:23;;8374:334;;8188:520;;7976:738;;7869:845;;;;:::o;8720:365::-;8862:3;8883:66;8947:1;8942:3;8883:66;:::i;:::-;8876:73;;8958:93;9047:3;8958:93;:::i;:::-;9076:2;9071:3;9067:12;9060:19;;8720:365;;;:::o;9091:366::-;9233:3;9254:67;9318:2;9313:3;9254:67;:::i;:::-;9247:74;;9330:93;9419:3;9330:93;:::i;:::-;9448:2;9443:3;9439:12;9432:19;;9091:366;;;:::o;9463:::-;9605:3;9626:67;9690:2;9685:3;9626:67;:::i;:::-;9619:74;;9702:93;9791:3;9702:93;:::i;:::-;9820:2;9815:3;9811:12;9804:19;;9463:366;;;:::o;9835:::-;9977:3;9998:67;10062:2;10057:3;9998:67;:::i;:::-;9991:74;;10074:93;10163:3;10074:93;:::i;:::-;10192:2;10187:3;10183:12;10176:19;;9835:366;;;:::o;10207:::-;10349:3;10370:67;10434:2;10429:3;10370:67;:::i;:::-;10363:74;;10446:93;10535:3;10446:93;:::i;:::-;10564:2;10559:3;10555:12;10548:19;;10207:366;;;:::o;10579:::-;10721:3;10742:67;10806:2;10801:3;10742:67;:::i;:::-;10735:74;;10818:93;10907:3;10818:93;:::i;:::-;10936:2;10931:3;10927:12;10920:19;;10579:366;;;:::o;10951:::-;11093:3;11114:67;11178:2;11173:3;11114:67;:::i;:::-;11107:74;;11190:93;11279:3;11190:93;:::i;:::-;11308:2;11303:3;11299:12;11292:19;;10951:366;;;:::o;11323:::-;11465:3;11486:67;11550:2;11545:3;11486:67;:::i;:::-;11479:74;;11562:93;11651:3;11562:93;:::i;:::-;11680:2;11675:3;11671:12;11664:19;;11323:366;;;:::o;11695:398::-;11854:3;11875:83;11956:1;11951:3;11875:83;:::i;:::-;11868:90;;11967:93;12056:3;11967:93;:::i;:::-;12085:1;12080:3;12076:11;12069:18;;11695:398;;;:::o;12099:366::-;12241:3;12262:67;12326:2;12321:3;12262:67;:::i;:::-;12255:74;;12338:93;12427:3;12338:93;:::i;:::-;12456:2;12451:3;12447:12;12440:19;;12099:366;;;:::o;12471:::-;12613:3;12634:67;12698:2;12693:3;12634:67;:::i;:::-;12627:74;;12710:93;12799:3;12710:93;:::i;:::-;12828:2;12823:3;12819:12;12812:19;;12471:366;;;:::o;12843:118::-;12930:24;12948:5;12930:24;:::i;:::-;12925:3;12918:37;12843:118;;:::o;12967:429::-;13144:3;13166:92;13254:3;13245:6;13166:92;:::i;:::-;13159:99;;13275:95;13366:3;13357:6;13275:95;:::i;:::-;13268:102;;13387:3;13380:10;;12967:429;;;;;:::o;13402:379::-;13586:3;13608:147;13751:3;13608:147;:::i;:::-;13601:154;;13772:3;13765:10;;13402:379;;;:::o;13787:222::-;13880:4;13918:2;13907:9;13903:18;13895:26;;13931:71;13999:1;13988:9;13984:17;13975:6;13931:71;:::i;:::-;13787:222;;;;:::o;14015:640::-;14210:4;14248:3;14237:9;14233:19;14225:27;;14262:71;14330:1;14319:9;14315:17;14306:6;14262:71;:::i;:::-;14343:72;14411:2;14400:9;14396:18;14387:6;14343:72;:::i;:::-;14425;14493:2;14482:9;14478:18;14469:6;14425:72;:::i;:::-;14544:9;14538:4;14534:20;14529:2;14518:9;14514:18;14507:48;14572:76;14643:4;14634:6;14572:76;:::i;:::-;14564:84;;14015:640;;;;;;;:::o;14661:210::-;14748:4;14786:2;14775:9;14771:18;14763:26;;14799:65;14861:1;14850:9;14846:17;14837:6;14799:65;:::i;:::-;14661:210;;;;:::o;14877:313::-;14990:4;15028:2;15017:9;15013:18;15005:26;;15077:9;15071:4;15067:20;15063:1;15052:9;15048:17;15041:47;15105:78;15178:4;15169:6;15105:78;:::i;:::-;15097:86;;14877:313;;;;:::o;15196:419::-;15362:4;15400:2;15389:9;15385:18;15377:26;;15449:9;15443:4;15439:20;15435:1;15424:9;15420:17;15413:47;15477:131;15603:4;15477:131;:::i;:::-;15469:139;;15196:419;;;:::o;15621:::-;15787:4;15825:2;15814:9;15810:18;15802:26;;15874:9;15868:4;15864:20;15860:1;15849:9;15845:17;15838:47;15902:131;16028:4;15902:131;:::i;:::-;15894:139;;15621:419;;;:::o;16046:::-;16212:4;16250:2;16239:9;16235:18;16227:26;;16299:9;16293:4;16289:20;16285:1;16274:9;16270:17;16263:47;16327:131;16453:4;16327:131;:::i;:::-;16319:139;;16046:419;;;:::o;16471:::-;16637:4;16675:2;16664:9;16660:18;16652:26;;16724:9;16718:4;16714:20;16710:1;16699:9;16695:17;16688:47;16752:131;16878:4;16752:131;:::i;:::-;16744:139;;16471:419;;;:::o;16896:::-;17062:4;17100:2;17089:9;17085:18;17077:26;;17149:9;17143:4;17139:20;17135:1;17124:9;17120:17;17113:47;17177:131;17303:4;17177:131;:::i;:::-;17169:139;;16896:419;;;:::o;17321:::-;17487:4;17525:2;17514:9;17510:18;17502:26;;17574:9;17568:4;17564:20;17560:1;17549:9;17545:17;17538:47;17602:131;17728:4;17602:131;:::i;:::-;17594:139;;17321:419;;;:::o;17746:::-;17912:4;17950:2;17939:9;17935:18;17927:26;;17999:9;17993:4;17989:20;17985:1;17974:9;17970:17;17963:47;18027:131;18153:4;18027:131;:::i;:::-;18019:139;;17746:419;;;:::o;18171:::-;18337:4;18375:2;18364:9;18360:18;18352:26;;18424:9;18418:4;18414:20;18410:1;18399:9;18395:17;18388:47;18452:131;18578:4;18452:131;:::i;:::-;18444:139;;18171:419;;;:::o;18596:::-;18762:4;18800:2;18789:9;18785:18;18777:26;;18849:9;18843:4;18839:20;18835:1;18824:9;18820:17;18813:47;18877:131;19003:4;18877:131;:::i;:::-;18869:139;;18596:419;;;:::o;19021:::-;19187:4;19225:2;19214:9;19210:18;19202:26;;19274:9;19268:4;19264:20;19260:1;19249:9;19245:17;19238:47;19302:131;19428:4;19302:131;:::i;:::-;19294:139;;19021:419;;;:::o;19446:222::-;19539:4;19577:2;19566:9;19562:18;19554:26;;19590:71;19658:1;19647:9;19643:17;19634:6;19590:71;:::i;:::-;19446:222;;;;:::o;19674:129::-;19708:6;19735:20;;:::i;:::-;19725:30;;19764:33;19792:4;19784:6;19764:33;:::i;:::-;19674:129;;;:::o;19809:75::-;19842:6;19875:2;19869:9;19859:19;;19809:75;:::o;19890:307::-;19951:4;20041:18;20033:6;20030:30;20027:56;;;20063:18;;:::i;:::-;20027:56;20101:29;20123:6;20101:29;:::i;:::-;20093:37;;20185:4;20179;20175:15;20167:23;;19890:307;;;:::o;20203:141::-;20252:4;20275:3;20267:11;;20298:3;20295:1;20288:14;20332:4;20329:1;20319:18;20311:26;;20203:141;;;:::o;20350:98::-;20401:6;20435:5;20429:12;20419:22;;20350:98;;;:::o;20454:99::-;20506:6;20540:5;20534:12;20524:22;;20454:99;;;:::o;20559:168::-;20642:11;20676:6;20671:3;20664:19;20716:4;20711:3;20707:14;20692:29;;20559:168;;;;:::o;20733:147::-;20834:11;20871:3;20856:18;;20733:147;;;;:::o;20886:169::-;20970:11;21004:6;20999:3;20992:19;21044:4;21039:3;21035:14;21020:29;;20886:169;;;;:::o;21061:148::-;21163:11;21200:3;21185:18;;21061:148;;;;:::o;21215:305::-;21255:3;21274:20;21292:1;21274:20;:::i;:::-;21269:25;;21308:20;21326:1;21308:20;:::i;:::-;21303:25;;21462:1;21394:66;21390:74;21387:1;21384:81;21381:107;;;21468:18;;:::i;:::-;21381:107;21512:1;21509;21505:9;21498:16;;21215:305;;;;:::o;21526:185::-;21566:1;21583:20;21601:1;21583:20;:::i;:::-;21578:25;;21617:20;21635:1;21617:20;:::i;:::-;21612:25;;21656:1;21646:35;;21661:18;;:::i;:::-;21646:35;21703:1;21700;21696:9;21691:14;;21526:185;;;;:::o;21717:348::-;21757:7;21780:20;21798:1;21780:20;:::i;:::-;21775:25;;21814:20;21832:1;21814:20;:::i;:::-;21809:25;;22002:1;21934:66;21930:74;21927:1;21924:81;21919:1;21912:9;21905:17;21901:105;21898:131;;;22009:18;;:::i;:::-;21898:131;22057:1;22054;22050:9;22039:20;;21717:348;;;;:::o;22071:191::-;22111:4;22131:20;22149:1;22131:20;:::i;:::-;22126:25;;22165:20;22183:1;22165:20;:::i;:::-;22160:25;;22204:1;22201;22198:8;22195:34;;;22209:18;;:::i;:::-;22195:34;22254:1;22251;22247:9;22239:17;;22071:191;;;;:::o;22268:96::-;22305:7;22334:24;22352:5;22334:24;:::i;:::-;22323:35;;22268:96;;;:::o;22370:90::-;22404:7;22447:5;22440:13;22433:21;22422:32;;22370:90;;;:::o;22466:149::-;22502:7;22542:66;22535:5;22531:78;22520:89;;22466:149;;;:::o;22621:125::-;22687:7;22716:24;22734:5;22716:24;:::i;:::-;22705:35;;22621:125;;;:::o;22752:126::-;22789:7;22829:42;22822:5;22818:54;22807:65;;22752:126;;;:::o;22884:77::-;22921:7;22950:5;22939:16;;22884:77;;;:::o;22967:154::-;23051:6;23046:3;23041;23028:30;23113:1;23104:6;23099:3;23095:16;23088:27;22967:154;;;:::o;23127:307::-;23195:1;23205:113;23219:6;23216:1;23213:13;23205:113;;;23304:1;23299:3;23295:11;23289:18;23285:1;23280:3;23276:11;23269:39;23241:2;23238:1;23234:10;23229:15;;23205:113;;;23336:6;23333:1;23330:13;23327:101;;;23416:1;23407:6;23402:3;23398:16;23391:27;23327:101;23176:258;23127:307;;;:::o;23440:320::-;23484:6;23521:1;23515:4;23511:12;23501:22;;23568:1;23562:4;23558:12;23589:18;23579:81;;23645:4;23637:6;23633:17;23623:27;;23579:81;23707:2;23699:6;23696:14;23676:18;23673:38;23670:84;;;23726:18;;:::i;:::-;23670:84;23491:269;23440:320;;;:::o;23766:281::-;23849:27;23871:4;23849:27;:::i;:::-;23841:6;23837:40;23979:6;23967:10;23964:22;23943:18;23931:10;23928:34;23925:62;23922:88;;;23990:18;;:::i;:::-;23922:88;24030:10;24026:2;24019:22;23809:238;23766:281;;:::o;24053:233::-;24092:3;24115:24;24133:5;24115:24;:::i;:::-;24106:33;;24161:66;24154:5;24151:77;24148:103;;;24231:18;;:::i;:::-;24148:103;24278:1;24271:5;24267:13;24260:20;;24053:233;;;:::o;24292:176::-;24324:1;24341:20;24359:1;24341:20;:::i;:::-;24336:25;;24375:20;24393:1;24375:20;:::i;:::-;24370:25;;24414:1;24404:35;;24419:18;;:::i;:::-;24404:35;24460:1;24457;24453:9;24448:14;;24292:176;;;;:::o;24474:180::-;24522:77;24519:1;24512:88;24619:4;24616:1;24609:15;24643:4;24640:1;24633:15;24660:180;24708:77;24705:1;24698:88;24805:4;24802:1;24795:15;24829:4;24826:1;24819:15;24846:180;24894:77;24891:1;24884:88;24991:4;24988:1;24981:15;25015:4;25012:1;25005:15;25032:180;25080:77;25077:1;25070:88;25177:4;25174:1;25167:15;25201:4;25198:1;25191:15;25218:180;25266:77;25263:1;25256:88;25363:4;25360:1;25353:15;25387:4;25384:1;25377:15;25404:117;25513:1;25510;25503:12;25527:117;25636:1;25633;25626:12;25650:117;25759:1;25756;25749:12;25773:117;25882:1;25879;25872:12;25896:102;25937:6;25988:2;25984:7;25979:2;25972:5;25968:14;25964:28;25954:38;;25896:102;;;:::o;26004:156::-;26144:8;26140:1;26132:6;26128:14;26121:32;26004:156;:::o;26166:225::-;26306:34;26302:1;26294:6;26290:14;26283:58;26375:8;26370:2;26362:6;26358:15;26351:33;26166:225;:::o;26397:167::-;26537:19;26533:1;26525:6;26521:14;26514:43;26397:167;:::o;26570:160::-;26710:12;26706:1;26698:6;26694:14;26687:36;26570:160;:::o;26736:168::-;26876:20;26872:1;26864:6;26860:14;26853:44;26736:168;:::o;26910:171::-;27050:23;27046:1;27038:6;27034:14;27027:47;26910:171;:::o;27087:182::-;27227:34;27223:1;27215:6;27211:14;27204:58;27087:182;:::o;27275:172::-;27415:24;27411:1;27403:6;27399:14;27392:48;27275:172;:::o;27453:114::-;;:::o;27573:164::-;27713:16;27709:1;27701:6;27697:14;27690:40;27573:164;:::o;27743:162::-;27883:14;27879:1;27871:6;27867:14;27860:38;27743:162;:::o;27911:122::-;27984:24;28002:5;27984:24;:::i;:::-;27977:5;27974:35;27964:63;;28023:1;28020;28013:12;27964:63;27911:122;:::o;28039:116::-;28109:21;28124:5;28109:21;:::i;:::-;28102:5;28099:32;28089:60;;28145:1;28142;28135:12;28089:60;28039:116;:::o;28161:120::-;28233:23;28250:5;28233:23;:::i;:::-;28226:5;28223:34;28213:62;;28271:1;28268;28261:12;28213:62;28161:120;:::o;28287:180::-;28389:53;28436:5;28389:53;:::i;:::-;28382:5;28379:64;28369:92;;28457:1;28454;28447:12;28369:92;28287:180;:::o;28473:122::-;28546:24;28564:5;28546:24;:::i;:::-;28539:5;28536:35;28526:63;;28585:1;28582;28575:12;28526:63;28473:122;:::o

Swarm Source

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