Token BAD Bits

Overview CRC721

Total Supply:
406 BBIT

Holders:
141 addresses
Balance
1 BBIT
0xd156f87ea9f25b7820582b460553ee621eddc258
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BADbits

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-04-01
*/

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


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

pragma solidity ^0.8.0;

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

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

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


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

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @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);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

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

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: contracts/BAD-bit.sol

/* 
B.A.D Baby Alien Division
-------------------------
Artist/Founder - Hawtchkiss (@DanielBHotchkis)
Community Lead/Founder - Legendd (@ImDarrenB1)
-------------------------
Contract Dev: @MatthewPaquette
*/ 

pragma solidity ^0.8.0;





contract BADbits is ERC721Enumerable, Pausable, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _mintCounter;

    // Maximum number of Bits
    uint256 public _maxMintable = 550;
    uint256 public _mintPrice = 0 ether;

    // Settings 
    uint256 public _maxMintPerTX = 0;

    // Base URI for metadata 
    string public _prefixURI;

    // Events 
    event BurnToken(uint256 tokenID); 
    event SetBaseURI(string newURI); 
    event AirDrop(address[] indexed addrs); 
    event ToggleMintActive(bool mint1Active);
    event Mint(address indexed addr, uint256 amount, uint256 price);
    event ToggleTransferPause(bool paused); 
    event UpdateTotalSupply(uint256 newSupply); 
    event UpdatePrice(uint256 newPrice);
    event UpdateMaxMint(uint256 newMax);
    event Withdraw(uint256 amount);
    event MultiAirDrop(address adder, uint256 drops);
    event ToggleRegMint(bool);

    constructor() ERC721("BAD Bits", "BBIT") {}

    ///////////////////
    // URI Functions //
    ///////////////////

    function _baseURI() internal view override returns (string memory) {
        return _prefixURI;
    }

    function setBaseURI(string memory _uri) public onlyOwner {
        _prefixURI = _uri;
        emit SetBaseURI(_uri);
    }

    function airDrop(address[] memory addrs) public onlyOwner {
        require(addrs.length > 0, "airDrop: must specify at least one address");
        for (uint256 i = 0; i < addrs.length; i++) {
            _mintItem(addrs[i]); 
        }
        emit AirDrop(addrs);
    }

    function multiAirDrop(address addr, uint256 dropCount) public onlyOwner {
        require(dropCount > 0, "multiAirDrop: must air drop at least one item");
        require(addr != address(0));

        for (uint256 i = 0; i < dropCount; i++) {
            _mintCounter.increment();
            uint256 id = _mintCounter.current();
            _safeMint(addr, id);
        }
        emit MultiAirDrop(addr, dropCount);
    }

    function mint(uint256 amount) external payable whenNotPaused {
        uint256 currentMintCount = _mintCounter.current();
        require(currentMintCount < _maxMintable, "mint: no NFTs left to mint");
        require(currentMintCount + amount <= _maxMintable, "mint: not enough NFTs available to mint that amount");
        require(amount <= _maxMintPerTX, "mint: amount limit exceeded per transaction");
        require(msg.value == amount * _mintPrice, "mint: value passed is not correct to mint that amount");
 
        for (uint256 i = 0; i < amount; i++) {
            _mintItem(msg.sender);
        }
        emit Mint(msg.sender, amount, _mintPrice);
    }

    function _mintItem(address to) internal {
        _mintCounter.increment();
        uint256 id = _mintCounter.current();
        _safeMint(to, id);
    }

    function burnToken(uint256 tokenId) external virtual {
        require(_isApprovedOrOwner(msg.sender, tokenId), "burnToken: caller is not owner nor approved"); 
        _burn(tokenId);
        emit BurnToken(tokenId);
    }

    //////////////////////
    // State management // 
    //////////////////////

    function toggleAllMintPause() external onlyOwner {
        paused() ? _unpause() : _pause();
        emit ToggleTransferPause(paused()); 
    }

    function updatePrice(uint256 newPrice) external onlyOwner {
        require(newPrice > 0, "updatePrice: new price must be greater than 0");
        _mintPrice = newPrice; 
        emit UpdatePrice(newPrice); 
    }

    function updateTotalSupply(uint256 newSupply) external onlyOwner {
        require(newSupply > 0, "updateTotalSupply: new supply must be greater than 0"); 
        _maxMintable = newSupply; 
        emit UpdateTotalSupply(newSupply);
    }

    function updateMaxMintPerTX(uint256 newMax) external onlyOwner {
        require(newMax > 0, "updateMaxMintPerTX: new Max Mint must be greater than 0"); 
        _maxMintPerTX = newMax;
        emit UpdateMaxMint(newMax);
    }

    function withdraw() external onlyOwner {
        require(address(this).balance > 0, "withdraw: contract balance must be greater than 0"); 
        uint256 balance = address(this).balance; 
        payable(msg.sender).transfer(balance);
        emit Withdraw(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"AirDrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"BurnToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adder","type":"address"},{"indexed":false,"internalType":"uint256","name":"drops","type":"uint256"}],"name":"MultiAirDrop","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":false,"internalType":"string","name":"newURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"mint1Active","type":"bool"}],"name":"ToggleMintActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"ToggleRegMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ToggleTransferPause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdateMaxMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"UpdatePrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"UpdateTotalSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"_maxMintPerTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_prefixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"dropCount","type":"uint256"}],"name":"multiAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleAllMintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"updateMaxMintPerTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052610226600c556000600d556000600e553480156200002157600080fd5b506040518060400160405280600881526020017f42414420426974730000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42424954000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000a6929190620001d1565b508060019080519060200190620000bf929190620001d1565b5050506000600a60006101000a81548160ff021916908315150217905550620000fd620000f16200010360201b60201c565b6200010b60201b60201c565b620002e6565b600033905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001df9062000281565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b600060028204905060018216806200029a57607f821691505b60208210811415620002b157620002b0620002b7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6150e180620002f66000396000f3fe6080604052600436106101f85760003560e01c806370a082311161010d578063a0712d68116100a0578063d146a8031161006f578063d146a803146106f9578063daa4d82c14610724578063e80a35581461074d578063e985e9c514610778578063f2fde38b146107b5576101f8565b8063a0712d681461064e578063a22cb4651461066a578063b88d4fde14610693578063c87b56dd146106bc576101f8565b80638d6cc56d116100dc5780638d6cc56d146105a45780638da5cb5b146105cd57806391860f78146105f857806395d89b4114610623576101f8565b806370a08231146104fe578063715018a61461053b5780637b47ec1a14610552578063882f66431461057b576101f8565b8063274a32d3116101905780634f6ccce71161015f5780634f6ccce71461040757806355f804b3146104445780635c975abb1461046d5780636352211e1461049857806366d49bab146104d5576101f8565b8063274a32d3146103735780632f745c591461038a5780633ccfd60b146103c757806342842e0e146103de576101f8565b8063081812fc116101cc578063081812fc146102b9578063095ea7b3146102f657806318160ddd1461031f57806323b872dd1461034a576101f8565b8062b6849f146101fd57806301ffc9a7146102265780630387da421461026357806306fdde031461028e575b600080fd5b34801561020957600080fd5b50610224600480360381019061021f91906136dc565b6107de565b005b34801561023257600080fd5b5061024d60048036038101906102489190613725565b610926565b60405161025a9190613e52565b60405180910390f35b34801561026f57600080fd5b506102786109a0565b604051610285919061426f565b60405180910390f35b34801561029a57600080fd5b506102a36109a6565b6040516102b09190613e6d565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db91906137c8565b610a38565b6040516102ed9190613dc2565b60405180910390f35b34801561030257600080fd5b5061031d6004803603810190610318919061369c565b610abd565b005b34801561032b57600080fd5b50610334610bd5565b604051610341919061426f565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613586565b610be2565b005b34801561037f57600080fd5b50610388610c42565b005b34801561039657600080fd5b506103b160048036038101906103ac919061369c565b610d20565b6040516103be919061426f565b60405180910390f35b3480156103d357600080fd5b506103dc610dc5565b005b3480156103ea57600080fd5b5061040560048036038101906104009190613586565b610f0a565b005b34801561041357600080fd5b5061042e600480360381019061042991906137c8565b610f2a565b60405161043b919061426f565b60405180910390f35b34801561045057600080fd5b5061046b6004803603810190610466919061377f565b610f9b565b005b34801561047957600080fd5b50610482611068565b60405161048f9190613e52565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906137c8565b61107f565b6040516104cc9190613dc2565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906137c8565b611131565b005b34801561050a57600080fd5b5061052560048036038101906105209190613519565b611231565b604051610532919061426f565b60405180910390f35b34801561054757600080fd5b506105506112e9565b005b34801561055e57600080fd5b50610579600480360381019061057491906137c8565b611371565b005b34801561058757600080fd5b506105a2600480360381019061059d91906137c8565b6113fd565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906137c8565b6114fd565b005b3480156105d957600080fd5b506105e26115fd565b6040516105ef9190613dc2565b60405180910390f35b34801561060457600080fd5b5061060d611627565b60405161061a9190613e6d565b60405180910390f35b34801561062f57600080fd5b506106386116b5565b6040516106459190613e6d565b60405180910390f35b610668600480360381019061066391906137c8565b611747565b005b34801561067657600080fd5b50610691600480360381019061068c919061365c565b611943565b005b34801561069f57600080fd5b506106ba60048036038101906106b591906135d9565b611959565b005b3480156106c857600080fd5b506106e360048036038101906106de91906137c8565b6119bb565b6040516106f09190613e6d565b60405180910390f35b34801561070557600080fd5b5061070e611a62565b60405161071b919061426f565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061369c565b611a68565b005b34801561075957600080fd5b50610762611be0565b60405161076f919061426f565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a9190613546565b611be6565b6040516107ac9190613e52565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613519565b611c7a565b005b6107e6611d72565b73ffffffffffffffffffffffffffffffffffffffff166108046115fd565b73ffffffffffffffffffffffffffffffffffffffff161461085a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108519061414f565b60405180910390fd5b600081511161089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613ecf565b60405180910390fd5b60005b81518110156108e0576108cd8282815181106108c0576108bf614740565b5b6020026020010151611d7a565b80806108d89061460a565b9150506108a1565b50806040516108ef9190613d87565b60405180910390207fb9413d9dd40eadf97d2949c3c57a163bb454e537a8696520d52a74e0252011e960405160405180910390a250565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610999575061099882611da0565b5b9050919050565b600d5481565b6060600080546109b5906145a7565b80601f01602080910402602001604051908101604052809291908181526020018280546109e1906145a7565b8015610a2e5780601f10610a0357610100808354040283529160200191610a2e565b820191906000526020600020905b815481529060010190602001808311610a1157829003601f168201915b5050505050905090565b6000610a4382611e82565b610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a799061412f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac88261107f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b309061418f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b58611d72565b73ffffffffffffffffffffffffffffffffffffffff161480610b875750610b8681610b81611d72565b611be6565b5b610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd9061408f565b60405180910390fd5b610bd08383611eee565b505050565b6000600880549050905090565b610bf3610bed611d72565b82611fa7565b610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c29906141cf565b60405180910390fd5b610c3d838383612085565b505050565b610c4a611d72565b73ffffffffffffffffffffffffffffffffffffffff16610c686115fd565b73ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061414f565b60405180910390fd5b610cc6611068565b610cd757610cd26122ec565b610ce0565b610cdf61238f565b5b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f610d09611068565b604051610d169190613e52565b60405180910390a1565b6000610d2b83611231565b8210610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613f0f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dcd611d72565b73ffffffffffffffffffffffffffffffffffffffff16610deb6115fd565b73ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e389061414f565b60405180910390fd5b60004711610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906141af565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ecf573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d81604051610eff919061426f565b60405180910390a150565b610f2583838360405180602001604052806000815250611959565b505050565b6000610f34610bd5565b8210610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061420f565b60405180910390fd5b60088281548110610f8957610f88614740565b5b90600052602060002001549050919050565b610fa3611d72565b73ffffffffffffffffffffffffffffffffffffffff16610fc16115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e9061414f565b60405180910390fd5b80600f908051906020019061102d92919061328f565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa8160405161105d9190613e6d565b60405180910390a150565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f906140cf565b60405180910390fd5b80915050919050565b611139611d72565b73ffffffffffffffffffffffffffffffffffffffff166111576115fd565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a49061414f565b60405180910390fd5b600081116111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790613eaf565b60405180910390fd5b80600c819055507fee643f334779f1031decbee003f80a0bcb7ecdc24b6693539cf7447a66afba8a81604051611226919061426f565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906140af565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f1611d72565b73ffffffffffffffffffffffffffffffffffffffff1661130f6115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c9061414f565b60405180910390fd5b61136f6000612431565b565b61137b3382611fa7565b6113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906140ef565b60405180910390fd5b6113c3816124f7565b7f066548819fc4bd1208ea1c8608597593134d5661f459c2ef75cad30918af5a33816040516113f2919061426f565b60405180910390a150565b611405611d72565b73ffffffffffffffffffffffffffffffffffffffff166114236115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114709061414f565b60405180910390fd5b600081116114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906141ef565b60405180910390fd5b80600e819055507f10c8453bb7e69387bc7864680c3c203d96807b6763152560dbd9e265886b2911816040516114f2919061426f565b60405180910390a150565b611505611d72565b73ffffffffffffffffffffffffffffffffffffffff166115236115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061414f565b60405180910390fd5b600081116115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061406f565b60405180910390fd5b80600d819055507f1a15ab7124a4e1ce00837351261771caf1691cd7d85ed3a0ac3157a1ee1a3805816040516115f2919061426f565b60405180910390a150565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f8054611634906145a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611660906145a7565b80156116ad5780601f10611682576101008083540402835291602001916116ad565b820191906000526020600020905b81548152906001019060200180831161169057829003601f168201915b505050505081565b6060600180546116c4906145a7565b80601f01602080910402602001604051908101604052809291908181526020018280546116f0906145a7565b801561173d5780601f106117125761010080835404028352916020019161173d565b820191906000526020600020905b81548152906001019060200180831161172057829003601f168201915b5050505050905090565b61174f611068565b1561178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061404f565b60405180910390fd5b600061179b600b612614565b9050600c5481106117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d89061422f565b60405180910390fd5b600c5482826117f091906143dc565b1115611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890613eef565b60405180910390fd5b600e54821115611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613fcf565b60405180910390fd5b600d54826118849190614463565b34146118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc9061424f565b60405180910390fd5b60005b828110156118ec576118d933611d7a565b80806118e49061460a565b9150506118c8565b503373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83600d5460405161193792919061428a565b60405180910390a25050565b61195561194e611d72565b8383612622565b5050565b61196a611964611d72565b83611fa7565b6119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a0906141cf565b60405180910390fd5b6119b58484848461278f565b50505050565b60606119c682611e82565b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc9061416f565b60405180910390fd5b6000611a0f6127eb565b90506000815111611a2f5760405180602001604052806000815250611a5a565b80611a398461287d565b604051602001611a4a929190613d9e565b6040516020818303038152906040525b915050919050565b600e5481565b611a70611d72565b73ffffffffffffffffffffffffffffffffffffffff16611a8e6115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb9061414f565b60405180910390fd5b60008111611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6157600080fd5b60005b81811015611ba257611b76600b6129de565b6000611b82600b612614565b9050611b8e84826129f4565b508080611b9a9061460a565b915050611b64565b507f31850b90c262ba12465a840ca2afb77539f32ff13a040c6e78c59734f7c328308282604051611bd4929190613e29565b60405180910390a15050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c82611d72565b73ffffffffffffffffffffffffffffffffffffffff16611ca06115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061414f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90613f4f565b60405180910390fd5b611d6f81612431565b50565b600033905090565b611d84600b6129de565b6000611d90600b612614565b9050611d9c82826129f4565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e6b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e7b5750611e7a82612a12565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f618361107f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fb282611e82565b611ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe89061402f565b60405180910390fd5b6000611ffc8361107f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061203e575061203d8185611be6565b5b8061207c57508373ffffffffffffffffffffffffffffffffffffffff1661206484610a38565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120a58261107f565b73ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290613fef565b60405180910390fd5b612176838383612a7c565b612181600082611eee565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d191906144bd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222891906143dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122e7838383612b90565b505050565b6122f4611068565b15612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b9061404f565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612378611d72565b6040516123859190613dc2565b60405180910390a1565b612397611068565b6123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90613e8f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61241a611d72565b6040516124279190613dc2565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125028261107f565b905061251081600084612a7c565b61251b600083611eee565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b91906144bd565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261081600084612b90565b5050565b600081600001549050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126889061400f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127829190613e52565b60405180910390a3505050565b61279a848484612085565b6127a684848484612b95565b6127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90613f2f565b60405180910390fd5b50505050565b6060600f80546127fa906145a7565b80601f0160208091040260200160405190810160405280929190818152602001828054612826906145a7565b80156128735780601f1061284857610100808354040283529160200191612873565b820191906000526020600020905b81548152906001019060200180831161285657829003601f168201915b5050505050905090565b606060008214156128c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129d9565b600082905060005b600082146128f75780806128e09061460a565b915050600a826128f09190614432565b91506128cd565b60008167ffffffffffffffff8111156129135761291261476f565b5b6040519080825280601f01601f1916602001820160405280156129455781602001600182028036833780820191505090505b5090505b600085146129d25760018261295e91906144bd565b9150600a8561296d9190614653565b603061297991906143dc565b60f81b81838151811061298f5761298e614740565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129cb9190614432565b9450612949565b8093505050505b919050565b6001816000016000828254019250508190555050565b612a0e828260405180602001604052806000815250612d2c565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a87838383612d87565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aca57612ac581612d8c565b612b09565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b0857612b078382612dd5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b4c57612b4781612f42565b612b8b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b8a57612b898282613013565b5b5b505050565b505050565b6000612bb68473ffffffffffffffffffffffffffffffffffffffff16613092565b15612d1f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bdf611d72565b8786866040518563ffffffff1660e01b8152600401612c019493929190613ddd565b602060405180830381600087803b158015612c1b57600080fd5b505af1925050508015612c4c57506040513d601f19601f82011682018060405250810190612c499190613752565b60015b612ccf573d8060008114612c7c576040519150601f19603f3d011682016040523d82523d6000602084013e612c81565b606091505b50600081511415612cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbe90613f2f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d24565b600190505b949350505050565b612d3683836130b5565b612d436000848484612b95565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7990613f2f565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612de284611231565b612dec91906144bd565b9050600060076000848152602001908152602001600020549050818114612ed1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f5691906144bd565b9050600060096000848152602001908152602001600020549050600060088381548110612f8657612f85614740565b5b906000526020600020015490508060088381548110612fa857612fa7614740565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ff757612ff6614711565b5b6001900381819060005260206000200160009055905550505050565b600061301e83611231565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311c9061410f565b60405180910390fd5b61312e81611e82565b1561316e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316590613f8f565b60405180910390fd5b61317a60008383612a7c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ca91906143dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461328b60008383612b90565b5050565b82805461329b906145a7565b90600052602060002090601f0160209004810192826132bd5760008555613304565b82601f106132d657805160ff1916838001178555613304565b82800160010185558215613304579182015b828111156133035782518255916020019190600101906132e8565b5b5090506133119190613315565b5090565b5b8082111561332e576000816000905550600101613316565b5090565b6000613345613340846142d8565b6142b3565b90508083825260208201905082856020860282011115613368576133676147a3565b5b60005b85811015613398578161337e8882613426565b84526020840193506020830192505060018101905061336b565b5050509392505050565b60006133b56133b084614304565b6142b3565b9050828152602081018484840111156133d1576133d06147a8565b5b6133dc848285614565565b509392505050565b60006133f76133f284614335565b6142b3565b905082815260208101848484011115613413576134126147a8565b5b61341e848285614565565b509392505050565b6000813590506134358161504f565b92915050565b600082601f8301126134505761344f61479e565b5b8135613460848260208601613332565b91505092915050565b60008135905061347881615066565b92915050565b60008135905061348d8161507d565b92915050565b6000815190506134a28161507d565b92915050565b600082601f8301126134bd576134bc61479e565b5b81356134cd8482602086016133a2565b91505092915050565b600082601f8301126134eb576134ea61479e565b5b81356134fb8482602086016133e4565b91505092915050565b60008135905061351381615094565b92915050565b60006020828403121561352f5761352e6147b2565b5b600061353d84828501613426565b91505092915050565b6000806040838503121561355d5761355c6147b2565b5b600061356b85828601613426565b925050602061357c85828601613426565b9150509250929050565b60008060006060848603121561359f5761359e6147b2565b5b60006135ad86828701613426565b93505060206135be86828701613426565b92505060406135cf86828701613504565b9150509250925092565b600080600080608085870312156135f3576135f26147b2565b5b600061360187828801613426565b945050602061361287828801613426565b935050604061362387828801613504565b925050606085013567ffffffffffffffff811115613644576136436147ad565b5b613650878288016134a8565b91505092959194509250565b60008060408385031215613673576136726147b2565b5b600061368185828601613426565b925050602061369285828601613469565b9150509250929050565b600080604083850312156136b3576136b26147b2565b5b60006136c185828601613426565b92505060206136d285828601613504565b9150509250929050565b6000602082840312156136f2576136f16147b2565b5b600082013567ffffffffffffffff8111156137105761370f6147ad565b5b61371c8482850161343b565b91505092915050565b60006020828403121561373b5761373a6147b2565b5b60006137498482850161347e565b91505092915050565b600060208284031215613768576137676147b2565b5b600061377684828501613493565b91505092915050565b600060208284031215613795576137946147b2565b5b600082013567ffffffffffffffff8111156137b3576137b26147ad565b5b6137bf848285016134d6565b91505092915050565b6000602082840312156137de576137dd6147b2565b5b60006137ec84828501613504565b91505092915050565b6000613801838361381c565b60208301905092915050565b613816816144f1565b82525050565b613825816144f1565b82525050565b600061383682614376565b61384081856143a4565b935061384b83614366565b8060005b8381101561387c57815161386388826137f5565b975061386e83614397565b92505060018101905061384f565b5085935050505092915050565b61389281614503565b82525050565b60006138a382614381565b6138ad81856143af565b93506138bd818560208601614574565b6138c6816147b7565b840191505092915050565b60006138dc8261438c565b6138e681856143c0565b93506138f6818560208601614574565b6138ff816147b7565b840191505092915050565b60006139158261438c565b61391f81856143d1565b935061392f818560208601614574565b80840191505092915050565b60006139486014836143c0565b9150613953826147c8565b602082019050919050565b600061396b6034836143c0565b9150613976826147f1565b604082019050919050565b600061398e602a836143c0565b915061399982614840565b604082019050919050565b60006139b16033836143c0565b91506139bc8261488f565b604082019050919050565b60006139d4602b836143c0565b91506139df826148de565b604082019050919050565b60006139f76032836143c0565b9150613a028261492d565b604082019050919050565b6000613a1a6026836143c0565b9150613a258261497c565b604082019050919050565b6000613a3d6025836143c0565b9150613a48826149cb565b604082019050919050565b6000613a60601c836143c0565b9150613a6b82614a1a565b602082019050919050565b6000613a83602d836143c0565b9150613a8e82614a43565b604082019050919050565b6000613aa6602b836143c0565b9150613ab182614a92565b604082019050919050565b6000613ac96024836143c0565b9150613ad482614ae1565b604082019050919050565b6000613aec6019836143c0565b9150613af782614b30565b602082019050919050565b6000613b0f602c836143c0565b9150613b1a82614b59565b604082019050919050565b6000613b326010836143c0565b9150613b3d82614ba8565b602082019050919050565b6000613b55602d836143c0565b9150613b6082614bd1565b604082019050919050565b6000613b786038836143c0565b9150613b8382614c20565b604082019050919050565b6000613b9b602a836143c0565b9150613ba682614c6f565b604082019050919050565b6000613bbe6029836143c0565b9150613bc982614cbe565b604082019050919050565b6000613be1602b836143c0565b9150613bec82614d0d565b604082019050919050565b6000613c046020836143c0565b9150613c0f82614d5c565b602082019050919050565b6000613c27602c836143c0565b9150613c3282614d85565b604082019050919050565b6000613c4a6020836143c0565b9150613c5582614dd4565b602082019050919050565b6000613c6d602f836143c0565b9150613c7882614dfd565b604082019050919050565b6000613c906021836143c0565b9150613c9b82614e4c565b604082019050919050565b6000613cb36031836143c0565b9150613cbe82614e9b565b604082019050919050565b6000613cd66031836143c0565b9150613ce182614eea565b604082019050919050565b6000613cf96037836143c0565b9150613d0482614f39565b604082019050919050565b6000613d1c602c836143c0565b9150613d2782614f88565b604082019050919050565b6000613d3f601a836143c0565b9150613d4a82614fd7565b602082019050919050565b6000613d626035836143c0565b9150613d6d82615000565b604082019050919050565b613d818161455b565b82525050565b6000613d93828461382b565b915081905092915050565b6000613daa828561390a565b9150613db6828461390a565b91508190509392505050565b6000602082019050613dd7600083018461380d565b92915050565b6000608082019050613df2600083018761380d565b613dff602083018661380d565b613e0c6040830185613d78565b8181036060830152613e1e8184613898565b905095945050505050565b6000604082019050613e3e600083018561380d565b613e4b6020830184613d78565b9392505050565b6000602082019050613e676000830184613889565b92915050565b60006020820190508181036000830152613e8781846138d1565b905092915050565b60006020820190508181036000830152613ea88161393b565b9050919050565b60006020820190508181036000830152613ec88161395e565b9050919050565b60006020820190508181036000830152613ee881613981565b9050919050565b60006020820190508181036000830152613f08816139a4565b9050919050565b60006020820190508181036000830152613f28816139c7565b9050919050565b60006020820190508181036000830152613f48816139ea565b9050919050565b60006020820190508181036000830152613f6881613a0d565b9050919050565b60006020820190508181036000830152613f8881613a30565b9050919050565b60006020820190508181036000830152613fa881613a53565b9050919050565b60006020820190508181036000830152613fc881613a76565b9050919050565b60006020820190508181036000830152613fe881613a99565b9050919050565b6000602082019050818103600083015261400881613abc565b9050919050565b6000602082019050818103600083015261402881613adf565b9050919050565b6000602082019050818103600083015261404881613b02565b9050919050565b6000602082019050818103600083015261406881613b25565b9050919050565b6000602082019050818103600083015261408881613b48565b9050919050565b600060208201905081810360008301526140a881613b6b565b9050919050565b600060208201905081810360008301526140c881613b8e565b9050919050565b600060208201905081810360008301526140e881613bb1565b9050919050565b6000602082019050818103600083015261410881613bd4565b9050919050565b6000602082019050818103600083015261412881613bf7565b9050919050565b6000602082019050818103600083015261414881613c1a565b9050919050565b6000602082019050818103600083015261416881613c3d565b9050919050565b6000602082019050818103600083015261418881613c60565b9050919050565b600060208201905081810360008301526141a881613c83565b9050919050565b600060208201905081810360008301526141c881613ca6565b9050919050565b600060208201905081810360008301526141e881613cc9565b9050919050565b6000602082019050818103600083015261420881613cec565b9050919050565b6000602082019050818103600083015261422881613d0f565b9050919050565b6000602082019050818103600083015261424881613d32565b9050919050565b6000602082019050818103600083015261426881613d55565b9050919050565b60006020820190506142846000830184613d78565b92915050565b600060408201905061429f6000830185613d78565b6142ac6020830184613d78565b9392505050565b60006142bd6142ce565b90506142c982826145d9565b919050565b6000604051905090565b600067ffffffffffffffff8211156142f3576142f261476f565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561431f5761431e61476f565b5b614328826147b7565b9050602081019050919050565b600067ffffffffffffffff8211156143505761434f61476f565b5b614359826147b7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143e78261455b565b91506143f28361455b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561442757614426614684565b5b828201905092915050565b600061443d8261455b565b91506144488361455b565b925082614458576144576146b3565b5b828204905092915050565b600061446e8261455b565b91506144798361455b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144b2576144b1614684565b5b828202905092915050565b60006144c88261455b565b91506144d38361455b565b9250828210156144e6576144e5614684565b5b828203905092915050565b60006144fc8261453b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614592578082015181840152602081019050614577565b838111156145a1576000848401525b50505050565b600060028204905060018216806145bf57607f821691505b602082108114156145d3576145d26146e2565b5b50919050565b6145e2826147b7565b810181811067ffffffffffffffff821117156146015761460061476f565b5b80604052505050565b60006146158261455b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464857614647614684565b5b600182019050919050565b600061465e8261455b565b91506146698361455b565b925082614679576146786146b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f757064617465546f74616c537570706c793a206e657720737570706c79206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b7f61697244726f703a206d7573742073706563696679206174206c65617374206f60008201527f6e65206164647265737300000000000000000000000000000000000000000000602082015250565b7f6d696e743a206e6f7420656e6f756768204e46547320617661696c61626c652060008201527f746f206d696e74207468617420616d6f756e7400000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d756c746941697244726f703a206d757374206169722064726f70206174206c60008201527f65617374206f6e65206974656d00000000000000000000000000000000000000602082015250565b7f6d696e743a20616d6f756e74206c696d6974206578636565646564207065722060008201527f7472616e73616374696f6e000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f75706461746550726963653a206e6577207072696365206d757374206265206760008201527f726561746572207468616e203000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6275726e546f6b656e3a2063616c6c6572206973206e6f74206f776e6572206e60008201527f6f7220617070726f766564000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f77697468647261773a20636f6e74726163742062616c616e6365206d7573742060008201527f62652067726561746572207468616e2030000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7570646174654d61784d696e7450657254583a206e6577204d6178204d696e7460008201527f206d7573742062652067726561746572207468616e2030000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d696e743a206e6f204e465473206c65667420746f206d696e74000000000000600082015250565b7f6d696e743a2076616c756520706173736564206973206e6f7420636f7272656360008201527f7420746f206d696e74207468617420616d6f756e740000000000000000000000602082015250565b615058816144f1565b811461506357600080fd5b50565b61506f81614503565b811461507a57600080fd5b50565b6150868161450f565b811461509157600080fd5b50565b61509d8161455b565b81146150a857600080fd5b5056fea26469706673582212204938636a473ff8ed01b1f23e520f8dbae805e58956987f9b00048c4eeb4b66f164736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101f85760003560e01c806370a082311161010d578063a0712d68116100a0578063d146a8031161006f578063d146a803146106f9578063daa4d82c14610724578063e80a35581461074d578063e985e9c514610778578063f2fde38b146107b5576101f8565b8063a0712d681461064e578063a22cb4651461066a578063b88d4fde14610693578063c87b56dd146106bc576101f8565b80638d6cc56d116100dc5780638d6cc56d146105a45780638da5cb5b146105cd57806391860f78146105f857806395d89b4114610623576101f8565b806370a08231146104fe578063715018a61461053b5780637b47ec1a14610552578063882f66431461057b576101f8565b8063274a32d3116101905780634f6ccce71161015f5780634f6ccce71461040757806355f804b3146104445780635c975abb1461046d5780636352211e1461049857806366d49bab146104d5576101f8565b8063274a32d3146103735780632f745c591461038a5780633ccfd60b146103c757806342842e0e146103de576101f8565b8063081812fc116101cc578063081812fc146102b9578063095ea7b3146102f657806318160ddd1461031f57806323b872dd1461034a576101f8565b8062b6849f146101fd57806301ffc9a7146102265780630387da421461026357806306fdde031461028e575b600080fd5b34801561020957600080fd5b50610224600480360381019061021f91906136dc565b6107de565b005b34801561023257600080fd5b5061024d60048036038101906102489190613725565b610926565b60405161025a9190613e52565b60405180910390f35b34801561026f57600080fd5b506102786109a0565b604051610285919061426f565b60405180910390f35b34801561029a57600080fd5b506102a36109a6565b6040516102b09190613e6d565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db91906137c8565b610a38565b6040516102ed9190613dc2565b60405180910390f35b34801561030257600080fd5b5061031d6004803603810190610318919061369c565b610abd565b005b34801561032b57600080fd5b50610334610bd5565b604051610341919061426f565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613586565b610be2565b005b34801561037f57600080fd5b50610388610c42565b005b34801561039657600080fd5b506103b160048036038101906103ac919061369c565b610d20565b6040516103be919061426f565b60405180910390f35b3480156103d357600080fd5b506103dc610dc5565b005b3480156103ea57600080fd5b5061040560048036038101906104009190613586565b610f0a565b005b34801561041357600080fd5b5061042e600480360381019061042991906137c8565b610f2a565b60405161043b919061426f565b60405180910390f35b34801561045057600080fd5b5061046b6004803603810190610466919061377f565b610f9b565b005b34801561047957600080fd5b50610482611068565b60405161048f9190613e52565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba91906137c8565b61107f565b6040516104cc9190613dc2565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906137c8565b611131565b005b34801561050a57600080fd5b5061052560048036038101906105209190613519565b611231565b604051610532919061426f565b60405180910390f35b34801561054757600080fd5b506105506112e9565b005b34801561055e57600080fd5b50610579600480360381019061057491906137c8565b611371565b005b34801561058757600080fd5b506105a2600480360381019061059d91906137c8565b6113fd565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906137c8565b6114fd565b005b3480156105d957600080fd5b506105e26115fd565b6040516105ef9190613dc2565b60405180910390f35b34801561060457600080fd5b5061060d611627565b60405161061a9190613e6d565b60405180910390f35b34801561062f57600080fd5b506106386116b5565b6040516106459190613e6d565b60405180910390f35b610668600480360381019061066391906137c8565b611747565b005b34801561067657600080fd5b50610691600480360381019061068c919061365c565b611943565b005b34801561069f57600080fd5b506106ba60048036038101906106b591906135d9565b611959565b005b3480156106c857600080fd5b506106e360048036038101906106de91906137c8565b6119bb565b6040516106f09190613e6d565b60405180910390f35b34801561070557600080fd5b5061070e611a62565b60405161071b919061426f565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061369c565b611a68565b005b34801561075957600080fd5b50610762611be0565b60405161076f919061426f565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a9190613546565b611be6565b6040516107ac9190613e52565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613519565b611c7a565b005b6107e6611d72565b73ffffffffffffffffffffffffffffffffffffffff166108046115fd565b73ffffffffffffffffffffffffffffffffffffffff161461085a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108519061414f565b60405180910390fd5b600081511161089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613ecf565b60405180910390fd5b60005b81518110156108e0576108cd8282815181106108c0576108bf614740565b5b6020026020010151611d7a565b80806108d89061460a565b9150506108a1565b50806040516108ef9190613d87565b60405180910390207fb9413d9dd40eadf97d2949c3c57a163bb454e537a8696520d52a74e0252011e960405160405180910390a250565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610999575061099882611da0565b5b9050919050565b600d5481565b6060600080546109b5906145a7565b80601f01602080910402602001604051908101604052809291908181526020018280546109e1906145a7565b8015610a2e5780601f10610a0357610100808354040283529160200191610a2e565b820191906000526020600020905b815481529060010190602001808311610a1157829003601f168201915b5050505050905090565b6000610a4382611e82565b610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a799061412f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac88261107f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b309061418f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b58611d72565b73ffffffffffffffffffffffffffffffffffffffff161480610b875750610b8681610b81611d72565b611be6565b5b610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd9061408f565b60405180910390fd5b610bd08383611eee565b505050565b6000600880549050905090565b610bf3610bed611d72565b82611fa7565b610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c29906141cf565b60405180910390fd5b610c3d838383612085565b505050565b610c4a611d72565b73ffffffffffffffffffffffffffffffffffffffff16610c686115fd565b73ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061414f565b60405180910390fd5b610cc6611068565b610cd757610cd26122ec565b610ce0565b610cdf61238f565b5b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f610d09611068565b604051610d169190613e52565b60405180910390a1565b6000610d2b83611231565b8210610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613f0f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dcd611d72565b73ffffffffffffffffffffffffffffffffffffffff16610deb6115fd565b73ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e389061414f565b60405180910390fd5b60004711610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906141af565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ecf573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d81604051610eff919061426f565b60405180910390a150565b610f2583838360405180602001604052806000815250611959565b505050565b6000610f34610bd5565b8210610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061420f565b60405180910390fd5b60088281548110610f8957610f88614740565b5b90600052602060002001549050919050565b610fa3611d72565b73ffffffffffffffffffffffffffffffffffffffff16610fc16115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e9061414f565b60405180910390fd5b80600f908051906020019061102d92919061328f565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa8160405161105d9190613e6d565b60405180910390a150565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f906140cf565b60405180910390fd5b80915050919050565b611139611d72565b73ffffffffffffffffffffffffffffffffffffffff166111576115fd565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a49061414f565b60405180910390fd5b600081116111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790613eaf565b60405180910390fd5b80600c819055507fee643f334779f1031decbee003f80a0bcb7ecdc24b6693539cf7447a66afba8a81604051611226919061426f565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906140af565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f1611d72565b73ffffffffffffffffffffffffffffffffffffffff1661130f6115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c9061414f565b60405180910390fd5b61136f6000612431565b565b61137b3382611fa7565b6113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906140ef565b60405180910390fd5b6113c3816124f7565b7f066548819fc4bd1208ea1c8608597593134d5661f459c2ef75cad30918af5a33816040516113f2919061426f565b60405180910390a150565b611405611d72565b73ffffffffffffffffffffffffffffffffffffffff166114236115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114709061414f565b60405180910390fd5b600081116114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906141ef565b60405180910390fd5b80600e819055507f10c8453bb7e69387bc7864680c3c203d96807b6763152560dbd9e265886b2911816040516114f2919061426f565b60405180910390a150565b611505611d72565b73ffffffffffffffffffffffffffffffffffffffff166115236115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061414f565b60405180910390fd5b600081116115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061406f565b60405180910390fd5b80600d819055507f1a15ab7124a4e1ce00837351261771caf1691cd7d85ed3a0ac3157a1ee1a3805816040516115f2919061426f565b60405180910390a150565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f8054611634906145a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611660906145a7565b80156116ad5780601f10611682576101008083540402835291602001916116ad565b820191906000526020600020905b81548152906001019060200180831161169057829003601f168201915b505050505081565b6060600180546116c4906145a7565b80601f01602080910402602001604051908101604052809291908181526020018280546116f0906145a7565b801561173d5780601f106117125761010080835404028352916020019161173d565b820191906000526020600020905b81548152906001019060200180831161172057829003601f168201915b5050505050905090565b61174f611068565b1561178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061404f565b60405180910390fd5b600061179b600b612614565b9050600c5481106117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d89061422f565b60405180910390fd5b600c5482826117f091906143dc565b1115611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890613eef565b60405180910390fd5b600e54821115611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613fcf565b60405180910390fd5b600d54826118849190614463565b34146118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc9061424f565b60405180910390fd5b60005b828110156118ec576118d933611d7a565b80806118e49061460a565b9150506118c8565b503373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83600d5460405161193792919061428a565b60405180910390a25050565b61195561194e611d72565b8383612622565b5050565b61196a611964611d72565b83611fa7565b6119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a0906141cf565b60405180910390fd5b6119b58484848461278f565b50505050565b60606119c682611e82565b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc9061416f565b60405180910390fd5b6000611a0f6127eb565b90506000815111611a2f5760405180602001604052806000815250611a5a565b80611a398461287d565b604051602001611a4a929190613d9e565b6040516020818303038152906040525b915050919050565b600e5481565b611a70611d72565b73ffffffffffffffffffffffffffffffffffffffff16611a8e6115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb9061414f565b60405180910390fd5b60008111611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6157600080fd5b60005b81811015611ba257611b76600b6129de565b6000611b82600b612614565b9050611b8e84826129f4565b508080611b9a9061460a565b915050611b64565b507f31850b90c262ba12465a840ca2afb77539f32ff13a040c6e78c59734f7c328308282604051611bd4929190613e29565b60405180910390a15050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c82611d72565b73ffffffffffffffffffffffffffffffffffffffff16611ca06115fd565b73ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061414f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90613f4f565b60405180910390fd5b611d6f81612431565b50565b600033905090565b611d84600b6129de565b6000611d90600b612614565b9050611d9c82826129f4565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e6b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e7b5750611e7a82612a12565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f618361107f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fb282611e82565b611ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe89061402f565b60405180910390fd5b6000611ffc8361107f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061203e575061203d8185611be6565b5b8061207c57508373ffffffffffffffffffffffffffffffffffffffff1661206484610a38565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120a58261107f565b73ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290613f6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290613fef565b60405180910390fd5b612176838383612a7c565b612181600082611eee565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d191906144bd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222891906143dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122e7838383612b90565b505050565b6122f4611068565b15612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b9061404f565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612378611d72565b6040516123859190613dc2565b60405180910390a1565b612397611068565b6123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90613e8f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61241a611d72565b6040516124279190613dc2565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125028261107f565b905061251081600084612a7c565b61251b600083611eee565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b91906144bd565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261081600084612b90565b5050565b600081600001549050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126889061400f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127829190613e52565b60405180910390a3505050565b61279a848484612085565b6127a684848484612b95565b6127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90613f2f565b60405180910390fd5b50505050565b6060600f80546127fa906145a7565b80601f0160208091040260200160405190810160405280929190818152602001828054612826906145a7565b80156128735780601f1061284857610100808354040283529160200191612873565b820191906000526020600020905b81548152906001019060200180831161285657829003601f168201915b5050505050905090565b606060008214156128c5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129d9565b600082905060005b600082146128f75780806128e09061460a565b915050600a826128f09190614432565b91506128cd565b60008167ffffffffffffffff8111156129135761291261476f565b5b6040519080825280601f01601f1916602001820160405280156129455781602001600182028036833780820191505090505b5090505b600085146129d25760018261295e91906144bd565b9150600a8561296d9190614653565b603061297991906143dc565b60f81b81838151811061298f5761298e614740565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129cb9190614432565b9450612949565b8093505050505b919050565b6001816000016000828254019250508190555050565b612a0e828260405180602001604052806000815250612d2c565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a87838383612d87565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aca57612ac581612d8c565b612b09565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b0857612b078382612dd5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b4c57612b4781612f42565b612b8b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b8a57612b898282613013565b5b5b505050565b505050565b6000612bb68473ffffffffffffffffffffffffffffffffffffffff16613092565b15612d1f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bdf611d72565b8786866040518563ffffffff1660e01b8152600401612c019493929190613ddd565b602060405180830381600087803b158015612c1b57600080fd5b505af1925050508015612c4c57506040513d601f19601f82011682018060405250810190612c499190613752565b60015b612ccf573d8060008114612c7c576040519150601f19603f3d011682016040523d82523d6000602084013e612c81565b606091505b50600081511415612cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbe90613f2f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d24565b600190505b949350505050565b612d3683836130b5565b612d436000848484612b95565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7990613f2f565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612de284611231565b612dec91906144bd565b9050600060076000848152602001908152602001600020549050818114612ed1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f5691906144bd565b9050600060096000848152602001908152602001600020549050600060088381548110612f8657612f85614740565b5b906000526020600020015490508060088381548110612fa857612fa7614740565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ff757612ff6614711565b5b6001900381819060005260206000200160009055905550505050565b600061301e83611231565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311c9061410f565b60405180910390fd5b61312e81611e82565b1561316e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316590613f8f565b60405180910390fd5b61317a60008383612a7c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131ca91906143dc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461328b60008383612b90565b5050565b82805461329b906145a7565b90600052602060002090601f0160209004810192826132bd5760008555613304565b82601f106132d657805160ff1916838001178555613304565b82800160010185558215613304579182015b828111156133035782518255916020019190600101906132e8565b5b5090506133119190613315565b5090565b5b8082111561332e576000816000905550600101613316565b5090565b6000613345613340846142d8565b6142b3565b90508083825260208201905082856020860282011115613368576133676147a3565b5b60005b85811015613398578161337e8882613426565b84526020840193506020830192505060018101905061336b565b5050509392505050565b60006133b56133b084614304565b6142b3565b9050828152602081018484840111156133d1576133d06147a8565b5b6133dc848285614565565b509392505050565b60006133f76133f284614335565b6142b3565b905082815260208101848484011115613413576134126147a8565b5b61341e848285614565565b509392505050565b6000813590506134358161504f565b92915050565b600082601f8301126134505761344f61479e565b5b8135613460848260208601613332565b91505092915050565b60008135905061347881615066565b92915050565b60008135905061348d8161507d565b92915050565b6000815190506134a28161507d565b92915050565b600082601f8301126134bd576134bc61479e565b5b81356134cd8482602086016133a2565b91505092915050565b600082601f8301126134eb576134ea61479e565b5b81356134fb8482602086016133e4565b91505092915050565b60008135905061351381615094565b92915050565b60006020828403121561352f5761352e6147b2565b5b600061353d84828501613426565b91505092915050565b6000806040838503121561355d5761355c6147b2565b5b600061356b85828601613426565b925050602061357c85828601613426565b9150509250929050565b60008060006060848603121561359f5761359e6147b2565b5b60006135ad86828701613426565b93505060206135be86828701613426565b92505060406135cf86828701613504565b9150509250925092565b600080600080608085870312156135f3576135f26147b2565b5b600061360187828801613426565b945050602061361287828801613426565b935050604061362387828801613504565b925050606085013567ffffffffffffffff811115613644576136436147ad565b5b613650878288016134a8565b91505092959194509250565b60008060408385031215613673576136726147b2565b5b600061368185828601613426565b925050602061369285828601613469565b9150509250929050565b600080604083850312156136b3576136b26147b2565b5b60006136c185828601613426565b92505060206136d285828601613504565b9150509250929050565b6000602082840312156136f2576136f16147b2565b5b600082013567ffffffffffffffff8111156137105761370f6147ad565b5b61371c8482850161343b565b91505092915050565b60006020828403121561373b5761373a6147b2565b5b60006137498482850161347e565b91505092915050565b600060208284031215613768576137676147b2565b5b600061377684828501613493565b91505092915050565b600060208284031215613795576137946147b2565b5b600082013567ffffffffffffffff8111156137b3576137b26147ad565b5b6137bf848285016134d6565b91505092915050565b6000602082840312156137de576137dd6147b2565b5b60006137ec84828501613504565b91505092915050565b6000613801838361381c565b60208301905092915050565b613816816144f1565b82525050565b613825816144f1565b82525050565b600061383682614376565b61384081856143a4565b935061384b83614366565b8060005b8381101561387c57815161386388826137f5565b975061386e83614397565b92505060018101905061384f565b5085935050505092915050565b61389281614503565b82525050565b60006138a382614381565b6138ad81856143af565b93506138bd818560208601614574565b6138c6816147b7565b840191505092915050565b60006138dc8261438c565b6138e681856143c0565b93506138f6818560208601614574565b6138ff816147b7565b840191505092915050565b60006139158261438c565b61391f81856143d1565b935061392f818560208601614574565b80840191505092915050565b60006139486014836143c0565b9150613953826147c8565b602082019050919050565b600061396b6034836143c0565b9150613976826147f1565b604082019050919050565b600061398e602a836143c0565b915061399982614840565b604082019050919050565b60006139b16033836143c0565b91506139bc8261488f565b604082019050919050565b60006139d4602b836143c0565b91506139df826148de565b604082019050919050565b60006139f76032836143c0565b9150613a028261492d565b604082019050919050565b6000613a1a6026836143c0565b9150613a258261497c565b604082019050919050565b6000613a3d6025836143c0565b9150613a48826149cb565b604082019050919050565b6000613a60601c836143c0565b9150613a6b82614a1a565b602082019050919050565b6000613a83602d836143c0565b9150613a8e82614a43565b604082019050919050565b6000613aa6602b836143c0565b9150613ab182614a92565b604082019050919050565b6000613ac96024836143c0565b9150613ad482614ae1565b604082019050919050565b6000613aec6019836143c0565b9150613af782614b30565b602082019050919050565b6000613b0f602c836143c0565b9150613b1a82614b59565b604082019050919050565b6000613b326010836143c0565b9150613b3d82614ba8565b602082019050919050565b6000613b55602d836143c0565b9150613b6082614bd1565b604082019050919050565b6000613b786038836143c0565b9150613b8382614c20565b604082019050919050565b6000613b9b602a836143c0565b9150613ba682614c6f565b604082019050919050565b6000613bbe6029836143c0565b9150613bc982614cbe565b604082019050919050565b6000613be1602b836143c0565b9150613bec82614d0d565b604082019050919050565b6000613c046020836143c0565b9150613c0f82614d5c565b602082019050919050565b6000613c27602c836143c0565b9150613c3282614d85565b604082019050919050565b6000613c4a6020836143c0565b9150613c5582614dd4565b602082019050919050565b6000613c6d602f836143c0565b9150613c7882614dfd565b604082019050919050565b6000613c906021836143c0565b9150613c9b82614e4c565b604082019050919050565b6000613cb36031836143c0565b9150613cbe82614e9b565b604082019050919050565b6000613cd66031836143c0565b9150613ce182614eea565b604082019050919050565b6000613cf96037836143c0565b9150613d0482614f39565b604082019050919050565b6000613d1c602c836143c0565b9150613d2782614f88565b604082019050919050565b6000613d3f601a836143c0565b9150613d4a82614fd7565b602082019050919050565b6000613d626035836143c0565b9150613d6d82615000565b604082019050919050565b613d818161455b565b82525050565b6000613d93828461382b565b915081905092915050565b6000613daa828561390a565b9150613db6828461390a565b91508190509392505050565b6000602082019050613dd7600083018461380d565b92915050565b6000608082019050613df2600083018761380d565b613dff602083018661380d565b613e0c6040830185613d78565b8181036060830152613e1e8184613898565b905095945050505050565b6000604082019050613e3e600083018561380d565b613e4b6020830184613d78565b9392505050565b6000602082019050613e676000830184613889565b92915050565b60006020820190508181036000830152613e8781846138d1565b905092915050565b60006020820190508181036000830152613ea88161393b565b9050919050565b60006020820190508181036000830152613ec88161395e565b9050919050565b60006020820190508181036000830152613ee881613981565b9050919050565b60006020820190508181036000830152613f08816139a4565b9050919050565b60006020820190508181036000830152613f28816139c7565b9050919050565b60006020820190508181036000830152613f48816139ea565b9050919050565b60006020820190508181036000830152613f6881613a0d565b9050919050565b60006020820190508181036000830152613f8881613a30565b9050919050565b60006020820190508181036000830152613fa881613a53565b9050919050565b60006020820190508181036000830152613fc881613a76565b9050919050565b60006020820190508181036000830152613fe881613a99565b9050919050565b6000602082019050818103600083015261400881613abc565b9050919050565b6000602082019050818103600083015261402881613adf565b9050919050565b6000602082019050818103600083015261404881613b02565b9050919050565b6000602082019050818103600083015261406881613b25565b9050919050565b6000602082019050818103600083015261408881613b48565b9050919050565b600060208201905081810360008301526140a881613b6b565b9050919050565b600060208201905081810360008301526140c881613b8e565b9050919050565b600060208201905081810360008301526140e881613bb1565b9050919050565b6000602082019050818103600083015261410881613bd4565b9050919050565b6000602082019050818103600083015261412881613bf7565b9050919050565b6000602082019050818103600083015261414881613c1a565b9050919050565b6000602082019050818103600083015261416881613c3d565b9050919050565b6000602082019050818103600083015261418881613c60565b9050919050565b600060208201905081810360008301526141a881613c83565b9050919050565b600060208201905081810360008301526141c881613ca6565b9050919050565b600060208201905081810360008301526141e881613cc9565b9050919050565b6000602082019050818103600083015261420881613cec565b9050919050565b6000602082019050818103600083015261422881613d0f565b9050919050565b6000602082019050818103600083015261424881613d32565b9050919050565b6000602082019050818103600083015261426881613d55565b9050919050565b60006020820190506142846000830184613d78565b92915050565b600060408201905061429f6000830185613d78565b6142ac6020830184613d78565b9392505050565b60006142bd6142ce565b90506142c982826145d9565b919050565b6000604051905090565b600067ffffffffffffffff8211156142f3576142f261476f565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561431f5761431e61476f565b5b614328826147b7565b9050602081019050919050565b600067ffffffffffffffff8211156143505761434f61476f565b5b614359826147b7565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143e78261455b565b91506143f28361455b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561442757614426614684565b5b828201905092915050565b600061443d8261455b565b91506144488361455b565b925082614458576144576146b3565b5b828204905092915050565b600061446e8261455b565b91506144798361455b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144b2576144b1614684565b5b828202905092915050565b60006144c88261455b565b91506144d38361455b565b9250828210156144e6576144e5614684565b5b828203905092915050565b60006144fc8261453b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614592578082015181840152602081019050614577565b838111156145a1576000848401525b50505050565b600060028204905060018216806145bf57607f821691505b602082108114156145d3576145d26146e2565b5b50919050565b6145e2826147b7565b810181811067ffffffffffffffff821117156146015761460061476f565b5b80604052505050565b60006146158261455b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464857614647614684565b5b600182019050919050565b600061465e8261455b565b91506146698361455b565b925082614679576146786146b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f757064617465546f74616c537570706c793a206e657720737570706c79206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b7f61697244726f703a206d7573742073706563696679206174206c65617374206f60008201527f6e65206164647265737300000000000000000000000000000000000000000000602082015250565b7f6d696e743a206e6f7420656e6f756768204e46547320617661696c61626c652060008201527f746f206d696e74207468617420616d6f756e7400000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d756c746941697244726f703a206d757374206169722064726f70206174206c60008201527f65617374206f6e65206974656d00000000000000000000000000000000000000602082015250565b7f6d696e743a20616d6f756e74206c696d6974206578636565646564207065722060008201527f7472616e73616374696f6e000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f75706461746550726963653a206e6577207072696365206d757374206265206760008201527f726561746572207468616e203000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6275726e546f6b656e3a2063616c6c6572206973206e6f74206f776e6572206e60008201527f6f7220617070726f766564000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f77697468647261773a20636f6e74726163742062616c616e6365206d7573742060008201527f62652067726561746572207468616e2030000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7570646174654d61784d696e7450657254583a206e6577204d6178204d696e7460008201527f206d7573742062652067726561746572207468616e2030000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d696e743a206e6f204e465473206c65667420746f206d696e74000000000000600082015250565b7f6d696e743a2076616c756520706173736564206973206e6f7420636f7272656360008201527f7420746f206d696e74207468617420616d6f756e740000000000000000000000602082015250565b615058816144f1565b811461506357600080fd5b50565b61506f81614503565b811461507a57600080fd5b50565b6150868161450f565b811461509157600080fd5b50565b61509d8161455b565b81146150a857600080fd5b5056fea26469706673582212204938636a473ff8ed01b1f23e520f8dbae805e58956987f9b00048c4eeb4b66f164736f6c63430008070033

