ETH Price: $3,010.75 (+4.51%)
Gas: 2 Gwei

FLOWERS (SAY IT WITH FLOWERS)
 

Overview

TokenID

13

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SayItWithFlowers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Address.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/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



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



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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/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 tokenId);

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



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/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/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: contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;









/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

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

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

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert("ERC721A: unable to get token of owner by index");
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: number minted query for the zero address"
        );
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @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 overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 {
        _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 override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: 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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(quantity != 0, "ERC721A: quantity must be greater than 0");

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

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

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe) {
                    require(
                        _checkOnERC721Received(
                            address(0),
                            to,
                            updatedIndex,
                            _data
                        ),
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                }

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

        require(
            isApprovedOrOwner,
            "ERC721A: transfer caller is not owner nor approved"
        );

        require(
            prevOwnership.addr == from,
            "ERC721A: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

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

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership
                        .startTimestamp;
                }
            }
        }

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

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: @openzeppelin/contracts/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() {
        _setOwner(_msgSender());
    }

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

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

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

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

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

// File: contracts/TCO/SayItWithFlowers.sol


pragma solidity ^0.8.0;




contract SayItWithFlowers is ERC721A, Ownable {
    uint256 public MAX_SUPPLY = 1430;
    uint256 public constant FREE_SUPPLY = 214;
    uint256 public PRICE = 0.0043 ether;

    bool public isSaleActive = false;

    string private baseURI = "";

    mapping(address => bool) public freeMints;
    uint256 public freeMintCount = 0;

    constructor() ERC721A("FLOWERS", "SAY IT WITH FLOWERS") {}

    function mint(address _address) external payable {
        require(msg.sender == tx.origin, "No contracts allowed");
        require(1 + totalSupply() <= MAX_SUPPLY, "Not enough supply");
        require(isSaleActive, "Sale not active");
        require(msg.value >= PRICE * 1, "Not enough ETH");
        _safeMint(_address, 1);
    }

    function freeMint(address _address) external {
        require(msg.sender == tx.origin, "No contracts allowed");
        require(1 + totalSupply() <= MAX_SUPPLY, "Not enough supply");
        require(1 + totalSupply() <= FREE_SUPPLY, "Not enough free supply");
        require(!freeMints[_address], "Address has claimed free mint");
        require(isSaleActive, "Sale not active");
        freeMintCount += 1;
        freeMints[_address] = true;
        _safeMint(_address, 1);
    }

    function setBaseURI(string calldata URI) external onlyOwner {
        baseURI = URI;
    }

    function setSaleStatus() external onlyOwner {
        isSaleActive = !isSaleActive;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function burnSupply() external onlyOwner {
        MAX_SUPPLY = totalSupply();
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        return string(abi.encodePacked(baseURI, Strings.toString(tokenId)));
    }

    function tokensOfOwner(address owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMints","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":[],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052610596600855660f46d3c488c0006009556000600a60006101000a81548160ff02191690831515021790555060405180602001604052806000815250600b908051906020019062000057929190620001ff565b506000600d553480156200006a57600080fd5b506040518060400160405280600781526020017f464c4f57455253000000000000000000000000000000000000000000000000008152506040518060400160405280601381526020017f534159204954205749544820464c4f57455253000000000000000000000000008152508160019080519060200190620000ef929190620001ff565b50806002908051906020019062000108929190620001ff565b5050506200012b6200011f6200013160201b60201c565b6200013960201b60201c565b62000314565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020d90620002af565b90600052602060002090601f0160209004810192826200023157600085556200027d565b82601f106200024c57805160ff19168380011785556200027d565b828001600101855582156200027d579182015b828111156200027c5782518255916020019190600101906200025f565b5b5090506200028c919062000290565b5090565b5b80821115620002ab57600081600090555060010162000291565b5090565b60006002820490506001821680620002c857607f821691505b60208210811415620002df57620002de620002e5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61457780620003246000396000f3fe6080604052600436106101ee5760003560e01c80636d41d4fb1161010d578063a22cb465116100a0578063dc33e6811161006f578063dc33e681146106de578063e55f58bb1461071b578063e985e9c514610746578063f2fde38b14610783578063fa07ce1d146107ac576101ee565b8063a22cb46514610638578063b03e647814610661578063b88d4fde14610678578063c87b56dd146106a1576101ee565b80638d859f3e116100dc5780638d859f3e1461058c5780638da5cb5b146105b757806395d89b41146105e25780639858cf191461060d576101ee565b80636d41d4fb146104be57806370a08231146104fb578063715018a6146105385780638462151c1461054f576101ee565b80633ccfd60b1161018557806355f804b31161015457806355f804b314610411578063564566a81461043a5780636352211e146104655780636a627842146104a2576101ee565b80633ccfd60b1461037d57806342842e0e146103945780634f6ccce7146103bd578063502b33af146103fa576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632f745c591461031557806332cb6b0c14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f7d565b6107d5565b604051610227919061363d565b60405180910390f35b34801561023c57600080fd5b5061024561091f565b6040516102529190613658565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613024565b6109b1565b60405161028f91906135b4565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612f3d565b610a36565b005b3480156102cd57600080fd5b506102d6610b4f565b6040516102e3919061399a565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612e27565b610b58565b005b34801561032157600080fd5b5061033c60048036038101906103379190612f3d565b610b68565b604051610349919061399a565b60405180910390f35b34801561035e57600080fd5b50610367610d5a565b604051610374919061399a565b60405180910390f35b34801561038957600080fd5b50610392610d60565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190612e27565b610e25565b005b3480156103c957600080fd5b506103e460048036038101906103df9190613024565b610e45565b6040516103f1919061399a565b60405180910390f35b34801561040657600080fd5b5061040f610e98565b005b34801561041d57600080fd5b5061043860048036038101906104339190612fd7565b610f40565b005b34801561044657600080fd5b5061044f610fd2565b60405161045c919061363d565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613024565b610fe5565b60405161049991906135b4565b60405180910390f35b6104bc60048036038101906104b79190612dba565b610ffb565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190612dba565b61116f565b6040516104f2919061363d565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190612dba565b61118f565b60405161052f919061399a565b60405180910390f35b34801561054457600080fd5b5061054d611278565b005b34801561055b57600080fd5b5061057660048036038101906105719190612dba565b611300565b604051610583919061361b565b60405180910390f35b34801561059857600080fd5b506105a16113ae565b6040516105ae919061399a565b60405180910390f35b3480156105c357600080fd5b506105cc6113b4565b6040516105d991906135b4565b60405180910390f35b3480156105ee57600080fd5b506105f76113de565b6040516106049190613658565b60405180910390f35b34801561061957600080fd5b50610622611470565b60405161062f919061399a565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612efd565b611475565b005b34801561066d57600080fd5b506106766115f6565b005b34801561068457600080fd5b5061069f600480360381019061069a9190612e7a565b611682565b005b3480156106ad57600080fd5b506106c860048036038101906106c39190613024565b6116de565b6040516106d59190613658565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190612dba565b611712565b604051610712919061399a565b60405180910390f35b34801561072757600080fd5b50610730611724565b60405161073d919061399a565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190612de7565b61172a565b60405161077a919061363d565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a59190612dba565b6117be565b005b3480156107b857600080fd5b506107d360048036038101906107ce9190612dba565b6118b6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610918575061091782611b2f565b5b9050919050565b60606001805461092e90613c67565b80601f016020809104026020016040519081016040528092919081815260200182805461095a90613c67565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109bc82611b99565b6109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f29061397a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4182610fe5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa99061387a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad1611ba6565b73ffffffffffffffffffffffffffffffffffffffff161480610b005750610aff81610afa611ba6565b61172a565b5b610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b369061377a565b60405180910390fd5b610b4a838383611bae565b505050565b60008054905090565b610b63838383611c60565b505050565b6000610b738361118f565b8210610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab9061367a565b60405180910390fd5b6000610bbe610b4f565b905060008060005b83811015610d18576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cb857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0a5786841415610d01578195505050505050610d54565b83806001019450505b508080600101915050610bc6565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061391a565b60405180910390fd5b92915050565b60085481565b610d68611ba6565b73ffffffffffffffffffffffffffffffffffffffff16610d866113b4565b73ffffffffffffffffffffffffffffffffffffffff1614610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd39061381a565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e22573d6000803e3d6000fd5b50565b610e4083838360405180602001604052806000815250611682565b505050565b6000610e4f610b4f565b8210610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e87906136fa565b60405180910390fd5b819050919050565b610ea0611ba6565b73ffffffffffffffffffffffffffffffffffffffff16610ebe6113b4565b73ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b9061381a565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b610f48611ba6565b73ffffffffffffffffffffffffffffffffffffffff16610f666113b4565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb39061381a565b60405180910390fd5b8181600b9190610fcd929190612bae565b505050565b600a60009054906101000a900460ff1681565b6000610ff0826121a0565b600001519050919050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611060906138fa565b60405180910390fd5b600854611074610b4f565b60016110809190613a9c565b11156110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b89061369a565b60405180910390fd5b600a60009054906101000a900460ff16611110576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111079061375a565b60405180910390fd5b600160095461111f9190613b23565b341015611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906137da565b60405180910390fd5b61116c81600161233a565b50565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061379a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611280611ba6565b73ffffffffffffffffffffffffffffffffffffffff1661129e6113b4565b73ffffffffffffffffffffffffffffffffffffffff16146112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb9061381a565b60405180910390fd5b6112fe6000612358565b565b6060600061130d8361118f565b905060008167ffffffffffffffff81111561132b5761132a613e00565b5b6040519080825280602002602001820160405280156113595781602001602082028036833780820191505090505b50905060005b828110156113a3576113718582610b68565b82828151811061138457611383613dd1565b5b602002602001018181525050808061139b90613cca565b91505061135f565b508092505050919050565b60095481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546113ed90613c67565b80601f016020809104026020016040519081016040528092919081815260200182805461141990613c67565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b5050505050905090565b60d681565b61147d611ba6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e29061383a565b60405180910390fd5b80600660006114f8611ba6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a5611ba6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115ea919061363d565b60405180910390a35050565b6115fe611ba6565b73ffffffffffffffffffffffffffffffffffffffff1661161c6113b4565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699061381a565b60405180910390fd5b61167a610b4f565b600881905550565b61168d848484611c60565b6116998484848461241e565b6116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf9061389a565b60405180910390fd5b50505050565b6060600b6116eb836125b5565b6040516020016116fc929190613590565b6040516020818303038152906040529050919050565b600061171d82612716565b9050919050565b600d5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117c6611ba6565b73ffffffffffffffffffffffffffffffffffffffff166117e46113b4565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118319061381a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a1906136ba565b60405180910390fd5b6118b381612358565b50565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906138fa565b60405180910390fd5b60085461192f610b4f565b600161193b9190613a9c565b111561197c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119739061369a565b60405180910390fd5b60d6611986610b4f565b60016119929190613a9c565b11156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca9061395a565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a57906137fa565b60405180910390fd5b600a60009054906101000a900460ff16611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa69061375a565b60405180910390fd5b6001600d6000828254611ac29190613a9c565b925050819055506001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b2c81600161233a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611c6b826121a0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c92611ba6565b73ffffffffffffffffffffffffffffffffffffffff161480611cee5750611cb7611ba6565b73ffffffffffffffffffffffffffffffffffffffff16611cd6846109b1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d0a5750611d098260000151611d04611ba6565b61172a565b5b905080611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d439061385a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db5906137ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061371a565b60405180910390fd5b611e3b85858560016127ff565b611e4b6000848460000151611bae565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121305761208f81611b99565b1561212f5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121998585856001612805565b5050505050565b6121a8612c34565b6121b182611b99565b6121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e7906136da565b60405180910390fd5b60008290505b600081106122f9576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122ea578092505050612335565b508080600190039150506121f6565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061393a565b60405180910390fd5b919050565b61235482826040518060200160405280600081525061280b565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061243f8473ffffffffffffffffffffffffffffffffffffffff1661281d565b156125a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612468611ba6565b8786866040518563ffffffff1660e01b815260040161248a94939291906135cf565b602060405180830381600087803b1580156124a457600080fd5b505af19250505080156124d557506040513d601f19601f820116820180604052508101906124d29190612faa565b60015b612558573d8060008114612505576040519150601f19603f3d011682016040523d82523d6000602084013e61250a565b606091505b50600081511415612550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125479061389a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125ad565b600190505b949350505050565b606060008214156125fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612711565b600082905060005b6000821461262f57808061261890613cca565b915050600a826126289190613af2565b9150612605565b60008167ffffffffffffffff81111561264b5761264a613e00565b5b6040519080825280601f01601f19166020018201604052801561267d5781602001600182028036833780820191505090505b5090505b6000851461270a576001826126969190613b7d565b9150600a856126a59190613d13565b60306126b19190613a9c565b60f81b8183815181106126c7576126c6613dd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127039190613af2565b9450612681565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e9061373a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b6128188383836001612830565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d906138ba565b60405180910390fd5b60008414156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906138da565b60405180910390fd5b6128f760008683876127ff565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b9157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b7c57612b3c600088848861241e565b612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061389a565b60405180910390fd5b5b81806001019250508080600101915050612ac5565b508060008190555050612ba76000868387612805565b5050505050565b828054612bba90613c67565b90600052602060002090601f016020900481019282612bdc5760008555612c23565b82601f10612bf557803560ff1916838001178555612c23565b82800160010185558215612c23579182015b82811115612c22578235825591602001919060010190612c07565b5b509050612c309190612c6e565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c87576000816000905550600101612c6f565b5090565b6000612c9e612c99846139da565b6139b5565b905082815260208101848484011115612cba57612cb9613e3e565b5b612cc5848285613c25565b509392505050565b600081359050612cdc816144e5565b92915050565b600081359050612cf1816144fc565b92915050565b600081359050612d0681614513565b92915050565b600081519050612d1b81614513565b92915050565b600082601f830112612d3657612d35613e34565b5b8135612d46848260208601612c8b565b91505092915050565b60008083601f840112612d6557612d64613e34565b5b8235905067ffffffffffffffff811115612d8257612d81613e2f565b5b602083019150836001820283011115612d9e57612d9d613e39565b5b9250929050565b600081359050612db48161452a565b92915050565b600060208284031215612dd057612dcf613e48565b5b6000612dde84828501612ccd565b91505092915050565b60008060408385031215612dfe57612dfd613e48565b5b6000612e0c85828601612ccd565b9250506020612e1d85828601612ccd565b9150509250929050565b600080600060608486031215612e4057612e3f613e48565b5b6000612e4e86828701612ccd565b9350506020612e5f86828701612ccd565b9250506040612e7086828701612da5565b9150509250925092565b60008060008060808587031215612e9457612e93613e48565b5b6000612ea287828801612ccd565b9450506020612eb387828801612ccd565b9350506040612ec487828801612da5565b925050606085013567ffffffffffffffff811115612ee557612ee4613e43565b5b612ef187828801612d21565b91505092959194509250565b60008060408385031215612f1457612f13613e48565b5b6000612f2285828601612ccd565b9250506020612f3385828601612ce2565b9150509250929050565b60008060408385031215612f5457612f53613e48565b5b6000612f6285828601612ccd565b9250506020612f7385828601612da5565b9150509250929050565b600060208284031215612f9357612f92613e48565b5b6000612fa184828501612cf7565b91505092915050565b600060208284031215612fc057612fbf613e48565b5b6000612fce84828501612d0c565b91505092915050565b60008060208385031215612fee57612fed613e48565b5b600083013567ffffffffffffffff81111561300c5761300b613e43565b5b61301885828601612d4f565b92509250509250929050565b60006020828403121561303a57613039613e48565b5b600061304884828501612da5565b91505092915050565b600061305d8383613572565b60208301905092915050565b61307281613bb1565b82525050565b600061308382613a30565b61308d8185613a5e565b935061309883613a0b565b8060005b838110156130c95781516130b08882613051565b97506130bb83613a51565b92505060018101905061309c565b5085935050505092915050565b6130df81613bc3565b82525050565b60006130f082613a3b565b6130fa8185613a6f565b935061310a818560208601613c34565b61311381613e4d565b840191505092915050565b600061312982613a46565b6131338185613a80565b9350613143818560208601613c34565b61314c81613e4d565b840191505092915050565b600061316282613a46565b61316c8185613a91565b935061317c818560208601613c34565b80840191505092915050565b6000815461319581613c67565b61319f8186613a91565b945060018216600081146131ba57600181146131cb576131fe565b60ff198316865281860193506131fe565b6131d485613a1b565b60005b838110156131f6578154818901526001820191506020810190506131d7565b838801955050505b50505092915050565b6000613214602283613a80565b915061321f82613e5e565b604082019050919050565b6000613237601183613a80565b915061324282613ead565b602082019050919050565b600061325a602683613a80565b915061326582613ed6565b604082019050919050565b600061327d602a83613a80565b915061328882613f25565b604082019050919050565b60006132a0602383613a80565b91506132ab82613f74565b604082019050919050565b60006132c3602583613a80565b91506132ce82613fc3565b604082019050919050565b60006132e6603183613a80565b91506132f182614012565b604082019050919050565b6000613309600f83613a80565b915061331482614061565b602082019050919050565b600061332c603983613a80565b91506133378261408a565b604082019050919050565b600061334f602b83613a80565b915061335a826140d9565b604082019050919050565b6000613372602683613a80565b915061337d82614128565b604082019050919050565b6000613395600e83613a80565b91506133a082614177565b602082019050919050565b60006133b8601d83613a80565b91506133c3826141a0565b602082019050919050565b60006133db602083613a80565b91506133e6826141c9565b602082019050919050565b60006133fe601a83613a80565b9150613409826141f2565b602082019050919050565b6000613421603283613a80565b915061342c8261421b565b604082019050919050565b6000613444602283613a80565b915061344f8261426a565b604082019050919050565b6000613467603383613a80565b9150613472826142b9565b604082019050919050565b600061348a602183613a80565b915061349582614308565b604082019050919050565b60006134ad602883613a80565b91506134b882614357565b604082019050919050565b60006134d0601483613a80565b91506134db826143a6565b602082019050919050565b60006134f3602e83613a80565b91506134fe826143cf565b604082019050919050565b6000613516602f83613a80565b91506135218261441e565b604082019050919050565b6000613539601683613a80565b91506135448261446d565b602082019050919050565b600061355c602d83613a80565b915061356782614496565b604082019050919050565b61357b81613c1b565b82525050565b61358a81613c1b565b82525050565b600061359c8285613188565b91506135a88284613157565b91508190509392505050565b60006020820190506135c96000830184613069565b92915050565b60006080820190506135e46000830187613069565b6135f16020830186613069565b6135fe6040830185613581565b818103606083015261361081846130e5565b905095945050505050565b600060208201905081810360008301526136358184613078565b905092915050565b600060208201905061365260008301846130d6565b92915050565b60006020820190508181036000830152613672818461311e565b905092915050565b6000602082019050818103600083015261369381613207565b9050919050565b600060208201905081810360008301526136b38161322a565b9050919050565b600060208201905081810360008301526136d38161324d565b9050919050565b600060208201905081810360008301526136f381613270565b9050919050565b6000602082019050818103600083015261371381613293565b9050919050565b60006020820190508181036000830152613733816132b6565b9050919050565b60006020820190508181036000830152613753816132d9565b9050919050565b60006020820190508181036000830152613773816132fc565b9050919050565b600060208201905081810360008301526137938161331f565b9050919050565b600060208201905081810360008301526137b381613342565b9050919050565b600060208201905081810360008301526137d381613365565b9050919050565b600060208201905081810360008301526137f381613388565b9050919050565b60006020820190508181036000830152613813816133ab565b9050919050565b60006020820190508181036000830152613833816133ce565b9050919050565b60006020820190508181036000830152613853816133f1565b9050919050565b6000602082019050818103600083015261387381613414565b9050919050565b6000602082019050818103600083015261389381613437565b9050919050565b600060208201905081810360008301526138b38161345a565b9050919050565b600060208201905081810360008301526138d38161347d565b9050919050565b600060208201905081810360008301526138f3816134a0565b9050919050565b60006020820190508181036000830152613913816134c3565b9050919050565b60006020820190508181036000830152613933816134e6565b9050919050565b6000602082019050818103600083015261395381613509565b9050919050565b600060208201905081810360008301526139738161352c565b9050919050565b600060208201905081810360008301526139938161354f565b9050919050565b60006020820190506139af6000830184613581565b92915050565b60006139bf6139d0565b90506139cb8282613c99565b919050565b6000604051905090565b600067ffffffffffffffff8211156139f5576139f4613e00565b5b6139fe82613e4d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aa782613c1b565b9150613ab283613c1b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ae757613ae6613d44565b5b828201905092915050565b6000613afd82613c1b565b9150613b0883613c1b565b925082613b1857613b17613d73565b5b828204905092915050565b6000613b2e82613c1b565b9150613b3983613c1b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b7257613b71613d44565b5b828202905092915050565b6000613b8882613c1b565b9150613b9383613c1b565b925082821015613ba657613ba5613d44565b5b828203905092915050565b6000613bbc82613bfb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c52578082015181840152602081019050613c37565b83811115613c61576000848401525b50505050565b60006002820490506001821680613c7f57607f821691505b60208210811415613c9357613c92613da2565b5b50919050565b613ca282613e4d565b810181811067ffffffffffffffff82111715613cc157613cc0613e00565b5b80604052505050565b6000613cd582613c1b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d0857613d07613d44565b5b600182019050919050565b6000613d1e82613c1b565b9150613d2983613c1b565b925082613d3957613d38613d73565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b7f416464726573732068617320636c61696d65642066726565206d696e74000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4e6f20636f6e74726163747320616c6c6f776564000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768206672656520737570706c7900000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6144ee81613bb1565b81146144f957600080fd5b50565b61450581613bc3565b811461451057600080fd5b50565b61451c81613bcf565b811461452757600080fd5b50565b61453381613c1b565b811461453e57600080fd5b5056fea26469706673582212204f66a6565d3ada1f9497f0c45266419ea98dd2c1fcedcee4a2338a8ee99c89db64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c80636d41d4fb1161010d578063a22cb465116100a0578063dc33e6811161006f578063dc33e681146106de578063e55f58bb1461071b578063e985e9c514610746578063f2fde38b14610783578063fa07ce1d146107ac576101ee565b8063a22cb46514610638578063b03e647814610661578063b88d4fde14610678578063c87b56dd146106a1576101ee565b80638d859f3e116100dc5780638d859f3e1461058c5780638da5cb5b146105b757806395d89b41146105e25780639858cf191461060d576101ee565b80636d41d4fb146104be57806370a08231146104fb578063715018a6146105385780638462151c1461054f576101ee565b80633ccfd60b1161018557806355f804b31161015457806355f804b314610411578063564566a81461043a5780636352211e146104655780636a627842146104a2576101ee565b80633ccfd60b1461037d57806342842e0e146103945780634f6ccce7146103bd578063502b33af146103fa576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632f745c591461031557806332cb6b0c14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f7d565b6107d5565b604051610227919061363d565b60405180910390f35b34801561023c57600080fd5b5061024561091f565b6040516102529190613658565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613024565b6109b1565b60405161028f91906135b4565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612f3d565b610a36565b005b3480156102cd57600080fd5b506102d6610b4f565b6040516102e3919061399a565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612e27565b610b58565b005b34801561032157600080fd5b5061033c60048036038101906103379190612f3d565b610b68565b604051610349919061399a565b60405180910390f35b34801561035e57600080fd5b50610367610d5a565b604051610374919061399a565b60405180910390f35b34801561038957600080fd5b50610392610d60565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190612e27565b610e25565b005b3480156103c957600080fd5b506103e460048036038101906103df9190613024565b610e45565b6040516103f1919061399a565b60405180910390f35b34801561040657600080fd5b5061040f610e98565b005b34801561041d57600080fd5b5061043860048036038101906104339190612fd7565b610f40565b005b34801561044657600080fd5b5061044f610fd2565b60405161045c919061363d565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613024565b610fe5565b60405161049991906135b4565b60405180910390f35b6104bc60048036038101906104b79190612dba565b610ffb565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190612dba565b61116f565b6040516104f2919061363d565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190612dba565b61118f565b60405161052f919061399a565b60405180910390f35b34801561054457600080fd5b5061054d611278565b005b34801561055b57600080fd5b5061057660048036038101906105719190612dba565b611300565b604051610583919061361b565b60405180910390f35b34801561059857600080fd5b506105a16113ae565b6040516105ae919061399a565b60405180910390f35b3480156105c357600080fd5b506105cc6113b4565b6040516105d991906135b4565b60405180910390f35b3480156105ee57600080fd5b506105f76113de565b6040516106049190613658565b60405180910390f35b34801561061957600080fd5b50610622611470565b60405161062f919061399a565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612efd565b611475565b005b34801561066d57600080fd5b506106766115f6565b005b34801561068457600080fd5b5061069f600480360381019061069a9190612e7a565b611682565b005b3480156106ad57600080fd5b506106c860048036038101906106c39190613024565b6116de565b6040516106d59190613658565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190612dba565b611712565b604051610712919061399a565b60405180910390f35b34801561072757600080fd5b50610730611724565b60405161073d919061399a565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190612de7565b61172a565b60405161077a919061363d565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a59190612dba565b6117be565b005b3480156107b857600080fd5b506107d360048036038101906107ce9190612dba565b6118b6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610918575061091782611b2f565b5b9050919050565b60606001805461092e90613c67565b80601f016020809104026020016040519081016040528092919081815260200182805461095a90613c67565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109bc82611b99565b6109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f29061397a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4182610fe5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa99061387a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad1611ba6565b73ffffffffffffffffffffffffffffffffffffffff161480610b005750610aff81610afa611ba6565b61172a565b5b610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b369061377a565b60405180910390fd5b610b4a838383611bae565b505050565b60008054905090565b610b63838383611c60565b505050565b6000610b738361118f565b8210610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab9061367a565b60405180910390fd5b6000610bbe610b4f565b905060008060005b83811015610d18576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cb857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0a5786841415610d01578195505050505050610d54565b83806001019450505b508080600101915050610bc6565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061391a565b60405180910390fd5b92915050565b60085481565b610d68611ba6565b73ffffffffffffffffffffffffffffffffffffffff16610d866113b4565b73ffffffffffffffffffffffffffffffffffffffff1614610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd39061381a565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e22573d6000803e3d6000fd5b50565b610e4083838360405180602001604052806000815250611682565b505050565b6000610e4f610b4f565b8210610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e87906136fa565b60405180910390fd5b819050919050565b610ea0611ba6565b73ffffffffffffffffffffffffffffffffffffffff16610ebe6113b4565b73ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b9061381a565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b610f48611ba6565b73ffffffffffffffffffffffffffffffffffffffff16610f666113b4565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb39061381a565b60405180910390fd5b8181600b9190610fcd929190612bae565b505050565b600a60009054906101000a900460ff1681565b6000610ff0826121a0565b600001519050919050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611060906138fa565b60405180910390fd5b600854611074610b4f565b60016110809190613a9c565b11156110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b89061369a565b60405180910390fd5b600a60009054906101000a900460ff16611110576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111079061375a565b60405180910390fd5b600160095461111f9190613b23565b341015611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906137da565b60405180910390fd5b61116c81600161233a565b50565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061379a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611280611ba6565b73ffffffffffffffffffffffffffffffffffffffff1661129e6113b4565b73ffffffffffffffffffffffffffffffffffffffff16146112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb9061381a565b60405180910390fd5b6112fe6000612358565b565b6060600061130d8361118f565b905060008167ffffffffffffffff81111561132b5761132a613e00565b5b6040519080825280602002602001820160405280156113595781602001602082028036833780820191505090505b50905060005b828110156113a3576113718582610b68565b82828151811061138457611383613dd1565b5b602002602001018181525050808061139b90613cca565b91505061135f565b508092505050919050565b60095481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546113ed90613c67565b80601f016020809104026020016040519081016040528092919081815260200182805461141990613c67565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b5050505050905090565b60d681565b61147d611ba6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e29061383a565b60405180910390fd5b80600660006114f8611ba6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a5611ba6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115ea919061363d565b60405180910390a35050565b6115fe611ba6565b73ffffffffffffffffffffffffffffffffffffffff1661161c6113b4565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699061381a565b60405180910390fd5b61167a610b4f565b600881905550565b61168d848484611c60565b6116998484848461241e565b6116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf9061389a565b60405180910390fd5b50505050565b6060600b6116eb836125b5565b6040516020016116fc929190613590565b6040516020818303038152906040529050919050565b600061171d82612716565b9050919050565b600d5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117c6611ba6565b73ffffffffffffffffffffffffffffffffffffffff166117e46113b4565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118319061381a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a1906136ba565b60405180910390fd5b6118b381612358565b50565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906138fa565b60405180910390fd5b60085461192f610b4f565b600161193b9190613a9c565b111561197c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119739061369a565b60405180910390fd5b60d6611986610b4f565b60016119929190613a9c565b11156119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca9061395a565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a57906137fa565b60405180910390fd5b600a60009054906101000a900460ff16611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa69061375a565b60405180910390fd5b6001600d6000828254611ac29190613a9c565b925050819055506001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b2c81600161233a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611c6b826121a0565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c92611ba6565b73ffffffffffffffffffffffffffffffffffffffff161480611cee5750611cb7611ba6565b73ffffffffffffffffffffffffffffffffffffffff16611cd6846109b1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d0a5750611d098260000151611d04611ba6565b61172a565b5b905080611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d439061385a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db5906137ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061371a565b60405180910390fd5b611e3b85858560016127ff565b611e4b6000848460000151611bae565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121305761208f81611b99565b1561212f5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121998585856001612805565b5050505050565b6121a8612c34565b6121b182611b99565b6121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e7906136da565b60405180910390fd5b60008290505b600081106122f9576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122ea578092505050612335565b508080600190039150506121f6565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061393a565b60405180910390fd5b919050565b61235482826040518060200160405280600081525061280b565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061243f8473ffffffffffffffffffffffffffffffffffffffff1661281d565b156125a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612468611ba6565b8786866040518563ffffffff1660e01b815260040161248a94939291906135cf565b602060405180830381600087803b1580156124a457600080fd5b505af19250505080156124d557506040513d601f19601f820116820180604052508101906124d29190612faa565b60015b612558573d8060008114612505576040519150601f19603f3d011682016040523d82523d6000602084013e61250a565b606091505b50600081511415612550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125479061389a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125ad565b600190505b949350505050565b606060008214156125fd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612711565b600082905060005b6000821461262f57808061261890613cca565b915050600a826126289190613af2565b9150612605565b60008167ffffffffffffffff81111561264b5761264a613e00565b5b6040519080825280601f01601f19166020018201604052801561267d5781602001600182028036833780820191505090505b5090505b6000851461270a576001826126969190613b7d565b9150600a856126a59190613d13565b60306126b19190613a9c565b60f81b8183815181106126c7576126c6613dd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127039190613af2565b9450612681565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e9061373a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b6128188383836001612830565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d906138ba565b60405180910390fd5b60008414156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e1906138da565b60405180910390fd5b6128f760008683876127ff565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b9157818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b7c57612b3c600088848861241e565b612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061389a565b60405180910390fd5b5b81806001019250508080600101915050612ac5565b508060008190555050612ba76000868387612805565b5050505050565b828054612bba90613c67565b90600052602060002090601f016020900481019282612bdc5760008555612c23565b82601f10612bf557803560ff1916838001178555612c23565b82800160010185558215612c23579182015b82811115612c22578235825591602001919060010190612c07565b5b509050612c309190612c6e565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c87576000816000905550600101612c6f565b5090565b6000612c9e612c99846139da565b6139b5565b905082815260208101848484011115612cba57612cb9613e3e565b5b612cc5848285613c25565b509392505050565b600081359050612cdc816144e5565b92915050565b600081359050612cf1816144fc565b92915050565b600081359050612d0681614513565b92915050565b600081519050612d1b81614513565b92915050565b600082601f830112612d3657612d35613e34565b5b8135612d46848260208601612c8b565b91505092915050565b60008083601f840112612d6557612d64613e34565b5b8235905067ffffffffffffffff811115612d8257612d81613e2f565b5b602083019150836001820283011115612d9e57612d9d613e39565b5b9250929050565b600081359050612db48161452a565b92915050565b600060208284031215612dd057612dcf613e48565b5b6000612dde84828501612ccd565b91505092915050565b60008060408385031215612dfe57612dfd613e48565b5b6000612e0c85828601612ccd565b9250506020612e1d85828601612ccd565b9150509250929050565b600080600060608486031215612e4057612e3f613e48565b5b6000612e4e86828701612ccd565b9350506020612e5f86828701612ccd565b9250506040612e7086828701612da5565b9150509250925092565b60008060008060808587031215612e9457612e93613e48565b5b6000612ea287828801612ccd565b9450506020612eb387828801612ccd565b9350506040612ec487828801612da5565b925050606085013567ffffffffffffffff811115612ee557612ee4613e43565b5b612ef187828801612d21565b91505092959194509250565b60008060408385031215612f1457612f13613e48565b5b6000612f2285828601612ccd565b9250506020612f3385828601612ce2565b9150509250929050565b60008060408385031215612f5457612f53613e48565b5b6000612f6285828601612ccd565b9250506020612f7385828601612da5565b9150509250929050565b600060208284031215612f9357612f92613e48565b5b6000612fa184828501612cf7565b91505092915050565b600060208284031215612fc057612fbf613e48565b5b6000612fce84828501612d0c565b91505092915050565b60008060208385031215612fee57612fed613e48565b5b600083013567ffffffffffffffff81111561300c5761300b613e43565b5b61301885828601612d4f565b92509250509250929050565b60006020828403121561303a57613039613e48565b5b600061304884828501612da5565b91505092915050565b600061305d8383613572565b60208301905092915050565b61307281613bb1565b82525050565b600061308382613a30565b61308d8185613a5e565b935061309883613a0b565b8060005b838110156130c95781516130b08882613051565b97506130bb83613a51565b92505060018101905061309c565b5085935050505092915050565b6130df81613bc3565b82525050565b60006130f082613a3b565b6130fa8185613a6f565b935061310a818560208601613c34565b61311381613e4d565b840191505092915050565b600061312982613a46565b6131338185613a80565b9350613143818560208601613c34565b61314c81613e4d565b840191505092915050565b600061316282613a46565b61316c8185613a91565b935061317c818560208601613c34565b80840191505092915050565b6000815461319581613c67565b61319f8186613a91565b945060018216600081146131ba57600181146131cb576131fe565b60ff198316865281860193506131fe565b6131d485613a1b565b60005b838110156131f6578154818901526001820191506020810190506131d7565b838801955050505b50505092915050565b6000613214602283613a80565b915061321f82613e5e565b604082019050919050565b6000613237601183613a80565b915061324282613ead565b602082019050919050565b600061325a602683613a80565b915061326582613ed6565b604082019050919050565b600061327d602a83613a80565b915061328882613f25565b604082019050919050565b60006132a0602383613a80565b91506132ab82613f74565b604082019050919050565b60006132c3602583613a80565b91506132ce82613fc3565b604082019050919050565b60006132e6603183613a80565b91506132f182614012565b604082019050919050565b6000613309600f83613a80565b915061331482614061565b602082019050919050565b600061332c603983613a80565b91506133378261408a565b604082019050919050565b600061334f602b83613a80565b915061335a826140d9565b604082019050919050565b6000613372602683613a80565b915061337d82614128565b604082019050919050565b6000613395600e83613a80565b91506133a082614177565b602082019050919050565b60006133b8601d83613a80565b91506133c3826141a0565b602082019050919050565b60006133db602083613a80565b91506133e6826141c9565b602082019050919050565b60006133fe601a83613a80565b9150613409826141f2565b602082019050919050565b6000613421603283613a80565b915061342c8261421b565b604082019050919050565b6000613444602283613a80565b915061344f8261426a565b604082019050919050565b6000613467603383613a80565b9150613472826142b9565b604082019050919050565b600061348a602183613a80565b915061349582614308565b604082019050919050565b60006134ad602883613a80565b91506134b882614357565b604082019050919050565b60006134d0601483613a80565b91506134db826143a6565b602082019050919050565b60006134f3602e83613a80565b91506134fe826143cf565b604082019050919050565b6000613516602f83613a80565b91506135218261441e565b604082019050919050565b6000613539601683613a80565b91506135448261446d565b602082019050919050565b600061355c602d83613a80565b915061356782614496565b604082019050919050565b61357b81613c1b565b82525050565b61358a81613c1b565b82525050565b600061359c8285613188565b91506135a88284613157565b91508190509392505050565b60006020820190506135c96000830184613069565b92915050565b60006080820190506135e46000830187613069565b6135f16020830186613069565b6135fe6040830185613581565b818103606083015261361081846130e5565b905095945050505050565b600060208201905081810360008301526136358184613078565b905092915050565b600060208201905061365260008301846130d6565b92915050565b60006020820190508181036000830152613672818461311e565b905092915050565b6000602082019050818103600083015261369381613207565b9050919050565b600060208201905081810360008301526136b38161322a565b9050919050565b600060208201905081810360008301526136d38161324d565b9050919050565b600060208201905081810360008301526136f381613270565b9050919050565b6000602082019050818103600083015261371381613293565b9050919050565b60006020820190508181036000830152613733816132b6565b9050919050565b60006020820190508181036000830152613753816132d9565b9050919050565b60006020820190508181036000830152613773816132fc565b9050919050565b600060208201905081810360008301526137938161331f565b9050919050565b600060208201905081810360008301526137b381613342565b9050919050565b600060208201905081810360008301526137d381613365565b9050919050565b600060208201905081810360008301526137f381613388565b9050919050565b60006020820190508181036000830152613813816133ab565b9050919050565b60006020820190508181036000830152613833816133ce565b9050919050565b60006020820190508181036000830152613853816133f1565b9050919050565b6000602082019050818103600083015261387381613414565b9050919050565b6000602082019050818103600083015261389381613437565b9050919050565b600060208201905081810360008301526138b38161345a565b9050919050565b600060208201905081810360008301526138d38161347d565b9050919050565b600060208201905081810360008301526138f3816134a0565b9050919050565b60006020820190508181036000830152613913816134c3565b9050919050565b60006020820190508181036000830152613933816134e6565b9050919050565b6000602082019050818103600083015261395381613509565b9050919050565b600060208201905081810360008301526139738161352c565b9050919050565b600060208201905081810360008301526139938161354f565b9050919050565b60006020820190506139af6000830184613581565b92915050565b60006139bf6139d0565b90506139cb8282613c99565b919050565b6000604051905090565b600067ffffffffffffffff8211156139f5576139f4613e00565b5b6139fe82613e4d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aa782613c1b565b9150613ab283613c1b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ae757613ae6613d44565b5b828201905092915050565b6000613afd82613c1b565b9150613b0883613c1b565b925082613b1857613b17613d73565b5b828204905092915050565b6000613b2e82613c1b565b9150613b3983613c1b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b7257613b71613d44565b5b828202905092915050565b6000613b8882613c1b565b9150613b9383613c1b565b925082821015613ba657613ba5613d44565b5b828203905092915050565b6000613bbc82613bfb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c52578082015181840152602081019050613c37565b83811115613c61576000848401525b50505050565b60006002820490506001821680613c7f57607f821691505b60208210811415613c9357613c92613da2565b5b50919050565b613ca282613e4d565b810181811067ffffffffffffffff82111715613cc157613cc0613e00565b5b80604052505050565b6000613cd582613c1b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d0857613d07613d44565b5b600182019050919050565b6000613d1e82613c1b565b9150613d2983613c1b565b925082613d3957613d38613d73565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b7f416464726573732068617320636c61696d65642066726565206d696e74000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4e6f20636f6e74726163747320616c6c6f776564000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768206672656520737570706c7900000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6144ee81613bb1565b81146144f957600080fd5b50565b61450581613bc3565b811461451057600080fd5b50565b61451c81613bcf565b811461452757600080fd5b50565b61453381613c1b565b811461453e57600080fd5b5056fea26469706673582212204f66a6565d3ada1f9497f0c45266419ea98dd2c1fcedcee4a2338a8ee99c89db64736f6c63430008070033

Deployed Bytecode Sourcemap

40366:2407:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24001:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26043:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27739:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27260:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22176:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28766:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22881:1048;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40419:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41830:109;;;;;;;;;;;;;:::i;:::-;;29007:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22353:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41731:91;;;;;;;;;;;;;:::i;:::-;;41631:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40550:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25852:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40782:340;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40627:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24487:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39655:94;;;;;;;;;;;;;:::i;:::-;;42273:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40506:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39004:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26212:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40458:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28103:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41947:86;;;;;;;;;;;;;:::i;:::-;;29263:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42041:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42657:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40675:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28485:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39904:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41130:493;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24001:422;24148:4;24205:25;24190:40;;;:11;:40;;;;:105;;;;24262:33;24247:48;;;:11;:48;;;;24190:105;:172;;;;24327:35;24312:50;;;:11;:50;;;;24190:172;:225;;;;24379:36;24403:11;24379:23;:36::i;:::-;24190:225;24170:245;;24001:422;;;:::o;26043:100::-;26097:13;26130:5;26123:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26043:100;:::o;27739:292::-;27843:7;27890:16;27898:7;27890;:16::i;:::-;27868:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27999:15;:24;28015:7;27999:24;;;;;;;;;;;;;;;;;;;;;27992:31;;27739:292;;;:::o;27260:413::-;27333:13;27349:24;27365:7;27349:15;:24::i;:::-;27333:40;;27398:5;27392:11;;:2;:11;;;;27384:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27493:5;27477:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27502:37;27519:5;27526:12;:10;:12::i;:::-;27502:16;:37::i;:::-;27477:62;27455:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27637:28;27646:2;27650:7;27659:5;27637:8;:28::i;:::-;27322:351;27260:413;;:::o;22176:100::-;22229:7;22256:12;;22249:19;;22176:100;:::o;28766:170::-;28900:28;28910:4;28916:2;28920:7;28900:9;:28::i;:::-;28766:170;;;:::o;22881:1048::-;23006:7;23047:16;23057:5;23047:9;:16::i;:::-;23039:5;:24;23031:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23113:22;23138:13;:11;:13::i;:::-;23113:38;;23162:19;23192:25;23381:9;23376:466;23396:14;23392:1;:18;23376:466;;;23436:31;23470:11;:14;23482:1;23470:14;;;;;;;;;;;23436:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23533:1;23507:28;;:9;:14;;;:28;;;23503:111;;23580:9;:14;;;23560:34;;23503:111;23657:5;23636:26;;:17;:26;;;23632:195;;;23706:5;23691:11;:20;23687:85;;;23747:1;23740:8;;;;;;;;;23687:85;23794:13;;;;;;;23632:195;23417:425;23412:3;;;;;;;23376:466;;;;23865:56;;;;;;;;;;:::i;:::-;;;;;;;;22881:1048;;;;;:::o;40419:32::-;;;;:::o;41830:109::-;39235:12;:10;:12::i;:::-;39224:23;;:7;:5;:7::i;:::-;:23;;;39216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41888:10:::1;41880:28;;:51;41909:21;41880:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41830:109::o:0;29007:185::-;29145:39;29162:4;29168:2;29172:7;29145:39;;;;;;;;;;;;:16;:39::i;:::-;29007:185;;;:::o;22353:228::-;22456:7;22497:13;:11;:13::i;:::-;22489:5;:21;22481:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22568:5;22561:12;;22353:228;;;:::o;41731:91::-;39235:12;:10;:12::i;:::-;39224:23;;:7;:5;:7::i;:::-;:23;;;39216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41802:12:::1;;;;;;;;;;;41801:13;41786:12;;:28;;;;;;;;;;;;;;;;;;41731:91::o:0;41631:92::-;39235:12;:10;:12::i;:::-;39224:23;;:7;:5;:7::i;:::-;:23;;;39216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41712:3:::1;;41702:7;:13;;;;;;;:::i;:::-;;41631:92:::0;;:::o;40550:32::-;;;;;;;;;;;;;:::o;25852:124::-;25916:7;25943:20;25955:7;25943:11;:20::i;:::-;:25;;;25936:32;;25852:124;;;:::o;40782:340::-;40864:9;40850:23;;:10;:23;;;40842:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40938:10;;40921:13;:11;:13::i;:::-;40917:1;:17;;;;:::i;:::-;:31;;40909:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40989:12;;;;;;;;;;;40981:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;41061:1;41053:5;;:9;;;;:::i;:::-;41040;:22;;41032:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41092:22;41102:8;41112:1;41092:9;:22::i;:::-;40782:340;:::o;40627:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;24487:258::-;24551:7;24610:1;24593:19;;:5;:19;;;;24571:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;24709:12;:19;24722:5;24709:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24701:36;;24694:43;;24487:258;;;:::o;39655:94::-;39235:12;:10;:12::i;:::-;39224:23;;:7;:5;:7::i;:::-;:23;;;39216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39720:21:::1;39738:1;39720:9;:21::i;:::-;39655:94::o:0;42273:376::-;42359:16;42393:18;42414:16;42424:5;42414:9;:16::i;:::-;42393:37;;42441:25;42483:10;42469:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42441:53;;42510:9;42505:111;42529:10;42525:1;:14;42505:111;;;42575:29;42595:5;42602:1;42575:19;:29::i;:::-;42561:8;42570:1;42561:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;42541:3;;;;;:::i;:::-;;;;42505:111;;;;42633:8;42626:15;;;;42273:376;;;:::o;40506:35::-;;;;:::o;39004:87::-;39050:7;39077:6;;;;;;;;;;;39070:13;;39004:87;:::o;26212:104::-;26268:13;26301:7;26294:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26212:104;:::o;40458:41::-;40496:3;40458:41;:::o;28103:311::-;28233:12;:10;:12::i;:::-;28221:24;;:8;:24;;;;28213:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28334:8;28289:18;:32;28308:12;:10;:12::i;:::-;28289:32;;;;;;;;;;;;;;;:42;28322:8;28289:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28387:8;28358:48;;28373:12;:10;:12::i;:::-;28358:48;;;28397:8;28358:48;;;;;;:::i;:::-;;;;;;;;28103:311;;:::o;41947:86::-;39235:12;:10;:12::i;:::-;39224:23;;:7;:5;:7::i;:::-;:23;;;39216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42012:13:::1;:11;:13::i;:::-;41999:10;:26;;;;41947:86::o:0;29263:355::-;29422:28;29432:4;29438:2;29442:7;29422:9;:28::i;:::-;29483:48;29506:4;29512:2;29516:7;29525:5;29483:22;:48::i;:::-;29461:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29263:355;;;;:::o;42041:224::-;42159:13;42221:7;42230:25;42247:7;42230:16;:25::i;:::-;42204:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42190:67;;42041:224;;;:::o;42657:113::-;42715:7;42742:20;42756:5;42742:13;:20::i;:::-;42735:27;;42657:113;;;:::o;40675:32::-;;;;:::o;28485:214::-;28627:4;28656:18;:25;28675:5;28656:25;;;;;;;;;;;;;;;:35;28682:8;28656:35;;;;;;;;;;;;;;;;;;;;;;;;;28649:42;;28485:214;;;;:::o;39904:192::-;39235:12;:10;:12::i;:::-;39224:23;;:7;:5;:7::i;:::-;:23;;;39216:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40013:1:::1;39993:22;;:8;:22;;;;39985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40069:19;40079:8;40069:9;:19::i;:::-;39904:192:::0;:::o;41130:493::-;41208:9;41194:23;;:10;:23;;;41186:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41282:10;;41265:13;:11;:13::i;:::-;41261:1;:17;;;;:::i;:::-;:31;;41253:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40496:3;41337:13;:11;:13::i;:::-;41333:1;:17;;;;:::i;:::-;:32;;41325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41412:9;:19;41422:8;41412:19;;;;;;;;;;;;;;;;;;;;;;;;;41411:20;41403:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41484:12;;;;;;;;;;;41476:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;41544:1;41527:13;;:18;;;;;;;:::i;:::-;;;;;;;;41578:4;41556:9;:19;41566:8;41556:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;41593:22;41603:8;41613:1;41593:9;:22::i;:::-;41130:493;:::o;10739:157::-;10824:4;10863:25;10848:40;;;:11;:40;;;;10841:47;;10739:157;;;:::o;29873:111::-;29930:4;29964:12;;29954:7;:22;29947:29;;29873:111;;;:::o;20123:98::-;20176:7;20203:10;20196:17;;20123:98;:::o;35036:196::-;35178:2;35151:15;:24;35167:7;35151:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35216:7;35212:2;35196:28;;35205:5;35196:28;;;;;;;;;;;;35036:196;;;:::o;32816:2102::-;32931:35;32969:20;32981:7;32969:11;:20::i;:::-;32931:58;;33002:22;33044:13;:18;;;33028:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33103:12;:10;:12::i;:::-;33079:36;;:20;33091:7;33079:11;:20::i;:::-;:36;;;33028:87;:154;;;;33132:50;33149:13;:18;;;33169:12;:10;:12::i;:::-;33132:16;:50::i;:::-;33028:154;33002:181;;33218:17;33196:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;33370:4;33348:26;;:13;:18;;;:26;;;33326:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33473:1;33459:16;;:2;:16;;;;33451:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33530:43;33552:4;33558:2;33562:7;33571:1;33530:21;:43::i;:::-;33638:49;33655:1;33659:7;33668:13;:18;;;33638:8;:49::i;:::-;34013:1;33983:12;:18;33996:4;33983:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34057:1;34029:12;:16;34042:2;34029:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34103:2;34075:11;:20;34087:7;34075:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34165:15;34120:11;:20;34132:7;34120:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34433:19;34465:1;34455:7;:11;34433:33;;34526:1;34485:43;;:11;:24;34497:11;34485:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34481:321;;;34553:20;34561:11;34553:7;:20::i;:::-;34549:238;;;34630:13;:18;;;34598:11;:24;34610:11;34598:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34713:13;:54;;;34671:11;:24;34683:11;34671:24;;;;;;;;;;;:39;;;:96;;;;;;;;;;;;;;;;;;34549:238;34481:321;33958:855;34849:7;34845:2;34830:27;;34839:4;34830:27;;;;;;;;;;;;34868:42;34889:4;34895:2;34899:7;34908:1;34868:20;:42::i;:::-;32920:1998;;32816:2102;;;:::o;25221:569::-;25309:21;;:::i;:::-;25356:16;25364:7;25356;:16::i;:::-;25348:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25462:12;25477:7;25462:22;;25457:245;25494:1;25486:4;:9;25457:245;;25524:31;25558:11;:17;25570:4;25558:17;;;;;;;;;;;25524:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25624:1;25598:28;;:9;:14;;;:28;;;25594:93;;25658:9;25651:16;;;;;;25594:93;25505:197;25497:6;;;;;;;;25457:245;;;;25725:57;;;;;;;;;;:::i;:::-;;;;;;;;25221:569;;;;:::o;29992:104::-;30061:27;30071:2;30075:8;30061:27;;;;;;;;;;;;:9;:27::i;:::-;29992:104;;:::o;40104:173::-;40160:16;40179:6;;;;;;;;;;;40160:25;;40205:8;40196:6;;:17;;;;;;;;;;;;;;;;;;40260:8;40229:40;;40250:8;40229:40;;;;;;;;;;;;40149:128;40104:173;:::o;35797:985::-;35952:4;35973:15;:2;:13;;;:15::i;:::-;35969:806;;;36042:2;36026:36;;;36085:12;:10;:12::i;:::-;36120:4;36147:7;36177:5;36026:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36005:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36405:1;36388:6;:13;:18;36384:321;;;36431:109;;;;;;;;;;:::i;:::-;;;;;;;;36384:321;36655:6;36649:13;36640:6;36636:2;36632:15;36625:38;36005:715;36275:45;;;36265:55;;;:6;:55;;;;36258:62;;;;;35969:806;36759:4;36752:11;;35797:985;;;;;;;:::o;17739:723::-;17795:13;18025:1;18016:5;:10;18012:53;;;18043:10;;;;;;;;;;;;;;;;;;;;;18012:53;18075:12;18090:5;18075:20;;18106:14;18131:78;18146:1;18138:4;:9;18131:78;;18164:8;;;;;:::i;:::-;;;;18195:2;18187:10;;;;;:::i;:::-;;;18131:78;;;18219:19;18251:6;18241:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18219:39;;18269:154;18285:1;18276:5;:10;18269:154;;18313:1;18303:11;;;;;:::i;:::-;;;18380:2;18372:5;:10;;;;:::i;:::-;18359:2;:24;;;;:::i;:::-;18346:39;;18329:6;18336;18329:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18409:2;18400:11;;;;;:::i;:::-;;;18269:154;;;18447:6;18433:21;;;;;17739:723;;;;:::o;24753:266::-;24814:7;24873:1;24856:19;;:5;:19;;;;24834:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;24978:12;:19;24991:5;24978:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;24970:41;;24963:48;;24753:266;;;:::o;37270:159::-;;;;;:::o;37841:158::-;;;;;:::o;30459:163::-;30582:32;30588:2;30592:8;30602:5;30609:4;30582:5;:32::i;:::-;30459:163;;;:::o;799:387::-;859:4;1067:12;1134:7;1122:20;1114:28;;1177:1;1170:4;:8;1163:15;;;799:387;;;:::o;30881:1681::-;31020:20;31043:12;;31020:35;;31088:1;31074:16;;:2;:16;;;;31066:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31159:1;31147:8;:13;;31139:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31218:61;31248:1;31252:2;31256:12;31270:8;31218:21;:61::i;:::-;31593:8;31557:12;:16;31570:2;31557:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31658:8;31617:12;:16;31630:2;31617:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31717:2;31684:11;:25;31696:12;31684:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;31784:15;31734:11;:25;31746:12;31734:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;31817:20;31840:12;31817:35;;31874:9;31869:558;31889:8;31885:1;:12;31869:558;;;31953:12;31949:2;31928:38;;31945:1;31928:38;;;;;;;;;;;;31989:4;31985:392;;;32052:202;32113:1;32146:2;32179:12;32222:5;32052:22;:202::i;:::-;32018:339;;;;;;;;;;;;:::i;:::-;;;;;;;;;31985:392;32397:14;;;;;;;31899:3;;;;;;;31869:558;;;;32458:12;32443;:27;;;;31532:950;32494:60;32523:1;32527:2;32531:12;32545:8;32494:20;:60::i;:::-;31009:1553;30881:1681;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:179::-;7042:10;7063:46;7105:3;7097:6;7063:46;:::i;:::-;7141:4;7136:3;7132:14;7118:28;;6973:179;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7312:732::-;7431:3;7460:54;7508:5;7460:54;:::i;:::-;7530:86;7609:6;7604:3;7530:86;:::i;:::-;7523:93;;7640:56;7690:5;7640:56;:::i;:::-;7719:7;7750:1;7735:284;7760:6;7757:1;7754:13;7735:284;;;7836:6;7830:13;7863:63;7922:3;7907:13;7863:63;:::i;:::-;7856:70;;7949:60;8002:6;7949:60;:::i;:::-;7939:70;;7795:224;7782:1;7779;7775:9;7770:14;;7735:284;;;7739:14;8035:3;8028:10;;7436:608;;;7312:732;;;;:::o;8050:109::-;8131:21;8146:5;8131:21;:::i;:::-;8126:3;8119:34;8050:109;;:::o;8165:360::-;8251:3;8279:38;8311:5;8279:38;:::i;:::-;8333:70;8396:6;8391:3;8333:70;:::i;:::-;8326:77;;8412:52;8457:6;8452:3;8445:4;8438:5;8434:16;8412:52;:::i;:::-;8489:29;8511:6;8489:29;:::i;:::-;8484:3;8480:39;8473:46;;8255:270;8165:360;;;;:::o;8531:364::-;8619:3;8647:39;8680:5;8647:39;:::i;:::-;8702:71;8766:6;8761:3;8702:71;:::i;:::-;8695:78;;8782:52;8827:6;8822:3;8815:4;8808:5;8804:16;8782:52;:::i;:::-;8859:29;8881:6;8859:29;:::i;:::-;8854:3;8850:39;8843:46;;8623:272;8531:364;;;;:::o;8901:377::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:89;9172:6;9167:3;9090:89;:::i;:::-;9083:96;;9188:52;9233:6;9228:3;9221:4;9214:5;9210:16;9188:52;:::i;:::-;9265:6;9260:3;9256:16;9249:23;;9011:267;8901:377;;;;:::o;9308:845::-;9411:3;9448:5;9442:12;9477:36;9503:9;9477:36;:::i;:::-;9529:89;9611:6;9606:3;9529:89;:::i;:::-;9522:96;;9649:1;9638:9;9634:17;9665:1;9660:137;;;;9811:1;9806:341;;;;9627:520;;9660:137;9744:4;9740:9;9729;9725:25;9720:3;9713:38;9780:6;9775:3;9771:16;9764:23;;9660:137;;9806:341;9873:38;9905:5;9873:38;:::i;:::-;9933:1;9947:154;9961:6;9958:1;9955:13;9947:154;;;10035:7;10029:14;10025:1;10020:3;10016:11;10009:35;10085:1;10076:7;10072:15;10061:26;;9983:4;9980:1;9976:12;9971:17;;9947:154;;;10130:6;10125:3;10121:16;10114:23;;9813:334;;9627:520;;9415:738;;9308:845;;;;:::o;10159:366::-;10301:3;10322:67;10386:2;10381:3;10322:67;:::i;:::-;10315:74;;10398:93;10487:3;10398:93;:::i;:::-;10516:2;10511:3;10507:12;10500:19;;10159:366;;;:::o;10531:::-;10673:3;10694:67;10758:2;10753:3;10694:67;:::i;:::-;10687:74;;10770:93;10859:3;10770:93;:::i;:::-;10888:2;10883:3;10879:12;10872:19;;10531:366;;;:::o;10903:::-;11045:3;11066:67;11130:2;11125:3;11066:67;:::i;:::-;11059:74;;11142:93;11231:3;11142:93;:::i;:::-;11260:2;11255:3;11251:12;11244:19;;10903:366;;;:::o;11275:::-;11417:3;11438:67;11502:2;11497:3;11438:67;:::i;:::-;11431:74;;11514:93;11603:3;11514:93;:::i;:::-;11632:2;11627:3;11623:12;11616:19;;11275:366;;;:::o;11647:::-;11789:3;11810:67;11874:2;11869:3;11810:67;:::i;:::-;11803:74;;11886:93;11975:3;11886:93;:::i;:::-;12004:2;11999:3;11995:12;11988:19;;11647:366;;;:::o;12019:::-;12161:3;12182:67;12246:2;12241:3;12182:67;:::i;:::-;12175:74;;12258:93;12347:3;12258:93;:::i;:::-;12376:2;12371:3;12367:12;12360:19;;12019:366;;;:::o;12391:::-;12533:3;12554:67;12618:2;12613:3;12554:67;:::i;:::-;12547:74;;12630:93;12719:3;12630:93;:::i;:::-;12748:2;12743:3;12739:12;12732:19;;12391:366;;;:::o;12763:::-;12905:3;12926:67;12990:2;12985:3;12926:67;:::i;:::-;12919:74;;13002:93;13091:3;13002:93;:::i;:::-;13120:2;13115:3;13111:12;13104:19;;12763:366;;;:::o;13135:::-;13277:3;13298:67;13362:2;13357:3;13298:67;:::i;:::-;13291:74;;13374:93;13463:3;13374:93;:::i;:::-;13492:2;13487:3;13483:12;13476:19;;13135:366;;;:::o;13507:::-;13649:3;13670:67;13734:2;13729:3;13670:67;:::i;:::-;13663:74;;13746:93;13835:3;13746:93;:::i;:::-;13864:2;13859:3;13855:12;13848:19;;13507:366;;;:::o;13879:::-;14021:3;14042:67;14106:2;14101:3;14042:67;:::i;:::-;14035:74;;14118:93;14207:3;14118:93;:::i;:::-;14236:2;14231:3;14227:12;14220:19;;13879:366;;;:::o;14251:::-;14393:3;14414:67;14478:2;14473:3;14414:67;:::i;:::-;14407:74;;14490:93;14579:3;14490:93;:::i;:::-;14608:2;14603:3;14599:12;14592:19;;14251:366;;;:::o;14623:::-;14765:3;14786:67;14850:2;14845:3;14786:67;:::i;:::-;14779:74;;14862:93;14951:3;14862:93;:::i;:::-;14980:2;14975:3;14971:12;14964:19;;14623:366;;;:::o;14995:::-;15137:3;15158:67;15222:2;15217:3;15158:67;:::i;:::-;15151:74;;15234:93;15323:3;15234:93;:::i;:::-;15352:2;15347:3;15343:12;15336:19;;14995:366;;;:::o;15367:::-;15509:3;15530:67;15594:2;15589:3;15530:67;:::i;:::-;15523:74;;15606:93;15695:3;15606:93;:::i;:::-;15724:2;15719:3;15715:12;15708:19;;15367:366;;;:::o;15739:::-;15881:3;15902:67;15966:2;15961:3;15902:67;:::i;:::-;15895:74;;15978:93;16067:3;15978:93;:::i;:::-;16096:2;16091:3;16087:12;16080:19;;15739:366;;;:::o;16111:::-;16253:3;16274:67;16338:2;16333:3;16274:67;:::i;:::-;16267:74;;16350:93;16439:3;16350:93;:::i;:::-;16468:2;16463:3;16459:12;16452:19;;16111:366;;;:::o;16483:::-;16625:3;16646:67;16710:2;16705:3;16646:67;:::i;:::-;16639:74;;16722:93;16811:3;16722:93;:::i;:::-;16840:2;16835:3;16831:12;16824:19;;16483:366;;;:::o;16855:::-;16997:3;17018:67;17082:2;17077:3;17018:67;:::i;:::-;17011:74;;17094:93;17183:3;17094:93;:::i;:::-;17212:2;17207:3;17203:12;17196:19;;16855:366;;;:::o;17227:::-;17369:3;17390:67;17454:2;17449:3;17390:67;:::i;:::-;17383:74;;17466:93;17555:3;17466:93;:::i;:::-;17584:2;17579:3;17575:12;17568:19;;17227:366;;;:::o;17599:::-;17741:3;17762:67;17826:2;17821:3;17762:67;:::i;:::-;17755:74;;17838:93;17927:3;17838:93;:::i;:::-;17956:2;17951:3;17947:12;17940:19;;17599:366;;;:::o;17971:::-;18113:3;18134:67;18198:2;18193:3;18134:67;:::i;:::-;18127:74;;18210:93;18299:3;18210:93;:::i;:::-;18328:2;18323:3;18319:12;18312:19;;17971:366;;;:::o;18343:::-;18485:3;18506:67;18570:2;18565:3;18506:67;:::i;:::-;18499:74;;18582:93;18671:3;18582:93;:::i;:::-;18700:2;18695:3;18691:12;18684:19;;18343:366;;;:::o;18715:::-;18857:3;18878:67;18942:2;18937:3;18878:67;:::i;:::-;18871:74;;18954:93;19043:3;18954:93;:::i;:::-;19072:2;19067:3;19063:12;19056:19;;18715:366;;;:::o;19087:::-;19229:3;19250:67;19314:2;19309:3;19250:67;:::i;:::-;19243:74;;19326:93;19415:3;19326:93;:::i;:::-;19444:2;19439:3;19435:12;19428:19;;19087:366;;;:::o;19459:108::-;19536:24;19554:5;19536:24;:::i;:::-;19531:3;19524:37;19459:108;;:::o;19573:118::-;19660:24;19678:5;19660:24;:::i;:::-;19655:3;19648:37;19573:118;;:::o;19697:429::-;19874:3;19896:92;19984:3;19975:6;19896:92;:::i;:::-;19889:99;;20005:95;20096:3;20087:6;20005:95;:::i;:::-;19998:102;;20117:3;20110:10;;19697:429;;;;;:::o;20132:222::-;20225:4;20263:2;20252:9;20248:18;20240:26;;20276:71;20344:1;20333:9;20329:17;20320:6;20276:71;:::i;:::-;20132:222;;;;:::o;20360:640::-;20555:4;20593:3;20582:9;20578:19;20570:27;;20607:71;20675:1;20664:9;20660:17;20651:6;20607:71;:::i;:::-;20688:72;20756:2;20745:9;20741:18;20732:6;20688:72;:::i;:::-;20770;20838:2;20827:9;20823:18;20814:6;20770:72;:::i;:::-;20889:9;20883:4;20879:20;20874:2;20863:9;20859:18;20852:48;20917:76;20988:4;20979:6;20917:76;:::i;:::-;20909:84;;20360:640;;;;;;;:::o;21006:373::-;21149:4;21187:2;21176:9;21172:18;21164:26;;21236:9;21230:4;21226:20;21222:1;21211:9;21207:17;21200:47;21264:108;21367:4;21358:6;21264:108;:::i;:::-;21256:116;;21006:373;;;;:::o;21385:210::-;21472:4;21510:2;21499:9;21495:18;21487:26;;21523:65;21585:1;21574:9;21570:17;21561:6;21523:65;:::i;:::-;21385:210;;;;:::o;21601:313::-;21714:4;21752:2;21741:9;21737:18;21729:26;;21801:9;21795:4;21791:20;21787:1;21776:9;21772:17;21765:47;21829:78;21902:4;21893:6;21829:78;:::i;:::-;21821:86;;21601:313;;;;:::o;21920:419::-;22086:4;22124:2;22113:9;22109:18;22101:26;;22173:9;22167:4;22163:20;22159:1;22148:9;22144:17;22137:47;22201:131;22327:4;22201:131;:::i;:::-;22193:139;;21920:419;;;:::o;22345:::-;22511:4;22549:2;22538:9;22534:18;22526:26;;22598:9;22592:4;22588:20;22584:1;22573:9;22569:17;22562:47;22626:131;22752:4;22626:131;:::i;:::-;22618:139;;22345:419;;;:::o;22770:::-;22936:4;22974:2;22963:9;22959:18;22951:26;;23023:9;23017:4;23013:20;23009:1;22998:9;22994:17;22987:47;23051:131;23177:4;23051:131;:::i;:::-;23043:139;;22770:419;;;:::o;23195:::-;23361:4;23399:2;23388:9;23384:18;23376:26;;23448:9;23442:4;23438:20;23434:1;23423:9;23419:17;23412:47;23476:131;23602:4;23476:131;:::i;:::-;23468:139;;23195:419;;;:::o;23620:::-;23786:4;23824:2;23813:9;23809:18;23801:26;;23873:9;23867:4;23863:20;23859:1;23848:9;23844:17;23837:47;23901:131;24027:4;23901:131;:::i;:::-;23893:139;;23620:419;;;:::o;24045:::-;24211:4;24249:2;24238:9;24234:18;24226:26;;24298:9;24292:4;24288:20;24284:1;24273:9;24269:17;24262:47;24326:131;24452:4;24326:131;:::i;:::-;24318:139;;24045:419;;;:::o;24470:::-;24636:4;24674:2;24663:9;24659:18;24651:26;;24723:9;24717:4;24713:20;24709:1;24698:9;24694:17;24687:47;24751:131;24877:4;24751:131;:::i;:::-;24743:139;;24470:419;;;:::o;24895:::-;25061:4;25099:2;25088:9;25084:18;25076:26;;25148:9;25142:4;25138:20;25134:1;25123:9;25119:17;25112:47;25176:131;25302:4;25176:131;:::i;:::-;25168:139;;24895:419;;;:::o;25320:::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25320:419;;;:::o;25745:::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:::-;26336:4;26374:2;26363:9;26359:18;26351:26;;26423:9;26417:4;26413:20;26409:1;26398:9;26394:17;26387:47;26451:131;26577:4;26451:131;:::i;:::-;26443:139;;26170:419;;;:::o;26595:::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:::-;27186:4;27224:2;27213:9;27209:18;27201:26;;27273:9;27267:4;27263:20;27259:1;27248:9;27244:17;27237:47;27301:131;27427:4;27301:131;:::i;:::-;27293:139;;27020:419;;;:::o;27445:::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27445:419;;;:::o;27870:::-;28036:4;28074:2;28063:9;28059:18;28051:26;;28123:9;28117:4;28113:20;28109:1;28098:9;28094:17;28087:47;28151:131;28277:4;28151:131;:::i;:::-;28143:139;;27870:419;;;:::o;28295:::-;28461:4;28499:2;28488:9;28484:18;28476:26;;28548:9;28542:4;28538:20;28534:1;28523:9;28519:17;28512:47;28576:131;28702:4;28576:131;:::i;:::-;28568:139;;28295:419;;;:::o;28720:::-;28886:4;28924:2;28913:9;28909:18;28901:26;;28973:9;28967:4;28963:20;28959:1;28948:9;28944:17;28937:47;29001:131;29127:4;29001:131;:::i;:::-;28993:139;;28720:419;;;:::o;29145:::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;30845:419;;;:::o;31270:::-;31436:4;31474:2;31463:9;31459:18;31451:26;;31523:9;31517:4;31513:20;31509:1;31498:9;31494:17;31487:47;31551:131;31677:4;31551:131;:::i;:::-;31543:139;;31270:419;;;:::o;31695:::-;31861:4;31899:2;31888:9;31884:18;31876:26;;31948:9;31942:4;31938:20;31934:1;31923:9;31919:17;31912:47;31976:131;32102:4;31976:131;:::i;:::-;31968:139;;31695:419;;;:::o;32120:::-;32286:4;32324:2;32313:9;32309:18;32301:26;;32373:9;32367:4;32363:20;32359:1;32348:9;32344:17;32337:47;32401:131;32527:4;32401:131;:::i;:::-;32393:139;;32120:419;;;:::o;32545:222::-;32638:4;32676:2;32665:9;32661:18;32653:26;;32689:71;32757:1;32746:9;32742:17;32733:6;32689:71;:::i;:::-;32545:222;;;;:::o;32773:129::-;32807:6;32834:20;;:::i;:::-;32824:30;;32863:33;32891:4;32883:6;32863:33;:::i;:::-;32773:129;;;:::o;32908:75::-;32941:6;32974:2;32968:9;32958:19;;32908:75;:::o;32989:307::-;33050:4;33140:18;33132:6;33129:30;33126:56;;;33162:18;;:::i;:::-;33126:56;33200:29;33222:6;33200:29;:::i;:::-;33192:37;;33284:4;33278;33274:15;33266:23;;32989:307;;;:::o;33302:132::-;33369:4;33392:3;33384:11;;33422:4;33417:3;33413:14;33405:22;;33302:132;;;:::o;33440:141::-;33489:4;33512:3;33504:11;;33535:3;33532:1;33525:14;33569:4;33566:1;33556:18;33548:26;;33440:141;;;:::o;33587:114::-;33654:6;33688:5;33682:12;33672:22;;33587:114;;;:::o;33707:98::-;33758:6;33792:5;33786:12;33776:22;;33707:98;;;:::o;33811:99::-;33863:6;33897:5;33891:12;33881:22;;33811:99;;;:::o;33916:113::-;33986:4;34018;34013:3;34009:14;34001:22;;33916:113;;;:::o;34035:184::-;34134:11;34168:6;34163:3;34156:19;34208:4;34203:3;34199:14;34184:29;;34035:184;;;;:::o;34225:168::-;34308:11;34342:6;34337:3;34330:19;34382:4;34377:3;34373:14;34358:29;;34225:168;;;;:::o;34399:169::-;34483:11;34517:6;34512:3;34505:19;34557:4;34552:3;34548:14;34533:29;;34399:169;;;;:::o;34574:148::-;34676:11;34713:3;34698:18;;34574:148;;;;:::o;34728:305::-;34768:3;34787:20;34805:1;34787:20;:::i;:::-;34782:25;;34821:20;34839:1;34821:20;:::i;:::-;34816:25;;34975:1;34907:66;34903:74;34900:1;34897:81;34894:107;;;34981:18;;:::i;:::-;34894:107;35025:1;35022;35018:9;35011:16;;34728:305;;;;:::o;35039:185::-;35079:1;35096:20;35114:1;35096:20;:::i;:::-;35091:25;;35130:20;35148:1;35130:20;:::i;:::-;35125:25;;35169:1;35159:35;;35174:18;;:::i;:::-;35159:35;35216:1;35213;35209:9;35204:14;;35039:185;;;;:::o;35230:348::-;35270:7;35293:20;35311:1;35293:20;:::i;:::-;35288:25;;35327:20;35345:1;35327:20;:::i;:::-;35322:25;;35515:1;35447:66;35443:74;35440:1;35437:81;35432:1;35425:9;35418:17;35414:105;35411:131;;;35522:18;;:::i;:::-;35411:131;35570:1;35567;35563:9;35552:20;;35230:348;;;;:::o;35584:191::-;35624:4;35644:20;35662:1;35644:20;:::i;:::-;35639:25;;35678:20;35696:1;35678:20;:::i;:::-;35673:25;;35717:1;35714;35711:8;35708:34;;;35722:18;;:::i;:::-;35708:34;35767:1;35764;35760:9;35752:17;;35584:191;;;;:::o;35781:96::-;35818:7;35847:24;35865:5;35847:24;:::i;:::-;35836:35;;35781:96;;;:::o;35883:90::-;35917:7;35960:5;35953:13;35946:21;35935:32;;35883:90;;;:::o;35979:149::-;36015:7;36055:66;36048:5;36044:78;36033:89;;35979:149;;;:::o;36134:126::-;36171:7;36211:42;36204:5;36200:54;36189:65;;36134:126;;;:::o;36266:77::-;36303:7;36332:5;36321:16;;36266:77;;;:::o;36349:154::-;36433:6;36428:3;36423;36410:30;36495:1;36486:6;36481:3;36477:16;36470:27;36349:154;;;:::o;36509:307::-;36577:1;36587:113;36601:6;36598:1;36595:13;36587:113;;;36686:1;36681:3;36677:11;36671:18;36667:1;36662:3;36658:11;36651:39;36623:2;36620:1;36616:10;36611:15;;36587:113;;;36718:6;36715:1;36712:13;36709:101;;;36798:1;36789:6;36784:3;36780:16;36773:27;36709:101;36558:258;36509:307;;;:::o;36822:320::-;36866:6;36903:1;36897:4;36893:12;36883:22;;36950:1;36944:4;36940:12;36971:18;36961:81;;37027:4;37019:6;37015:17;37005:27;;36961:81;37089:2;37081:6;37078:14;37058:18;37055:38;37052:84;;;37108:18;;:::i;:::-;37052:84;36873:269;36822:320;;;:::o;37148:281::-;37231:27;37253:4;37231:27;:::i;:::-;37223:6;37219:40;37361:6;37349:10;37346:22;37325:18;37313:10;37310:34;37307:62;37304:88;;;37372:18;;:::i;:::-;37304:88;37412:10;37408:2;37401:22;37191:238;37148:281;;:::o;37435:233::-;37474:3;37497:24;37515:5;37497:24;:::i;:::-;37488:33;;37543:66;37536:5;37533:77;37530:103;;;37613:18;;:::i;:::-;37530:103;37660:1;37653:5;37649:13;37642:20;;37435:233;;;:::o;37674:176::-;37706:1;37723:20;37741:1;37723:20;:::i;:::-;37718:25;;37757:20;37775:1;37757:20;:::i;:::-;37752:25;;37796:1;37786:35;;37801:18;;:::i;:::-;37786:35;37842:1;37839;37835:9;37830:14;;37674:176;;;;:::o;37856:180::-;37904:77;37901:1;37894:88;38001:4;37998:1;37991:15;38025:4;38022:1;38015:15;38042:180;38090:77;38087:1;38080:88;38187:4;38184:1;38177:15;38211:4;38208:1;38201:15;38228:180;38276:77;38273:1;38266:88;38373:4;38370:1;38363:15;38397:4;38394:1;38387:15;38414:180;38462:77;38459:1;38452:88;38559:4;38556:1;38549:15;38583:4;38580:1;38573:15;38600:180;38648:77;38645:1;38638:88;38745:4;38742:1;38735:15;38769:4;38766:1;38759:15;38786:117;38895:1;38892;38885:12;38909:117;39018:1;39015;39008:12;39032:117;39141:1;39138;39131:12;39155:117;39264:1;39261;39254:12;39278:117;39387:1;39384;39377:12;39401:117;39510:1;39507;39500:12;39524:102;39565:6;39616:2;39612:7;39607:2;39600:5;39596:14;39592:28;39582:38;;39524:102;;;:::o;39632:221::-;39772:34;39768:1;39760:6;39756:14;39749:58;39841:4;39836:2;39828:6;39824:15;39817:29;39632:221;:::o;39859:167::-;39999:19;39995:1;39987:6;39983:14;39976:43;39859:167;:::o;40032:225::-;40172:34;40168:1;40160:6;40156:14;40149:58;40241:8;40236:2;40228:6;40224:15;40217:33;40032:225;:::o;40263:229::-;40403:34;40399:1;40391:6;40387:14;40380:58;40472:12;40467:2;40459:6;40455:15;40448:37;40263:229;:::o;40498:222::-;40638:34;40634:1;40626:6;40622:14;40615:58;40707:5;40702:2;40694:6;40690:15;40683:30;40498:222;:::o;40726:224::-;40866:34;40862:1;40854:6;40850:14;40843:58;40935:7;40930:2;40922:6;40918:15;40911:32;40726:224;:::o;40956:236::-;41096:34;41092:1;41084:6;41080:14;41073:58;41165:19;41160:2;41152:6;41148:15;41141:44;40956:236;:::o;41198:165::-;41338:17;41334:1;41326:6;41322:14;41315:41;41198:165;:::o;41369:244::-;41509:34;41505:1;41497:6;41493:14;41486:58;41578:27;41573:2;41565:6;41561:15;41554:52;41369:244;:::o;41619:230::-;41759:34;41755:1;41747:6;41743:14;41736:58;41828:13;41823:2;41815:6;41811:15;41804:38;41619:230;:::o;41855:225::-;41995:34;41991:1;41983:6;41979:14;41972:58;42064:8;42059:2;42051:6;42047:15;42040:33;41855:225;:::o;42086:164::-;42226:16;42222:1;42214:6;42210:14;42203:40;42086:164;:::o;42256:179::-;42396:31;42392:1;42384:6;42380:14;42373:55;42256:179;:::o;42441:182::-;42581:34;42577:1;42569:6;42565:14;42558:58;42441:182;:::o;42629:176::-;42769:28;42765:1;42757:6;42753:14;42746:52;42629:176;:::o;42811:237::-;42951:34;42947:1;42939:6;42935:14;42928:58;43020:20;43015:2;43007:6;43003:15;42996:45;42811:237;:::o;43054:221::-;43194:34;43190:1;43182:6;43178:14;43171:58;43263:4;43258:2;43250:6;43246:15;43239:29;43054:221;:::o;43281:238::-;43421:34;43417:1;43409:6;43405:14;43398:58;43490:21;43485:2;43477:6;43473:15;43466:46;43281:238;:::o;43525:220::-;43665:34;43661:1;43653:6;43649:14;43642:58;43734:3;43729:2;43721:6;43717:15;43710:28;43525:220;:::o;43751:227::-;43891:34;43887:1;43879:6;43875:14;43868:58;43960:10;43955:2;43947:6;43943:15;43936:35;43751:227;:::o;43984:170::-;44124:22;44120:1;44112:6;44108:14;44101:46;43984:170;:::o;44160:233::-;44300:34;44296:1;44288:6;44284:14;44277:58;44369:16;44364:2;44356:6;44352:15;44345:41;44160:233;:::o;44399:234::-;44539:34;44535:1;44527:6;44523:14;44516:58;44608:17;44603:2;44595:6;44591:15;44584:42;44399:234;:::o;44639:172::-;44779:24;44775:1;44767:6;44763:14;44756:48;44639:172;:::o;44817:232::-;44957:34;44953:1;44945:6;44941:14;44934:58;45026:15;45021:2;45013:6;45009:15;45002:40;44817:232;:::o;45055:122::-;45128:24;45146:5;45128:24;:::i;:::-;45121:5;45118:35;45108:63;;45167:1;45164;45157:12;45108:63;45055:122;:::o;45183:116::-;45253:21;45268:5;45253:21;:::i;:::-;45246:5;45243:32;45233:60;;45289:1;45286;45279:12;45233:60;45183:116;:::o;45305:120::-;45377:23;45394:5;45377:23;:::i;:::-;45370:5;45367:34;45357:62;;45415:1;45412;45405:12;45357:62;45305:120;:::o;45431:122::-;45504:24;45522:5;45504:24;:::i;:::-;45497:5;45494:35;45484:63;;45543:1;45540;45533:12;45484:63;45431:122;:::o

Swarm Source

ipfs://4f66a6565d3ada1f9497f0c45266419ea98dd2c1fcedcee4a2338a8ee99c89db
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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