ETH Price: $3,889.99 (-1.55%)

Token

GA Governance Pass ()
 

Overview

Max Total Supply

131

Holders

109

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
n0000b.eth
0x4e331da3a462b70d165eb2055f6d5027944f6085
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

These NFTs enable GEN.ART members to have a greater say in the governance of the GEN.ART DAO. GEN.ART is a leading generative art platform.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GenArtTokenAirdropPass

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @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);
}

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(
        address indexed account,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id)
        external
        view
        returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator)
        external
        view
        returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "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);
            }
        }
    }
}

/**
 * @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;
    }
}

/**
 * @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() {
        _setOwner(_msgSender());
    }

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

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

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

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

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

/**
 * @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;
    }
}

/**
 * @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);
    }
}

interface IGenArt {
    function getTokensByOwner(address owner)
        external
        view
        returns (uint256[] memory);

    function ownerOf(uint256 tokenId) external view returns (address);

    function balanceOf(address owner) external view returns (uint256);

    function isGoldToken(uint256 _tokenId) external view returns (bool);
}

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract GenArtTokenAirdropPass is
    Context,
    Ownable,
    ERC165,
    IERC1155,
    IERC1155MetadataURI
{
    using Address for address;
    using Strings for uint256;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;
    mapping(uint256 => uint256) private _totalSupply;

    uint256[3] tokenIds = [1, 2, 3];
    uint256[3] tokenId_prices = [0.5 ether, 2.25 ether, 10 ether];
    uint256[3] tokenId_cap = [1875, 500, 25];

    bool private _paused = false;

    address genArtMembershipAddress;
    uint256 endBlock;

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev See {_setURI}.
     */
    constructor(
        address genArtMembershipAddress_,
        uint256 endBlock_,
        string memory uri_
    ) {
        genArtMembershipAddress = genArtMembershipAddress_;
        endBlock = endBlock_;
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function uri(uint256 _tokenId)
        external
        view
        virtual
        override
        returns (string memory)
    {
        return string(abi.encodePacked(_uri, _tokenId.toString()));
    }

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates weither any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return GenArtTokenAirdropPass.totalSupply(id) > 0;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            account != address(0),
            "GenArtTokenAirdropPass: balance query for the zero address"
        );
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(
            accounts.length == ids.length,
            "GenArtTokenAirdropPass: accounts and ids length mismatch"
        );

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function setPaused(bool _pause) public onlyOwner {
        _paused = _pause;
        if (_paused) {
            emit Paused(_msgSender());
        } else {
            emit Unpaused(_msgSender());
        }
    }

    function setUri(string memory newUri) public onlyOwner {
        _setURI(newUri);
    }

    function withdraw(uint256 value) public onlyOwner {
        address _owner = owner();
        payable(_owner).transfer(value);
    }

    /**
     * @dev See {ERC1155-_mint}.
     */
    function mint(
        uint256 membershipId,
        address account,
        uint256 id,
        uint256 amount
    ) public payable {
        require(
            block.number < endBlock,
            "GenArtTokenAirdropPass: mint pass sale ended"
        );
        require(
            id == 1 || id == 2 || id == 3,
            "GenArtTokenAirdropPass: invalid token id"
        );
        uint256 index = id - 1;
        require(
            _totalSupply[id] + amount <= tokenId_cap[index],
            "GenArtTokenAirdropPass: requested amount too high"
        );
        require(
            IGenArt(genArtMembershipAddress).ownerOf(membershipId) ==
                msg.sender,
            "GenArtTokenAirdropPass: sender is not owner of membership"
        );
        uint256 ethValue;
        unchecked {
            ethValue = tokenId_prices[index] * amount;
        }
        require(
            ethValue <= msg.value,
            "GenArtTokenAirdropPass: wrong amount sent"
        );
        _mint(account, id, amount, "");
        _totalSupply[id] += amount;
    }

    /**
     * @dev See {ERC1155-_burn}.
     */
    function burn(
        address account,
        uint256 id,
        uint256 amount
    ) public {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "GenArtTokenAirdropPass: caller is not owner nor approved"
        );

        _burn(account, id, amount);
        _totalSupply[id] -= amount;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(
            _msgSender() != operator,
            "GenArtTokenAirdropPass: setting approval status for self"
        );

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "GenArtTokenAirdropPass: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "GenArtTokenAirdropPass: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(
            to != address(0),
            "GenArtTokenAirdropPass: transfer to the zero address"
        );

        address operator = _msgSender();

        _beforeTokenTransfer();

        uint256 fromBalance = _balances[id][from];
        require(
            fromBalance >= amount,
            "GenArtTokenAirdropPass: insufficient balance for transfer"
        );
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(
            ids.length == amounts.length,
            "GenArtTokenAirdropPass: ids and amounts length mismatch"
        );
        require(
            to != address(0),
            "GenArtTokenAirdropPass: transfer to the zero address"
        );

        address operator = _msgSender();

        _beforeTokenTransfer();

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(
                fromBalance >= amount,
                "GenArtTokenAirdropPass: insufficient balance for transfer"
            );
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(
            operator,
            from,
            to,
            ids,
            amounts,
            data
        );
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(
            account != address(0),
            "GenArtTokenAirdropPass: mint to the zero address"
        );

        address operator = _msgSender();

        _beforeTokenTransfer();

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(
            operator,
            address(0),
            account,
            id,
            amount,
            data
        );
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(
            account != address(0),
            "GenArtTokenAirdropPass: burn from the zero address"
        );

        address operator = _msgSender();

        _beforeTokenTransfer();

        uint256 accountBalance = _balances[id][account];
        require(
            accountBalance >= amount,
            "GenArtTokenAirdropPass: burn amount exceeds balance"
        );
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer() internal virtual {
        require(!paused(), "ERC1155Pausable: token transfer while paused");
    }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155Received(
                    operator,
                    from,
                    id,
                    amount,
                    data
                )
            returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert(
                        "GenArtTokenAirdropPass: ERC1155Receiver rejected tokens"
                    );
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert(
                    "GenArtTokenAirdropPass: transfer to non ERC1155Receiver implementer"
                );
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try
                IERC1155Receiver(to).onERC1155BatchReceived(
                    operator,
                    from,
                    ids,
                    amounts,
                    data
                )
            returns (bytes4 response) {
                if (
                    response != IERC1155Receiver.onERC1155BatchReceived.selector
                ) {
                    revert(
                        "GenArtTokenAirdropPass: ERC1155Receiver rejected tokens"
                    );
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert(
                    "GenArtTokenAirdropPass: transfer to non ERC1155Receiver implementer"
                );
            }
        }
    }

    function _asSingletonArray(uint256 element)
        private
        pure
        returns (uint256[] memory)
    {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"genArtMembershipAddress_","type":"address"},{"internalType":"uint256","name":"endBlock_","type":"uint256"},{"internalType":"string","name":"uri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"membershipId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"bool","name":"_pause","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060600160405280600160ff168152602001600260ff168152602001600360ff1681525060059060036200003d92919062000299565b5060405180606001604052806706f05b59d3b2000067ffffffffffffffff168152602001671f399b1438a1000067ffffffffffffffff168152602001678ac7230489e8000067ffffffffffffffff168152506008906003620000a1929190620002e3565b50604051806060016040528061075361ffff1681526020016101f461ffff168152602001601961ffff16815250600b906003620000e092919062000334565b506000600e60006101000a81548160ff0219169083151502179055503480156200010957600080fd5b50604051620047233803806200472383398181016040528101906200012f9190620004cf565b6200014f62000143620001b160201b60201c565b620001b960201b60201c565b82600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f81905550620001a8816200027d60201b60201c565b505050620006e1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060039080519060200190620002959291906200037f565b5050565b8260038101928215620002d0579160200282015b82811115620002cf578251829060ff16905591602001919060010190620002ad565b5b509050620002df919062000410565b5090565b826003810192821562000321579160200282015b8281111562000320578251829067ffffffffffffffff16905591602001919060010190620002f7565b5b50905062000330919062000410565b5090565b82600381019282156200036c579160200282015b828111156200036b578251829061ffff1690559160200191906001019062000348565b5b5090506200037b919062000410565b5090565b8280546200038d9062000619565b90600052602060002090601f016020900481019282620003b15760008555620003fd565b82601f10620003cc57805160ff1916838001178555620003fd565b82800160010185558215620003fd579182015b82811115620003fc578251825591602001919060010190620003df565b5b5090506200040c919062000410565b5090565b5b808211156200042b57600081600090555060010162000411565b5090565b600062000446620004408462000572565b6200053e565b9050828152602081018484840111156200045f57600080fd5b6200046c848285620005e3565b509392505050565b6000815190506200048581620006ad565b92915050565b600082601f8301126200049d57600080fd5b8151620004af8482602086016200042f565b91505092915050565b600081519050620004c981620006c7565b92915050565b600080600060608486031215620004e557600080fd5b6000620004f58682870162000474565b93505060206200050886828701620004b8565b925050604084015167ffffffffffffffff8111156200052657600080fd5b62000534868287016200048b565b9150509250925092565b6000604051905081810181811067ffffffffffffffff821117156200056857620005676200067e565b5b8060405250919050565b600067ffffffffffffffff82111562000590576200058f6200067e565b5b601f19601f8301169050602081019050919050565b6000620005b282620005b9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000603578082015181840152602081019050620005e6565b8381111562000613576000848401525b50505050565b600060028204905060018216806200063257607f821691505b602082108114156200064957620006486200064f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006b881620005a5565b8114620006c457600080fd5b50565b620006d281620005d9565b8114620006de57600080fd5b50565b61403280620006f16000396000f3fe6080604052600436106101135760003560e01c8063715018a6116100a0578063bf2c8a9411610064578063bf2c8a94146103c0578063e985e9c5146103dc578063f242432a14610419578063f2fde38b14610442578063f5298aca1461046b57610113565b8063715018a6146102ef5780638da5cb5b146103065780639b642de114610331578063a22cb4651461035a578063bd85b0391461038357610113565b80632e1a7d4d116100e75780632e1a7d4d146101f85780632eb2c2d6146102215780634e1273f41461024a5780634f558e79146102875780635c975abb146102c457610113565b8062fdd58e1461011857806301ffc9a7146101555780630e89341c1461019257806316c38b3c146101cf575b600080fd5b34801561012457600080fd5b5061013f600480360381019061013a9190612967565b610494565b60405161014c9190613a35565b60405180910390f35b34801561016157600080fd5b5061017c60048036038101906101779190612a87565b61055e565b6040516101899190613758565b60405180910390f35b34801561019e57600080fd5b506101b960048036038101906101b49190612b1a565b610640565b6040516101c69190613773565b60405180910390f35b3480156101db57600080fd5b506101f660048036038101906101f19190612a5e565b610674565b005b34801561020457600080fd5b5061021f600480360381019061021a9190612b1a565b6107a4565b005b34801561022d57600080fd5b50610248600480360381019061024391906127dd565b610877565b005b34801561025657600080fd5b50610271600480360381019061026c91906129f2565b610918565b60405161027e91906136ff565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612b1a565b610ac9565b6040516102bb9190613758565b60405180910390f35b3480156102d057600080fd5b506102d9610add565b6040516102e69190613758565b60405180910390f35b3480156102fb57600080fd5b50610304610af4565b005b34801561031257600080fd5b5061031b610b7c565b6040516103289190613622565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612ad9565b610ba5565b005b34801561036657600080fd5b50610381600480360381019061037c919061292b565b610c2d565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190612b1a565b610dae565b6040516103b79190613a35565b60405180910390f35b6103da60048036038101906103d59190612b43565b610dcb565b005b3480156103e857600080fd5b5061040360048036038101906103fe91906127a1565b6110ff565b6040516104109190613758565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b919061289c565b611193565b005b34801561044e57600080fd5b506104696004803603810190610464919061274f565b611234565b005b34801561047757600080fd5b50610492600480360381019061048d91906129a3565b61132c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc90613955565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106395750610638826113f3565b5b9050919050565b6060600361064d8361145d565b60405160200161065e9291906135fe565b6040516020818303038152906040529050919050565b61067c61160a565b73ffffffffffffffffffffffffffffffffffffffff1661069a610b7c565b73ffffffffffffffffffffffffffffffffffffffff16146106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e790613935565b60405180910390fd5b80600e60006101000a81548160ff021916908315150217905550600e60009054906101000a900460ff1615610762577f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861074861160a565b6040516107559190613622565b60405180910390a16107a1565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61078b61160a565b6040516107989190613622565b60405180910390a15b50565b6107ac61160a565b73ffffffffffffffffffffffffffffffffffffffff166107ca610b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081790613935565b60405180910390fd5b600061082a610b7c565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610872573d6000803e3d6000fd5b505050565b61087f61160a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108c557506108c4856108bf61160a565b6110ff565b5b610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90613875565b60405180910390fd5b6109118585858585611612565b5050505050565b6060815183511461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590613815565b60405180910390fd5b6000835167ffffffffffffffff8111156109a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156109cf5781602001602082028036833780820191505090505b50905060005b8451811015610abe57610a68858281518110610a1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610a5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610494565b828281518110610aa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610ab790613d96565b90506109d5565b508091505092915050565b600080610ad583610dae565b119050919050565b6000600e60009054906101000a900460ff16905090565b610afc61160a565b73ffffffffffffffffffffffffffffffffffffffff16610b1a610b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6790613935565b60405180910390fd5b610b7a600061196f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bad61160a565b73ffffffffffffffffffffffffffffffffffffffff16610bcb610b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613935565b60405180910390fd5b610c2a81611a33565b50565b8173ffffffffffffffffffffffffffffffffffffffff16610c4c61160a565b73ffffffffffffffffffffffffffffffffffffffff161415610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a906137b5565b60405180910390fd5b8060026000610cb061160a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d5d61160a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610da29190613758565b60405180910390a35050565b600060046000838152602001908152602001600020549050919050565b600f544310610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e06906139b5565b60405180910390fd5b6001821480610e1e5750600282145b80610e295750600382145b610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f906138f5565b60405180910390fd5b6000600183610e779190613c7a565b9050600b8160038110610eb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154826004600086815260200190815260200160002054610ed49190613bf3565b1115610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c906138b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b8152600401610f879190613a35565b60206040518083038186803b158015610f9f57600080fd5b505afa158015610fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd79190612778565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906138d5565b60405180910390fd5b6000826008836003811061106a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154029050348111156110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990613995565b60405180910390fd5b6110cd85858560405180602001604052806000815250611a4d565b826004600086815260200190815260200160002060008282546110f09190613bf3565b92505081905550505050505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61119b61160a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111e157506111e0856111db61160a565b6110ff565b5b611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906137d5565b60405180910390fd5b61122d8585858585611bcd565b5050505050565b61123c61160a565b73ffffffffffffffffffffffffffffffffffffffff1661125a610b7c565b73ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613935565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611317906137f5565b60405180910390fd5b6113298161196f565b50565b61133461160a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061137a57506113798361137461160a565b6110ff565b5b6113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906137d5565b60405180910390fd5b6113c4838383611e3c565b806004600084815260200190815260200160002060008282546113e79190613c7a565b92505081905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156114a5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611605565b600082905060005b600082146114d75780806114c090613d96565b915050600a826114d09190613c49565b91506114ad565b60008167ffffffffffffffff811115611519577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561154b5781602001600182028036833780820191505090505b5090505b600085146115fe576001826115649190613c7a565b9150600a856115739190613ddf565b603061157f9190613bf3565b60f81b8183815181106115bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856115f79190613c49565b945061154f565b8093505050505b919050565b600033905090565b8151835114611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613915565b60405180910390fd5b60006116d061160a565b90506116da612035565b60005b84518110156118da576000858281518110611721577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611766577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613975565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118bf9190613bf3565b92505081905550505050806118d390613d96565b90506116dd565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611951929190613721565b60405180910390a461196781878787878761207f565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060039080519060200190611a49929190612432565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906139f5565b60405180910390fd5b6000611ac761160a565b9050611ad1612035565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b319190613bf3565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611baf929190613a50565b60405180910390a4611bc68160008787878761224f565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613915565b60405180910390fd5b6000611c4761160a565b9050611c51612035565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce090613975565b60405180910390fd5b8381036001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da09190613bf3565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e1d929190613a50565b60405180910390a4611e3382888888888861224f565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea3906139d5565b60405180910390fd5b6000611eb661160a565b9050611ec0612035565b60006001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90613a15565b60405180910390fd5b8281036001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612026929190613a50565b60405180910390a45050505050565b61203d610add565b1561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490613835565b60405180910390fd5b565b61209e8473ffffffffffffffffffffffffffffffffffffffff1661241f565b15612247578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120e495949392919061363d565b602060405180830381600087803b1580156120fe57600080fd5b505af192505050801561212f57506040513d601f19601f8201168201806040525081019061212c9190612ab0565b60015b6121be5761213b613eea565b806121465750612183565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a9190613773565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590613795565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90613855565b60405180910390fd5b505b505050505050565b61226e8473ffffffffffffffffffffffffffffffffffffffff1661241f565b15612417578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016122b49594939291906136a5565b602060405180830381600087803b1580156122ce57600080fd5b505af19250505080156122ff57506040513d601f19601f820116820180604052508101906122fc9190612ab0565b60015b61238e5761230b613eea565b806123165750612353565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a9190613773565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613795565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90613855565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461243e90613d64565b90600052602060002090601f01602090048101928261246057600085556124a7565b82601f1061247957805160ff19168380011785556124a7565b828001600101855582156124a7579182015b828111156124a657825182559160200191906001019061248b565b5b5090506124b491906124b8565b5090565b5b808211156124d15760008160009055506001016124b9565b5090565b60006124e86124e384613aaa565b613a79565b9050808382526020820190508285602086028201111561250757600080fd5b60005b85811015612537578161251d8882612629565b84526020840193506020830192505060018101905061250a565b5050509392505050565b600061255461254f84613ad6565b613a79565b9050808382526020820190508285602086028201111561257357600080fd5b60005b858110156125a35781612589888261273a565b845260208401935060208301925050600181019050612576565b5050509392505050565b60006125c06125bb84613b02565b613a79565b9050828152602081018484840111156125d857600080fd5b6125e3848285613d22565b509392505050565b60006125fe6125f984613b32565b613a79565b90508281526020810184848401111561261657600080fd5b612621848285613d22565b509392505050565b60008135905061263881613fa0565b92915050565b60008151905061264d81613fa0565b92915050565b600082601f83011261266457600080fd5b81356126748482602086016124d5565b91505092915050565b600082601f83011261268e57600080fd5b813561269e848260208601612541565b91505092915050565b6000813590506126b681613fb7565b92915050565b6000813590506126cb81613fce565b92915050565b6000815190506126e081613fce565b92915050565b600082601f8301126126f757600080fd5b81356127078482602086016125ad565b91505092915050565b600082601f83011261272157600080fd5b81356127318482602086016125eb565b91505092915050565b60008135905061274981613fe5565b92915050565b60006020828403121561276157600080fd5b600061276f84828501612629565b91505092915050565b60006020828403121561278a57600080fd5b60006127988482850161263e565b91505092915050565b600080604083850312156127b457600080fd5b60006127c285828601612629565b92505060206127d385828601612629565b9150509250929050565b600080600080600060a086880312156127f557600080fd5b600061280388828901612629565b955050602061281488828901612629565b945050604086013567ffffffffffffffff81111561283157600080fd5b61283d8882890161267d565b935050606086013567ffffffffffffffff81111561285a57600080fd5b6128668882890161267d565b925050608086013567ffffffffffffffff81111561288357600080fd5b61288f888289016126e6565b9150509295509295909350565b600080600080600060a086880312156128b457600080fd5b60006128c288828901612629565b95505060206128d388828901612629565b94505060406128e48882890161273a565b93505060606128f58882890161273a565b925050608086013567ffffffffffffffff81111561291257600080fd5b61291e888289016126e6565b9150509295509295909350565b6000806040838503121561293e57600080fd5b600061294c85828601612629565b925050602061295d858286016126a7565b9150509250929050565b6000806040838503121561297a57600080fd5b600061298885828601612629565b92505060206129998582860161273a565b9150509250929050565b6000806000606084860312156129b857600080fd5b60006129c686828701612629565b93505060206129d78682870161273a565b92505060406129e88682870161273a565b9150509250925092565b60008060408385031215612a0557600080fd5b600083013567ffffffffffffffff811115612a1f57600080fd5b612a2b85828601612653565b925050602083013567ffffffffffffffff811115612a4857600080fd5b612a548582860161267d565b9150509250929050565b600060208284031215612a7057600080fd5b6000612a7e848285016126a7565b91505092915050565b600060208284031215612a9957600080fd5b6000612aa7848285016126bc565b91505092915050565b600060208284031215612ac257600080fd5b6000612ad0848285016126d1565b91505092915050565b600060208284031215612aeb57600080fd5b600082013567ffffffffffffffff811115612b0557600080fd5b612b1184828501612710565b91505092915050565b600060208284031215612b2c57600080fd5b6000612b3a8482850161273a565b91505092915050565b60008060008060808587031215612b5957600080fd5b6000612b678782880161273a565b9450506020612b7887828801612629565b9350506040612b898782880161273a565b9250506060612b9a8782880161273a565b91505092959194509250565b6000612bb283836135e0565b60208301905092915050565b612bc781613cae565b82525050565b6000612bd882613b87565b612be28185613bb5565b9350612bed83613b62565b8060005b83811015612c1e578151612c058882612ba6565b9750612c1083613ba8565b925050600181019050612bf1565b5085935050505092915050565b612c3481613cc0565b82525050565b6000612c4582613b92565b612c4f8185613bc6565b9350612c5f818560208601613d31565b612c6881613ecc565b840191505092915050565b6000612c7e82613b9d565b612c888185613bd7565b9350612c98818560208601613d31565b612ca181613ecc565b840191505092915050565b6000612cb782613b9d565b612cc18185613be8565b9350612cd1818560208601613d31565b80840191505092915050565b60008154612cea81613d64565b612cf48186613be8565b94506001821660008114612d0f5760018114612d2057612d53565b60ff19831686528186019350612d53565b612d2985613b72565b60005b83811015612d4b57815481890152600182019150602081019050612d2c565b838801955050505b50505092915050565b6000612d69604383613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a207472616e7366657260008301527f20746f206e6f6e2045524331313535526563656976657220696d706c656d656e60208301527f74657200000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000612df5603883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2073657474696e672060008301527f617070726f76616c2073746174757320666f722073656c6600000000000000006020830152604082019050919050565b6000612e5b603883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2063616c6c6572206960008301527f73206e6f74206f776e6572206e6f7220617070726f76656400000000000000006020830152604082019050919050565b6000612ec1602683613bd7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f27603883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206163636f756e747360008301527f20616e6420696473206c656e677468206d69736d6174636800000000000000006020830152604082019050919050565b6000612f8d602c83613bd7565b91507f455243313135355061757361626c653a20746f6b656e207472616e736665722060008301527f7768696c652070617573656400000000000000000000000000000000000000006020830152604082019050919050565b6000612ff3603783613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20455243313135355260008301527f656365697665722072656a656374656420746f6b656e730000000000000000006020830152604082019050919050565b6000613059604183613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a207472616e7366657260008301527f2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766560208301527f64000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006130e5603783613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2069647320616e642060008301527f616d6f756e7473206c656e677468206d69736d617463680000000000000000006020830152604082019050919050565b600061314b603183613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20726571756573746560008301527f6420616d6f756e7420746f6f20686967680000000000000000000000000000006020830152604082019050919050565b60006131b1603983613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2073656e646572206960008301527f73206e6f74206f776e6572206f66206d656d62657273686970000000000000006020830152604082019050919050565b6000613217602883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20696e76616c69642060008301527f746f6b656e2069640000000000000000000000000000000000000000000000006020830152604082019050919050565b600061327d603483613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a207472616e7366657260008301527f20746f20746865207a65726f20616464726573730000000000000000000000006020830152604082019050919050565b60006132e3602083613bd7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613323603a83613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2062616c616e63652060008301527f717565727920666f7220746865207a65726f20616464726573730000000000006020830152604082019050919050565b6000613389603983613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20696e73756666696360008301527f69656e742062616c616e636520666f72207472616e73666572000000000000006020830152604082019050919050565b60006133ef602983613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2077726f6e6720616d60008301527f6f756e742073656e7400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613455602c83613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206d696e742070617360008301527f732073616c6520656e64656400000000000000000000000000000000000000006020830152604082019050919050565b60006134bb603283613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206275726e2066726f60008301527f6d20746865207a65726f206164647265737300000000000000000000000000006020830152604082019050919050565b6000613521603083613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206d696e7420746f2060008301527f746865207a65726f2061646472657373000000000000000000000000000000006020830152604082019050919050565b6000613587603383613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206275726e20616d6f60008301527f756e7420657863656564732062616c616e6365000000000000000000000000006020830152604082019050919050565b6135e981613d18565b82525050565b6135f881613d18565b82525050565b600061360a8285612cdd565b91506136168284612cac565b91508190509392505050565b60006020820190506136376000830184612bbe565b92915050565b600060a0820190506136526000830188612bbe565b61365f6020830187612bbe565b81810360408301526136718186612bcd565b905081810360608301526136858185612bcd565b905081810360808301526136998184612c3a565b90509695505050505050565b600060a0820190506136ba6000830188612bbe565b6136c76020830187612bbe565b6136d460408301866135ef565b6136e160608301856135ef565b81810360808301526136f38184612c3a565b90509695505050505050565b600060208201905081810360008301526137198184612bcd565b905092915050565b6000604082019050818103600083015261373b8185612bcd565b9050818103602083015261374f8184612bcd565b90509392505050565b600060208201905061376d6000830184612c2b565b92915050565b6000602082019050818103600083015261378d8184612c73565b905092915050565b600060208201905081810360008301526137ae81612d5c565b9050919050565b600060208201905081810360008301526137ce81612de8565b9050919050565b600060208201905081810360008301526137ee81612e4e565b9050919050565b6000602082019050818103600083015261380e81612eb4565b9050919050565b6000602082019050818103600083015261382e81612f1a565b9050919050565b6000602082019050818103600083015261384e81612f80565b9050919050565b6000602082019050818103600083015261386e81612fe6565b9050919050565b6000602082019050818103600083015261388e8161304c565b9050919050565b600060208201905081810360008301526138ae816130d8565b9050919050565b600060208201905081810360008301526138ce8161313e565b9050919050565b600060208201905081810360008301526138ee816131a4565b9050919050565b6000602082019050818103600083015261390e8161320a565b9050919050565b6000602082019050818103600083015261392e81613270565b9050919050565b6000602082019050818103600083015261394e816132d6565b9050919050565b6000602082019050818103600083015261396e81613316565b9050919050565b6000602082019050818103600083015261398e8161337c565b9050919050565b600060208201905081810360008301526139ae816133e2565b9050919050565b600060208201905081810360008301526139ce81613448565b9050919050565b600060208201905081810360008301526139ee816134ae565b9050919050565b60006020820190508181036000830152613a0e81613514565b9050919050565b60006020820190508181036000830152613a2e8161357a565b9050919050565b6000602082019050613a4a60008301846135ef565b92915050565b6000604082019050613a6560008301856135ef565b613a7260208301846135ef565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613aa057613a9f613e9d565b5b8060405250919050565b600067ffffffffffffffff821115613ac557613ac4613e9d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613af157613af0613e9d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b1d57613b1c613e9d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613b4d57613b4c613e9d565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bfe82613d18565b9150613c0983613d18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c3e57613c3d613e10565b5b828201905092915050565b6000613c5482613d18565b9150613c5f83613d18565b925082613c6f57613c6e613e3f565b5b828204905092915050565b6000613c8582613d18565b9150613c9083613d18565b925082821015613ca357613ca2613e10565b5b828203905092915050565b6000613cb982613cf8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d4f578082015181840152602081019050613d34565b83811115613d5e576000848401525b50505050565b60006002820490506001821680613d7c57607f821691505b60208210811415613d9057613d8f613e6e565b5b50919050565b6000613da182613d18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dd457613dd3613e10565b5b600182019050919050565b6000613dea82613d18565b9150613df583613d18565b925082613e0557613e04613e3f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613efa57613f9d565b60046000803e613f0b600051613edd565b6308c379a08114613f1c5750613f9d565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613f4857505050613f9d565b808201805167ffffffffffffffff811115613f67575050505050613f9d565b8060208301013d8501811115613f8257505050505050613f9d565b613f8b82613ecc565b60208401016040528296505050505050505b90565b613fa981613cae565b8114613fb457600080fd5b50565b613fc081613cc0565b8114613fcb57600080fd5b50565b613fd781613ccc565b8114613fe257600080fd5b50565b613fee81613d18565b8114613ff957600080fd5b5056fea26469706673582212200e8a6096ad5ebe258428a2d67247c8bd51fd326104b353c15dd0add93a6558e064736f6c634300080000330000000000000000000000001ca39c7f0f65b4da24b094a9afac7acf626b7f380000000000000000000000000000000000000000000000000000000000d6631c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e67656e2e6172742f7075626c69632f6d696e742d706173732f000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101135760003560e01c8063715018a6116100a0578063bf2c8a9411610064578063bf2c8a94146103c0578063e985e9c5146103dc578063f242432a14610419578063f2fde38b14610442578063f5298aca1461046b57610113565b8063715018a6146102ef5780638da5cb5b146103065780639b642de114610331578063a22cb4651461035a578063bd85b0391461038357610113565b80632e1a7d4d116100e75780632e1a7d4d146101f85780632eb2c2d6146102215780634e1273f41461024a5780634f558e79146102875780635c975abb146102c457610113565b8062fdd58e1461011857806301ffc9a7146101555780630e89341c1461019257806316c38b3c146101cf575b600080fd5b34801561012457600080fd5b5061013f600480360381019061013a9190612967565b610494565b60405161014c9190613a35565b60405180910390f35b34801561016157600080fd5b5061017c60048036038101906101779190612a87565b61055e565b6040516101899190613758565b60405180910390f35b34801561019e57600080fd5b506101b960048036038101906101b49190612b1a565b610640565b6040516101c69190613773565b60405180910390f35b3480156101db57600080fd5b506101f660048036038101906101f19190612a5e565b610674565b005b34801561020457600080fd5b5061021f600480360381019061021a9190612b1a565b6107a4565b005b34801561022d57600080fd5b50610248600480360381019061024391906127dd565b610877565b005b34801561025657600080fd5b50610271600480360381019061026c91906129f2565b610918565b60405161027e91906136ff565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612b1a565b610ac9565b6040516102bb9190613758565b60405180910390f35b3480156102d057600080fd5b506102d9610add565b6040516102e69190613758565b60405180910390f35b3480156102fb57600080fd5b50610304610af4565b005b34801561031257600080fd5b5061031b610b7c565b6040516103289190613622565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190612ad9565b610ba5565b005b34801561036657600080fd5b50610381600480360381019061037c919061292b565b610c2d565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190612b1a565b610dae565b6040516103b79190613a35565b60405180910390f35b6103da60048036038101906103d59190612b43565b610dcb565b005b3480156103e857600080fd5b5061040360048036038101906103fe91906127a1565b6110ff565b6040516104109190613758565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b919061289c565b611193565b005b34801561044e57600080fd5b506104696004803603810190610464919061274f565b611234565b005b34801561047757600080fd5b50610492600480360381019061048d91906129a3565b61132c565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc90613955565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061062957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106395750610638826113f3565b5b9050919050565b6060600361064d8361145d565b60405160200161065e9291906135fe565b6040516020818303038152906040529050919050565b61067c61160a565b73ffffffffffffffffffffffffffffffffffffffff1661069a610b7c565b73ffffffffffffffffffffffffffffffffffffffff16146106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e790613935565b60405180910390fd5b80600e60006101000a81548160ff021916908315150217905550600e60009054906101000a900460ff1615610762577f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861074861160a565b6040516107559190613622565b60405180910390a16107a1565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61078b61160a565b6040516107989190613622565b60405180910390a15b50565b6107ac61160a565b73ffffffffffffffffffffffffffffffffffffffff166107ca610b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081790613935565b60405180910390fd5b600061082a610b7c565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610872573d6000803e3d6000fd5b505050565b61087f61160a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108c557506108c4856108bf61160a565b6110ff565b5b610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90613875565b60405180910390fd5b6109118585858585611612565b5050505050565b6060815183511461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590613815565b60405180910390fd5b6000835167ffffffffffffffff8111156109a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156109cf5781602001602082028036833780820191505090505b50905060005b8451811015610abe57610a68858281518110610a1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610a5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610494565b828281518110610aa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610ab790613d96565b90506109d5565b508091505092915050565b600080610ad583610dae565b119050919050565b6000600e60009054906101000a900460ff16905090565b610afc61160a565b73ffffffffffffffffffffffffffffffffffffffff16610b1a610b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6790613935565b60405180910390fd5b610b7a600061196f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bad61160a565b73ffffffffffffffffffffffffffffffffffffffff16610bcb610b7c565b73ffffffffffffffffffffffffffffffffffffffff1614610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613935565b60405180910390fd5b610c2a81611a33565b50565b8173ffffffffffffffffffffffffffffffffffffffff16610c4c61160a565b73ffffffffffffffffffffffffffffffffffffffff161415610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a906137b5565b60405180910390fd5b8060026000610cb061160a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d5d61160a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610da29190613758565b60405180910390a35050565b600060046000838152602001908152602001600020549050919050565b600f544310610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e06906139b5565b60405180910390fd5b6001821480610e1e5750600282145b80610e295750600382145b610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f906138f5565b60405180910390fd5b6000600183610e779190613c7a565b9050600b8160038110610eb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154826004600086815260200190815260200160002054610ed49190613bf3565b1115610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c906138b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b8152600401610f879190613a35565b60206040518083038186803b158015610f9f57600080fd5b505afa158015610fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd79190612778565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906138d5565b60405180910390fd5b6000826008836003811061106a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154029050348111156110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990613995565b60405180910390fd5b6110cd85858560405180602001604052806000815250611a4d565b826004600086815260200190815260200160002060008282546110f09190613bf3565b92505081905550505050505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61119b61160a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111e157506111e0856111db61160a565b6110ff565b5b611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906137d5565b60405180910390fd5b61122d8585858585611bcd565b5050505050565b61123c61160a565b73ffffffffffffffffffffffffffffffffffffffff1661125a610b7c565b73ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613935565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611317906137f5565b60405180910390fd5b6113298161196f565b50565b61133461160a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061137a57506113798361137461160a565b6110ff565b5b6113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906137d5565b60405180910390fd5b6113c4838383611e3c565b806004600084815260200190815260200160002060008282546113e79190613c7a565b92505081905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156114a5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611605565b600082905060005b600082146114d75780806114c090613d96565b915050600a826114d09190613c49565b91506114ad565b60008167ffffffffffffffff811115611519577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561154b5781602001600182028036833780820191505090505b5090505b600085146115fe576001826115649190613c7a565b9150600a856115739190613ddf565b603061157f9190613bf3565b60f81b8183815181106115bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856115f79190613c49565b945061154f565b8093505050505b919050565b600033905090565b8151835114611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613895565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90613915565b60405180910390fd5b60006116d061160a565b90506116da612035565b60005b84518110156118da576000858281518110611721577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611766577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613975565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118bf9190613bf3565b92505081905550505050806118d390613d96565b90506116dd565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611951929190613721565b60405180910390a461196781878787878761207f565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060039080519060200190611a49929190612432565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906139f5565b60405180910390fd5b6000611ac761160a565b9050611ad1612035565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b319190613bf3565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611baf929190613a50565b60405180910390a4611bc68160008787878761224f565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613915565b60405180910390fd5b6000611c4761160a565b9050611c51612035565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce090613975565b60405180910390fd5b8381036001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da09190613bf3565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e1d929190613a50565b60405180910390a4611e3382888888888861224f565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea3906139d5565b60405180910390fd5b6000611eb661160a565b9050611ec0612035565b60006001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f90613a15565b60405180910390fd5b8281036001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612026929190613a50565b60405180910390a45050505050565b61203d610add565b1561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490613835565b60405180910390fd5b565b61209e8473ffffffffffffffffffffffffffffffffffffffff1661241f565b15612247578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120e495949392919061363d565b602060405180830381600087803b1580156120fe57600080fd5b505af192505050801561212f57506040513d601f19601f8201168201806040525081019061212c9190612ab0565b60015b6121be5761213b613eea565b806121465750612183565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a9190613773565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b590613795565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90613855565b60405180910390fd5b505b505050505050565b61226e8473ffffffffffffffffffffffffffffffffffffffff1661241f565b15612417578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016122b49594939291906136a5565b602060405180830381600087803b1580156122ce57600080fd5b505af19250505080156122ff57506040513d601f19601f820116820180604052508101906122fc9190612ab0565b60015b61238e5761230b613eea565b806123165750612353565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234a9190613773565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613795565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90613855565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461243e90613d64565b90600052602060002090601f01602090048101928261246057600085556124a7565b82601f1061247957805160ff19168380011785556124a7565b828001600101855582156124a7579182015b828111156124a657825182559160200191906001019061248b565b5b5090506124b491906124b8565b5090565b5b808211156124d15760008160009055506001016124b9565b5090565b60006124e86124e384613aaa565b613a79565b9050808382526020820190508285602086028201111561250757600080fd5b60005b85811015612537578161251d8882612629565b84526020840193506020830192505060018101905061250a565b5050509392505050565b600061255461254f84613ad6565b613a79565b9050808382526020820190508285602086028201111561257357600080fd5b60005b858110156125a35781612589888261273a565b845260208401935060208301925050600181019050612576565b5050509392505050565b60006125c06125bb84613b02565b613a79565b9050828152602081018484840111156125d857600080fd5b6125e3848285613d22565b509392505050565b60006125fe6125f984613b32565b613a79565b90508281526020810184848401111561261657600080fd5b612621848285613d22565b509392505050565b60008135905061263881613fa0565b92915050565b60008151905061264d81613fa0565b92915050565b600082601f83011261266457600080fd5b81356126748482602086016124d5565b91505092915050565b600082601f83011261268e57600080fd5b813561269e848260208601612541565b91505092915050565b6000813590506126b681613fb7565b92915050565b6000813590506126cb81613fce565b92915050565b6000815190506126e081613fce565b92915050565b600082601f8301126126f757600080fd5b81356127078482602086016125ad565b91505092915050565b600082601f83011261272157600080fd5b81356127318482602086016125eb565b91505092915050565b60008135905061274981613fe5565b92915050565b60006020828403121561276157600080fd5b600061276f84828501612629565b91505092915050565b60006020828403121561278a57600080fd5b60006127988482850161263e565b91505092915050565b600080604083850312156127b457600080fd5b60006127c285828601612629565b92505060206127d385828601612629565b9150509250929050565b600080600080600060a086880312156127f557600080fd5b600061280388828901612629565b955050602061281488828901612629565b945050604086013567ffffffffffffffff81111561283157600080fd5b61283d8882890161267d565b935050606086013567ffffffffffffffff81111561285a57600080fd5b6128668882890161267d565b925050608086013567ffffffffffffffff81111561288357600080fd5b61288f888289016126e6565b9150509295509295909350565b600080600080600060a086880312156128b457600080fd5b60006128c288828901612629565b95505060206128d388828901612629565b94505060406128e48882890161273a565b93505060606128f58882890161273a565b925050608086013567ffffffffffffffff81111561291257600080fd5b61291e888289016126e6565b9150509295509295909350565b6000806040838503121561293e57600080fd5b600061294c85828601612629565b925050602061295d858286016126a7565b9150509250929050565b6000806040838503121561297a57600080fd5b600061298885828601612629565b92505060206129998582860161273a565b9150509250929050565b6000806000606084860312156129b857600080fd5b60006129c686828701612629565b93505060206129d78682870161273a565b92505060406129e88682870161273a565b9150509250925092565b60008060408385031215612a0557600080fd5b600083013567ffffffffffffffff811115612a1f57600080fd5b612a2b85828601612653565b925050602083013567ffffffffffffffff811115612a4857600080fd5b612a548582860161267d565b9150509250929050565b600060208284031215612a7057600080fd5b6000612a7e848285016126a7565b91505092915050565b600060208284031215612a9957600080fd5b6000612aa7848285016126bc565b91505092915050565b600060208284031215612ac257600080fd5b6000612ad0848285016126d1565b91505092915050565b600060208284031215612aeb57600080fd5b600082013567ffffffffffffffff811115612b0557600080fd5b612b1184828501612710565b91505092915050565b600060208284031215612b2c57600080fd5b6000612b3a8482850161273a565b91505092915050565b60008060008060808587031215612b5957600080fd5b6000612b678782880161273a565b9450506020612b7887828801612629565b9350506040612b898782880161273a565b9250506060612b9a8782880161273a565b91505092959194509250565b6000612bb283836135e0565b60208301905092915050565b612bc781613cae565b82525050565b6000612bd882613b87565b612be28185613bb5565b9350612bed83613b62565b8060005b83811015612c1e578151612c058882612ba6565b9750612c1083613ba8565b925050600181019050612bf1565b5085935050505092915050565b612c3481613cc0565b82525050565b6000612c4582613b92565b612c4f8185613bc6565b9350612c5f818560208601613d31565b612c6881613ecc565b840191505092915050565b6000612c7e82613b9d565b612c888185613bd7565b9350612c98818560208601613d31565b612ca181613ecc565b840191505092915050565b6000612cb782613b9d565b612cc18185613be8565b9350612cd1818560208601613d31565b80840191505092915050565b60008154612cea81613d64565b612cf48186613be8565b94506001821660008114612d0f5760018114612d2057612d53565b60ff19831686528186019350612d53565b612d2985613b72565b60005b83811015612d4b57815481890152600182019150602081019050612d2c565b838801955050505b50505092915050565b6000612d69604383613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a207472616e7366657260008301527f20746f206e6f6e2045524331313535526563656976657220696d706c656d656e60208301527f74657200000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000612df5603883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2073657474696e672060008301527f617070726f76616c2073746174757320666f722073656c6600000000000000006020830152604082019050919050565b6000612e5b603883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2063616c6c6572206960008301527f73206e6f74206f776e6572206e6f7220617070726f76656400000000000000006020830152604082019050919050565b6000612ec1602683613bd7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f27603883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206163636f756e747360008301527f20616e6420696473206c656e677468206d69736d6174636800000000000000006020830152604082019050919050565b6000612f8d602c83613bd7565b91507f455243313135355061757361626c653a20746f6b656e207472616e736665722060008301527f7768696c652070617573656400000000000000000000000000000000000000006020830152604082019050919050565b6000612ff3603783613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20455243313135355260008301527f656365697665722072656a656374656420746f6b656e730000000000000000006020830152604082019050919050565b6000613059604183613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a207472616e7366657260008301527f2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766560208301527f64000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006130e5603783613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2069647320616e642060008301527f616d6f756e7473206c656e677468206d69736d617463680000000000000000006020830152604082019050919050565b600061314b603183613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20726571756573746560008301527f6420616d6f756e7420746f6f20686967680000000000000000000000000000006020830152604082019050919050565b60006131b1603983613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2073656e646572206960008301527f73206e6f74206f776e6572206f66206d656d62657273686970000000000000006020830152604082019050919050565b6000613217602883613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20696e76616c69642060008301527f746f6b656e2069640000000000000000000000000000000000000000000000006020830152604082019050919050565b600061327d603483613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a207472616e7366657260008301527f20746f20746865207a65726f20616464726573730000000000000000000000006020830152604082019050919050565b60006132e3602083613bd7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613323603a83613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2062616c616e63652060008301527f717565727920666f7220746865207a65726f20616464726573730000000000006020830152604082019050919050565b6000613389603983613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a20696e73756666696360008301527f69656e742062616c616e636520666f72207472616e73666572000000000000006020830152604082019050919050565b60006133ef602983613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a2077726f6e6720616d60008301527f6f756e742073656e7400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613455602c83613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206d696e742070617360008301527f732073616c6520656e64656400000000000000000000000000000000000000006020830152604082019050919050565b60006134bb603283613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206275726e2066726f60008301527f6d20746865207a65726f206164647265737300000000000000000000000000006020830152604082019050919050565b6000613521603083613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206d696e7420746f2060008301527f746865207a65726f2061646472657373000000000000000000000000000000006020830152604082019050919050565b6000613587603383613bd7565b91507f47656e417274546f6b656e41697264726f70506173733a206275726e20616d6f60008301527f756e7420657863656564732062616c616e6365000000000000000000000000006020830152604082019050919050565b6135e981613d18565b82525050565b6135f881613d18565b82525050565b600061360a8285612cdd565b91506136168284612cac565b91508190509392505050565b60006020820190506136376000830184612bbe565b92915050565b600060a0820190506136526000830188612bbe565b61365f6020830187612bbe565b81810360408301526136718186612bcd565b905081810360608301526136858185612bcd565b905081810360808301526136998184612c3a565b90509695505050505050565b600060a0820190506136ba6000830188612bbe565b6136c76020830187612bbe565b6136d460408301866135ef565b6136e160608301856135ef565b81810360808301526136f38184612c3a565b90509695505050505050565b600060208201905081810360008301526137198184612bcd565b905092915050565b6000604082019050818103600083015261373b8185612bcd565b9050818103602083015261374f8184612bcd565b90509392505050565b600060208201905061376d6000830184612c2b565b92915050565b6000602082019050818103600083015261378d8184612c73565b905092915050565b600060208201905081810360008301526137ae81612d5c565b9050919050565b600060208201905081810360008301526137ce81612de8565b9050919050565b600060208201905081810360008301526137ee81612e4e565b9050919050565b6000602082019050818103600083015261380e81612eb4565b9050919050565b6000602082019050818103600083015261382e81612f1a565b9050919050565b6000602082019050818103600083015261384e81612f80565b9050919050565b6000602082019050818103600083015261386e81612fe6565b9050919050565b6000602082019050818103600083015261388e8161304c565b9050919050565b600060208201905081810360008301526138ae816130d8565b9050919050565b600060208201905081810360008301526138ce8161313e565b9050919050565b600060208201905081810360008301526138ee816131a4565b9050919050565b6000602082019050818103600083015261390e8161320a565b9050919050565b6000602082019050818103600083015261392e81613270565b9050919050565b6000602082019050818103600083015261394e816132d6565b9050919050565b6000602082019050818103600083015261396e81613316565b9050919050565b6000602082019050818103600083015261398e8161337c565b9050919050565b600060208201905081810360008301526139ae816133e2565b9050919050565b600060208201905081810360008301526139ce81613448565b9050919050565b600060208201905081810360008301526139ee816134ae565b9050919050565b60006020820190508181036000830152613a0e81613514565b9050919050565b60006020820190508181036000830152613a2e8161357a565b9050919050565b6000602082019050613a4a60008301846135ef565b92915050565b6000604082019050613a6560008301856135ef565b613a7260208301846135ef565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613aa057613a9f613e9d565b5b8060405250919050565b600067ffffffffffffffff821115613ac557613ac4613e9d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613af157613af0613e9d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b1d57613b1c613e9d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613b4d57613b4c613e9d565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bfe82613d18565b9150613c0983613d18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c3e57613c3d613e10565b5b828201905092915050565b6000613c5482613d18565b9150613c5f83613d18565b925082613c6f57613c6e613e3f565b5b828204905092915050565b6000613c8582613d18565b9150613c9083613d18565b925082821015613ca357613ca2613e10565b5b828203905092915050565b6000613cb982613cf8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d4f578082015181840152602081019050613d34565b83811115613d5e576000848401525b50505050565b60006002820490506001821680613d7c57607f821691505b60208210811415613d9057613d8f613e6e565b5b50919050565b6000613da182613d18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dd457613dd3613e10565b5b600182019050919050565b6000613dea82613d18565b9150613df583613d18565b925082613e0557613e04613e3f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613efa57613f9d565b60046000803e613f0b600051613edd565b6308c379a08114613f1c5750613f9d565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613f4857505050613f9d565b808201805167ffffffffffffffff811115613f67575050505050613f9d565b8060208301013d8501811115613f8257505050505050613f9d565b613f8b82613ecc565b60208401016040528296505050505050505b90565b613fa981613cae565b8114613fb457600080fd5b50565b613fc081613cc0565b8114613fcb57600080fd5b50565b613fd781613ccc565b8114613fe257600080fd5b50565b613fee81613d18565b8114613ff957600080fd5b5056fea26469706673582212200e8a6096ad5ebe258428a2d67247c8bd51fd326104b353c15dd0add93a6558e064736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001ca39c7f0f65b4da24b094a9afac7acf626b7f380000000000000000000000000000000000000000000000000000000000d6631c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e67656e2e6172742f7075626c69632f6d696e742d706173732f000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : genArtMembershipAddress_ (address): 0x1Ca39c7F0F65B4Da24b094A9afac7aCf626B7f38
Arg [1] : endBlock_ (uint256): 14050076
Arg [2] : uri_ (string): https://api.gen.art/public/mint-pass/

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ca39c7f0f65b4da24b094a9afac7acf626b7f38
Arg [1] : 0000000000000000000000000000000000000000000000000000000000d6631c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [4] : 68747470733a2f2f6170692e67656e2e6172742f7075626c69632f6d696e742d
Arg [5] : 706173732f000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

22820:17261:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25658:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24316:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24684:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26877:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27201:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30260:457;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26157:576;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25190:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25421:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18638:94;;;;;;;;;;;;;:::i;:::-;;17987:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27104:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29010:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24979:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27396:1114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29477:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29767:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18887:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28570:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25658:333;25789:7;25855:1;25836:21;;:7;:21;;;;25814:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;25961:9;:13;25971:2;25961:13;;;;;;;;;;;:22;25975:7;25961:22;;;;;;;;;;;;;;;;25954:29;;25658:333;;;;:::o;24316:360::-;24463:4;24520:26;24505:41;;;:11;:41;;;;:110;;;;24578:37;24563:52;;;:11;:52;;;;24505:110;:163;;;;24632:36;24656:11;24632:23;:36::i;:::-;24505:163;24485:183;;24316:360;;;:::o;24684:213::-;24800:13;24862:4;24868:19;:8;:17;:19::i;:::-;24845:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24831:58;;24684:213;;;:::o;26877:219::-;18218:12;:10;:12::i;:::-;18207:23;;:7;:5;:7::i;:::-;:23;;;18199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26947:6:::1;26937:7;;:16;;;;;;;;;;;;;;;;;;26968:7;;;;;;;;;;;26964:125;;;26997:20;27004:12;:10;:12::i;:::-;26997:20;;;;;;:::i;:::-;;;;;;;;26964:125;;;27055:22;27064:12;:10;:12::i;:::-;27055:22;;;;;;:::i;:::-;;;;;;;;26964:125;26877:219:::0;:::o;27201:135::-;18218:12;:10;:12::i;:::-;18207:23;;:7;:5;:7::i;:::-;:23;;;18199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27262:14:::1;27279:7;:5;:7::i;:::-;27262:24;;27305:6;27297:24;;:31;27322:5;27297:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18278:1;27201:135:::0;:::o;30260:457::-;30501:12;:10;:12::i;:::-;30493:20;;:4;:20;;;:60;;;;30517:36;30534:4;30540:12;:10;:12::i;:::-;30517:16;:36::i;:::-;30493:60;30471:175;;;;;;;;;;;;:::i;:::-;;;;;;;;;30657:52;30680:4;30686:2;30690:3;30695:7;30704:4;30657:22;:52::i;:::-;30260:457;;;;;:::o;26157:576::-;26313:16;26388:3;:10;26369:8;:15;:29;26347:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;26495:30;26542:8;:15;26528:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26495:63;;26576:9;26571:122;26595:8;:15;26591:1;:19;26571:122;;;26651:30;26661:8;26670:1;26661:11;;;;;;;;;;;;;;;;;;;;;;26674:3;26678:1;26674:6;;;;;;;;;;;;;;;;;;;;;;26651:9;:30::i;:::-;26632:13;26646:1;26632:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;26612:3;;;;:::i;:::-;;;26571:122;;;;26712:13;26705:20;;;26157:576;;;;:::o;25190:131::-;25247:4;25312:1;25271:38;25306:2;25271:34;:38::i;:::-;:42;25264:49;;25190:131;;;:::o;25421:86::-;25468:4;25492:7;;;;;;;;;;;25485:14;;25421:86;:::o;18638:94::-;18218:12;:10;:12::i;:::-;18207:23;;:7;:5;:7::i;:::-;:23;;;18199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18703:21:::1;18721:1;18703:9;:21::i;:::-;18638:94::o:0;17987:87::-;18033:7;18060:6;;;;;;;;;;;18053:13;;17987:87;:::o;27104:89::-;18218:12;:10;:12::i;:::-;18207:23;;:7;:5;:7::i;:::-;:23;;;18199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27170:15:::1;27178:6;27170:7;:15::i;:::-;27104:89:::0;:::o;29010:395::-;29175:8;29159:24;;:12;:10;:12::i;:::-;:24;;;;29137:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;29325:8;29280:18;:32;29299:12;:10;:12::i;:::-;29280:32;;;;;;;;;;;;;;;:42;29313:8;29280:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29378:8;29349:48;;29364:12;:10;:12::i;:::-;29349:48;;;29388:8;29349:48;;;;;;:::i;:::-;;;;;;;;29010:395;;:::o;24979:113::-;25041:7;25068:12;:16;25081:2;25068:16;;;;;;;;;;;;25061:23;;24979:113;;;:::o;27396:1114::-;27583:8;;27568:12;:23;27546:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27702:1;27696:2;:7;:18;;;;27713:1;27707:2;:7;27696:18;:29;;;;27724:1;27718:2;:7;27696:29;27674:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;27804:13;27825:1;27820:2;:6;;;;:::i;:::-;27804:22;;27888:11;27900:5;27888:18;;;;;;;;;;;;;;;;;27878:6;27859:12;:16;27872:2;27859:16;;;;;;;;;;;;:25;;;;:::i;:::-;:47;;27837:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;28091:10;28016:85;;28024:23;;;;;;;;;;;28016:40;;;28057:12;28016:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;;;27994:192;;;;;;;;;;;;:::i;:::-;;;;;;;;;28197:16;28284:6;28260:14;28275:5;28260:21;;;;;;;;;;;;;;;;;:30;28249:41;;28346:9;28334:8;:21;;28312:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;28435:30;28441:7;28450:2;28454:6;28435:30;;;;;;;;;;;;:5;:30::i;:::-;28496:6;28476:12;:16;28489:2;28476:16;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;27396:1114;;;;;;:::o;29477:218::-;29621:4;29650:18;:27;29669:7;29650:27;;;;;;;;;;;;;;;:37;29678:8;29650:37;;;;;;;;;;;;;;;;;;;;;;;;;29643:44;;29477:218;;;;:::o;29767:416::-;29983:12;:10;:12::i;:::-;29975:20;;:4;:20;;;:60;;;;29999:36;30016:4;30022:12;:10;:12::i;:::-;29999:16;:36::i;:::-;29975:60;29953:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;30130:45;30148:4;30154:2;30158;30162:6;30170:4;30130:17;:45::i;:::-;29767:416;;;;;:::o;18887:229::-;18218:12;:10;:12::i;:::-;18207:23;;:7;:5;:7::i;:::-;:23;;;18199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19010:1:::1;18990:22;;:8;:22;;;;18968:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;19089:19;19099:8;19089:9;:19::i;:::-;18887:229:::0;:::o;28570:367::-;28714:12;:10;:12::i;:::-;28703:23;;:7;:23;;;:66;;;;28730:39;28747:7;28756:12;:10;:12::i;:::-;28730:16;:39::i;:::-;28703:66;28681:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;28866:26;28872:7;28881:2;28885:6;28866:5;:26::i;:::-;28923:6;28903:12;:16;28916:2;28903:16;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;28570:367;;;:::o;20002:207::-;20132:4;20176:25;20161:40;;;:11;:40;;;;20154:47;;20002:207;;;:::o;20442:723::-;20498:13;20728:1;20719:5;:10;20715:53;;;20746:10;;;;;;;;;;;;;;;;;;;;;20715:53;20778:12;20793:5;20778:20;;20809:14;20834:78;20849:1;20841:4;:9;20834:78;;20867:8;;;;;:::i;:::-;;;;20898:2;20890:10;;;;;:::i;:::-;;;20834:78;;;20922:19;20954:6;20944:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20922:39;;20972:154;20988:1;20979:5;:10;20972:154;;21016:1;21006:11;;;;;:::i;:::-;;;21083:2;21075:5;:10;;;;:::i;:::-;21062:2;:24;;;;:::i;:::-;21049:39;;21032:6;21039;21032:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;21112:2;21103:11;;;;;:::i;:::-;;;20972:154;;;21150:6;21136:21;;;;;20442:723;;;;:::o;16838:98::-;16891:7;16918:10;16911:17;;16838:98;:::o;32389:1293::-;32630:7;:14;32616:3;:10;:28;32594:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32774:1;32760:16;;:2;:16;;;;32738:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;32869:16;32888:12;:10;:12::i;:::-;32869:31;;32913:22;:20;:22::i;:::-;32953:9;32948:485;32972:3;:10;32968:1;:14;32948:485;;;33004:10;33017:3;33021:1;33017:6;;;;;;;;;;;;;;;;;;;;;;33004:19;;33038:14;33055:7;33063:1;33055:10;;;;;;;;;;;;;;;;;;;;;;33038:27;;33082:19;33104:9;:13;33114:2;33104:13;;;;;;;;;;;:19;33118:4;33104:19;;;;;;;;;;;;;;;;33082:41;;33179:6;33164:11;:21;;33138:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33358:6;33344:11;:20;33322:9;:13;33332:2;33322:13;;;;;;;;;;;:19;33336:4;33322:19;;;;;;;;;;;;;;;:42;;;;33415:6;33394:9;:13;33404:2;33394:13;;;;;;;;;;;:17;33408:2;33394:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32948:485;;;32984:3;;;;:::i;:::-;;;32948:485;;;;33480:2;33450:47;;33474:4;33450:47;;33464:8;33450:47;;;33484:3;33489:7;33450:47;;;;;;;:::i;:::-;;;;;;;;33510:164;33560:8;33583:4;33602:2;33619:3;33637:7;33659:4;33510:35;:164::i;:::-;32389:1293;;;;;;:::o;19124:173::-;19180:16;19199:6;;;;;;;;;;;19180:25;;19225:8;19216:6;;:17;;;;;;;;;;;;;;;;;;19280:8;19249:40;;19270:8;19249:40;;;;;;;;;;;;19124:173;;:::o;34526:88::-;34600:6;34593:4;:13;;;;;;;;;;;;:::i;:::-;;34526:88;:::o;35015:655::-;35206:1;35187:21;;:7;:21;;;;35165:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;35297:16;35316:12;:10;:12::i;:::-;35297:31;;35341:22;:20;:22::i;:::-;35402:6;35376:9;:13;35386:2;35376:13;;;;;;;;;;;:22;35390:7;35376:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;35461:7;35424:57;;35457:1;35424:57;;35439:8;35424:57;;;35470:2;35474:6;35424:57;;;;;;;:::i;:::-;;;;;;;;35494:168;35539:8;35570:1;35587:7;35609:2;35626:6;35647:4;35494:30;:168::i;:::-;35015:655;;;;;:::o;31181:850::-;31397:1;31383:16;;:2;:16;;;;31361:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;31492:16;31511:12;:10;:12::i;:::-;31492:31;;31536:22;:20;:22::i;:::-;31571:19;31593:9;:13;31603:2;31593:13;;;;;;;;;;;:19;31607:4;31593:19;;;;;;;;;;;;;;;;31571:41;;31660:6;31645:11;:21;;31623:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31823:6;31809:11;:20;31787:9;:13;31797:2;31787:13;;;;;;;;;;;:19;31801:4;31787:19;;;;;;;;;;;;;;;:42;;;;31872:6;31851:9;:13;31861:2;31851:13;;;;;;;;;;;:17;31865:2;31851:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31927:2;31896:46;;31921:4;31896:46;;31911:8;31896:46;;;31931:2;31935:6;31896:46;;;;;;;:::i;:::-;;;;;;;;31955:68;31986:8;31996:4;32002:2;32006;32010:6;32018:4;31955:30;:68::i;:::-;31181:850;;;;;;;:::o;35929:696::-;36092:1;36073:21;;:7;:21;;;;36051:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;36185:16;36204:12;:10;:12::i;:::-;36185:31;;36229:22;:20;:22::i;:::-;36264;36289:9;:13;36299:2;36289:13;;;;;;;;;;;:22;36303:7;36289:22;;;;;;;;;;;;;;;;36264:47;;36362:6;36344:14;:24;;36322:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;36525:6;36508:14;:23;36483:9;:13;36493:2;36483:13;;;;;;;;;;;:22;36497:7;36483:22;;;;;;;;;;;;;;;:48;;;;36602:1;36560:57;;36585:7;36560:57;;36575:8;36560:57;;;36606:2;36610:6;36560:57;;;;;;;:::i;:::-;;;;;;;;35929:696;;;;;:::o;37581:134::-;37650:8;:6;:8::i;:::-;37649:9;37641:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37581:134::o;38747:1093::-;38987:15;:2;:13;;;:15::i;:::-;38983:850;;;39057:2;39040:43;;;39106:8;39137:4;39164:3;39190:7;39220:4;39040:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39019:803;;;;:::i;:::-;;;;;;;;39640:6;39633:14;;;;;;;;;;;:::i;:::-;;;;;;;;39019:803;39689:117;;;;;;;;;;:::i;:::-;;;;;;;;39019:803;39340:48;;;39328:60;;;:8;:60;;;;39302:262;;39431:113;;;;;;;;;;:::i;:::-;;;;;;;;39302:262;39257:322;38983:850;38747:1093;;;;;;:::o;37723:1016::-;37938:15;:2;:13;;;:15::i;:::-;37934:798;;;38008:2;37991:38;;;38052:8;38083:4;38110:2;38135:6;38164:4;37991:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37970:751;;;;:::i;:::-;;;;;;;;38539:6;38532:14;;;;;;;;;;;:::i;:::-;;;;;;;;37970:751;38588:117;;;;;;;;;;:::i;:::-;;;;;;;;37970:751;38262:43;;;38250:55;;;:8;:55;;;;38246:217;;38330:113;;;;;;;;;;:::i;:::-;;;;;;;;38246:217;38201:277;37934:798;37723:1016;;;;;;:::o;8500:387::-;8560:4;8768:12;8835:7;8823:20;8815:28;;8878:1;8871:4;:8;8864:15;;;8500:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2140:143::-;;2228:6;2222:13;2213:22;;2244:33;2271:5;2244:33;:::i;:::-;2203:80;;;;:::o;2306:303::-;;2426:3;2419:4;2411:6;2407:17;2403:27;2393:2;;2444:1;2441;2434:12;2393:2;2484:6;2471:20;2509:94;2599:3;2591:6;2584:4;2576:6;2572:17;2509:94;:::i;:::-;2500:103;;2383:226;;;;;:::o;2632:303::-;;2752:3;2745:4;2737:6;2733:17;2729:27;2719:2;;2770:1;2767;2760:12;2719:2;2810:6;2797:20;2835:94;2925:3;2917:6;2910:4;2902:6;2898:17;2835:94;:::i;:::-;2826:103;;2709:226;;;;;:::o;2941:133::-;;3022:6;3009:20;3000:29;;3038:30;3062:5;3038:30;:::i;:::-;2990:84;;;;:::o;3080:137::-;;3163:6;3150:20;3141:29;;3179:32;3205:5;3179:32;:::i;:::-;3131:86;;;;:::o;3223:141::-;;3310:6;3304:13;3295:22;;3326:32;3352:5;3326:32;:::i;:::-;3285:79;;;;:::o;3383:271::-;;3487:3;3480:4;3472:6;3468:17;3464:27;3454:2;;3505:1;3502;3495:12;3454:2;3545:6;3532:20;3570:78;3644:3;3636:6;3629:4;3621:6;3617:17;3570:78;:::i;:::-;3561:87;;3444:210;;;;;:::o;3674:273::-;;3779:3;3772:4;3764:6;3760:17;3756:27;3746:2;;3797:1;3794;3787:12;3746:2;3837:6;3824:20;3862:79;3937:3;3929:6;3922:4;3914:6;3910:17;3862:79;:::i;:::-;3853:88;;3736:211;;;;;:::o;3953:139::-;;4037:6;4024:20;4015:29;;4053:33;4080:5;4053:33;:::i;:::-;4005:87;;;;:::o;4098:262::-;;4206:2;4194:9;4185:7;4181:23;4177:32;4174:2;;;4222:1;4219;4212:12;4174:2;4265:1;4290:53;4335:7;4326:6;4315:9;4311:22;4290:53;:::i;:::-;4280:63;;4236:117;4164:196;;;;:::o;4366:284::-;;4485:2;4473:9;4464:7;4460:23;4456:32;4453:2;;;4501:1;4498;4491:12;4453:2;4544:1;4569:64;4625:7;4616:6;4605:9;4601:22;4569:64;:::i;:::-;4559:74;;4515:128;4443:207;;;;:::o;4656:407::-;;;4781:2;4769:9;4760:7;4756:23;4752:32;4749:2;;;4797:1;4794;4787:12;4749:2;4840:1;4865:53;4910:7;4901:6;4890:9;4886:22;4865:53;:::i;:::-;4855:63;;4811:117;4967:2;4993:53;5038:7;5029:6;5018:9;5014:22;4993:53;:::i;:::-;4983:63;;4938:118;4739:324;;;;;:::o;5069:1241::-;;;;;;5304:3;5292:9;5283:7;5279:23;5275:33;5272:2;;;5321:1;5318;5311:12;5272:2;5364:1;5389:53;5434:7;5425:6;5414:9;5410:22;5389:53;:::i;:::-;5379:63;;5335:117;5491:2;5517:53;5562:7;5553:6;5542:9;5538:22;5517:53;:::i;:::-;5507:63;;5462:118;5647:2;5636:9;5632:18;5619:32;5678:18;5670:6;5667:30;5664:2;;;5710:1;5707;5700:12;5664:2;5738:78;5808:7;5799:6;5788:9;5784:22;5738:78;:::i;:::-;5728:88;;5590:236;5893:2;5882:9;5878:18;5865:32;5924:18;5916:6;5913:30;5910:2;;;5956:1;5953;5946:12;5910:2;5984:78;6054:7;6045:6;6034:9;6030:22;5984:78;:::i;:::-;5974:88;;5836:236;6139:3;6128:9;6124:19;6111:33;6171:18;6163:6;6160:30;6157:2;;;6203:1;6200;6193:12;6157:2;6231:62;6285:7;6276:6;6265:9;6261:22;6231:62;:::i;:::-;6221:72;;6082:221;5262:1048;;;;;;;;:::o;6316:955::-;;;;;;6501:3;6489:9;6480:7;6476:23;6472:33;6469:2;;;6518:1;6515;6508:12;6469:2;6561:1;6586:53;6631:7;6622:6;6611:9;6607:22;6586:53;:::i;:::-;6576:63;;6532:117;6688:2;6714:53;6759:7;6750:6;6739:9;6735:22;6714:53;:::i;:::-;6704:63;;6659:118;6816:2;6842:53;6887:7;6878:6;6867:9;6863:22;6842:53;:::i;:::-;6832:63;;6787:118;6944:2;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6915:118;7100:3;7089:9;7085:19;7072:33;7132:18;7124:6;7121:30;7118:2;;;7164:1;7161;7154:12;7118:2;7192:62;7246:7;7237:6;7226:9;7222:22;7192:62;:::i;:::-;7182:72;;7043:221;6459:812;;;;;;;;:::o;7277:401::-;;;7399:2;7387:9;7378:7;7374:23;7370:32;7367:2;;;7415:1;7412;7405:12;7367:2;7458:1;7483:53;7528:7;7519:6;7508:9;7504:22;7483:53;:::i;:::-;7473:63;;7429:117;7585:2;7611:50;7653:7;7644:6;7633:9;7629:22;7611:50;:::i;:::-;7601:60;;7556:115;7357:321;;;;;:::o;7684:407::-;;;7809:2;7797:9;7788:7;7784:23;7780:32;7777:2;;;7825:1;7822;7815:12;7777:2;7868:1;7893:53;7938:7;7929:6;7918:9;7914:22;7893:53;:::i;:::-;7883:63;;7839:117;7995:2;8021:53;8066:7;8057:6;8046:9;8042:22;8021:53;:::i;:::-;8011:63;;7966:118;7767:324;;;;;:::o;8097:552::-;;;;8239:2;8227:9;8218:7;8214:23;8210:32;8207:2;;;8255:1;8252;8245:12;8207:2;8298:1;8323:53;8368:7;8359:6;8348:9;8344:22;8323:53;:::i;:::-;8313:63;;8269:117;8425:2;8451:53;8496:7;8487:6;8476:9;8472:22;8451:53;:::i;:::-;8441:63;;8396:118;8553:2;8579:53;8624:7;8615:6;8604:9;8600:22;8579:53;:::i;:::-;8569:63;;8524:118;8197:452;;;;;:::o;8655:693::-;;;8830:2;8818:9;8809:7;8805:23;8801:32;8798:2;;;8846:1;8843;8836:12;8798:2;8917:1;8906:9;8902:17;8889:31;8947:18;8939:6;8936:30;8933:2;;;8979:1;8976;8969:12;8933:2;9007:78;9077:7;9068:6;9057:9;9053:22;9007:78;:::i;:::-;8997:88;;8860:235;9162:2;9151:9;9147:18;9134:32;9193:18;9185:6;9182:30;9179:2;;;9225:1;9222;9215:12;9179:2;9253:78;9323:7;9314:6;9303:9;9299:22;9253:78;:::i;:::-;9243:88;;9105:236;8788:560;;;;;:::o;9354:256::-;;9459:2;9447:9;9438:7;9434:23;9430:32;9427:2;;;9475:1;9472;9465:12;9427:2;9518:1;9543:50;9585:7;9576:6;9565:9;9561:22;9543:50;:::i;:::-;9533:60;;9489:114;9417:193;;;;:::o;9616:260::-;;9723:2;9711:9;9702:7;9698:23;9694:32;9691:2;;;9739:1;9736;9729:12;9691:2;9782:1;9807:52;9851:7;9842:6;9831:9;9827:22;9807:52;:::i;:::-;9797:62;;9753:116;9681:195;;;;:::o;9882:282::-;;10000:2;9988:9;9979:7;9975:23;9971:32;9968:2;;;10016:1;10013;10006:12;9968:2;10059:1;10084:63;10139:7;10130:6;10119:9;10115:22;10084:63;:::i;:::-;10074:73;;10030:127;9958:206;;;;:::o;10170:375::-;;10288:2;10276:9;10267:7;10263:23;10259:32;10256:2;;;10304:1;10301;10294:12;10256:2;10375:1;10364:9;10360:17;10347:31;10405:18;10397:6;10394:30;10391:2;;;10437:1;10434;10427:12;10391:2;10465:63;10520:7;10511:6;10500:9;10496:22;10465:63;:::i;:::-;10455:73;;10318:220;10246:299;;;;:::o;10551:262::-;;10659:2;10647:9;10638:7;10634:23;10630:32;10627:2;;;10675:1;10672;10665:12;10627:2;10718:1;10743:53;10788:7;10779:6;10768:9;10764:22;10743:53;:::i;:::-;10733:63;;10689:117;10617:196;;;;:::o;10819:698::-;;;;;10978:3;10966:9;10957:7;10953:23;10949:33;10946:2;;;10995:1;10992;10985:12;10946:2;11038:1;11063:53;11108:7;11099:6;11088:9;11084:22;11063:53;:::i;:::-;11053:63;;11009:117;11165:2;11191:53;11236:7;11227:6;11216:9;11212:22;11191:53;:::i;:::-;11181:63;;11136:118;11293:2;11319:53;11364:7;11355:6;11344:9;11340:22;11319:53;:::i;:::-;11309:63;;11264:118;11421:2;11447:53;11492:7;11483:6;11472:9;11468:22;11447:53;:::i;:::-;11437:63;;11392:118;10936:581;;;;;;;:::o;11523:179::-;;11613:46;11655:3;11647:6;11613:46;:::i;:::-;11691:4;11686:3;11682:14;11668:28;;11603:99;;;;:::o;11708:118::-;11795:24;11813:5;11795:24;:::i;:::-;11790:3;11783:37;11773:53;;:::o;11862:732::-;;12010:54;12058:5;12010:54;:::i;:::-;12080:86;12159:6;12154:3;12080:86;:::i;:::-;12073:93;;12190:56;12240:5;12190:56;:::i;:::-;12269:7;12300:1;12285:284;12310:6;12307:1;12304:13;12285:284;;;12386:6;12380:13;12413:63;12472:3;12457:13;12413:63;:::i;:::-;12406:70;;12499:60;12552:6;12499:60;:::i;:::-;12489:70;;12345:224;12332:1;12329;12325:9;12320:14;;12285:284;;;12289:14;12585:3;12578:10;;11986:608;;;;;;;:::o;12600:109::-;12681:21;12696:5;12681:21;:::i;:::-;12676:3;12669:34;12659:50;;:::o;12715:360::-;;12829:38;12861:5;12829:38;:::i;:::-;12883:70;12946:6;12941:3;12883:70;:::i;:::-;12876:77;;12962:52;13007:6;13002:3;12995:4;12988:5;12984:16;12962:52;:::i;:::-;13039:29;13061:6;13039:29;:::i;:::-;13034:3;13030:39;13023:46;;12805:270;;;;;:::o;13081:364::-;;13197:39;13230:5;13197:39;:::i;:::-;13252:71;13316:6;13311:3;13252:71;:::i;:::-;13245:78;;13332:52;13377:6;13372:3;13365:4;13358:5;13354:16;13332:52;:::i;:::-;13409:29;13431:6;13409:29;:::i;:::-;13404:3;13400:39;13393:46;;13173:272;;;;;:::o;13451:377::-;;13585:39;13618:5;13585:39;:::i;:::-;13640:89;13722:6;13717:3;13640:89;:::i;:::-;13633:96;;13738:52;13783:6;13778:3;13771:4;13764:5;13760:16;13738:52;:::i;:::-;13815:6;13810:3;13806:16;13799:23;;13561:267;;;;;:::o;13858:845::-;;13998:5;13992:12;14027:36;14053:9;14027:36;:::i;:::-;14079:89;14161:6;14156:3;14079:89;:::i;:::-;14072:96;;14199:1;14188:9;14184:17;14215:1;14210:137;;;;14361:1;14356:341;;;;14177:520;;14210:137;14294:4;14290:9;14279;14275:25;14270:3;14263:38;14330:6;14325:3;14321:16;14314:23;;14210:137;;14356:341;14423:38;14455:5;14423:38;:::i;:::-;14483:1;14497:154;14511:6;14508:1;14505:13;14497:154;;;14585:7;14579:14;14575:1;14570:3;14566:11;14559:35;14635:1;14626:7;14622:15;14611:26;;14533:4;14530:1;14526:12;14521:17;;14497:154;;;14680:6;14675:3;14671:16;14664:23;;14363:334;;14177:520;;13965:738;;;;;;:::o;14709:433::-;;14872:67;14936:2;14931:3;14872:67;:::i;:::-;14865:74;;14969:34;14965:1;14960:3;14956:11;14949:55;15035:34;15030:2;15025:3;15021:12;15014:56;15101:5;15096:2;15091:3;15087:12;15080:27;15133:2;15128:3;15124:12;15117:19;;14855:287;;;:::o;15148:388::-;;15311:67;15375:2;15370:3;15311:67;:::i;:::-;15304:74;;15408:34;15404:1;15399:3;15395:11;15388:55;15474:26;15469:2;15464:3;15460:12;15453:48;15527:2;15522:3;15518:12;15511:19;;15294:242;;;:::o;15542:388::-;;15705:67;15769:2;15764:3;15705:67;:::i;:::-;15698:74;;15802:34;15798:1;15793:3;15789:11;15782:55;15868:26;15863:2;15858:3;15854:12;15847:48;15921:2;15916:3;15912:12;15905:19;;15688:242;;;:::o;15936:370::-;;16099:67;16163:2;16158:3;16099:67;:::i;:::-;16092:74;;16196:34;16192:1;16187:3;16183:11;16176:55;16262:8;16257:2;16252:3;16248:12;16241:30;16297:2;16292:3;16288:12;16281:19;;16082:224;;;:::o;16312:388::-;;16475:67;16539:2;16534:3;16475:67;:::i;:::-;16468:74;;16572:34;16568:1;16563:3;16559:11;16552:55;16638:26;16633:2;16628:3;16624:12;16617:48;16691:2;16686:3;16682:12;16675:19;;16458:242;;;:::o;16706:376::-;;16869:67;16933:2;16928:3;16869:67;:::i;:::-;16862:74;;16966:34;16962:1;16957:3;16953:11;16946:55;17032:14;17027:2;17022:3;17018:12;17011:36;17073:2;17068:3;17064:12;17057:19;;16852:230;;;:::o;17088:387::-;;17251:67;17315:2;17310:3;17251:67;:::i;:::-;17244:74;;17348:34;17344:1;17339:3;17335:11;17328:55;17414:25;17409:2;17404:3;17400:12;17393:47;17466:2;17461:3;17457:12;17450:19;;17234:241;;;:::o;17481:431::-;;17644:67;17708:2;17703:3;17644:67;:::i;:::-;17637:74;;17741:34;17737:1;17732:3;17728:11;17721:55;17807:34;17802:2;17797:3;17793:12;17786:56;17873:3;17868:2;17863:3;17859:12;17852:25;17903:2;17898:3;17894:12;17887:19;;17627:285;;;:::o;17918:387::-;;18081:67;18145:2;18140:3;18081:67;:::i;:::-;18074:74;;18178:34;18174:1;18169:3;18165:11;18158:55;18244:25;18239:2;18234:3;18230:12;18223:47;18296:2;18291:3;18287:12;18280:19;;18064:241;;;:::o;18311:381::-;;18474:67;18538:2;18533:3;18474:67;:::i;:::-;18467:74;;18571:34;18567:1;18562:3;18558:11;18551:55;18637:19;18632:2;18627:3;18623:12;18616:41;18683:2;18678:3;18674:12;18667:19;;18457:235;;;:::o;18698:389::-;;18861:67;18925:2;18920:3;18861:67;:::i;:::-;18854:74;;18958:34;18954:1;18949:3;18945:11;18938:55;19024:27;19019:2;19014:3;19010:12;19003:49;19078:2;19073:3;19069:12;19062:19;;18844:243;;;:::o;19093:372::-;;19256:67;19320:2;19315:3;19256:67;:::i;:::-;19249:74;;19353:34;19349:1;19344:3;19340:11;19333:55;19419:10;19414:2;19409:3;19405:12;19398:32;19456:2;19451:3;19447:12;19440:19;;19239:226;;;:::o;19471:384::-;;19634:67;19698:2;19693:3;19634:67;:::i;:::-;19627:74;;19731:34;19727:1;19722:3;19718:11;19711:55;19797:22;19792:2;19787:3;19783:12;19776:44;19846:2;19841:3;19837:12;19830:19;;19617:238;;;:::o;19861:330::-;;20024:67;20088:2;20083:3;20024:67;:::i;:::-;20017:74;;20121:34;20117:1;20112:3;20108:11;20101:55;20182:2;20177:3;20173:12;20166:19;;20007:184;;;:::o;20197:390::-;;20360:67;20424:2;20419:3;20360:67;:::i;:::-;20353:74;;20457:34;20453:1;20448:3;20444:11;20437:55;20523:28;20518:2;20513:3;20509:12;20502:50;20578:2;20573:3;20569:12;20562:19;;20343:244;;;:::o;20593:389::-;;20756:67;20820:2;20815:3;20756:67;:::i;:::-;20749:74;;20853:34;20849:1;20844:3;20840:11;20833:55;20919:27;20914:2;20909:3;20905:12;20898:49;20973:2;20968:3;20964:12;20957:19;;20739:243;;;:::o;20988:373::-;;21151:67;21215:2;21210:3;21151:67;:::i;:::-;21144:74;;21248:34;21244:1;21239:3;21235:11;21228:55;21314:11;21309:2;21304:3;21300:12;21293:33;21352:2;21347:3;21343:12;21336:19;;21134:227;;;:::o;21367:376::-;;21530:67;21594:2;21589:3;21530:67;:::i;:::-;21523:74;;21627:34;21623:1;21618:3;21614:11;21607:55;21693:14;21688:2;21683:3;21679:12;21672:36;21734:2;21729:3;21725:12;21718:19;;21513:230;;;:::o;21749:382::-;;21912:67;21976:2;21971:3;21912:67;:::i;:::-;21905:74;;22009:34;22005:1;22000:3;21996:11;21989:55;22075:20;22070:2;22065:3;22061:12;22054:42;22122:2;22117:3;22113:12;22106:19;;21895:236;;;:::o;22137:380::-;;22300:67;22364:2;22359:3;22300:67;:::i;:::-;22293:74;;22397:34;22393:1;22388:3;22384:11;22377:55;22463:18;22458:2;22453:3;22449:12;22442:40;22508:2;22503:3;22499:12;22492:19;;22283:234;;;:::o;22523:383::-;;22686:67;22750:2;22745:3;22686:67;:::i;:::-;22679:74;;22783:34;22779:1;22774:3;22770:11;22763:55;22849:21;22844:2;22839:3;22835:12;22828:43;22897:2;22892:3;22888:12;22881:19;;22669:237;;;:::o;22912:108::-;22989:24;23007:5;22989:24;:::i;:::-;22984:3;22977:37;22967:53;;:::o;23026:118::-;23113:24;23131:5;23113:24;:::i;:::-;23108:3;23101:37;23091:53;;:::o;23150:429::-;;23349:92;23437:3;23428:6;23349:92;:::i;:::-;23342:99;;23458:95;23549:3;23540:6;23458:95;:::i;:::-;23451:102;;23570:3;23563:10;;23331:248;;;;;:::o;23585:222::-;;23716:2;23705:9;23701:18;23693:26;;23729:71;23797:1;23786:9;23782:17;23773:6;23729:71;:::i;:::-;23683:124;;;;:::o;23813:1053::-;;24174:3;24163:9;24159:19;24151:27;;24188:71;24256:1;24245:9;24241:17;24232:6;24188:71;:::i;:::-;24269:72;24337:2;24326:9;24322:18;24313:6;24269:72;:::i;:::-;24388:9;24382:4;24378:20;24373:2;24362:9;24358:18;24351:48;24416:108;24519:4;24510:6;24416:108;:::i;:::-;24408:116;;24571:9;24565:4;24561:20;24556:2;24545:9;24541:18;24534:48;24599:108;24702:4;24693:6;24599:108;:::i;:::-;24591:116;;24755:9;24749:4;24745:20;24739:3;24728:9;24724:19;24717:49;24783:76;24854:4;24845:6;24783:76;:::i;:::-;24775:84;;24141:725;;;;;;;;:::o;24872:751::-;;25133:3;25122:9;25118:19;25110:27;;25147:71;25215:1;25204:9;25200:17;25191:6;25147:71;:::i;:::-;25228:72;25296:2;25285:9;25281:18;25272:6;25228:72;:::i;:::-;25310;25378:2;25367:9;25363:18;25354:6;25310:72;:::i;:::-;25392;25460:2;25449:9;25445:18;25436:6;25392:72;:::i;:::-;25512:9;25506:4;25502:20;25496:3;25485:9;25481:19;25474:49;25540:76;25611:4;25602:6;25540:76;:::i;:::-;25532:84;;25100:523;;;;;;;;:::o;25629:373::-;;25810:2;25799:9;25795:18;25787:26;;25859:9;25853:4;25849:20;25845:1;25834:9;25830:17;25823:47;25887:108;25990:4;25981:6;25887:108;:::i;:::-;25879:116;;25777:225;;;;:::o;26008:634::-;;26267:2;26256:9;26252:18;26244:26;;26316:9;26310:4;26306:20;26302:1;26291:9;26287:17;26280:47;26344:108;26447:4;26438:6;26344:108;:::i;:::-;26336:116;;26499:9;26493:4;26489:20;26484:2;26473:9;26469:18;26462:48;26527:108;26630:4;26621:6;26527:108;:::i;:::-;26519:116;;26234:408;;;;;:::o;26648:210::-;;26773:2;26762:9;26758:18;26750:26;;26786:65;26848:1;26837:9;26833:17;26824:6;26786:65;:::i;:::-;26740:118;;;;:::o;26864:313::-;;27015:2;27004:9;27000:18;26992:26;;27064:9;27058:4;27054:20;27050:1;27039:9;27035:17;27028:47;27092:78;27165:4;27156:6;27092:78;:::i;:::-;27084:86;;26982:195;;;;:::o;27183:419::-;;27387:2;27376:9;27372:18;27364:26;;27436:9;27430:4;27426:20;27422:1;27411:9;27407:17;27400:47;27464:131;27590:4;27464:131;:::i;:::-;27456:139;;27354:248;;;:::o;27608:419::-;;27812:2;27801:9;27797:18;27789:26;;27861:9;27855:4;27851:20;27847:1;27836:9;27832:17;27825:47;27889:131;28015:4;27889:131;:::i;:::-;27881:139;;27779:248;;;:::o;28033:419::-;;28237:2;28226:9;28222:18;28214:26;;28286:9;28280:4;28276:20;28272:1;28261:9;28257:17;28250:47;28314:131;28440:4;28314:131;:::i;:::-;28306:139;;28204:248;;;:::o;28458:419::-;;28662:2;28651:9;28647:18;28639:26;;28711:9;28705:4;28701:20;28697:1;28686:9;28682:17;28675:47;28739:131;28865:4;28739:131;:::i;:::-;28731:139;;28629:248;;;:::o;28883:419::-;;29087:2;29076:9;29072:18;29064:26;;29136:9;29130:4;29126:20;29122:1;29111:9;29107:17;29100:47;29164:131;29290:4;29164:131;:::i;:::-;29156:139;;29054:248;;;:::o;29308:419::-;;29512:2;29501:9;29497:18;29489:26;;29561:9;29555:4;29551:20;29547:1;29536:9;29532:17;29525:47;29589:131;29715:4;29589:131;:::i;:::-;29581:139;;29479:248;;;:::o;29733:419::-;;29937:2;29926:9;29922:18;29914:26;;29986:9;29980:4;29976:20;29972:1;29961:9;29957:17;29950:47;30014:131;30140:4;30014:131;:::i;:::-;30006:139;;29904:248;;;:::o;30158:419::-;;30362:2;30351:9;30347:18;30339:26;;30411:9;30405:4;30401:20;30397:1;30386:9;30382:17;30375:47;30439:131;30565:4;30439:131;:::i;:::-;30431:139;;30329:248;;;:::o;30583:419::-;;30787:2;30776:9;30772:18;30764:26;;30836:9;30830:4;30826:20;30822:1;30811:9;30807:17;30800:47;30864:131;30990:4;30864:131;:::i;:::-;30856:139;;30754:248;;;:::o;31008:419::-;;31212:2;31201:9;31197:18;31189:26;;31261:9;31255:4;31251:20;31247:1;31236:9;31232:17;31225:47;31289:131;31415:4;31289:131;:::i;:::-;31281:139;;31179:248;;;:::o;31433:419::-;;31637:2;31626:9;31622:18;31614:26;;31686:9;31680:4;31676:20;31672:1;31661:9;31657:17;31650:47;31714:131;31840:4;31714:131;:::i;:::-;31706:139;;31604:248;;;:::o;31858:419::-;;32062:2;32051:9;32047:18;32039:26;;32111:9;32105:4;32101:20;32097:1;32086:9;32082:17;32075:47;32139:131;32265:4;32139:131;:::i;:::-;32131:139;;32029:248;;;:::o;32283:419::-;;32487:2;32476:9;32472:18;32464:26;;32536:9;32530:4;32526:20;32522:1;32511:9;32507:17;32500:47;32564:131;32690:4;32564:131;:::i;:::-;32556:139;;32454:248;;;:::o;32708:419::-;;32912:2;32901:9;32897:18;32889:26;;32961:9;32955:4;32951:20;32947:1;32936:9;32932:17;32925:47;32989:131;33115:4;32989:131;:::i;:::-;32981:139;;32879:248;;;:::o;33133:419::-;;33337:2;33326:9;33322:18;33314:26;;33386:9;33380:4;33376:20;33372:1;33361:9;33357:17;33350:47;33414:131;33540:4;33414:131;:::i;:::-;33406:139;;33304:248;;;:::o;33558:419::-;;33762:2;33751:9;33747:18;33739:26;;33811:9;33805:4;33801:20;33797:1;33786:9;33782:17;33775:47;33839:131;33965:4;33839:131;:::i;:::-;33831:139;;33729:248;;;:::o;33983:419::-;;34187:2;34176:9;34172:18;34164:26;;34236:9;34230:4;34226:20;34222:1;34211:9;34207:17;34200:47;34264:131;34390:4;34264:131;:::i;:::-;34256:139;;34154:248;;;:::o;34408:419::-;;34612:2;34601:9;34597:18;34589:26;;34661:9;34655:4;34651:20;34647:1;34636:9;34632:17;34625:47;34689:131;34815:4;34689:131;:::i;:::-;34681:139;;34579:248;;;:::o;34833:419::-;;35037:2;35026:9;35022:18;35014:26;;35086:9;35080:4;35076:20;35072:1;35061:9;35057:17;35050:47;35114:131;35240:4;35114:131;:::i;:::-;35106:139;;35004:248;;;:::o;35258:419::-;;35462:2;35451:9;35447:18;35439:26;;35511:9;35505:4;35501:20;35497:1;35486:9;35482:17;35475:47;35539:131;35665:4;35539:131;:::i;:::-;35531:139;;35429:248;;;:::o;35683:419::-;;35887:2;35876:9;35872:18;35864:26;;35936:9;35930:4;35926:20;35922:1;35911:9;35907:17;35900:47;35964:131;36090:4;35964:131;:::i;:::-;35956:139;;35854:248;;;:::o;36108:222::-;;36239:2;36228:9;36224:18;36216:26;;36252:71;36320:1;36309:9;36305:17;36296:6;36252:71;:::i;:::-;36206:124;;;;:::o;36336:332::-;;36495:2;36484:9;36480:18;36472:26;;36508:71;36576:1;36565:9;36561:17;36552:6;36508:71;:::i;:::-;36589:72;36657:2;36646:9;36642:18;36633:6;36589:72;:::i;:::-;36462:206;;;;;:::o;36674:283::-;;36740:2;36734:9;36724:19;;36782:4;36774:6;36770:17;36889:6;36877:10;36874:22;36853:18;36841:10;36838:34;36835:62;36832:2;;;36900:18;;:::i;:::-;36832:2;36940:10;36936:2;36929:22;36714:243;;;;:::o;36963:311::-;;37130:18;37122:6;37119:30;37116:2;;;37152:18;;:::i;:::-;37116:2;37202:4;37194:6;37190:17;37182:25;;37262:4;37256;37252:15;37244:23;;37045:229;;;:::o;37280:311::-;;37447:18;37439:6;37436:30;37433:2;;;37469:18;;:::i;:::-;37433:2;37519:4;37511:6;37507:17;37499:25;;37579:4;37573;37569:15;37561:23;;37362:229;;;:::o;37597:331::-;;37748:18;37740:6;37737:30;37734:2;;;37770:18;;:::i;:::-;37734:2;37855:4;37851:9;37844:4;37836:6;37832:17;37828:33;37820:41;;37916:4;37910;37906:15;37898:23;;37663:265;;;:::o;37934:332::-;;38086:18;38078:6;38075:30;38072:2;;;38108:18;;:::i;:::-;38072:2;38193:4;38189:9;38182:4;38174:6;38170:17;38166:33;38158:41;;38254:4;38248;38244:15;38236:23;;38001:265;;;:::o;38272:132::-;;38362:3;38354:11;;38392:4;38387:3;38383:14;38375:22;;38344:60;;;:::o;38410:141::-;;38482:3;38474:11;;38505:3;38502:1;38495:14;38539:4;38536:1;38526:18;38518:26;;38464:87;;;:::o;38557:114::-;;38658:5;38652:12;38642:22;;38631:40;;;:::o;38677:98::-;;38762:5;38756:12;38746:22;;38735:40;;;:::o;38781:99::-;;38867:5;38861:12;38851:22;;38840:40;;;:::o;38886:113::-;;38988:4;38983:3;38979:14;38971:22;;38961:38;;;:::o;39005:184::-;;39138:6;39133:3;39126:19;39178:4;39173:3;39169:14;39154:29;;39116:73;;;;:::o;39195:168::-;;39312:6;39307:3;39300:19;39352:4;39347:3;39343:14;39328:29;;39290:73;;;;:::o;39369:169::-;;39487:6;39482:3;39475:19;39527:4;39522:3;39518:14;39503:29;;39465:73;;;;:::o;39544:148::-;;39683:3;39668:18;;39658:34;;;;:::o;39698:305::-;;39757:20;39775:1;39757:20;:::i;:::-;39752:25;;39791:20;39809:1;39791:20;:::i;:::-;39786:25;;39945:1;39877:66;39873:74;39870:1;39867:81;39864:2;;;39951:18;;:::i;:::-;39864:2;39995:1;39992;39988:9;39981:16;;39742:261;;;;:::o;40009:185::-;;40066:20;40084:1;40066:20;:::i;:::-;40061:25;;40100:20;40118:1;40100:20;:::i;:::-;40095:25;;40139:1;40129:2;;40144:18;;:::i;:::-;40129:2;40186:1;40183;40179:9;40174:14;;40051:143;;;;:::o;40200:191::-;;40260:20;40278:1;40260:20;:::i;:::-;40255:25;;40294:20;40312:1;40294:20;:::i;:::-;40289:25;;40333:1;40330;40327:8;40324:2;;;40338:18;;:::i;:::-;40324:2;40383:1;40380;40376:9;40368:17;;40245:146;;;;:::o;40397:96::-;;40463:24;40481:5;40463:24;:::i;:::-;40452:35;;40442:51;;;:::o;40499:90::-;;40576:5;40569:13;40562:21;40551:32;;40541:48;;;:::o;40595:149::-;;40671:66;40664:5;40660:78;40649:89;;40639:105;;;:::o;40750:126::-;;40827:42;40820:5;40816:54;40805:65;;40795:81;;;:::o;40882:77::-;;40948:5;40937:16;;40927:32;;;:::o;40965:154::-;41049:6;41044:3;41039;41026:30;41111:1;41102:6;41097:3;41093:16;41086:27;41016:103;;;:::o;41125:307::-;41193:1;41203:113;41217:6;41214:1;41211:13;41203:113;;;41302:1;41297:3;41293:11;41287:18;41283:1;41278:3;41274:11;41267:39;41239:2;41236:1;41232:10;41227:15;;41203:113;;;41334:6;41331:1;41328:13;41325:2;;;41414:1;41405:6;41400:3;41396:16;41389:27;41325:2;41174:258;;;;:::o;41438:320::-;;41519:1;41513:4;41509:12;41499:22;;41566:1;41560:4;41556:12;41587:18;41577:2;;41643:4;41635:6;41631:17;41621:27;;41577:2;41705;41697:6;41694:14;41674:18;41671:38;41668:2;;;41724:18;;:::i;:::-;41668:2;41489:269;;;;:::o;41764:233::-;;41826:24;41844:5;41826:24;:::i;:::-;41817:33;;41872:66;41865:5;41862:77;41859:2;;;41942:18;;:::i;:::-;41859:2;41989:1;41982:5;41978:13;41971:20;;41807:190;;;:::o;42003:176::-;;42052:20;42070:1;42052:20;:::i;:::-;42047:25;;42086:20;42104:1;42086:20;:::i;:::-;42081:25;;42125:1;42115:2;;42130:18;;:::i;:::-;42115:2;42171:1;42168;42164:9;42159:14;;42037:142;;;;:::o;42185:180::-;42233:77;42230:1;42223:88;42330:4;42327:1;42320:15;42354:4;42351:1;42344:15;42371:180;42419:77;42416:1;42409:88;42516:4;42513:1;42506:15;42540:4;42537:1;42530:15;42557:180;42605:77;42602:1;42595:88;42702:4;42699:1;42692:15;42726:4;42723:1;42716:15;42743:180;42791:77;42788:1;42781:88;42888:4;42885:1;42878:15;42912:4;42909:1;42902:15;42929:102;;43021:2;43017:7;43012:2;43005:5;43001:14;42997:28;42987:38;;42977:54;;;:::o;43037:106::-;;43130:5;43125:3;43121:15;43100:36;;43090:53;;;:::o;43149:833::-;;43226:4;43208:16;43205:26;43202:2;;;43234:5;;43202:2;43272:1;43269;43266;43251:23;43294:34;43325:1;43319:8;43294:34;:::i;:::-;43355:10;43350:3;43347:19;43337:2;;43370:5;;;43337:2;43405;43399:9;43463:1;43445:16;43441:24;43438:1;43432:4;43417:49;43496:4;43490:11;43595:16;43588:4;43580:6;43576:17;43573:39;43540:18;43532:6;43529:30;43513:113;43510:2;;;43641:5;;;;;43510:2;43687:6;43681:4;43677:17;43723:3;43717:10;43750:18;43742:6;43739:30;43736:2;;;43772:5;;;;;;;43736:2;43820:6;43813:4;43808:3;43804:14;43800:27;43857:16;43851:4;43847:27;43842:3;43839:36;43836:2;;;43878:5;;;;;;;;43836:2;43926:29;43948:6;43926:29;:::i;:::-;43919:4;43914:3;43910:14;43906:50;43902:2;43895:62;43973:3;43966:10;;43192:790;;;;;;;;:::o;43988:122::-;44061:24;44079:5;44061:24;:::i;:::-;44054:5;44051:35;44041:2;;44100:1;44097;44090:12;44041:2;44031:79;:::o;44116:116::-;44186:21;44201:5;44186:21;:::i;:::-;44179:5;44176:32;44166:2;;44222:1;44219;44212:12;44166:2;44156:76;:::o;44238:120::-;44310:23;44327:5;44310:23;:::i;:::-;44303:5;44300:34;44290:2;;44348:1;44345;44338:12;44290:2;44280:78;:::o;44364:122::-;44437:24;44455:5;44437:24;:::i;:::-;44430:5;44427:35;44417:2;;44476:1;44473;44466:12;44417:2;44407:79;:::o

Swarm Source

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