Deployed ByteCode Sourcemap

49574:4372:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50899:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36823:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49796:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23642:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25202:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24725:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37463:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25952:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52795:146;;;;;;;;;;;;;:::i;:::-;;37131:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53665:278;;;;;;;;;;;;;:::i;:::-;;26362:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37653:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50766:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44103:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23336:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53175:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23066:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47002:103;;;;;;;;;;;;;:::i;:::-;;52473:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53426:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52949:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46351:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49930:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51625:675;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25495:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26618:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23986:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49858:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51185:432;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49756:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25721:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47260:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50899:278;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50991:1:::1;50976:5;:12;:16;50968:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51055:9;51050:90;51074:5;:12;51070:1;:16;51050:90;;;51108:19;51118:5;51124:1;51118:8;;;;;;;;:::i;:::-;;;;;;;;51108:9;:19::i;:::-;51088:3;;;;;:::i;:::-;;;;51050:90;;;;51163:5;51155:14;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;50899:278:::0;:::o;36823:224::-;36925:4;36964:35;36949:50;;;:11;:50;;;;:90;;;;37003:36;37027:11;37003:23;:36::i;:::-;36949:90;36942:97;;36823:224;;;:::o;49796:35::-;;;;:::o;23642:100::-;23696:13;23729:5;23722:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23642:100;:::o;25202:221::-;25278:7;25306:16;25314:7;25306;:16::i;:::-;25298:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25391:15;:24;25407:7;25391:24;;;;;;;;;;;;;;;;;;;;;25384:31;;25202:221;;;:::o;24725:411::-;24806:13;24822:23;24837:7;24822:14;:23::i;:::-;24806:39;;24870:5;24864:11;;:2;:11;;;;24856:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24964:5;24948:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24973:37;24990:5;24997:12;:10;:12::i;:::-;24973:16;:37::i;:::-;24948:62;24926:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25107:21;25116:2;25120:7;25107:8;:21::i;:::-;24795:341;24725:411;;:::o;37463:113::-;37524:7;37551:10;:17;;;;37544:24;;37463:113;:::o;25952:339::-;26147:41;26166:12;:10;:12::i;:::-;26180:7;26147:18;:41::i;:::-;26139:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26255:28;26265:4;26271:2;26275:7;26255:9;:28::i;:::-;25952:339;;;:::o;52795:146::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52855:8:::1;:6;:8::i;:::-;:32;;52879:8;:6;:8::i;:::-;52855:32;;;52866:10;:8;:10::i;:::-;52855:32;52903:29;52923:8;:6;:8::i;:::-;52903:29;;;;;;:::i;:::-;;;;;;;;52795:146::o:0;37131:256::-;37228:7;37264:23;37281:5;37264:16;:23::i;:::-;37256:5;:31;37248:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37353:12;:19;37366:5;37353:19;;;;;;;;;;;;;;;:26;37373:5;37353:26;;;;;;;;;;;;37346:33;;37131:256;;;;:::o;53665:278::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53747:1:::1;53723:21;:25;53715:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;53814:15;53832:21;53814:39;;53873:10;53865:28;;:37;53894:7;53865:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53918:17;53927:7;53918:17;;;;;;:::i;:::-;;;;;;;;53704:239;53665:278::o:0;26362:185::-;26500:39;26517:4;26523:2;26527:7;26500:39;;;;;;;;;;;;:16;:39::i;:::-;26362:185;;;:::o;37653:233::-;37728:7;37764:30;:28;:30::i;:::-;37756:5;:38;37748:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37861:10;37872:5;37861:17;;;;;;;;:::i;:::-;;;;;;;;;;37854:24;;37653:233;;;:::o;50766:125::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50847:4:::1;50834:10;:17;;;;;;;;;;;;:::i;:::-;;50867:16;50878:4;50867:16;;;;;;:::i;:::-;;;;;;;;50766:125:::0;:::o;44103:86::-;44150:4;44174:7;;;;;;;;;;;44167:14;;44103:86;:::o;23336:239::-;23408:7;23428:13;23444:7;:16;23452:7;23444:16;;;;;;;;;;;;;;;;;;;;;23428:32;;23496:1;23479:19;;:5;:19;;;;23471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23562:5;23555:12;;;23336:239;;;:::o;53175:243::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53271:1:::1;53259:9;:13;53251:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;53356:9;53341:12;:24;;;;53382:28;53400:9;53382:28;;;;;;:::i;:::-;;;;;;;;53175:243:::0;:::o;23066:208::-;23138:7;23183:1;23166:19;;:5;:19;;;;23158:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23250:9;:16;23260:5;23250:16;;;;;;;;;;;;;;;;23243:23;;23066:208;;;:::o;47002:103::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47067:30:::1;47094:1;47067:18;:30::i;:::-;47002:103::o:0;52473:227::-;52545:39;52564:10;52576:7;52545:18;:39::i;:::-;52537:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;52644:14;52650:7;52644:5;:14::i;:::-;52674:18;52684:7;52674:18;;;;;;:::i;:::-;;;;;;;;52473:227;:::o;53426:231::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53517:1:::1;53508:6;:10;53500:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;53606:6;53590:13;:22;;;;53628:21;53642:6;53628:21;;;;;;:::i;:::-;;;;;;;;53426:231:::0;:::o;52949:218::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53037:1:::1;53026:8;:12;53018:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;53112:8;53099:10;:21;;;;53137;53149:8;53137:21;;;;;;:::i;:::-;;;;;;;;52949:218:::0;:::o;46351:87::-;46397:7;46424:6;;;;;;;;;;;46417:13;;46351:87;:::o;49930:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23811:104::-;23867:13;23900:7;23893:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23811:104;:::o;51625:675::-;44429:8;:6;:8::i;:::-;44428:9;44420:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51697:24:::1;51724:22;:12;:20;:22::i;:::-;51697:49;;51784:12;;51765:16;:31;51757:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51875:12;;51865:6;51846:16;:25;;;;:::i;:::-;:41;;51838:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;51972:13;;51962:6;:23;;51954:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;52074:10;;52065:6;:19;;;;:::i;:::-;52052:9;:32;52044:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;52161:9;52156:85;52180:6;52176:1;:10;52156:85;;;52208:21;52218:10;52208:9;:21::i;:::-;52188:3;;;;;:::i;:::-;;;;52156:85;;;;52261:10;52256:36;;;52273:6;52281:10;;52256:36;;;;;;;:::i;:::-;;;;;;;;51686:614;51625:675:::0;:::o;25495:155::-;25590:52;25609:12;:10;:12::i;:::-;25623:8;25633;25590:18;:52::i;:::-;25495:155;;:::o;26618:328::-;26793:41;26812:12;:10;:12::i;:::-;26826:7;26793:18;:41::i;:::-;26785:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26899:39;26913:4;26919:2;26923:7;26932:5;26899:13;:39::i;:::-;26618:328;;;;:::o;23986:334::-;24059:13;24093:16;24101:7;24093;:16::i;:::-;24085:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24174:21;24198:10;:8;:10::i;:::-;24174:34;;24250:1;24232:7;24226:21;:25;:86;;;;;;;;;;;;;;;;;24278:7;24287:18;:7;:16;:18::i;:::-;24261:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24226:86;24219:93;;;23986:334;;;:::o;49858:32::-;;;;:::o;51185:432::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51288:1:::1;51276:9;:13;51268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51374:1;51358:18;;:4;:18;;;;51350:27;;;::::0;::::1;;51395:9;51390:175;51414:9;51410:1;:13;51390:175;;;51445:24;:12;:22;:24::i;:::-;51484:10;51497:22;:12;:20;:22::i;:::-;51484:35;;51534:19;51544:4;51550:2;51534:9;:19::i;:::-;51430:135;51425:3;;;;;:::i;:::-;;;;51390:175;;;;51580:29;51593:4;51599:9;51580:29;;;;;;;:::i;:::-;;;;;;;;51185:432:::0;;:::o;49756:33::-;;;;:::o;25721:164::-;25818:4;25842:18;:25;25861:5;25842:25;;;;;;;;;;;;;;;:35;25868:8;25842:35;;;;;;;;;;;;;;;;;;;;;;;;;25835:42;;25721:164;;;;:::o;47260:201::-;46582:12;:10;:12::i;:::-;46571:23;;:7;:5;:7::i;:::-;:23;;;46563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47369:1:::1;47349:22;;:8;:22;;;;47341:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47425:28;47444:8;47425:18;:28::i;:::-;47260:201:::0;:::o;21076:98::-;21129:7;21156:10;21149:17;;21076:98;:::o;52308:157::-;52359:24;:12;:22;:24::i;:::-;52394:10;52407:22;:12;:20;:22::i;:::-;52394:35;;52440:17;52450:2;52454;52440:9;:17::i;:::-;52348:117;52308:157;:::o;22697:305::-;22799:4;22851:25;22836:40;;;:11;:40;;;;:105;;;;22908:33;22893:48;;;:11;:48;;;;22836:105;:158;;;;22958:36;22982:11;22958:23;:36::i;:::-;22836:158;22816:178;;22697:305;;;:::o;28456:127::-;28521:4;28573:1;28545:30;;:7;:16;28553:7;28545:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28538:37;;28456:127;;;:::o;32602:174::-;32704:2;32677:15;:24;32693:7;32677:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32760:7;32756:2;32722:46;;32731:23;32746:7;32731:14;:23::i;:::-;32722:46;;;;;;;;;;;;32602:174;;:::o;28750:348::-;28843:4;28868:16;28876:7;28868;:16::i;:::-;28860:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:13;28960:23;28975:7;28960:14;:23::i;:::-;28944:39;;29013:5;29002:16;;:7;:16;;;:52;;;;29022:32;29039:5;29046:7;29022:16;:32::i;:::-;29002:52;:87;;;;29082:7;29058:31;;:20;29070:7;29058:11;:20::i;:::-;:31;;;29002:87;28994:96;;;28750:348;;;;:::o;31859:625::-;32018:4;31991:31;;:23;32006:7;31991:14;:23::i;:::-;:31;;;31983:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32097:1;32083:16;;:2;:16;;;;32075:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32153:39;32174:4;32180:2;32184:7;32153:20;:39::i;:::-;32257:29;32274:1;32278:7;32257:8;:29::i;:::-;32318:1;32299:9;:15;32309:4;32299:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32347:1;32330:9;:13;32340:2;32330:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32378:2;32359:7;:16;32367:7;32359:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32417:7;32413:2;32398:27;;32407:4;32398:27;;;;;;;;;;;;32438:38;32458:4;32464:2;32468:7;32438:19;:38::i;:::-;31859:625;;;:::o;44903:118::-;44429:8;:6;:8::i;:::-;44428:9;44420:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44973:4:::1;44963:7;;:14;;;;;;;;;;;;;;;;;;44993:20;45000:12;:10;:12::i;:::-;44993:20;;;;;;:::i;:::-;;;;;;;;44903:118::o:0;45162:120::-;44706:8;:6;:8::i;:::-;44698:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;45231:5:::1;45221:7;;:15;;;;;;;;;;;;;;;;;;45252:22;45261:12;:10;:12::i;:::-;45252:22;;;;;;:::i;:::-;;;;;;;;45162:120::o:0;47621:191::-;47695:16;47714:6;;;;;;;;;;;47695:25;;47740:8;47731:6;;:17;;;;;;;;;;;;;;;;;;47795:8;47764:40;;47785:8;47764:40;;;;;;;;;;;;47684:128;47621:191;:::o;31102:420::-;31162:13;31178:23;31193:7;31178:14;:23::i;:::-;31162:39;;31214:48;31235:5;31250:1;31254:7;31214:20;:48::i;:::-;31303:29;31320:1;31324:7;31303:8;:29::i;:::-;31365:1;31345:9;:16;31355:5;31345:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31384:7;:16;31392:7;31384:16;;;;;;;;;;;;31377:23;;;;;;;;;;;31446:7;31442:1;31418:36;;31427:5;31418:36;;;;;;;;;;;;31467:47;31487:5;31502:1;31506:7;31467:19;:47::i;:::-;31151:371;31102:420;:::o;48691:114::-;48756:7;48783;:14;;;48776:21;;48691:114;;;:::o;32918:315::-;33073:8;33064:17;;:5;:17;;;;33056:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33160:8;33122:18;:25;33141:5;33122:25;;;;;;;;;;;;;;;:35;33148:8;33122:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33206:8;33184:41;;33199:5;33184:41;;;33216:8;33184:41;;;;;;:::i;:::-;;;;;;;;32918:315;;;:::o;27828:::-;27985:28;27995:4;28001:2;28005:7;27985:9;:28::i;:::-;28032:48;28055:4;28061:2;28065:7;28074:5;28032:22;:48::i;:::-;28024:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27828:315;;;;:::o;50655:103::-;50707:13;50740:10;50733:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50655:103;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;48813:127::-;48920:1;48902:7;:14;;;:19;;;;;;;;;;;48813:127;:::o;29440:110::-;29516:26;29526:2;29530:7;29516:26;;;;;;;;;;;;:9;:26::i;:::-;29440:110;;:::o;13463:157::-;13548:4;13587:25;13572:40;;;:11;:40;;;;13565:47;;13463:157;;;:::o;38499:589::-;38643:45;38670:4;38676:2;38680:7;38643:26;:45::i;:::-;38721:1;38705:18;;:4;:18;;;38701:187;;;38740:40;38772:7;38740:31;:40::i;:::-;38701:187;;;38810:2;38802:10;;:4;:10;;;38798:90;;38829:47;38862:4;38868:7;38829:32;:47::i;:::-;38798:90;38701:187;38916:1;38902:16;;:2;:16;;;38898:183;;;38935:45;38972:7;38935:36;:45::i;:::-;38898:183;;;39008:4;39002:10;;:2;:10;;;38998:83;;39029:40;39057:2;39061:7;39029:27;:40::i;:::-;38998:83;38898:183;38499:589;;;:::o;35680:125::-;;;;:::o;33798:799::-;33953:4;33974:15;:2;:13;;;:15::i;:::-;33970:620;;;34026:2;34010:36;;;34047:12;:10;:12::i;:::-;34061:4;34067:7;34076:5;34010:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34006:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34269:1;34252:6;:13;:18;34248:272;;;34295:60;;;;;;;;;;:::i;:::-;;;;;;;;34248:272;34470:6;34464:13;34455:6;34451:2;34447:15;34440:38;34006:529;34143:41;;;34133:51;;;:6;:51;;;;34126:58;;;;;33970:620;34574:4;34567:11;;33798:799;;;;;;;:::o;29777:321::-;29907:18;29913:2;29917:7;29907:5;:18::i;:::-;29958:54;29989:1;29993:2;29997:7;30006:5;29958:22;:54::i;:::-;29936:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29777:321;;;:::o;35169:126::-;;;;:::o;39811:164::-;39915:10;:17;;;;39888:15;:24;39904:7;39888:24;;;;;;;;;;;:44;;;;39943:10;39959:7;39943:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39811:164;:::o;40602:988::-;40868:22;40918:1;40893:22;40910:4;40893:16;:22::i;:::-;:26;;;;:::i;:::-;40868:51;;40930:18;40951:17;:26;40969:7;40951:26;;;;;;;;;;;;40930:47;;41098:14;41084:10;:28;41080:328;;41129:19;41151:12;:18;41164:4;41151:18;;;;;;;;;;;;;;;:34;41170:14;41151:34;;;;;;;;;;;;41129:56;;41235:11;41202:12;:18;41215:4;41202:18;;;;;;;;;;;;;;;:30;41221:10;41202:30;;;;;;;;;;;:44;;;;41352:10;41319:17;:30;41337:11;41319:30;;;;;;;;;;;:43;;;;41114:294;41080:328;41504:17;:26;41522:7;41504:26;;;;;;;;;;;41497:33;;;41548:12;:18;41561:4;41548:18;;;;;;;;;;;;;;;:34;41567:14;41548:34;;;;;;;;;;;41541:41;;;40683:907;;40602:988;;:::o;41885:1079::-;42138:22;42183:1;42163:10;:17;;;;:21;;;;:::i;:::-;42138:46;;42195:18;42216:15;:24;42232:7;42216:24;;;;;;;;;;;;42195:45;;42567:19;42589:10;42600:14;42589:26;;;;;;;;:::i;:::-;;;;;;;;;;42567:48;;42653:11;42628:10;42639;42628:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42764:10;42733:15;:28;42749:11;42733:28;;;;;;;;;;;:41;;;;42905:15;:24;42921:7;42905:24;;;;;;;;;;;42898:31;;;42940:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41956:1008;;;41885:1079;:::o;39389:221::-;39474:14;39491:20;39508:2;39491:16;:20::i;:::-;39474:37;;39549:7;39522:12;:16;39535:2;39522:16;;;;;;;;;;;;;;;:24;39539:6;39522:24;;;;;;;;;;;:34;;;;39596:6;39567:17;:26;39585:7;39567:26;;;;;;;;;;;:35;;;;39463:147;39389:221;;:::o;3357:326::-;3417:4;3674:1;3652:7;:19;;;:23;3645:30;;3357:326;;;:::o;30434:439::-;30528:1;30514:16;;:2;:16;;;;30506:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30587:16;30595:7;30587;:16::i;:::-;30586:17;30578:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30649:45;30678:1;30682:2;30686:7;30649:20;:45::i;:::-;30724:1;30707:9;:13;30717:2;30707:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30755:2;30736:7;:16;30744:7;30736:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30800:7;30796:2;30775:33;;30792:1;30775:33;;;;;;;;;;;;30821:44;30849:1;30853:2;30857:7;30821:19;:44::i;:::-;30434:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:195::-;8918:10;8939:54;8989:3;8981:6;8939:54;:::i;:::-;9025:4;9020:3;9016:14;9002:28;;8841:195;;;;:::o;9042:118::-;9129:24;9147:5;9129:24;:::i;:::-;9124:3;9117:37;9042:118;;:::o;9166:116::-;9251:24;9269:5;9251:24;:::i;:::-;9246:3;9239:37;9166:116;;:::o;9318:776::-;9455:3;9484:54;9532:5;9484:54;:::i;:::-;9554:104;9651:6;9646:3;9554:104;:::i;:::-;9547:111;;9682:56;9732:5;9682:56;:::i;:::-;9761:7;9792:1;9777:292;9802:6;9799:1;9796:13;9777:292;;;9878:6;9872:13;9905:71;9972:3;9957:13;9905:71;:::i;:::-;9898:78;;9999:60;10052:6;9999:60;:::i;:::-;9989:70;;9837:232;9824:1;9821;9817:9;9812:14;;9777:292;;;9781:14;10085:3;10078:10;;9460:634;;;9318:776;;;;:::o;10100:109::-;10181:21;10196:5;10181:21;:::i;:::-;10176:3;10169:34;10100:109;;:::o;10215:360::-;10301:3;10329:38;10361:5;10329:38;:::i;:::-;10383:70;10446:6;10441:3;10383:70;:::i;:::-;10376:77;;10462:52;10507:6;10502:3;10495:4;10488:5;10484:16;10462:52;:::i;:::-;10539:29;10561:6;10539:29;:::i;:::-;10534:3;10530:39;10523:46;;10305:270;10215:360;;;;:::o;10581:364::-;10669:3;10697:39;10730:5;10697:39;:::i;:::-;10752:71;10816:6;10811:3;10752:71;:::i;:::-;10745:78;;10832:52;10877:6;10872:3;10865:4;10858:5;10854:16;10832:52;:::i;:::-;10909:29;10931:6;10909:29;:::i;:::-;10904:3;10900:39;10893:46;;10673:272;10581:364;;;;:::o;10951:377::-;11057:3;11085:39;11118:5;11085:39;:::i;:::-;11140:89;11222:6;11217:3;11140:89;:::i;:::-;11133:96;;11238:52;11283:6;11278:3;11271:4;11264:5;11260:16;11238:52;:::i;:::-;11315:6;11310:3;11306:16;11299:23;;11061:267;10951:377;;;;:::o;11334:366::-;11476:3;11497:67;11561:2;11556:3;11497:67;:::i;:::-;11490:74;;11573:93;11662:3;11573:93;:::i;:::-;11691:2;11686:3;11682:12;11675:19;;11334:366;;;:::o;11706:::-;11848:3;11869:67;11933:2;11928:3;11869:67;:::i;:::-;11862:74;;11945:93;12034:3;11945:93;:::i;:::-;12063:2;12058:3;12054:12;12047:19;;11706:366;;;:::o;12078:::-;12220:3;12241:67;12305:2;12300:3;12241:67;:::i;:::-;12234:74;;12317:93;12406:3;12317:93;:::i;:::-;12435:2;12430:3;12426:12;12419:19;;12078:366;;;:::o;12450:::-;12592:3;12613:67;12677:2;12672:3;12613:67;:::i;:::-;12606:74;;12689:93;12778:3;12689:93;:::i;:::-;12807:2;12802:3;12798:12;12791:19;;12450:366;;;:::o;12822:::-;12964:3;12985:67;13049:2;13044:3;12985:67;:::i;:::-;12978:74;;13061:93;13150:3;13061:93;:::i;:::-;13179:2;13174:3;13170:12;13163:19;;12822:366;;;:::o;13194:::-;13336:3;13357:67;13421:2;13416:3;13357:67;:::i;:::-;13350:74;;13433:93;13522:3;13433:93;:::i;:::-;13551:2;13546:3;13542:12;13535:19;;13194:366;;;:::o;13566:::-;13708:3;13729:67;13793:2;13788:3;13729:67;:::i;:::-;13722:74;;13805:93;13894:3;13805:93;:::i;:::-;13923:2;13918:3;13914:12;13907:19;;13566:366;;;:::o;13938:::-;14080:3;14101:67;14165:2;14160:3;14101:67;:::i;:::-;14094:74;;14177:93;14266:3;14177:93;:::i;:::-;14295:2;14290:3;14286:12;14279:19;;13938:366;;;:::o;14310:::-;14452:3;14473:67;14537:2;14532:3;14473:67;:::i;:::-;14466:74;;14549:93;14638:3;14549:93;:::i;:::-;14667:2;14662:3;14658:12;14651:19;;14310:366;;;:::o;14682:::-;14824:3;14845:67;14909:2;14904:3;14845:67;:::i;:::-;14838:74;;14921:93;15010:3;14921:93;:::i;:::-;15039:2;15034:3;15030:12;15023:19;;14682:366;;;:::o;15054:::-;15196:3;15217:67;15281:2;15276:3;15217:67;:::i;:::-;15210:74;;15293:93;15382:3;15293:93;:::i;:::-;15411:2;15406:3;15402:12;15395:19;;15054:366;;;:::o;15426:::-;15568:3;15589:67;15653:2;15648:3;15589:67;:::i;:::-;15582:74;;15665:93;15754:3;15665:93;:::i;:::-;15783:2;15778:3;15774:12;15767:19;;15426:366;;;:::o;15798:::-;15940:3;15961:67;16025:2;16020:3;15961:67;:::i;:::-;15954:74;;16037:93;16126:3;16037:93;:::i;:::-;16155:2;16150:3;16146:12;16139:19;;15798:366;;;:::o;16170:::-;16312:3;16333:67;16397:2;16392:3;16333:67;:::i;:::-;16326:74;;16409:93;16498:3;16409:93;:::i;:::-;16527:2;16522:3;16518:12;16511:19;;16170:366;;;:::o;16542:::-;16684:3;16705:67;16769:2;16764:3;16705:67;:::i;:::-;16698:74;;16781:93;16870:3;16781:93;:::i;:::-;16899:2;16894:3;16890:12;16883:19;;16542:366;;;:::o;16914:::-;17056:3;17077:67;17141:2;17136:3;17077:67;:::i;:::-;17070:74;;17153:93;17242:3;17153:93;:::i;:::-;17271:2;17266:3;17262:12;17255:19;;16914:366;;;:::o;17286:::-;17428:3;17449:67;17513:2;17508:3;17449:67;:::i;:::-;17442:74;;17525:93;17614:3;17525:93;:::i;:::-;17643:2;17638:3;17634:12;17627:19;;17286:366;;;:::o;17658:::-;17800:3;17821:67;17885:2;17880:3;17821:67;:::i;:::-;17814:74;;17897:93;17986:3;17897:93;:::i;:::-;18015:2;18010:3;18006:12;17999:19;;17658:366;;;:::o;18030:::-;18172:3;18193:67;18257:2;18252:3;18193:67;:::i;:::-;18186:74;;18269:93;18358:3;18269:93;:::i;:::-;18387:2;18382:3;18378:12;18371:19;;18030:366;;;:::o;18402:::-;18544:3;18565:67;18629:2;18624:3;18565:67;:::i;:::-;18558:74;;18641:93;18730:3;18641:93;:::i;:::-;18759:2;18754:3;18750:12;18743:19;;18402:366;;;:::o;18774:::-;18916:3;18937:67;19001:2;18996:3;18937:67;:::i;:::-;18930:74;;19013:93;19102:3;19013:93;:::i;:::-;19131:2;19126:3;19122:12;19115:19;;18774:366;;;:::o;19146:::-;19288:3;19309:67;19373:2;19368:3;19309:67;:::i;:::-;19302:74;;19385:93;19474:3;19385:93;:::i;:::-;19503:2;19498:3;19494:12;19487:19;;19146:366;;;:::o;19518:::-;19660:3;19681:67;19745:2;19740:3;19681:67;:::i;:::-;19674:74;;19757:93;19846:3;19757:93;:::i;:::-;19875:2;19870:3;19866:12;19859:19;;19518:366;;;:::o;19890:::-;20032:3;20053:67;20117:2;20112:3;20053:67;:::i;:::-;20046:74;;20129:93;20218:3;20129:93;:::i;:::-;20247:2;20242:3;20238:12;20231:19;;19890:366;;;:::o;20262:::-;20404:3;20425:67;20489:2;20484:3;20425:67;:::i;:::-;20418:74;;20501:93;20590:3;20501:93;:::i;:::-;20619:2;20614:3;20610:12;20603:19;;20262:366;;;:::o;20634:::-;20776:3;20797:67;20861:2;20856:3;20797:67;:::i;:::-;20790:74;;20873:93;20962:3;20873:93;:::i;:::-;20991:2;20986:3;20982:12;20975:19;;20634:366;;;:::o;21006:::-;21148:3;21169:67;21233:2;21228:3;21169:67;:::i;:::-;21162:74;;21245:93;21334:3;21245:93;:::i;:::-;21363:2;21358:3;21354:12;21347:19;;21006:366;;;:::o;21378:::-;21520:3;21541:67;21605:2;21600:3;21541:67;:::i;:::-;21534:74;;21617:93;21706:3;21617:93;:::i;:::-;21735:2;21730:3;21726:12;21719:19;;21378:366;;;:::o;21750:::-;21892:3;21913:67;21977:2;21972:3;21913:67;:::i;:::-;21906:74;;21989:93;22078:3;21989:93;:::i;:::-;22107:2;22102:3;22098:12;22091:19;;21750:366;;;:::o;22122:::-;22264:3;22285:67;22349:2;22344:3;22285:67;:::i;:::-;22278:74;;22361:93;22450:3;22361:93;:::i;:::-;22479:2;22474:3;22470:12;22463:19;;22122:366;;;:::o;22494:::-;22636:3;22657:67;22721:2;22716:3;22657:67;:::i;:::-;22650:74;;22733:93;22822:3;22733:93;:::i;:::-;22851:2;22846:3;22842:12;22835:19;;22494:366;;;:::o;22866:118::-;22953:24;22971:5;22953:24;:::i;:::-;22948:3;22941:37;22866:118;;:::o;22990:335::-;23152:3;23174:125;23295:3;23286:6;23174:125;:::i;:::-;23167:132;;23316:3;23309:10;;22990:335;;;;:::o;23331:435::-;23511:3;23533:95;23624:3;23615:6;23533:95;:::i;:::-;23526:102;;23645:95;23736:3;23727:6;23645:95;:::i;:::-;23638:102;;23757:3;23750:10;;23331:435;;;;;:::o;23772:222::-;23865:4;23903:2;23892:9;23888:18;23880:26;;23916:71;23984:1;23973:9;23969:17;23960:6;23916:71;:::i;:::-;23772:222;;;;:::o;24000:640::-;24195:4;24233:3;24222:9;24218:19;24210:27;;24247:71;24315:1;24304:9;24300:17;24291:6;24247:71;:::i;:::-;24328:72;24396:2;24385:9;24381:18;24372:6;24328:72;:::i;:::-;24410;24478:2;24467:9;24463:18;24454:6;24410:72;:::i;:::-;24529:9;24523:4;24519:20;24514:2;24503:9;24499:18;24492:48;24557:76;24628:4;24619:6;24557:76;:::i;:::-;24549:84;;24000:640;;;;;;;:::o;24646:332::-;24767:4;24805:2;24794:9;24790:18;24782:26;;24818:71;24886:1;24875:9;24871:17;24862:6;24818:71;:::i;:::-;24899:72;24967:2;24956:9;24952:18;24943:6;24899:72;:::i;:::-;24646:332;;;;;:::o;24984:210::-;25071:4;25109:2;25098:9;25094:18;25086:26;;25122:65;25184:1;25173:9;25169:17;25160:6;25122:65;:::i;:::-;24984:210;;;;:::o;25200:313::-;25313:4;25351:2;25340:9;25336:18;25328:26;;25400:9;25394:4;25390:20;25386:1;25375:9;25371:17;25364:47;25428:78;25501:4;25492:6;25428:78;:::i;:::-;25420:86;;25200:313;;;;:::o;25519:419::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:131;25926:4;25800:131;:::i;:::-;25792:139;;25519:419;;;:::o;25944:::-;26110:4;26148:2;26137:9;26133:18;26125:26;;26197:9;26191:4;26187:20;26183:1;26172:9;26168:17;26161:47;26225:131;26351:4;26225:131;:::i;:::-;26217:139;;25944:419;;;:::o;26369:::-;26535:4;26573:2;26562:9;26558:18;26550:26;;26622:9;26616:4;26612:20;26608:1;26597:9;26593:17;26586:47;26650:131;26776:4;26650:131;:::i;:::-;26642:139;;26369:419;;;:::o;26794:::-;26960:4;26998:2;26987:9;26983:18;26975:26;;27047:9;27041:4;27037:20;27033:1;27022:9;27018:17;27011:47;27075:131;27201:4;27075:131;:::i;:::-;27067:139;;26794:419;;;:::o;27219:::-;27385:4;27423:2;27412:9;27408:18;27400:26;;27472:9;27466:4;27462:20;27458:1;27447:9;27443:17;27436:47;27500:131;27626:4;27500:131;:::i;:::-;27492:139;;27219:419;;;:::o;27644:::-;27810:4;27848:2;27837:9;27833:18;27825:26;;27897:9;27891:4;27887:20;27883:1;27872:9;27868:17;27861:47;27925:131;28051:4;27925:131;:::i;:::-;27917:139;;27644:419;;;:::o;28069:::-;28235:4;28273:2;28262:9;28258:18;28250:26;;28322:9;28316:4;28312:20;28308:1;28297:9;28293:17;28286:47;28350:131;28476:4;28350:131;:::i;:::-;28342:139;;28069:419;;;:::o;28494:::-;28660:4;28698:2;28687:9;28683:18;28675:26;;28747:9;28741:4;28737:20;28733:1;28722:9;28718:17;28711:47;28775:131;28901:4;28775:131;:::i;:::-;28767:139;;28494:419;;;:::o;28919:::-;29085:4;29123:2;29112:9;29108:18;29100:26;;29172:9;29166:4;29162:20;29158:1;29147:9;29143:17;29136:47;29200:131;29326:4;29200:131;:::i;:::-;29192:139;;28919:419;;;:::o;29344:::-;29510:4;29548:2;29537:9;29533:18;29525:26;;29597:9;29591:4;29587:20;29583:1;29572:9;29568:17;29561:47;29625:131;29751:4;29625:131;:::i;:::-;29617:139;;29344:419;;;:::o;29769:::-;29935:4;29973:2;29962:9;29958:18;29950:26;;30022:9;30016:4;30012:20;30008:1;29997:9;29993:17;29986:47;30050:131;30176:4;30050:131;:::i;:::-;30042:139;;29769:419;;;:::o;30194:::-;30360:4;30398:2;30387:9;30383:18;30375:26;;30447:9;30441:4;30437:20;30433:1;30422:9;30418:17;30411:47;30475:131;30601:4;30475:131;:::i;:::-;30467:139;;30194:419;;;:::o;30619:::-;30785:4;30823:2;30812:9;30808:18;30800:26;;30872:9;30866:4;30862:20;30858:1;30847:9;30843:17;30836:47;30900:131;31026:4;30900:131;:::i;:::-;30892:139;;30619:419;;;:::o;31044:::-;31210:4;31248:2;31237:9;31233:18;31225:26;;31297:9;31291:4;31287:20;31283:1;31272:9;31268:17;31261:47;31325:131;31451:4;31325:131;:::i;:::-;31317:139;;31044:419;;;:::o;31469:::-;31635:4;31673:2;31662:9;31658:18;31650:26;;31722:9;31716:4;31712:20;31708:1;31697:9;31693:17;31686:47;31750:131;31876:4;31750:131;:::i;:::-;31742:139;;31469:419;;;:::o;31894:::-;32060:4;32098:2;32087:9;32083:18;32075:26;;32147:9;32141:4;32137:20;32133:1;32122:9;32118:17;32111:47;32175:131;32301:4;32175:131;:::i;:::-;32167:139;;31894:419;;;:::o;32319:::-;32485:4;32523:2;32512:9;32508:18;32500:26;;32572:9;32566:4;32562:20;32558:1;32547:9;32543:17;32536:47;32600:131;32726:4;32600:131;:::i;:::-;32592:139;;32319:419;;;:::o;32744:::-;32910:4;32948:2;32937:9;32933:18;32925:26;;32997:9;32991:4;32987:20;32983:1;32972:9;32968:17;32961:47;33025:131;33151:4;33025:131;:::i;:::-;33017:139;;32744:419;;;:::o;33169:::-;33335:4;33373:2;33362:9;33358:18;33350:26;;33422:9;33416:4;33412:20;33408:1;33397:9;33393:17;33386:47;33450:131;33576:4;33450:131;:::i;:::-;33442:139;;33169:419;;;:::o;33594:::-;33760:4;33798:2;33787:9;33783:18;33775:26;;33847:9;33841:4;33837:20;33833:1;33822:9;33818:17;33811:47;33875:131;34001:4;33875:131;:::i;:::-;33867:139;;33594:419;;;:::o;34019:::-;34185:4;34223:2;34212:9;34208:18;34200:26;;34272:9;34266:4;34262:20;34258:1;34247:9;34243:17;34236:47;34300:131;34426:4;34300:131;:::i;:::-;34292:139;;34019:419;;;:::o;34444:::-;34610:4;34648:2;34637:9;34633:18;34625:26;;34697:9;34691:4;34687:20;34683:1;34672:9;34668:17;34661:47;34725:131;34851:4;34725:131;:::i;:::-;34717:139;;34444:419;;;:::o;34869:::-;35035:4;35073:2;35062:9;35058:18;35050:26;;35122:9;35116:4;35112:20;35108:1;35097:9;35093:17;35086:47;35150:131;35276:4;35150:131;:::i;:::-;35142:139;;34869:419;;;:::o;35294:::-;35460:4;35498:2;35487:9;35483:18;35475:26;;35547:9;35541:4;35537:20;35533:1;35522:9;35518:17;35511:47;35575:131;35701:4;35575:131;:::i;:::-;35567:139;;35294:419;;;:::o;35719:::-;35885:4;35923:2;35912:9;35908:18;35900:26;;35972:9;35966:4;35962:20;35958:1;35947:9;35943:17;35936:47;36000:131;36126:4;36000:131;:::i;:::-;35992:139;;35719:419;;;:::o;36144:::-;36310:4;36348:2;36337:9;36333:18;36325:26;;36397:9;36391:4;36387:20;36383:1;36372:9;36368:17;36361:47;36425:131;36551:4;36425:131;:::i;:::-;36417:139;;36144:419;;;:::o;36569:::-;36735:4;36773:2;36762:9;36758:18;36750:26;;36822:9;36816:4;36812:20;36808:1;36797:9;36793:17;36786:47;36850:131;36976:4;36850:131;:::i;:::-;36842:139;;36569:419;;;:::o;36994:::-;37160:4;37198:2;37187:9;37183:18;37175:26;;37247:9;37241:4;37237:20;37233:1;37222:9;37218:17;37211:47;37275:131;37401:4;37275:131;:::i;:::-;37267:139;;36994:419;;;:::o;37419:::-;37585:4;37623:2;37612:9;37608:18;37600:26;;37672:9;37666:4;37662:20;37658:1;37647:9;37643:17;37636:47;37700:131;37826:4;37700:131;:::i;:::-;37692:139;;37419:419;;;:::o;37844:::-;38010:4;38048:2;38037:9;38033:18;38025:26;;38097:9;38091:4;38087:20;38083:1;38072:9;38068:17;38061:47;38125:131;38251:4;38125:131;:::i;:::-;38117:139;;37844:419;;;:::o;38269:::-;38435:4;38473:2;38462:9;38458:18;38450:26;;38522:9;38516:4;38512:20;38508:1;38497:9;38493:17;38486:47;38550:131;38676:4;38550:131;:::i;:::-;38542:139;;38269:419;;;:::o;38694:222::-;38787:4;38825:2;38814:9;38810:18;38802:26;;38838:71;38906:1;38895:9;38891:17;38882:6;38838:71;:::i;:::-;38694:222;;;;:::o;38922:332::-;39043:4;39081:2;39070:9;39066:18;39058:26;;39094:71;39162:1;39151:9;39147:17;39138:6;39094:71;:::i;:::-;39175:72;39243:2;39232:9;39228:18;39219:6;39175:72;:::i;:::-;38922:332;;;;;:::o;39260:129::-;39294:6;39321:20;;:::i;:::-;39311:30;;39350:33;39378:4;39370:6;39350:33;:::i;:::-;39260:129;;;:::o;39395:75::-;39428:6;39461:2;39455:9;39445:19;;39395:75;:::o;39476:311::-;39553:4;39643:18;39635:6;39632:30;39629:56;;;39665:18;;:::i;:::-;39629:56;39715:4;39707:6;39703:17;39695:25;;39775:4;39769;39765:15;39757:23;;39476:311;;;:::o;39793:307::-;39854:4;39944:18;39936:6;39933:30;39930:56;;;39966:18;;:::i;:::-;39930:56;40004:29;40026:6;40004:29;:::i;:::-;39996:37;;40088:4;40082;40078:15;40070:23;;39793:307;;;:::o;40106:308::-;40168:4;40258:18;40250:6;40247:30;40244:56;;;40280:18;;:::i;:::-;40244:56;40318:29;40340:6;40318:29;:::i;:::-;40310:37;;40402:4;40396;40392:15;40384:23;;40106:308;;;:::o;40420:132::-;40487:4;40510:3;40502:11;;40540:4;40535:3;40531:14;40523:22;;40420:132;;;:::o;40558:114::-;40625:6;40659:5;40653:12;40643:22;;40558:114;;;:::o;40678:98::-;40729:6;40763:5;40757:12;40747:22;;40678:98;;;:::o;40782:99::-;40834:6;40868:5;40862:12;40852:22;;40782:99;;;:::o;40887:113::-;40957:4;40989;40984:3;40980:14;40972:22;;40887:113;;;:::o;41006:163::-;41123:11;41160:3;41145:18;;41006:163;;;;:::o;41175:168::-;41258:11;41292:6;41287:3;41280:19;41332:4;41327:3;41323:14;41308:29;;41175:168;;;;:::o;41349:169::-;41433:11;41467:6;41462:3;41455:19;41507:4;41502:3;41498:14;41483:29;;41349:169;;;;:::o;41524:148::-;41626:11;41663:3;41648:18;;41524:148;;;;:::o;41678:305::-;41718:3;41737:20;41755:1;41737:20;:::i;:::-;41732:25;;41771:20;41789:1;41771:20;:::i;:::-;41766:25;;41925:1;41857:66;41853:74;41850:1;41847:81;41844:107;;;41931:18;;:::i;:::-;41844:107;41975:1;41972;41968:9;41961:16;;41678:305;;;;:::o;41989:185::-;42029:1;42046:20;42064:1;42046:20;:::i;:::-;42041:25;;42080:20;42098:1;42080:20;:::i;:::-;42075:25;;42119:1;42109:35;;42124:18;;:::i;:::-;42109:35;42166:1;42163;42159:9;42154:14;;41989:185;;;;:::o;42180:348::-;42220:7;42243:20;42261:1;42243:20;:::i;:::-;42238:25;;42277:20;42295:1;42277:20;:::i;:::-;42272:25;;42465:1;42397:66;42393:74;42390:1;42387:81;42382:1;42375:9;42368:17;42364:105;42361:131;;;42472:18;;:::i;:::-;42361:131;42520:1;42517;42513:9;42502:20;;42180:348;;;;:::o;42534:191::-;42574:4;42594:20;42612:1;42594:20;:::i;:::-;42589:25;;42628:20;42646:1;42628:20;:::i;:::-;42623:25;;42667:1;42664;42661:8;42658:34;;;42672:18;;:::i;:::-;42658:34;42717:1;42714;42710:9;42702:17;;42534:191;;;;:::o;42731:96::-;42768:7;42797:24;42815:5;42797:24;:::i;:::-;42786:35;;42731:96;;;:::o;42833:90::-;42867:7;42910:5;42903:13;42896:21;42885:32;;42833:90;;;:::o;42929:149::-;42965:7;43005:66;42998:5;42994:78;42983:89;;42929:149;;;:::o;43084:126::-;43121:7;43161:42;43154:5;43150:54;43139:65;;43084:126;;;:::o;43216:77::-;43253:7;43282:5;43271:16;;43216:77;;;:::o;43299:154::-;43383:6;43378:3;43373;43360:30;43445:1;43436:6;43431:3;43427:16;43420:27;43299:154;;;:::o;43459:307::-;43527:1;43537:113;43551:6;43548:1;43545:13;43537:113;;;43636:1;43631:3;43627:11;43621:18;43617:1;43612:3;43608:11;43601:39;43573:2;43570:1;43566:10;43561:15;;43537:113;;;43668:6;43665:1;43662:13;43659:101;;;43748:1;43739:6;43734:3;43730:16;43723:27;43659:101;43508:258;43459:307;;;:::o;43772:320::-;43816:6;43853:1;43847:4;43843:12;43833:22;;43900:1;43894:4;43890:12;43921:18;43911:81;;43977:4;43969:6;43965:17;43955:27;;43911:81;44039:2;44031:6;44028:14;44008:18;44005:38;44002:84;;;44058:18;;:::i;:::-;44002:84;43823:269;43772:320;;;:::o;44098:281::-;44181:27;44203:4;44181:27;:::i;:::-;44173:6;44169:40;44311:6;44299:10;44296:22;44275:18;44263:10;44260:34;44257:62;44254:88;;;44322:18;;:::i;:::-;44254:88;44362:10;44358:2;44351:22;44141:238;44098:281;;:::o;44385:233::-;44424:3;44447:24;44465:5;44447:24;:::i;:::-;44438:33;;44493:66;44486:5;44483:77;44480:103;;;44563:18;;:::i;:::-;44480:103;44610:1;44603:5;44599:13;44592:20;;44385:233;;;:::o;44624:176::-;44656:1;44673:20;44691:1;44673:20;:::i;:::-;44668:25;;44707:20;44725:1;44707:20;:::i;:::-;44702:25;;44746:1;44736:35;;44751:18;;:::i;:::-;44736:35;44792:1;44789;44785:9;44780:14;;44624:176;;;;:::o;44806:180::-;44854:77;44851:1;44844:88;44951:4;44948:1;44941:15;44975:4;44972:1;44965:15;44992:180;45040:77;45037:1;45030:88;45137:4;45134:1;45127:15;45161:4;45158:1;45151:15;45178:180;45226:77;45223:1;45216:88;45323:4;45320:1;45313:15;45347:4;45344:1;45337:15;45364:180;45412:77;45409:1;45402:88;45509:4;45506:1;45499:15;45533:4;45530:1;45523:15;45550:180;45598:77;45595:1;45588:88;45695:4;45692:1;45685:15;45719:4;45716:1;45709:15;45736:180;45784:77;45781:1;45774:88;45881:4;45878:1;45871:15;45905:4;45902:1;45895:15;45922:117;46031:1;46028;46021:12;46045:117;46154:1;46151;46144:12;46168:117;46277:1;46274;46267:12;46291:117;46400:1;46397;46390:12;46414:117;46523:1;46520;46513:12;46537:102;46578:6;46629:2;46625:7;46620:2;46613:5;46609:14;46605:28;46595:38;;46537:102;;;:::o;46645:170::-;46785:22;46781:1;46773:6;46769:14;46762:46;46645:170;:::o;46821:239::-;46961:34;46957:1;46949:6;46945:14;46938:58;47030:22;47025:2;47017:6;47013:15;47006:47;46821:239;:::o;47066:229::-;47206:34;47202:1;47194:6;47190:14;47183:58;47275:12;47270:2;47262:6;47258:15;47251:37;47066:229;:::o;47301:238::-;47441:34;47437:1;47429:6;47425:14;47418:58;47510:21;47505:2;47497:6;47493:15;47486:46;47301:238;:::o;47545:230::-;47685:34;47681:1;47673:6;47669:14;47662:58;47754:13;47749:2;47741:6;47737:15;47730:38;47545:230;:::o;47781:237::-;47921:34;47917:1;47909:6;47905:14;47898:58;47990:20;47985:2;47977:6;47973:15;47966:45;47781:237;:::o;48024:225::-;48164:34;48160:1;48152:6;48148:14;48141:58;48233:8;48228:2;48220:6;48216:15;48209:33;48024:225;:::o;48255:224::-;48395:34;48391:1;48383:6;48379:14;48372:58;48464:7;48459:2;48451:6;48447:15;48440:32;48255:224;:::o;48485:178::-;48625:30;48621:1;48613:6;48609:14;48602:54;48485:178;:::o;48669:232::-;48809:34;48805:1;48797:6;48793:14;48786:58;48878:15;48873:2;48865:6;48861:15;48854:40;48669:232;:::o;48907:230::-;49047:34;49043:1;49035:6;49031:14;49024:58;49116:13;49111:2;49103:6;49099:15;49092:38;48907:230;:::o;49143:223::-;49283:34;49279:1;49271:6;49267:14;49260:58;49352:6;49347:2;49339:6;49335:15;49328:31;49143:223;:::o;49372:175::-;49512:27;49508:1;49500:6;49496:14;49489:51;49372:175;:::o;49553:231::-;49693:34;49689:1;49681:6;49677:14;49670:58;49762:14;49757:2;49749:6;49745:15;49738:39;49553:231;:::o;49790:166::-;49930:18;49926:1;49918:6;49914:14;49907:42;49790:166;:::o;49962:232::-;50102:34;50098:1;50090:6;50086:14;50079:58;50171:15;50166:2;50158:6;50154:15;50147:40;49962:232;:::o;50200:243::-;50340:34;50336:1;50328:6;50324:14;50317:58;50409:26;50404:2;50396:6;50392:15;50385:51;50200:243;:::o;50449:229::-;50589:34;50585:1;50577:6;50573:14;50566:58;50658:12;50653:2;50645:6;50641:15;50634:37;50449:229;:::o;50684:228::-;50824:34;50820:1;50812:6;50808:14;50801:58;50893:11;50888:2;50880:6;50876:15;50869:36;50684:228;:::o;50918:230::-;51058:34;51054:1;51046:6;51042:14;51035:58;51127:13;51122:2;51114:6;51110:15;51103:38;50918:230;:::o;51154:182::-;51294:34;51290:1;51282:6;51278:14;51271:58;51154:182;:::o;51342:231::-;51482:34;51478:1;51470:6;51466:14;51459:58;51551:14;51546:2;51538:6;51534:15;51527:39;51342:231;:::o;51579:182::-;51719:34;51715:1;51707:6;51703:14;51696:58;51579:182;:::o;51767:234::-;51907:34;51903:1;51895:6;51891:14;51884:58;51976:17;51971:2;51963:6;51959:15;51952:42;51767:234;:::o;52007:220::-;52147:34;52143:1;52135:6;52131:14;52124:58;52216:3;52211:2;52203:6;52199:15;52192:28;52007:220;:::o;52233:236::-;52373:34;52369:1;52361:6;52357:14;52350:58;52442:19;52437:2;52429:6;52425:15;52418:44;52233:236;:::o;52475:::-;52615:34;52611:1;52603:6;52599:14;52592:58;52684:19;52679:2;52671:6;52667:15;52660:44;52475:236;:::o;52717:242::-;52857:34;52853:1;52845:6;52841:14;52834:58;52926:25;52921:2;52913:6;52909:15;52902:50;52717:242;:::o;52965:231::-;53105:34;53101:1;53093:6;53089:14;53082:58;53174:14;53169:2;53161:6;53157:15;53150:39;52965:231;:::o;53202:176::-;53342:28;53338:1;53330:6;53326:14;53319:52;53202:176;:::o;53384:240::-;53524:34;53520:1;53512:6;53508:14;53501:58;53593:23;53588:2;53580:6;53576:15;53569:48;53384:240;:::o;53630:122::-;53703:24;53721:5;53703:24;:::i;:::-;53696:5;53693:35;53683:63;;53742:1;53739;53732:12;53683:63;53630:122;:::o;53758:116::-;53828:21;53843:5;53828:21;:::i;:::-;53821:5;53818:32;53808:60;;53864:1;53861;53854:12;53808:60;53758:116;:::o;53880:120::-;53952:23;53969:5;53952:23;:::i;:::-;53945:5;53942:34;53932:62;;53990:1;53987;53980:12;53932:62;53880:120;:::o;54006:122::-;54079:24;54097:5;54079:24;:::i;:::-;54072:5;54069:35;54059:63;;54118:1;54115;54108:12;54059:63;54006:122;:::o

Swarm Source

ipfs://4938636a473ff8ed01b1f23e520f8dbae805e58956987f9b00048c4eeb4b66f1
Loading