ETH Price: $3,354.27 (+0.59%)

Token

ClownsAI (CAI)
 

Overview

Max Total Supply

448 CAI

Holders

124

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 CAI
0xdc3bd39f6dac600fc4d65636851b5927464e4e17
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:
ClownsAI

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-30
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-29
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-29
*/

/**
 *Submitted for verification at Etherscan.io on 2022-05-27
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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


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

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

   
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;



abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

   
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

    
    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/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;


library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

  
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


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


// OpenZeppelin Contracts v4.4.1 (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 {
   
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;


interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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


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

pragma solidity ^0.8.0;



abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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


// OpenZeppelin Contracts v4.4.1 (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);


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

   
    function approve(address to, uint256 tokenId) external;

  
    function getApproved(uint256 tokenId) external view returns (address operator);

   
    function setApprovalForAll(address operator, bool _approved) external;

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: contracts/TwistedToonz.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;



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

   
    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(), ".json")) : "";
    }

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

  
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

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

  
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        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);
    }

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

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

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

contract ClownsAI is ERC721A, Ownable, ReentrancyGuard {

  string public        baseURI = "https://bafybeie5xwu5e2frh2lbbvjfhp76ptuwrtumizmizrpodzv57opultp7di.ipfs.nftstorage.link/";
  uint public          price             = 0.0099 ether;
  uint public          maxPerTx          = 1;
  uint public          maxPerWallet      = 1;
  uint public          totalFree         = 0;
  uint public          maxSupply         = 448;
  uint public          nextOwnerToExplicitlySet;
  bool public          mintEnabled = false;

  constructor() ERC721A("ClownsAI", "CAI"){}

  function mint(uint256 amt) external payable
  {
    uint cost = price;
    if(totalSupply() + amt < totalFree + 1) {
      cost = 0;
    }
    require(msg.sender == tx.origin,"ID mismatch");
    require(msg.value == amt * cost,"Please send the exact amount.");
    require(totalSupply() + amt < maxSupply + 1,"No more clowns");
    require(mintEnabled, "Minting is not live yet.");
    require(numberMinted(msg.sender) + amt <= maxPerWallet,"Too many per wallet!");
    require( amt < maxPerTx + 1, "Max per TX reached.");

    _safeMint(msg.sender, amt);
  }

  function ownerBatchMint(uint256 amt) external onlyOwner
  {
    require(totalSupply() + amt < maxSupply + 1,"too many!");

    _safeMint(msg.sender, amt);
  }

  function toggleMinting() external onlyOwner {
      mintEnabled = !mintEnabled;
  }

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

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

  function setPrice(uint256 price_) external onlyOwner {
      price = price_;
  }

  function setTotalFree(uint256 totalFree_) external onlyOwner {
      totalFree = totalFree_;
  }

  function setMaxPerTx(uint256 maxPerTx_) external onlyOwner {
      maxPerTx = maxPerTx_;
  }

  function setMaxPerWallet(uint256 maxPerWallet_) external onlyOwner {
      maxPerWallet = maxPerWallet_;
  }

  function setmaxSupply(uint256 maxSupply_) external onlyOwner {
      maxSupply = maxSupply_;
  }

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

  function withdraw() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

  function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }


  /**
    * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
    */
  function _setOwnersExplicit(uint256 quantity) internal {
      require(quantity != 0, "quantity must be nonzero");
      require(currentIndex != 0, "no tokens minted yet");
      uint256 _nextOwnerToExplicitlySet = nextOwnerToExplicitlySet;
      require(_nextOwnerToExplicitlySet < currentIndex, "all ownerships have been set");

      // Index underflow is impossible.
      // Counter or index overflow is incredibly unrealistic.
      unchecked {
          uint256 endIndex = _nextOwnerToExplicitlySet + quantity - 1;

          // Set the end index to be the last token index
          if (endIndex + 1 > currentIndex) {
              endIndex = currentIndex - 1;
          }

          for (uint256 i = _nextOwnerToExplicitlySet; i <= endIndex; i++) {
              if (_ownerships[i].addr == address(0)) {
                  TokenOwnership memory ownership = ownershipOf(i);
                  _ownerships[i].addr = ownership.addr;
                  _ownerships[i].startTimestamp = ownership.startTimestamp;
              }
          }

          nextOwnerToExplicitlySet = endIndex + 1;
      }
  }
}

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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"amt","type":"uint256"}],"name":"ownerBatchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerTx_","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerWallet_","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalFree_","type":"uint256"}],"name":"setTotalFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFree","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"}]

6080604052604051806080016040528060598152602001620053136059913960099080519060200190620000359291906200021b565b5066232bff5f46c000600a556001600b556001600c556000600d556101c0600e556000601060006101000a81548160ff0219169083151502179055503480156200007e57600080fd5b506040518060400160405280600881526020017f436c6f776e7341490000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43414900000000000000000000000000000000000000000000000000000000008152508160019080519060200190620001039291906200021b565b5080600290805190602001906200011c9291906200021b565b5050506200013f620001336200014d60201b60201c565b6200015560201b60201c565b600160088190555062000330565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022990620002cb565b90600052602060002090601f0160209004810192826200024d576000855562000299565b82601f106200026857805160ff191683800117855562000299565b8280016001018555821562000299579182015b82811115620002985782518255916020019190600101906200027b565b5b509050620002a89190620002ac565b5090565b5b80821115620002c7576000816000905550600101620002ad565b5090565b60006002820490506001821680620002e457607f821691505b60208210811415620002fb57620002fa62000301565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614fd380620003406000396000f3fe60806040526004361061023b5760003560e01c80637d55094d1161012e578063c6f6f216116100ab578063dc33e6811161006f578063dc33e6811461084e578063e268e4d31461088b578063e985e9c5146108b4578063f2fde38b146108f1578063f968adbe1461091a5761023b565b8063c6f6f21614610767578063c87b56dd14610790578063d1239730146107cd578063d5abeb01146107f8578063d7224ba0146108235761023b565b806395d89b41116100f257806395d89b41146106a3578063a035b1fe146106ce578063a0712d68146106f9578063a22cb46514610715578063b88d4fde1461073e5761023b565b80637d55094d146105d25780638da5cb5b146105e95780638db89f071461061457806391b7f5ed1461063d5780639231ab2a146106665761023b565b80633ccfd60b116101bc578063563aaf1111610180578063563aaf11146104ed5780636352211e146105165780636c0360eb1461055357806370a082311461057e578063715018a6146105bb5761023b565b80633ccfd60b1461041c57806342842e0e14610433578063453c23101461045c5780634f6ccce71461048757806355f804b3146104c45761023b565b8063228025e811610203578063228025e81461033957806323b872dd146103625780632d20fb601461038b5780632f745c59146103b4578063333e44e6146103f15761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061371a565b610945565b6040516102749190613e5c565b60405180910390f35b34801561028957600080fd5b50610292610a8f565b60405161029f9190613e77565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906137c1565b610b21565b6040516102dc9190613df5565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906136da565b610ba6565b005b34801561031a57600080fd5b50610323610cbf565b60405161033091906142b4565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906137c1565b610cc8565b005b34801561036e57600080fd5b50610389600480360381019061038491906135c4565b610d4e565b005b34801561039757600080fd5b506103b260048036038101906103ad91906137c1565b610d5e565b005b3480156103c057600080fd5b506103db60048036038101906103d691906136da565b610e3c565b6040516103e891906142b4565b60405180910390f35b3480156103fd57600080fd5b5061040661102e565b60405161041391906142b4565b60405180910390f35b34801561042857600080fd5b50610431611034565b005b34801561043f57600080fd5b5061045a600480360381019061045591906135c4565b6111b5565b005b34801561046857600080fd5b506104716111d5565b60405161047e91906142b4565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a991906137c1565b6111db565b6040516104bb91906142b4565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613774565b61122e565b005b3480156104f957600080fd5b50610514600480360381019061050f91906137c1565b6112c0565b005b34801561052257600080fd5b5061053d600480360381019061053891906137c1565b611346565b60405161054a9190613df5565b60405180910390f35b34801561055f57600080fd5b5061056861135c565b6040516105759190613e77565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190613557565b6113ea565b6040516105b291906142b4565b60405180910390f35b3480156105c757600080fd5b506105d06114d3565b005b3480156105de57600080fd5b506105e761155b565b005b3480156105f557600080fd5b506105fe611603565b60405161060b9190613df5565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906137c1565b61162d565b005b34801561064957600080fd5b50610664600480360381019061065f91906137c1565b611718565b005b34801561067257600080fd5b5061068d600480360381019061068891906137c1565b61179e565b60405161069a9190614299565b60405180910390f35b3480156106af57600080fd5b506106b86117b6565b6040516106c59190613e77565b60405180910390f35b3480156106da57600080fd5b506106e3611848565b6040516106f091906142b4565b60405180910390f35b610713600480360381019061070e91906137c1565b61184e565b005b34801561072157600080fd5b5061073c6004803603810190610737919061369a565b611aa4565b005b34801561074a57600080fd5b5061076560048036038101906107609190613617565b611c25565b005b34801561077357600080fd5b5061078e600480360381019061078991906137c1565b611c81565b005b34801561079c57600080fd5b506107b760048036038101906107b291906137c1565b611d07565b6040516107c49190613e77565b60405180910390f35b3480156107d957600080fd5b506107e2611daf565b6040516107ef9190613e5c565b60405180910390f35b34801561080457600080fd5b5061080d611dc2565b60405161081a91906142b4565b60405180910390f35b34801561082f57600080fd5b50610838611dc8565b60405161084591906142b4565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613557565b611dce565b60405161088291906142b4565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906137c1565b611de0565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613584565b611e66565b6040516108e89190613e5c565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613557565b611efa565b005b34801561092657600080fd5b5061092f611ff2565b60405161093c91906142b4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a7857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a885750610a8782611ff8565b5b9050919050565b606060018054610a9e90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca90614552565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b5050505050905090565b6000610b2c82612062565b610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290614279565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bb182611346565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614139565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4161206f565b73ffffffffffffffffffffffffffffffffffffffff161480610c705750610c6f81610c6a61206f565b611e66565b5b610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613ff9565b60405180910390fd5b610cba838383612077565b505050565b60008054905090565b610cd061206f565b73ffffffffffffffffffffffffffffffffffffffff16610cee611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614079565b60405180910390fd5b80600e8190555050565b610d59838383612129565b505050565b610d6661206f565b73ffffffffffffffffffffffffffffffffffffffff16610d84611603565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614079565b60405180910390fd5b60026008541415610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790614239565b60405180910390fd5b6002600881905550610e3181612669565b600160088190555050565b6000610e47836113ea565b8210610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613e99565b60405180910390fd5b6000610e92610cbf565b905060008060005b83811015610fec576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fde5786841415610fd5578195505050505050611028565b83806001019450505b508080600101915050610e9a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f906141f9565b60405180910390fd5b92915050565b600d5481565b61103c61206f565b73ffffffffffffffffffffffffffffffffffffffff1661105a611603565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614079565b60405180910390fd5b600260085414156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90614239565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161112490613de0565b60006040518083038185875af1925050503d8060008114611161576040519150601f19603f3d011682016040523d82523d6000602084013e611166565b606091505b50509050806111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190614159565b60405180910390fd5b506001600881905550565b6111d083838360405180602001604052806000815250611c25565b505050565b600c5481565b60006111e5610cbf565b8210611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613f59565b60405180910390fd5b819050919050565b61123661206f565b73ffffffffffffffffffffffffffffffffffffffff16611254611603565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190614079565b60405180910390fd5b8181600991906112bb92919061334b565b505050565b6112c861206f565b73ffffffffffffffffffffffffffffffffffffffff166112e6611603565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390614079565b60405180910390fd5b80600d8190555050565b60006113518261289b565b600001519050919050565b6009805461136990614552565b80601f016020809104026020016040519081016040528092919081815260200182805461139590614552565b80156113e25780601f106113b7576101008083540402835291602001916113e2565b820191906000526020600020905b8154815290600101906020018083116113c557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614039565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114db61206f565b73ffffffffffffffffffffffffffffffffffffffff166114f9611603565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690614079565b60405180910390fd5b6115596000612a35565b565b61156361206f565b73ffffffffffffffffffffffffffffffffffffffff16611581611603565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90614079565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61163561206f565b73ffffffffffffffffffffffffffffffffffffffff16611653611603565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090614079565b60405180910390fd5b6001600e546116b89190614373565b816116c1610cbf565b6116cb9190614373565b1061170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613fd9565b60405180910390fd5b6117153382612afb565b50565b61172061206f565b73ffffffffffffffffffffffffffffffffffffffff1661173e611603565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90614079565b60405180910390fd5b80600a8190555050565b6117a66133d1565b6117af8261289b565b9050919050565b6060600280546117c590614552565b80601f01602080910402602001604051908101604052809291908181526020018280546117f190614552565b801561183e5780601f106118135761010080835404028352916020019161183e565b820191906000526020600020905b81548152906001019060200180831161182157829003601f168201915b5050505050905090565b600a5481565b6000600a5490506001600d546118649190614373565b8261186d610cbf565b6118779190614373565b101561188257600090505b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614219565b60405180910390fd5b80826118fc91906143fa565b341461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614119565b60405180910390fd5b6001600e5461194c9190614373565b82611955610cbf565b61195f9190614373565b1061199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613eb9565b60405180910390fd5b601060009054906101000a900460ff166119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590614099565b60405180910390fd5b600c54826119fb33611dce565b611a059190614373565b1115611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613f39565b60405180910390fd5b6001600b54611a559190614373565b8210611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d906141d9565b60405180910390fd5b611aa03383612afb565b5050565b611aac61206f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b11906140d9565b60405180910390fd5b8060066000611b2761206f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd461206f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c199190613e5c565b60405180910390a35050565b611c30848484612129565b611c3c84848484612b19565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614179565b60405180910390fd5b50505050565b611c8961206f565b73ffffffffffffffffffffffffffffffffffffffff16611ca7611603565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf490614079565b60405180910390fd5b80600b8190555050565b6060611d1282612062565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906140b9565b60405180910390fd5b6000611d5b612cb0565b9050600081511415611d7c5760405180602001604052806000815250611da7565b80611d8684612d42565b604051602001611d97929190613db1565b6040516020818303038152906040525b915050919050565b601060009054906101000a900460ff1681565b600e5481565b600f5481565b6000611dd982612ea3565b9050919050565b611de861206f565b73ffffffffffffffffffffffffffffffffffffffff16611e06611603565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390614079565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f0261206f565b73ffffffffffffffffffffffffffffffffffffffff16611f20611603565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90614079565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd90613ed9565b60405180910390fd5b611fef81612a35565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121348261289b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661215b61206f565b73ffffffffffffffffffffffffffffffffffffffff1614806121b7575061218061206f565b73ffffffffffffffffffffffffffffffffffffffff1661219f84610b21565b73ffffffffffffffffffffffffffffffffffffffff16145b806121d357506121d282600001516121cd61206f565b611e66565b5b905080612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140f9565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e90614059565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90613f79565b60405180910390fd5b6123048585856001612f8c565b6123146000848460000151612077565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f95761255881612062565b156125f85782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126628585856001612f92565b5050505050565b60008114156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614019565b60405180910390fd5b6000805414156126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e990613f19565b60405180910390fd5b6000600f549050600054811061273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613fb9565b60405180910390fd5b6000600183830103905060005460018201111561275d5760016000540390505b60008290505b81811161288b57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287e5760006127e08261289b565b905080600001516003600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602001516003600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b8080600101915050612763565b5060018101600f81905550505050565b6128a36133d1565b6128ac82612062565b6128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290613ef9565b60405180910390fd5b60008290505b600081106129f4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129e5578092505050612a30565b508080600190039150506128f1565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790614259565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b15828260405180602001604052806000815250612f98565b5050565b6000612b3a8473ffffffffffffffffffffffffffffffffffffffff16612faa565b15612ca3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b6361206f565b8786866040518563ffffffff1660e01b8152600401612b859493929190613e10565b602060405180830381600087803b158015612b9f57600080fd5b505af1925050508015612bd057506040513d601f19601f82011682018060405250810190612bcd9190613747565b60015b612c53573d8060008114612c00576040519150601f19603f3d011682016040523d82523d6000602084013e612c05565b606091505b50600081511415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614179565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ca8565b600190505b949350505050565b606060098054612cbf90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054612ceb90614552565b8015612d385780601f10612d0d57610100808354040283529160200191612d38565b820191906000526020600020905b815481529060010190602001808311612d1b57829003601f168201915b5050505050905090565b60606000821415612d8a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e9e565b600082905060005b60008214612dbc578080612da5906145b5565b915050600a82612db591906143c9565b9150612d92565b60008167ffffffffffffffff811115612dd857612dd76146eb565b5b6040519080825280601f01601f191660200182016040528015612e0a5781602001600182028036833780820191505090505b5090505b60008514612e9757600182612e239190614454565b9150600a85612e3291906145fe565b6030612e3e9190614373565b60f81b818381518110612e5457612e536146bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e9091906143c9565b9450612e0e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0b90613f99565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b612fa58383836001612fcd565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303a90614199565b60405180910390fd5b6000841415613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906141b9565b60405180910390fd5b6130946000868387612f8c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561332e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613319576132d96000888488612b19565b613318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330f90614179565b60405180910390fd5b5b81806001019250508080600101915050613262565b5080600081905550506133446000868387612f92565b5050505050565b82805461335790614552565b90600052602060002090601f01602090048101928261337957600085556133c0565b82601f1061339257803560ff19168380011785556133c0565b828001600101855582156133c0579182015b828111156133bf5782358255916020019190600101906133a4565b5b5090506133cd919061340b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561342457600081600090555060010161340c565b5090565b600061343b613436846142f4565b6142cf565b90508281526020810184848401111561345757613456614729565b5b613462848285614510565b509392505050565b60008135905061347981614f41565b92915050565b60008135905061348e81614f58565b92915050565b6000813590506134a381614f6f565b92915050565b6000815190506134b881614f6f565b92915050565b600082601f8301126134d3576134d261471f565b5b81356134e3848260208601613428565b91505092915050565b60008083601f8401126135025761350161471f565b5b8235905067ffffffffffffffff81111561351f5761351e61471a565b5b60208301915083600182028301111561353b5761353a614724565b5b9250929050565b60008135905061355181614f86565b92915050565b60006020828403121561356d5761356c614733565b5b600061357b8482850161346a565b91505092915050565b6000806040838503121561359b5761359a614733565b5b60006135a98582860161346a565b92505060206135ba8582860161346a565b9150509250929050565b6000806000606084860312156135dd576135dc614733565b5b60006135eb8682870161346a565b93505060206135fc8682870161346a565b925050604061360d86828701613542565b9150509250925092565b6000806000806080858703121561363157613630614733565b5b600061363f8782880161346a565b94505060206136508782880161346a565b935050604061366187828801613542565b925050606085013567ffffffffffffffff8111156136825761368161472e565b5b61368e878288016134be565b91505092959194509250565b600080604083850312156136b1576136b0614733565b5b60006136bf8582860161346a565b92505060206136d08582860161347f565b9150509250929050565b600080604083850312156136f1576136f0614733565b5b60006136ff8582860161346a565b925050602061371085828601613542565b9150509250929050565b6000602082840312156137305761372f614733565b5b600061373e84828501613494565b91505092915050565b60006020828403121561375d5761375c614733565b5b600061376b848285016134a9565b91505092915050565b6000806020838503121561378b5761378a614733565b5b600083013567ffffffffffffffff8111156137a9576137a861472e565b5b6137b5858286016134ec565b92509250509250929050565b6000602082840312156137d7576137d6614733565b5b60006137e584828501613542565b91505092915050565b6137f781614488565b82525050565b61380681614488565b82525050565b6138158161449a565b82525050565b600061382682614325565b613830818561433b565b935061384081856020860161451f565b61384981614738565b840191505092915050565b600061385f82614330565b6138698185614357565b935061387981856020860161451f565b61388281614738565b840191505092915050565b600061389882614330565b6138a28185614368565b93506138b281856020860161451f565b80840191505092915050565b60006138cb602283614357565b91506138d682614749565b604082019050919050565b60006138ee600e83614357565b91506138f982614798565b602082019050919050565b6000613911602683614357565b915061391c826147c1565b604082019050919050565b6000613934602a83614357565b915061393f82614810565b604082019050919050565b6000613957601483614357565b91506139628261485f565b602082019050919050565b600061397a601483614357565b915061398582614888565b602082019050919050565b600061399d602383614357565b91506139a8826148b1565b604082019050919050565b60006139c0602583614357565b91506139cb82614900565b604082019050919050565b60006139e3603183614357565b91506139ee8261494f565b604082019050919050565b6000613a06601c83614357565b9150613a118261499e565b602082019050919050565b6000613a29600983614357565b9150613a34826149c7565b602082019050919050565b6000613a4c603983614357565b9150613a57826149f0565b604082019050919050565b6000613a6f601883614357565b9150613a7a82614a3f565b602082019050919050565b6000613a92602b83614357565b9150613a9d82614a68565b604082019050919050565b6000613ab5602683614357565b9150613ac082614ab7565b604082019050919050565b6000613ad8600583614368565b9150613ae382614b06565b600582019050919050565b6000613afb602083614357565b9150613b0682614b2f565b602082019050919050565b6000613b1e601883614357565b9150613b2982614b58565b602082019050919050565b6000613b41602f83614357565b9150613b4c82614b81565b604082019050919050565b6000613b64601a83614357565b9150613b6f82614bd0565b602082019050919050565b6000613b87603283614357565b9150613b9282614bf9565b604082019050919050565b6000613baa601d83614357565b9150613bb582614c48565b602082019050919050565b6000613bcd602283614357565b9150613bd882614c71565b604082019050919050565b6000613bf060008361434c565b9150613bfb82614cc0565b600082019050919050565b6000613c13601083614357565b9150613c1e82614cc3565b602082019050919050565b6000613c36603383614357565b9150613c4182614cec565b604082019050919050565b6000613c59602183614357565b9150613c6482614d3b565b604082019050919050565b6000613c7c602883614357565b9150613c8782614d8a565b604082019050919050565b6000613c9f601383614357565b9150613caa82614dd9565b602082019050919050565b6000613cc2602e83614357565b9150613ccd82614e02565b604082019050919050565b6000613ce5600b83614357565b9150613cf082614e51565b602082019050919050565b6000613d08601f83614357565b9150613d1382614e7a565b602082019050919050565b6000613d2b602f83614357565b9150613d3682614ea3565b604082019050919050565b6000613d4e602d83614357565b9150613d5982614ef2565b604082019050919050565b604082016000820151613d7a60008501826137ee565b506020820151613d8d6020850182613da2565b50505050565b613d9c816144f2565b82525050565b613dab816144fc565b82525050565b6000613dbd828561388d565b9150613dc9828461388d565b9150613dd482613acb565b91508190509392505050565b6000613deb82613be3565b9150819050919050565b6000602082019050613e0a60008301846137fd565b92915050565b6000608082019050613e2560008301876137fd565b613e3260208301866137fd565b613e3f6040830185613d93565b8181036060830152613e51818461381b565b905095945050505050565b6000602082019050613e71600083018461380c565b92915050565b60006020820190508181036000830152613e918184613854565b905092915050565b60006020820190508181036000830152613eb2816138be565b9050919050565b60006020820190508181036000830152613ed2816138e1565b9050919050565b60006020820190508181036000830152613ef281613904565b9050919050565b60006020820190508181036000830152613f1281613927565b9050919050565b60006020820190508181036000830152613f328161394a565b9050919050565b60006020820190508181036000830152613f528161396d565b9050919050565b60006020820190508181036000830152613f7281613990565b9050919050565b60006020820190508181036000830152613f92816139b3565b9050919050565b60006020820190508181036000830152613fb2816139d6565b9050919050565b60006020820190508181036000830152613fd2816139f9565b9050919050565b60006020820190508181036000830152613ff281613a1c565b9050919050565b6000602082019050818103600083015261401281613a3f565b9050919050565b6000602082019050818103600083015261403281613a62565b9050919050565b6000602082019050818103600083015261405281613a85565b9050919050565b6000602082019050818103600083015261407281613aa8565b9050919050565b6000602082019050818103600083015261409281613aee565b9050919050565b600060208201905081810360008301526140b281613b11565b9050919050565b600060208201905081810360008301526140d281613b34565b9050919050565b600060208201905081810360008301526140f281613b57565b9050919050565b6000602082019050818103600083015261411281613b7a565b9050919050565b6000602082019050818103600083015261413281613b9d565b9050919050565b6000602082019050818103600083015261415281613bc0565b9050919050565b6000602082019050818103600083015261417281613c06565b9050919050565b6000602082019050818103600083015261419281613c29565b9050919050565b600060208201905081810360008301526141b281613c4c565b9050919050565b600060208201905081810360008301526141d281613c6f565b9050919050565b600060208201905081810360008301526141f281613c92565b9050919050565b6000602082019050818103600083015261421281613cb5565b9050919050565b6000602082019050818103600083015261423281613cd8565b9050919050565b6000602082019050818103600083015261425281613cfb565b9050919050565b6000602082019050818103600083015261427281613d1e565b9050919050565b6000602082019050818103600083015261429281613d41565b9050919050565b60006040820190506142ae6000830184613d64565b92915050565b60006020820190506142c96000830184613d93565b92915050565b60006142d96142ea565b90506142e58282614584565b919050565b6000604051905090565b600067ffffffffffffffff82111561430f5761430e6146eb565b5b61431882614738565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061437e826144f2565b9150614389836144f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143be576143bd61462f565b5b828201905092915050565b60006143d4826144f2565b91506143df836144f2565b9250826143ef576143ee61465e565b5b828204905092915050565b6000614405826144f2565b9150614410836144f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144495761444861462f565b5b828202905092915050565b600061445f826144f2565b915061446a836144f2565b92508282101561447d5761447c61462f565b5b828203905092915050565b6000614493826144d2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561453d578082015181840152602081019050614522565b8381111561454c576000848401525b50505050565b6000600282049050600182168061456a57607f821691505b6020821081141561457e5761457d61468d565b5b50919050565b61458d82614738565b810181811067ffffffffffffffff821117156145ac576145ab6146eb565b5b80604052505050565b60006145c0826144f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145f3576145f261462f565b5b600182019050919050565b6000614609826144f2565b9150614614836144f2565b9250826146245761462361465e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f726520636c6f776e73000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f20746f6b656e73206d696e74656420796574000000000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c206f776e657273686970732068617665206265656e2073657400000000600082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4944206d69736d61746368000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614f4a81614488565b8114614f5557600080fd5b50565b614f618161449a565b8114614f6c57600080fd5b50565b614f78816144a6565b8114614f8357600080fd5b50565b614f8f816144f2565b8114614f9a57600080fd5b5056fea2646970667358221220625ae03481ba9ef48a177e5d8d6a7904835119320f3318a8f275e95ede99d10164736f6c6343000807003368747470733a2f2f626166796265696535787775356532667268326c6262766a6668703736707475777274756d697a6d697a72706f647a7635376f70756c74703764692e697066732e6e667473746f726167652e6c696e6b2f

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80637d55094d1161012e578063c6f6f216116100ab578063dc33e6811161006f578063dc33e6811461084e578063e268e4d31461088b578063e985e9c5146108b4578063f2fde38b146108f1578063f968adbe1461091a5761023b565b8063c6f6f21614610767578063c87b56dd14610790578063d1239730146107cd578063d5abeb01146107f8578063d7224ba0146108235761023b565b806395d89b41116100f257806395d89b41146106a3578063a035b1fe146106ce578063a0712d68146106f9578063a22cb46514610715578063b88d4fde1461073e5761023b565b80637d55094d146105d25780638da5cb5b146105e95780638db89f071461061457806391b7f5ed1461063d5780639231ab2a146106665761023b565b80633ccfd60b116101bc578063563aaf1111610180578063563aaf11146104ed5780636352211e146105165780636c0360eb1461055357806370a082311461057e578063715018a6146105bb5761023b565b80633ccfd60b1461041c57806342842e0e14610433578063453c23101461045c5780634f6ccce71461048757806355f804b3146104c45761023b565b8063228025e811610203578063228025e81461033957806323b872dd146103625780632d20fb601461038b5780632f745c59146103b4578063333e44e6146103f15761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061371a565b610945565b6040516102749190613e5c565b60405180910390f35b34801561028957600080fd5b50610292610a8f565b60405161029f9190613e77565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906137c1565b610b21565b6040516102dc9190613df5565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906136da565b610ba6565b005b34801561031a57600080fd5b50610323610cbf565b60405161033091906142b4565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906137c1565b610cc8565b005b34801561036e57600080fd5b50610389600480360381019061038491906135c4565b610d4e565b005b34801561039757600080fd5b506103b260048036038101906103ad91906137c1565b610d5e565b005b3480156103c057600080fd5b506103db60048036038101906103d691906136da565b610e3c565b6040516103e891906142b4565b60405180910390f35b3480156103fd57600080fd5b5061040661102e565b60405161041391906142b4565b60405180910390f35b34801561042857600080fd5b50610431611034565b005b34801561043f57600080fd5b5061045a600480360381019061045591906135c4565b6111b5565b005b34801561046857600080fd5b506104716111d5565b60405161047e91906142b4565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a991906137c1565b6111db565b6040516104bb91906142b4565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613774565b61122e565b005b3480156104f957600080fd5b50610514600480360381019061050f91906137c1565b6112c0565b005b34801561052257600080fd5b5061053d600480360381019061053891906137c1565b611346565b60405161054a9190613df5565b60405180910390f35b34801561055f57600080fd5b5061056861135c565b6040516105759190613e77565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190613557565b6113ea565b6040516105b291906142b4565b60405180910390f35b3480156105c757600080fd5b506105d06114d3565b005b3480156105de57600080fd5b506105e761155b565b005b3480156105f557600080fd5b506105fe611603565b60405161060b9190613df5565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906137c1565b61162d565b005b34801561064957600080fd5b50610664600480360381019061065f91906137c1565b611718565b005b34801561067257600080fd5b5061068d600480360381019061068891906137c1565b61179e565b60405161069a9190614299565b60405180910390f35b3480156106af57600080fd5b506106b86117b6565b6040516106c59190613e77565b60405180910390f35b3480156106da57600080fd5b506106e3611848565b6040516106f091906142b4565b60405180910390f35b610713600480360381019061070e91906137c1565b61184e565b005b34801561072157600080fd5b5061073c6004803603810190610737919061369a565b611aa4565b005b34801561074a57600080fd5b5061076560048036038101906107609190613617565b611c25565b005b34801561077357600080fd5b5061078e600480360381019061078991906137c1565b611c81565b005b34801561079c57600080fd5b506107b760048036038101906107b291906137c1565b611d07565b6040516107c49190613e77565b60405180910390f35b3480156107d957600080fd5b506107e2611daf565b6040516107ef9190613e5c565b60405180910390f35b34801561080457600080fd5b5061080d611dc2565b60405161081a91906142b4565b60405180910390f35b34801561082f57600080fd5b50610838611dc8565b60405161084591906142b4565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613557565b611dce565b60405161088291906142b4565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906137c1565b611de0565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613584565b611e66565b6040516108e89190613e5c565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613557565b611efa565b005b34801561092657600080fd5b5061092f611ff2565b60405161093c91906142b4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a7857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a885750610a8782611ff8565b5b9050919050565b606060018054610a9e90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca90614552565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b5050505050905090565b6000610b2c82612062565b610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290614279565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bb182611346565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614139565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4161206f565b73ffffffffffffffffffffffffffffffffffffffff161480610c705750610c6f81610c6a61206f565b611e66565b5b610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613ff9565b60405180910390fd5b610cba838383612077565b505050565b60008054905090565b610cd061206f565b73ffffffffffffffffffffffffffffffffffffffff16610cee611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614079565b60405180910390fd5b80600e8190555050565b610d59838383612129565b505050565b610d6661206f565b73ffffffffffffffffffffffffffffffffffffffff16610d84611603565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614079565b60405180910390fd5b60026008541415610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790614239565b60405180910390fd5b6002600881905550610e3181612669565b600160088190555050565b6000610e47836113ea565b8210610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613e99565b60405180910390fd5b6000610e92610cbf565b905060008060005b83811015610fec576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fde5786841415610fd5578195505050505050611028565b83806001019450505b508080600101915050610e9a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f906141f9565b60405180910390fd5b92915050565b600d5481565b61103c61206f565b73ffffffffffffffffffffffffffffffffffffffff1661105a611603565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614079565b60405180910390fd5b600260085414156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90614239565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161112490613de0565b60006040518083038185875af1925050503d8060008114611161576040519150601f19603f3d011682016040523d82523d6000602084013e611166565b606091505b50509050806111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190614159565b60405180910390fd5b506001600881905550565b6111d083838360405180602001604052806000815250611c25565b505050565b600c5481565b60006111e5610cbf565b8210611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613f59565b60405180910390fd5b819050919050565b61123661206f565b73ffffffffffffffffffffffffffffffffffffffff16611254611603565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190614079565b60405180910390fd5b8181600991906112bb92919061334b565b505050565b6112c861206f565b73ffffffffffffffffffffffffffffffffffffffff166112e6611603565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390614079565b60405180910390fd5b80600d8190555050565b60006113518261289b565b600001519050919050565b6009805461136990614552565b80601f016020809104026020016040519081016040528092919081815260200182805461139590614552565b80156113e25780601f106113b7576101008083540402835291602001916113e2565b820191906000526020600020905b8154815290600101906020018083116113c557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614039565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114db61206f565b73ffffffffffffffffffffffffffffffffffffffff166114f9611603565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690614079565b60405180910390fd5b6115596000612a35565b565b61156361206f565b73ffffffffffffffffffffffffffffffffffffffff16611581611603565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90614079565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61163561206f565b73ffffffffffffffffffffffffffffffffffffffff16611653611603565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090614079565b60405180910390fd5b6001600e546116b89190614373565b816116c1610cbf565b6116cb9190614373565b1061170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613fd9565b60405180910390fd5b6117153382612afb565b50565b61172061206f565b73ffffffffffffffffffffffffffffffffffffffff1661173e611603565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90614079565b60405180910390fd5b80600a8190555050565b6117a66133d1565b6117af8261289b565b9050919050565b6060600280546117c590614552565b80601f01602080910402602001604051908101604052809291908181526020018280546117f190614552565b801561183e5780601f106118135761010080835404028352916020019161183e565b820191906000526020600020905b81548152906001019060200180831161182157829003601f168201915b5050505050905090565b600a5481565b6000600a5490506001600d546118649190614373565b8261186d610cbf565b6118779190614373565b101561188257600090505b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614219565b60405180910390fd5b80826118fc91906143fa565b341461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614119565b60405180910390fd5b6001600e5461194c9190614373565b82611955610cbf565b61195f9190614373565b1061199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613eb9565b60405180910390fd5b601060009054906101000a900460ff166119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590614099565b60405180910390fd5b600c54826119fb33611dce565b611a059190614373565b1115611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613f39565b60405180910390fd5b6001600b54611a559190614373565b8210611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d906141d9565b60405180910390fd5b611aa03383612afb565b5050565b611aac61206f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b11906140d9565b60405180910390fd5b8060066000611b2761206f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd461206f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c199190613e5c565b60405180910390a35050565b611c30848484612129565b611c3c84848484612b19565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614179565b60405180910390fd5b50505050565b611c8961206f565b73ffffffffffffffffffffffffffffffffffffffff16611ca7611603565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf490614079565b60405180910390fd5b80600b8190555050565b6060611d1282612062565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906140b9565b60405180910390fd5b6000611d5b612cb0565b9050600081511415611d7c5760405180602001604052806000815250611da7565b80611d8684612d42565b604051602001611d97929190613db1565b6040516020818303038152906040525b915050919050565b601060009054906101000a900460ff1681565b600e5481565b600f5481565b6000611dd982612ea3565b9050919050565b611de861206f565b73ffffffffffffffffffffffffffffffffffffffff16611e06611603565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390614079565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f0261206f565b73ffffffffffffffffffffffffffffffffffffffff16611f20611603565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90614079565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd90613ed9565b60405180910390fd5b611fef81612a35565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121348261289b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661215b61206f565b73ffffffffffffffffffffffffffffffffffffffff1614806121b7575061218061206f565b73ffffffffffffffffffffffffffffffffffffffff1661219f84610b21565b73ffffffffffffffffffffffffffffffffffffffff16145b806121d357506121d282600001516121cd61206f565b611e66565b5b905080612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140f9565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e90614059565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90613f79565b60405180910390fd5b6123048585856001612f8c565b6123146000848460000151612077565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f95761255881612062565b156125f85782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126628585856001612f92565b5050505050565b60008114156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614019565b60405180910390fd5b6000805414156126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e990613f19565b60405180910390fd5b6000600f549050600054811061273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613fb9565b60405180910390fd5b6000600183830103905060005460018201111561275d5760016000540390505b60008290505b81811161288b57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287e5760006127e08261289b565b905080600001516003600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602001516003600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b8080600101915050612763565b5060018101600f81905550505050565b6128a36133d1565b6128ac82612062565b6128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290613ef9565b60405180910390fd5b60008290505b600081106129f4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129e5578092505050612a30565b508080600190039150506128f1565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790614259565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b15828260405180602001604052806000815250612f98565b5050565b6000612b3a8473ffffffffffffffffffffffffffffffffffffffff16612faa565b15612ca3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b6361206f565b8786866040518563ffffffff1660e01b8152600401612b859493929190613e10565b602060405180830381600087803b158015612b9f57600080fd5b505af1925050508015612bd057506040513d601f19601f82011682018060405250810190612bcd9190613747565b60015b612c53573d8060008114612c00576040519150601f19603f3d011682016040523d82523d6000602084013e612c05565b606091505b50600081511415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614179565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ca8565b600190505b949350505050565b606060098054612cbf90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054612ceb90614552565b8015612d385780601f10612d0d57610100808354040283529160200191612d38565b820191906000526020600020905b815481529060010190602001808311612d1b57829003601f168201915b5050505050905090565b60606000821415612d8a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e9e565b600082905060005b60008214612dbc578080612da5906145b5565b915050600a82612db591906143c9565b9150612d92565b60008167ffffffffffffffff811115612dd857612dd76146eb565b5b6040519080825280601f01601f191660200182016040528015612e0a5781602001600182028036833780820191505090505b5090505b60008514612e9757600182612e239190614454565b9150600a85612e3291906145fe565b6030612e3e9190614373565b60f81b818381518110612e5457612e536146bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e9091906143c9565b9450612e0e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0b90613f99565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b612fa58383836001612fcd565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303a90614199565b60405180910390fd5b6000841415613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906141b9565b60405180910390fd5b6130946000868387612f8c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561332e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613319576132d96000888488612b19565b613318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330f90614179565b60405180910390fd5b5b81806001019250508080600101915050613262565b5080600081905550506133446000868387612f92565b5050505050565b82805461335790614552565b90600052602060002090601f01602090048101928261337957600085556133c0565b82601f1061339257803560ff19168380011785556133c0565b828001600101855582156133c0579182015b828111156133bf5782358255916020019190600101906133a4565b5b5090506133cd919061340b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561342457600081600090555060010161340c565b5090565b600061343b613436846142f4565b6142cf565b90508281526020810184848401111561345757613456614729565b5b613462848285614510565b509392505050565b60008135905061347981614f41565b92915050565b60008135905061348e81614f58565b92915050565b6000813590506134a381614f6f565b92915050565b6000815190506134b881614f6f565b92915050565b600082601f8301126134d3576134d261471f565b5b81356134e3848260208601613428565b91505092915050565b60008083601f8401126135025761350161471f565b5b8235905067ffffffffffffffff81111561351f5761351e61471a565b5b60208301915083600182028301111561353b5761353a614724565b5b9250929050565b60008135905061355181614f86565b92915050565b60006020828403121561356d5761356c614733565b5b600061357b8482850161346a565b91505092915050565b6000806040838503121561359b5761359a614733565b5b60006135a98582860161346a565b92505060206135ba8582860161346a565b9150509250929050565b6000806000606084860312156135dd576135dc614733565b5b60006135eb8682870161346a565b93505060206135fc8682870161346a565b925050604061360d86828701613542565b9150509250925092565b6000806000806080858703121561363157613630614733565b5b600061363f8782880161346a565b94505060206136508782880161346a565b935050604061366187828801613542565b925050606085013567ffffffffffffffff8111156136825761368161472e565b5b61368e878288016134be565b91505092959194509250565b600080604083850312156136b1576136b0614733565b5b60006136bf8582860161346a565b92505060206136d08582860161347f565b9150509250929050565b600080604083850312156136f1576136f0614733565b5b60006136ff8582860161346a565b925050602061371085828601613542565b9150509250929050565b6000602082840312156137305761372f614733565b5b600061373e84828501613494565b91505092915050565b60006020828403121561375d5761375c614733565b5b600061376b848285016134a9565b91505092915050565b6000806020838503121561378b5761378a614733565b5b600083013567ffffffffffffffff8111156137a9576137a861472e565b5b6137b5858286016134ec565b92509250509250929050565b6000602082840312156137d7576137d6614733565b5b60006137e584828501613542565b91505092915050565b6137f781614488565b82525050565b61380681614488565b82525050565b6138158161449a565b82525050565b600061382682614325565b613830818561433b565b935061384081856020860161451f565b61384981614738565b840191505092915050565b600061385f82614330565b6138698185614357565b935061387981856020860161451f565b61388281614738565b840191505092915050565b600061389882614330565b6138a28185614368565b93506138b281856020860161451f565b80840191505092915050565b60006138cb602283614357565b91506138d682614749565b604082019050919050565b60006138ee600e83614357565b91506138f982614798565b602082019050919050565b6000613911602683614357565b915061391c826147c1565b604082019050919050565b6000613934602a83614357565b915061393f82614810565b604082019050919050565b6000613957601483614357565b91506139628261485f565b602082019050919050565b600061397a601483614357565b915061398582614888565b602082019050919050565b600061399d602383614357565b91506139a8826148b1565b604082019050919050565b60006139c0602583614357565b91506139cb82614900565b604082019050919050565b60006139e3603183614357565b91506139ee8261494f565b604082019050919050565b6000613a06601c83614357565b9150613a118261499e565b602082019050919050565b6000613a29600983614357565b9150613a34826149c7565b602082019050919050565b6000613a4c603983614357565b9150613a57826149f0565b604082019050919050565b6000613a6f601883614357565b9150613a7a82614a3f565b602082019050919050565b6000613a92602b83614357565b9150613a9d82614a68565b604082019050919050565b6000613ab5602683614357565b9150613ac082614ab7565b604082019050919050565b6000613ad8600583614368565b9150613ae382614b06565b600582019050919050565b6000613afb602083614357565b9150613b0682614b2f565b602082019050919050565b6000613b1e601883614357565b9150613b2982614b58565b602082019050919050565b6000613b41602f83614357565b9150613b4c82614b81565b604082019050919050565b6000613b64601a83614357565b9150613b6f82614bd0565b602082019050919050565b6000613b87603283614357565b9150613b9282614bf9565b604082019050919050565b6000613baa601d83614357565b9150613bb582614c48565b602082019050919050565b6000613bcd602283614357565b9150613bd882614c71565b604082019050919050565b6000613bf060008361434c565b9150613bfb82614cc0565b600082019050919050565b6000613c13601083614357565b9150613c1e82614cc3565b602082019050919050565b6000613c36603383614357565b9150613c4182614cec565b604082019050919050565b6000613c59602183614357565b9150613c6482614d3b565b604082019050919050565b6000613c7c602883614357565b9150613c8782614d8a565b604082019050919050565b6000613c9f601383614357565b9150613caa82614dd9565b602082019050919050565b6000613cc2602e83614357565b9150613ccd82614e02565b604082019050919050565b6000613ce5600b83614357565b9150613cf082614e51565b602082019050919050565b6000613d08601f83614357565b9150613d1382614e7a565b602082019050919050565b6000613d2b602f83614357565b9150613d3682614ea3565b604082019050919050565b6000613d4e602d83614357565b9150613d5982614ef2565b604082019050919050565b604082016000820151613d7a60008501826137ee565b506020820151613d8d6020850182613da2565b50505050565b613d9c816144f2565b82525050565b613dab816144fc565b82525050565b6000613dbd828561388d565b9150613dc9828461388d565b9150613dd482613acb565b91508190509392505050565b6000613deb82613be3565b9150819050919050565b6000602082019050613e0a60008301846137fd565b92915050565b6000608082019050613e2560008301876137fd565b613e3260208301866137fd565b613e3f6040830185613d93565b8181036060830152613e51818461381b565b905095945050505050565b6000602082019050613e71600083018461380c565b92915050565b60006020820190508181036000830152613e918184613854565b905092915050565b60006020820190508181036000830152613eb2816138be565b9050919050565b60006020820190508181036000830152613ed2816138e1565b9050919050565b60006020820190508181036000830152613ef281613904565b9050919050565b60006020820190508181036000830152613f1281613927565b9050919050565b60006020820190508181036000830152613f328161394a565b9050919050565b60006020820190508181036000830152613f528161396d565b9050919050565b60006020820190508181036000830152613f7281613990565b9050919050565b60006020820190508181036000830152613f92816139b3565b9050919050565b60006020820190508181036000830152613fb2816139d6565b9050919050565b60006020820190508181036000830152613fd2816139f9565b9050919050565b60006020820190508181036000830152613ff281613a1c565b9050919050565b6000602082019050818103600083015261401281613a3f565b9050919050565b6000602082019050818103600083015261403281613a62565b9050919050565b6000602082019050818103600083015261405281613a85565b9050919050565b6000602082019050818103600083015261407281613aa8565b9050919050565b6000602082019050818103600083015261409281613aee565b9050919050565b600060208201905081810360008301526140b281613b11565b9050919050565b600060208201905081810360008301526140d281613b34565b9050919050565b600060208201905081810360008301526140f281613b57565b9050919050565b6000602082019050818103600083015261411281613b7a565b9050919050565b6000602082019050818103600083015261413281613b9d565b9050919050565b6000602082019050818103600083015261415281613bc0565b9050919050565b6000602082019050818103600083015261417281613c06565b9050919050565b6000602082019050818103600083015261419281613c29565b9050919050565b600060208201905081810360008301526141b281613c4c565b9050919050565b600060208201905081810360008301526141d281613c6f565b9050919050565b600060208201905081810360008301526141f281613c92565b9050919050565b6000602082019050818103600083015261421281613cb5565b9050919050565b6000602082019050818103600083015261423281613cd8565b9050919050565b6000602082019050818103600083015261425281613cfb565b9050919050565b6000602082019050818103600083015261427281613d1e565b9050919050565b6000602082019050818103600083015261429281613d41565b9050919050565b60006040820190506142ae6000830184613d64565b92915050565b60006020820190506142c96000830184613d93565b92915050565b60006142d96142ea565b90506142e58282614584565b919050565b6000604051905090565b600067ffffffffffffffff82111561430f5761430e6146eb565b5b61431882614738565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061437e826144f2565b9150614389836144f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143be576143bd61462f565b5b828201905092915050565b60006143d4826144f2565b91506143df836144f2565b9250826143ef576143ee61465e565b5b828204905092915050565b6000614405826144f2565b9150614410836144f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144495761444861462f565b5b828202905092915050565b600061445f826144f2565b915061446a836144f2565b92508282101561447d5761447c61462f565b5b828203905092915050565b6000614493826144d2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561453d578082015181840152602081019050614522565b8381111561454c576000848401525b50505050565b6000600282049050600182168061456a57607f821691505b6020821081141561457e5761457d61468d565b5b50919050565b61458d82614738565b810181811067ffffffffffffffff821117156145ac576145ab6146eb565b5b80604052505050565b60006145c0826144f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145f3576145f261462f565b5b600182019050919050565b6000614609826144f2565b9150614614836144f2565b9250826146245761462361465e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f726520636c6f776e73000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f20746f6b656e73206d696e74656420796574000000000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c206f776e657273686970732068617665206265656e2073657400000000600082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4944206d69736d61746368000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614f4a81614488565b8114614f5557600080fd5b50565b614f618161449a565b8114614f6c57600080fd5b50565b614f78816144a6565b8114614f8357600080fd5b50565b614f8f816144f2565b8114614f9a57600080fd5b5056fea2646970667358221220625ae03481ba9ef48a177e5d8d6a7904835119320f3318a8f275e95ede99d10164736f6c63430008070033

Deployed Bytecode Sourcemap

36265:3935:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25623:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27509:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28845:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28366:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24167:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38309:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29721:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38703:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24544:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36606:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38521:176;;;;;;;;;;;;;:::i;:::-;;29962:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36559:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24344:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37799:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37989:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27318:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36327:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26059:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7369:103;;;;;;;;;;;;;:::i;:::-;;37595:85;;;;;;;;;;;;;:::i;:::-;;7056:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37426:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37901:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38827:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27678:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36454:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36847:573;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29131:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30218:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38093:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27853:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36752:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36653:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36702:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37686:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38193:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29490:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7627:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36512:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25623:372;25725:4;25777:25;25762:40;;;:11;:40;;;;:105;;;;25834:33;25819:48;;;:11;:48;;;;25762:105;:172;;;;25899:35;25884:50;;;:11;:50;;;;25762:172;:225;;;;25951:36;25975:11;25951:23;:36::i;:::-;25762:225;25742:245;;25623:372;;;:::o;27509:100::-;27563:13;27596:5;27589:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27509:100;:::o;28845:214::-;28913:7;28941:16;28949:7;28941;:16::i;:::-;28933:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29027:15;:24;29043:7;29027:24;;;;;;;;;;;;;;;;;;;;;29020:31;;28845:214;;;:::o;28366:413::-;28439:13;28455:24;28471:7;28455:15;:24::i;:::-;28439:40;;28504:5;28498:11;;:2;:11;;;;28490:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28599:5;28583:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28608:37;28625:5;28632:12;:10;:12::i;:::-;28608:16;:37::i;:::-;28583:62;28561:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28743:28;28752:2;28756:7;28765:5;28743:8;:28::i;:::-;28428:351;28366:413;;:::o;24167:100::-;24220:7;24247:12;;24240:19;;24167:100;:::o;38309:98::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38391:10:::1;38379:9;:22;;;;38309:98:::0;:::o;29721:170::-;29855:28;29865:4;29871:2;29875:7;29855:9;:28::i;:::-;29721:170;;;:::o;38703:118::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3413:1:::1;3638:7;;:19;;3630:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3413:1;3771:7;:18;;;;38787:28:::2;38806:8;38787:18;:28::i;:::-;3369:1:::1;3950:7;:22;;;;38703:118:::0;:::o;24544:1007::-;24633:7;24669:16;24679:5;24669:9;:16::i;:::-;24661:5;:24;24653:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24735:22;24760:13;:11;:13::i;:::-;24735:38;;24784:19;24814:25;25003:9;24998:466;25018:14;25014:1;:18;24998:466;;;25058:31;25092:11;:14;25104:1;25092:14;;;;;;;;;;;25058:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25155:1;25129:28;;:9;:14;;;:28;;;25125:111;;25202:9;:14;;;25182:34;;25125:111;25279:5;25258:26;;:17;:26;;;25254:195;;;25328:5;25313:11;:20;25309:85;;;25369:1;25362:8;;;;;;;;;25309:85;25416:13;;;;;;;25254:195;25039:425;25034:3;;;;;;;24998:466;;;;25487:56;;;;;;;;;;:::i;:::-;;;;;;;;24544:1007;;;;;:::o;36606:42::-;;;;:::o;38521:176::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3413:1:::1;3638:7;;:19;;3630:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3413:1;3771:7;:18;;;;38581:12:::2;38599:10;:15;;38622:21;38599:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38580:68;;;38663:7;38655:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38573:124;3369:1:::1;3950:7;:22;;;;38521:176::o:0;29962:185::-;30100:39;30117:4;30123:2;30127:7;30100:39;;;;;;;;;;;;:16;:39::i;:::-;29962:185;;;:::o;36559:42::-;;;;:::o;24344:187::-;24411:7;24447:13;:11;:13::i;:::-;24439:5;:21;24431:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24518:5;24511:12;;24344:187;;;:::o;37799:96::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37881:8:::1;;37871:7;:18;;;;;;;:::i;:::-;;37799:96:::0;;:::o;37989:98::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38071:10:::1;38059:9;:22;;;;37989:98:::0;:::o;27318:124::-;27382:7;27409:20;27421:7;27409:11;:20::i;:::-;:25;;;27402:32;;27318:124;;;:::o;36327:122::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26059:221::-;26123:7;26168:1;26151:19;;:5;:19;;;;26143:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26244:12;:19;26257:5;26244:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26236:36;;26229:43;;26059:221;;;:::o;7369:103::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7434:30:::1;7461:1;7434:18;:30::i;:::-;7369:103::o:0;37595:85::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37663:11:::1;;;;;;;;;;;37662:12;37648:11;;:26;;;;;;;;;;;;;;;;;;37595:85::o:0;7056:87::-;7102:7;7129:6;;;;;;;;;;;7122:13;;7056:87;:::o;37426:163::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37534:1:::1;37522:9;;:13;;;;:::i;:::-;37516:3;37500:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;37492:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37557:26;37567:10;37579:3;37557:9;:26::i;:::-;37426:163:::0;:::o;37901:82::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37971:6:::1;37963:5;:14;;;;37901:82:::0;:::o;38827:132::-;38893:21;;:::i;:::-;38933:20;38945:7;38933:11;:20::i;:::-;38926:27;;38827:132;;;:::o;27678:104::-;27734:13;27767:7;27760:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27678:104;:::o;36454:53::-;;;;:::o;36847:573::-;36901:9;36913:5;;36901:17;;36962:1;36950:9;;:13;;;;:::i;:::-;36944:3;36928:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;36925:65;;;36981:1;36974:8;;36925:65;37018:9;37004:23;;:10;:23;;;36996:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37076:4;37070:3;:10;;;;:::i;:::-;37057:9;:23;37049:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37162:1;37150:9;;:13;;;;:::i;:::-;37144:3;37128:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;37120:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37196:11;;;;;;;;;;;37188:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;37285:12;;37278:3;37251:24;37264:10;37251:12;:24::i;:::-;:30;;;;:::i;:::-;:46;;37243:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37354:1;37343:8;;:12;;;;:::i;:::-;37337:3;:18;37328:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37388:26;37398:10;37410:3;37388:9;:26::i;:::-;36894:526;36847:573;:::o;29131:288::-;29238:12;:10;:12::i;:::-;29226:24;;:8;:24;;;;29218:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29339:8;29294:18;:32;29313:12;:10;:12::i;:::-;29294:32;;;;;;;;;;;;;;;:42;29327:8;29294:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29392:8;29363:48;;29378:12;:10;:12::i;:::-;29363:48;;;29402:8;29363:48;;;;;;:::i;:::-;;;;;;;;29131:288;;:::o;30218:355::-;30377:28;30387:4;30393:2;30397:7;30377:9;:28::i;:::-;30438:48;30461:4;30467:2;30471:7;30480:5;30438:22;:48::i;:::-;30416:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;30218:355;;;;:::o;38093:94::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38172:9:::1;38161:8;:20;;;;38093:94:::0;:::o;27853:344::-;27926:13;27960:16;27968:7;27960;:16::i;:::-;27952:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28041:21;28065:10;:8;:10::i;:::-;28041:34;;28118:1;28099:7;28093:21;:26;;:96;;;;;;;;;;;;;;;;;28146:7;28155:18;:7;:16;:18::i;:::-;28129:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28093:96;28086:103;;;27853:344;;;:::o;36752:40::-;;;;;;;;;;;;;:::o;36653:44::-;;;;:::o;36702:45::-;;;;:::o;37686:107::-;37744:7;37767:20;37781:5;37767:13;:20::i;:::-;37760:27;;37686:107;;;:::o;38193:110::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38284:13:::1;38269:12;:28;;;;38193:110:::0;:::o;29490:164::-;29587:4;29611:18;:25;29630:5;29611:25;;;;;;;;;;;;;;;:35;29637:8;29611:35;;;;;;;;;;;;;;;;;;;;;;;;;29604:42;;29490:164;;;;:::o;7627:201::-;7287:12;:10;:12::i;:::-;7276:23;;:7;:5;:7::i;:::-;:23;;;7268:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7736:1:::1;7716:22;;:8;:22;;;;7708:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7792:28;7811:8;7792:18;:28::i;:::-;7627:201:::0;:::o;36512:42::-;;;;:::o;18630:157::-;18715:4;18754:25;18739:40;;;:11;:40;;;;18732:47;;18630:157;;;:::o;30585:111::-;30642:4;30676:12;;30666:7;:22;30659:29;;30585:111;;;:::o;6285:98::-;6338:7;6365:10;6358:17;;6285:98;:::o;34909:196::-;35051:2;35024:15;:24;35040:7;35024:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35089:7;35085:2;35069:28;;35078:5;35069:28;;;;;;;;;;;;34909:196;;;:::o;32789:2002::-;32904:35;32942:20;32954:7;32942:11;:20::i;:::-;32904:58;;32975:22;33017:13;:18;;;33001:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33076:12;:10;:12::i;:::-;33052:36;;:20;33064:7;33052:11;:20::i;:::-;:36;;;33001:87;:154;;;;33105:50;33122:13;:18;;;33142:12;:10;:12::i;:::-;33105:16;:50::i;:::-;33001:154;32975:181;;33177:17;33169:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33292:4;33270:26;;:13;:18;;;:26;;;33262:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33372:1;33358:16;;:2;:16;;;;33350:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33429:43;33451:4;33457:2;33461:7;33470:1;33429:21;:43::i;:::-;33537:49;33554:1;33558:7;33567:13;:18;;;33537:8;:49::i;:::-;33912:1;33882:12;:18;33895:4;33882:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33956:1;33928:12;:16;33941:2;33928:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34002:2;33974:11;:20;33986:7;33974:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34064:15;34019:11;:20;34031:7;34019:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34332:19;34364:1;34354:7;:11;34332:33;;34425:1;34384:43;;:11;:24;34396:11;34384:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34380:295;;;34452:20;34460:11;34452:7;:20::i;:::-;34448:212;;;34529:13;:18;;;34497:11;:24;34509:11;34497:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34612:13;:28;;;34570:11;:24;34582:11;34570:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34448:212;34380:295;33857:829;34722:7;34718:2;34703:27;;34712:4;34703:27;;;;;;;;;;;;34741:42;34762:4;34768:2;34772:7;34781:1;34741:20;:42::i;:::-;32893:1898;;32789:2002;;;:::o;39067:1130::-;39151:1;39139:8;:13;;39131:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39214:1;39198:12;;:17;;39190:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39249:33;39285:24;;39249:60;;39354:12;;39326:25;:40;39318:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39537:16;39595:1;39584:8;39556:25;:36;:40;39537:59;;39689:12;;39685:1;39674:8;:12;:27;39670:91;;;39746:1;39731:12;;:16;39720:27;;39670:91;39780:9;39792:25;39780:37;;39775:354;39824:8;39819:1;:13;39775:354;;39891:1;39860:33;;:11;:14;39872:1;39860:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;39856:260;;;39916:31;39950:14;39962:1;39950:11;:14::i;:::-;39916:48;;40007:9;:14;;;39985:11;:14;39997:1;39985:14;;;;;;;;;;;:19;;;:36;;;;;;;;;;;;;;;;;;40074:9;:24;;;40042:11;:14;40054:1;40042:14;;;;;;;;;;;:29;;;:56;;;;;;;;;;;;;;;;;;39895:221;39856:260;39834:3;;;;;;;39775:354;;;;40181:1;40170:8;:12;40143:24;:39;;;;39514:678;39122:1075;39067:1130;:::o;26719:537::-;26780:21;;:::i;:::-;26822:16;26830:7;26822;:16::i;:::-;26814:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26928:12;26943:7;26928:22;;26923:245;26960:1;26952:4;:9;26923:245;;26990:31;27024:11;:17;27036:4;27024:17;;;;;;;;;;;26990:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27090:1;27064:28;;:9;:14;;;:28;;;27060:93;;27124:9;27117:16;;;;;;27060:93;26971:197;26963:6;;;;;;;;26923:245;;;;27191:57;;;;;;;;;;:::i;:::-;;;;;;;;26719:537;;;;:::o;7988:191::-;8062:16;8081:6;;;;;;;;;;;8062:25;;8107:8;8098:6;;:17;;;;;;;;;;;;;;;;;;8162:8;8131:40;;8152:8;8131:40;;;;;;;;;;;;8051:128;7988:191;:::o;30704:104::-;30773:27;30783:2;30787:8;30773:27;;;;;;;;;;;;:9;:27::i;:::-;30704:104;;:::o;35113:804::-;35268:4;35289:15;:2;:13;;;:15::i;:::-;35285:625;;;35341:2;35325:36;;;35362:12;:10;:12::i;:::-;35376:4;35382:7;35391:5;35325:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35321:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35588:1;35571:6;:13;:18;35567:273;;;35614:61;;;;;;;;;;:::i;:::-;;;;;;;;35567:273;35790:6;35784:13;35775:6;35771:2;35767:15;35760:38;35321:534;35458:45;;;35448:55;;;:6;:55;;;;35441:62;;;;;35285:625;35894:4;35887:11;;35113:804;;;;;;;:::o;38413:102::-;38473:13;38502:7;38495:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38413:102;:::o;4352:723::-;4408:13;4638:1;4629:5;:10;4625:53;;;4656:10;;;;;;;;;;;;;;;;;;;;;4625:53;4688:12;4703:5;4688:20;;4719:14;4744:78;4759:1;4751:4;:9;4744:78;;4777:8;;;;;:::i;:::-;;;;4808:2;4800:10;;;;;:::i;:::-;;;4744:78;;;4832:19;4864:6;4854:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4832:39;;4882:154;4898:1;4889:5;:10;4882:154;;4926:1;4916:11;;;;;:::i;:::-;;;4993:2;4985:5;:10;;;;:::i;:::-;4972:2;:24;;;;:::i;:::-;4959:39;;4942:6;4949;4942:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5022:2;5013:11;;;;;:::i;:::-;;;4882:154;;;5060:6;5046:21;;;;;4352:723;;;;:::o;26288:229::-;26349:7;26394:1;26377:19;;:5;:19;;;;26369:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26476:12;:19;26489:5;26476:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;26468:41;;26461:48;;26288:229;;;:::o;35929:159::-;;;;;:::o;36100:158::-;;;;;:::o;30822:163::-;30945:32;30951:2;30955:8;30965:5;30972:4;30945:5;:32::i;:::-;30822:163;;;:::o;8440:326::-;8500:4;8757:1;8735:7;:19;;;:23;8728:30;;8440:326;;;:::o;30997:1538::-;31136:20;31159:12;;31136:35;;31204:1;31190:16;;:2;:16;;;;31182:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31275:1;31263:8;:13;;31255:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31334:61;31364:1;31368:2;31372:12;31386:8;31334:21;:61::i;:::-;31709:8;31673:12;:16;31686:2;31673:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31774:8;31733:12;:16;31746:2;31733:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31833:2;31800:11;:25;31812:12;31800:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;31900:15;31850:11;:25;31862:12;31850:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;31933:20;31956:12;31933:35;;31990:9;31985:415;32005:8;32001:1;:12;31985:415;;;32069:12;32065:2;32044:38;;32061:1;32044:38;;;;;;;;;;;;32105:4;32101:249;;;32168:59;32199:1;32203:2;32207:12;32221:5;32168:22;:59::i;:::-;32134:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32101:249;32370:14;;;;;;;32015:3;;;;;;;31985:415;;;;32431:12;32416;:27;;;;31648:807;32467:60;32496:1;32500:2;32504:12;32518:8;32467:20;:60::i;:::-;31125:1410;30997:1538;;;;:::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:108::-;7050:24;7068:5;7050:24;:::i;:::-;7045:3;7038:37;6973:108;;:::o;7087:118::-;7174:24;7192:5;7174:24;:::i;:::-;7169:3;7162:37;7087:118;;:::o;7211:109::-;7292:21;7307:5;7292:21;:::i;:::-;7287:3;7280:34;7211:109;;:::o;7326:360::-;7412:3;7440:38;7472:5;7440:38;:::i;:::-;7494:70;7557:6;7552:3;7494:70;:::i;:::-;7487:77;;7573:52;7618:6;7613:3;7606:4;7599:5;7595:16;7573:52;:::i;:::-;7650:29;7672:6;7650:29;:::i;:::-;7645:3;7641:39;7634:46;;7416:270;7326:360;;;;:::o;7692:364::-;7780:3;7808:39;7841:5;7808:39;:::i;:::-;7863:71;7927:6;7922:3;7863:71;:::i;:::-;7856:78;;7943:52;7988:6;7983:3;7976:4;7969:5;7965:16;7943:52;:::i;:::-;8020:29;8042:6;8020:29;:::i;:::-;8015:3;8011:39;8004:46;;7784:272;7692:364;;;;:::o;8062:377::-;8168:3;8196:39;8229:5;8196:39;:::i;:::-;8251:89;8333:6;8328:3;8251:89;:::i;:::-;8244:96;;8349:52;8394:6;8389:3;8382:4;8375:5;8371:16;8349:52;:::i;:::-;8426:6;8421:3;8417:16;8410:23;;8172:267;8062:377;;;;:::o;8445:366::-;8587:3;8608:67;8672:2;8667:3;8608:67;:::i;:::-;8601:74;;8684:93;8773:3;8684:93;:::i;:::-;8802:2;8797:3;8793:12;8786:19;;8445:366;;;:::o;8817:::-;8959:3;8980:67;9044:2;9039:3;8980:67;:::i;:::-;8973:74;;9056:93;9145:3;9056:93;:::i;:::-;9174:2;9169:3;9165:12;9158:19;;8817:366;;;:::o;9189:::-;9331:3;9352:67;9416:2;9411:3;9352:67;:::i;:::-;9345:74;;9428:93;9517:3;9428:93;:::i;:::-;9546:2;9541:3;9537:12;9530:19;;9189:366;;;:::o;9561:::-;9703:3;9724:67;9788:2;9783:3;9724:67;:::i;:::-;9717:74;;9800:93;9889:3;9800:93;:::i;:::-;9918:2;9913:3;9909:12;9902:19;;9561:366;;;:::o;9933:::-;10075:3;10096:67;10160:2;10155:3;10096:67;:::i;:::-;10089:74;;10172:93;10261:3;10172:93;:::i;:::-;10290:2;10285:3;10281:12;10274:19;;9933:366;;;:::o;10305:::-;10447:3;10468:67;10532:2;10527:3;10468:67;:::i;:::-;10461:74;;10544:93;10633:3;10544:93;:::i;:::-;10662:2;10657:3;10653:12;10646:19;;10305:366;;;:::o;10677:::-;10819:3;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10916:93;11005:3;10916:93;:::i;:::-;11034:2;11029:3;11025:12;11018:19;;10677:366;;;:::o;11049:::-;11191:3;11212:67;11276:2;11271:3;11212:67;:::i;:::-;11205:74;;11288:93;11377:3;11288:93;:::i;:::-;11406:2;11401:3;11397:12;11390:19;;11049:366;;;:::o;11421:::-;11563:3;11584:67;11648:2;11643:3;11584:67;:::i;:::-;11577:74;;11660:93;11749:3;11660:93;:::i;:::-;11778:2;11773:3;11769:12;11762:19;;11421:366;;;:::o;11793:::-;11935:3;11956:67;12020:2;12015:3;11956:67;:::i;:::-;11949:74;;12032:93;12121:3;12032:93;:::i;:::-;12150:2;12145:3;12141:12;12134:19;;11793:366;;;:::o;12165:365::-;12307:3;12328:66;12392:1;12387:3;12328:66;:::i;:::-;12321:73;;12403:93;12492:3;12403:93;:::i;:::-;12521:2;12516:3;12512:12;12505:19;;12165:365;;;:::o;12536:366::-;12678:3;12699:67;12763:2;12758:3;12699:67;:::i;:::-;12692:74;;12775:93;12864:3;12775:93;:::i;:::-;12893:2;12888:3;12884:12;12877:19;;12536:366;;;:::o;12908:::-;13050:3;13071:67;13135:2;13130:3;13071:67;:::i;:::-;13064:74;;13147:93;13236:3;13147:93;:::i;:::-;13265:2;13260:3;13256:12;13249:19;;12908:366;;;:::o;13280:::-;13422:3;13443:67;13507:2;13502:3;13443:67;:::i;:::-;13436:74;;13519:93;13608:3;13519:93;:::i;:::-;13637:2;13632:3;13628:12;13621:19;;13280:366;;;:::o;13652:::-;13794:3;13815:67;13879:2;13874:3;13815:67;:::i;:::-;13808:74;;13891:93;13980:3;13891:93;:::i;:::-;14009:2;14004:3;14000:12;13993:19;;13652:366;;;:::o;14024:400::-;14184:3;14205:84;14287:1;14282:3;14205:84;:::i;:::-;14198:91;;14298:93;14387:3;14298:93;:::i;:::-;14416:1;14411:3;14407:11;14400:18;;14024:400;;;:::o;14430:366::-;14572:3;14593:67;14657:2;14652:3;14593:67;:::i;:::-;14586:74;;14669:93;14758:3;14669:93;:::i;:::-;14787:2;14782:3;14778:12;14771:19;;14430:366;;;:::o;14802:::-;14944:3;14965:67;15029:2;15024:3;14965:67;:::i;:::-;14958:74;;15041:93;15130:3;15041:93;:::i;:::-;15159:2;15154:3;15150:12;15143:19;;14802:366;;;:::o;15174:::-;15316:3;15337:67;15401:2;15396:3;15337:67;:::i;:::-;15330:74;;15413:93;15502:3;15413:93;:::i;:::-;15531:2;15526:3;15522:12;15515:19;;15174:366;;;:::o;15546:::-;15688:3;15709:67;15773:2;15768:3;15709:67;:::i;:::-;15702:74;;15785:93;15874:3;15785:93;:::i;:::-;15903:2;15898:3;15894:12;15887:19;;15546:366;;;:::o;15918:::-;16060:3;16081:67;16145:2;16140:3;16081:67;:::i;:::-;16074:74;;16157:93;16246:3;16157:93;:::i;:::-;16275:2;16270:3;16266:12;16259:19;;15918:366;;;:::o;16290:::-;16432:3;16453:67;16517:2;16512:3;16453:67;:::i;:::-;16446:74;;16529:93;16618:3;16529:93;:::i;:::-;16647:2;16642:3;16638:12;16631:19;;16290:366;;;:::o;16662:::-;16804:3;16825:67;16889:2;16884:3;16825:67;:::i;:::-;16818:74;;16901:93;16990:3;16901:93;:::i;:::-;17019:2;17014:3;17010:12;17003:19;;16662:366;;;:::o;17034:398::-;17193:3;17214:83;17295:1;17290:3;17214:83;:::i;:::-;17207:90;;17306:93;17395:3;17306:93;:::i;:::-;17424:1;17419:3;17415:11;17408:18;;17034:398;;;:::o;17438:366::-;17580:3;17601:67;17665:2;17660:3;17601:67;:::i;:::-;17594:74;;17677:93;17766:3;17677:93;:::i;:::-;17795:2;17790:3;17786:12;17779:19;;17438:366;;;:::o;17810:::-;17952:3;17973:67;18037:2;18032:3;17973:67;:::i;:::-;17966:74;;18049:93;18138:3;18049:93;:::i;:::-;18167:2;18162:3;18158:12;18151:19;;17810:366;;;:::o;18182:::-;18324:3;18345:67;18409:2;18404:3;18345:67;:::i;:::-;18338:74;;18421:93;18510:3;18421:93;:::i;:::-;18539:2;18534:3;18530:12;18523:19;;18182:366;;;:::o;18554:::-;18696:3;18717:67;18781:2;18776:3;18717:67;:::i;:::-;18710:74;;18793:93;18882:3;18793:93;:::i;:::-;18911:2;18906:3;18902:12;18895:19;;18554:366;;;:::o;18926:::-;19068:3;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;18926:366;;;:::o;19298:::-;19440:3;19461:67;19525:2;19520:3;19461:67;:::i;:::-;19454:74;;19537:93;19626:3;19537:93;:::i;:::-;19655:2;19650:3;19646:12;19639:19;;19298:366;;;:::o;19670:::-;19812:3;19833:67;19897:2;19892:3;19833:67;:::i;:::-;19826:74;;19909:93;19998:3;19909:93;:::i;:::-;20027:2;20022:3;20018:12;20011:19;;19670:366;;;:::o;20042:::-;20184:3;20205:67;20269:2;20264:3;20205:67;:::i;:::-;20198:74;;20281:93;20370:3;20281:93;:::i;:::-;20399:2;20394:3;20390:12;20383:19;;20042:366;;;:::o;20414:::-;20556:3;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20414:366;;;:::o;20786:::-;20928:3;20949:67;21013:2;21008:3;20949:67;:::i;:::-;20942:74;;21025:93;21114:3;21025:93;:::i;:::-;21143:2;21138:3;21134:12;21127:19;;20786:366;;;:::o;21228:529::-;21389:4;21384:3;21380:14;21476:4;21469:5;21465:16;21459:23;21495:63;21552:4;21547:3;21543:14;21529:12;21495:63;:::i;:::-;21404:164;21660:4;21653:5;21649:16;21643:23;21679:61;21734:4;21729:3;21725:14;21711:12;21679:61;:::i;:::-;21578:172;21358:399;21228:529;;:::o;21763:118::-;21850:24;21868:5;21850:24;:::i;:::-;21845:3;21838:37;21763:118;;:::o;21887:105::-;21962:23;21979:5;21962:23;:::i;:::-;21957:3;21950:36;21887:105;;:::o;21998:701::-;22279:3;22301:95;22392:3;22383:6;22301:95;:::i;:::-;22294:102;;22413:95;22504:3;22495:6;22413:95;:::i;:::-;22406:102;;22525:148;22669:3;22525:148;:::i;:::-;22518:155;;22690:3;22683:10;;21998:701;;;;;:::o;22705:379::-;22889:3;22911:147;23054:3;22911:147;:::i;:::-;22904:154;;23075:3;23068:10;;22705:379;;;:::o;23090:222::-;23183:4;23221:2;23210:9;23206:18;23198:26;;23234:71;23302:1;23291:9;23287:17;23278:6;23234:71;:::i;:::-;23090:222;;;;:::o;23318:640::-;23513:4;23551:3;23540:9;23536:19;23528:27;;23565:71;23633:1;23622:9;23618:17;23609:6;23565:71;:::i;:::-;23646:72;23714:2;23703:9;23699:18;23690:6;23646:72;:::i;:::-;23728;23796:2;23785:9;23781:18;23772:6;23728:72;:::i;:::-;23847:9;23841:4;23837:20;23832:2;23821:9;23817:18;23810:48;23875:76;23946:4;23937:6;23875:76;:::i;:::-;23867:84;;23318:640;;;;;;;:::o;23964:210::-;24051:4;24089:2;24078:9;24074:18;24066:26;;24102:65;24164:1;24153:9;24149:17;24140:6;24102:65;:::i;:::-;23964:210;;;;:::o;24180:313::-;24293:4;24331:2;24320:9;24316:18;24308:26;;24380:9;24374:4;24370:20;24366:1;24355:9;24351:17;24344:47;24408:78;24481:4;24472:6;24408:78;:::i;:::-;24400:86;;24180:313;;;;:::o;24499:419::-;24665:4;24703:2;24692:9;24688:18;24680:26;;24752:9;24746:4;24742:20;24738:1;24727:9;24723:17;24716:47;24780:131;24906:4;24780:131;:::i;:::-;24772:139;;24499:419;;;:::o;24924:::-;25090:4;25128:2;25117:9;25113:18;25105:26;;25177:9;25171:4;25167:20;25163:1;25152:9;25148:17;25141:47;25205:131;25331:4;25205:131;:::i;:::-;25197:139;;24924:419;;;:::o;25349:::-;25515:4;25553:2;25542:9;25538:18;25530:26;;25602:9;25596:4;25592:20;25588:1;25577:9;25573:17;25566:47;25630:131;25756:4;25630:131;:::i;:::-;25622:139;;25349:419;;;:::o;25774:::-;25940:4;25978:2;25967:9;25963:18;25955:26;;26027:9;26021:4;26017:20;26013:1;26002:9;25998:17;25991:47;26055:131;26181:4;26055:131;:::i;:::-;26047:139;;25774:419;;;:::o;26199:::-;26365:4;26403:2;26392:9;26388:18;26380:26;;26452:9;26446:4;26442:20;26438:1;26427:9;26423:17;26416:47;26480:131;26606:4;26480:131;:::i;:::-;26472:139;;26199:419;;;:::o;26624:::-;26790:4;26828:2;26817:9;26813:18;26805:26;;26877:9;26871:4;26867:20;26863:1;26852:9;26848:17;26841:47;26905:131;27031:4;26905:131;:::i;:::-;26897:139;;26624:419;;;:::o;27049:::-;27215:4;27253:2;27242:9;27238:18;27230:26;;27302:9;27296:4;27292:20;27288:1;27277:9;27273:17;27266:47;27330:131;27456:4;27330:131;:::i;:::-;27322:139;;27049:419;;;:::o;27474:::-;27640:4;27678:2;27667:9;27663:18;27655:26;;27727:9;27721:4;27717:20;27713:1;27702:9;27698:17;27691:47;27755:131;27881:4;27755:131;:::i;:::-;27747:139;;27474:419;;;:::o;27899:::-;28065:4;28103:2;28092:9;28088:18;28080:26;;28152:9;28146:4;28142:20;28138:1;28127:9;28123:17;28116:47;28180:131;28306:4;28180:131;:::i;:::-;28172:139;;27899:419;;;:::o;28324:::-;28490:4;28528:2;28517:9;28513:18;28505:26;;28577:9;28571:4;28567:20;28563:1;28552:9;28548:17;28541:47;28605:131;28731:4;28605:131;:::i;:::-;28597:139;;28324:419;;;:::o;28749:::-;28915:4;28953:2;28942:9;28938:18;28930:26;;29002:9;28996:4;28992:20;28988:1;28977:9;28973:17;28966:47;29030:131;29156:4;29030:131;:::i;:::-;29022:139;;28749:419;;;:::o;29174:::-;29340:4;29378:2;29367:9;29363:18;29355:26;;29427:9;29421:4;29417:20;29413:1;29402:9;29398:17;29391:47;29455:131;29581:4;29455:131;:::i;:::-;29447:139;;29174:419;;;:::o;29599:::-;29765:4;29803:2;29792:9;29788:18;29780:26;;29852:9;29846:4;29842:20;29838:1;29827:9;29823:17;29816:47;29880:131;30006:4;29880:131;:::i;:::-;29872:139;;29599:419;;;:::o;30024:::-;30190:4;30228:2;30217:9;30213:18;30205:26;;30277:9;30271:4;30267:20;30263:1;30252:9;30248:17;30241:47;30305:131;30431:4;30305:131;:::i;:::-;30297:139;;30024:419;;;:::o;30449:::-;30615:4;30653:2;30642:9;30638:18;30630:26;;30702:9;30696:4;30692:20;30688:1;30677:9;30673:17;30666:47;30730:131;30856:4;30730:131;:::i;:::-;30722:139;;30449:419;;;:::o;30874:::-;31040:4;31078:2;31067:9;31063:18;31055:26;;31127:9;31121:4;31117:20;31113:1;31102:9;31098:17;31091:47;31155:131;31281:4;31155:131;:::i;:::-;31147:139;;30874:419;;;:::o;31299:::-;31465:4;31503:2;31492:9;31488:18;31480:26;;31552:9;31546:4;31542:20;31538:1;31527:9;31523:17;31516:47;31580:131;31706:4;31580:131;:::i;:::-;31572:139;;31299:419;;;:::o;31724:::-;31890:4;31928:2;31917:9;31913:18;31905:26;;31977:9;31971:4;31967:20;31963:1;31952:9;31948:17;31941:47;32005:131;32131:4;32005:131;:::i;:::-;31997:139;;31724:419;;;:::o;32149:::-;32315:4;32353:2;32342:9;32338:18;32330:26;;32402:9;32396:4;32392:20;32388:1;32377:9;32373:17;32366:47;32430:131;32556:4;32430:131;:::i;:::-;32422:139;;32149:419;;;:::o;32574:::-;32740:4;32778:2;32767:9;32763:18;32755:26;;32827:9;32821:4;32817:20;32813:1;32802:9;32798:17;32791:47;32855:131;32981:4;32855:131;:::i;:::-;32847:139;;32574:419;;;:::o;32999:::-;33165:4;33203:2;33192:9;33188:18;33180:26;;33252:9;33246:4;33242:20;33238:1;33227:9;33223:17;33216:47;33280:131;33406:4;33280:131;:::i;:::-;33272:139;;32999:419;;;:::o;33424:::-;33590:4;33628:2;33617:9;33613:18;33605:26;;33677:9;33671:4;33667:20;33663:1;33652:9;33648:17;33641:47;33705:131;33831:4;33705:131;:::i;:::-;33697:139;;33424:419;;;:::o;33849:::-;34015:4;34053:2;34042:9;34038:18;34030:26;;34102:9;34096:4;34092:20;34088:1;34077:9;34073:17;34066:47;34130:131;34256:4;34130:131;:::i;:::-;34122:139;;33849:419;;;:::o;34274:::-;34440:4;34478:2;34467:9;34463:18;34455:26;;34527:9;34521:4;34517:20;34513:1;34502:9;34498:17;34491:47;34555:131;34681:4;34555:131;:::i;:::-;34547:139;;34274:419;;;:::o;34699:::-;34865:4;34903:2;34892:9;34888:18;34880:26;;34952:9;34946:4;34942:20;34938:1;34927:9;34923:17;34916:47;34980:131;35106:4;34980:131;:::i;:::-;34972:139;;34699:419;;;:::o;35124:::-;35290:4;35328:2;35317:9;35313:18;35305:26;;35377:9;35371:4;35367:20;35363:1;35352:9;35348:17;35341:47;35405:131;35531:4;35405:131;:::i;:::-;35397:139;;35124:419;;;:::o;35549:::-;35715:4;35753:2;35742:9;35738:18;35730:26;;35802:9;35796:4;35792:20;35788:1;35777:9;35773:17;35766:47;35830:131;35956:4;35830:131;:::i;:::-;35822:139;;35549:419;;;:::o;35974:::-;36140:4;36178:2;36167:9;36163:18;36155:26;;36227:9;36221:4;36217:20;36213:1;36202:9;36198:17;36191:47;36255:131;36381:4;36255:131;:::i;:::-;36247:139;;35974:419;;;:::o;36399:::-;36565:4;36603:2;36592:9;36588:18;36580:26;;36652:9;36646:4;36642:20;36638:1;36627:9;36623:17;36616:47;36680:131;36806:4;36680:131;:::i;:::-;36672:139;;36399:419;;;:::o;36824:::-;36990:4;37028:2;37017:9;37013:18;37005:26;;37077:9;37071:4;37067:20;37063:1;37052:9;37048:17;37041:47;37105:131;37231:4;37105:131;:::i;:::-;37097:139;;36824:419;;;:::o;37249:::-;37415:4;37453:2;37442:9;37438:18;37430:26;;37502:9;37496:4;37492:20;37488:1;37477:9;37473:17;37466:47;37530:131;37656:4;37530:131;:::i;:::-;37522:139;;37249:419;;;:::o;37674:::-;37840:4;37878:2;37867:9;37863:18;37855:26;;37927:9;37921:4;37917:20;37913:1;37902:9;37898:17;37891:47;37955:131;38081:4;37955:131;:::i;:::-;37947:139;;37674:419;;;:::o;38099:350::-;38256:4;38294:2;38283:9;38279:18;38271:26;;38307:135;38439:1;38428:9;38424:17;38415:6;38307:135;:::i;:::-;38099:350;;;;:::o;38455:222::-;38548:4;38586:2;38575:9;38571:18;38563:26;;38599:71;38667:1;38656:9;38652:17;38643:6;38599:71;:::i;:::-;38455:222;;;;:::o;38683:129::-;38717:6;38744:20;;:::i;:::-;38734:30;;38773:33;38801:4;38793:6;38773:33;:::i;:::-;38683:129;;;:::o;38818:75::-;38851:6;38884:2;38878:9;38868:19;;38818:75;:::o;38899:307::-;38960:4;39050:18;39042:6;39039:30;39036:56;;;39072:18;;:::i;:::-;39036:56;39110:29;39132:6;39110:29;:::i;:::-;39102:37;;39194:4;39188;39184:15;39176:23;;38899:307;;;:::o;39212:98::-;39263:6;39297:5;39291:12;39281:22;;39212:98;;;:::o;39316:99::-;39368:6;39402:5;39396:12;39386:22;;39316:99;;;:::o;39421:168::-;39504:11;39538:6;39533:3;39526:19;39578:4;39573:3;39569:14;39554:29;;39421:168;;;;:::o;39595:147::-;39696:11;39733:3;39718:18;;39595:147;;;;:::o;39748:169::-;39832:11;39866:6;39861:3;39854:19;39906:4;39901:3;39897:14;39882:29;;39748:169;;;;:::o;39923:148::-;40025:11;40062:3;40047:18;;39923:148;;;;:::o;40077:305::-;40117:3;40136:20;40154:1;40136:20;:::i;:::-;40131:25;;40170:20;40188:1;40170:20;:::i;:::-;40165:25;;40324:1;40256:66;40252:74;40249:1;40246:81;40243:107;;;40330:18;;:::i;:::-;40243:107;40374:1;40371;40367:9;40360:16;;40077:305;;;;:::o;40388:185::-;40428:1;40445:20;40463:1;40445:20;:::i;:::-;40440:25;;40479:20;40497:1;40479:20;:::i;:::-;40474:25;;40518:1;40508:35;;40523:18;;:::i;:::-;40508:35;40565:1;40562;40558:9;40553:14;;40388:185;;;;:::o;40579:348::-;40619:7;40642:20;40660:1;40642:20;:::i;:::-;40637:25;;40676:20;40694:1;40676:20;:::i;:::-;40671:25;;40864:1;40796:66;40792:74;40789:1;40786:81;40781:1;40774:9;40767:17;40763:105;40760:131;;;40871:18;;:::i;:::-;40760:131;40919:1;40916;40912:9;40901:20;;40579:348;;;;:::o;40933:191::-;40973:4;40993:20;41011:1;40993:20;:::i;:::-;40988:25;;41027:20;41045:1;41027:20;:::i;:::-;41022:25;;41066:1;41063;41060:8;41057:34;;;41071:18;;:::i;:::-;41057:34;41116:1;41113;41109:9;41101:17;;40933:191;;;;:::o;41130:96::-;41167:7;41196:24;41214:5;41196:24;:::i;:::-;41185:35;;41130:96;;;:::o;41232:90::-;41266:7;41309:5;41302:13;41295:21;41284:32;;41232:90;;;:::o;41328:149::-;41364:7;41404:66;41397:5;41393:78;41382:89;;41328:149;;;:::o;41483:126::-;41520:7;41560:42;41553:5;41549:54;41538:65;;41483:126;;;:::o;41615:77::-;41652:7;41681:5;41670:16;;41615:77;;;:::o;41698:101::-;41734:7;41774:18;41767:5;41763:30;41752:41;;41698:101;;;:::o;41805:154::-;41889:6;41884:3;41879;41866:30;41951:1;41942:6;41937:3;41933:16;41926:27;41805:154;;;:::o;41965:307::-;42033:1;42043:113;42057:6;42054:1;42051:13;42043:113;;;42142:1;42137:3;42133:11;42127:18;42123:1;42118:3;42114:11;42107:39;42079:2;42076:1;42072:10;42067:15;;42043:113;;;42174:6;42171:1;42168:13;42165:101;;;42254:1;42245:6;42240:3;42236:16;42229:27;42165:101;42014:258;41965:307;;;:::o;42278:320::-;42322:6;42359:1;42353:4;42349:12;42339:22;;42406:1;42400:4;42396:12;42427:18;42417:81;;42483:4;42475:6;42471:17;42461:27;;42417:81;42545:2;42537:6;42534:14;42514:18;42511:38;42508:84;;;42564:18;;:::i;:::-;42508:84;42329:269;42278:320;;;:::o;42604:281::-;42687:27;42709:4;42687:27;:::i;:::-;42679:6;42675:40;42817:6;42805:10;42802:22;42781:18;42769:10;42766:34;42763:62;42760:88;;;42828:18;;:::i;:::-;42760:88;42868:10;42864:2;42857:22;42647:238;42604:281;;:::o;42891:233::-;42930:3;42953:24;42971:5;42953:24;:::i;:::-;42944:33;;42999:66;42992:5;42989:77;42986:103;;;43069:18;;:::i;:::-;42986:103;43116:1;43109:5;43105:13;43098:20;;42891:233;;;:::o;43130:176::-;43162:1;43179:20;43197:1;43179:20;:::i;:::-;43174:25;;43213:20;43231:1;43213:20;:::i;:::-;43208:25;;43252:1;43242:35;;43257:18;;:::i;:::-;43242:35;43298:1;43295;43291:9;43286:14;;43130:176;;;;:::o;43312:180::-;43360:77;43357:1;43350:88;43457:4;43454:1;43447:15;43481:4;43478:1;43471:15;43498:180;43546:77;43543:1;43536:88;43643:4;43640:1;43633:15;43667:4;43664:1;43657:15;43684:180;43732:77;43729:1;43722:88;43829:4;43826:1;43819:15;43853:4;43850:1;43843:15;43870:180;43918:77;43915:1;43908:88;44015:4;44012:1;44005:15;44039:4;44036:1;44029:15;44056:180;44104:77;44101:1;44094:88;44201:4;44198:1;44191:15;44225:4;44222:1;44215:15;44242:117;44351:1;44348;44341:12;44365:117;44474:1;44471;44464:12;44488:117;44597:1;44594;44587:12;44611:117;44720:1;44717;44710:12;44734:117;44843:1;44840;44833:12;44857:117;44966:1;44963;44956:12;44980:102;45021:6;45072:2;45068:7;45063:2;45056:5;45052:14;45048:28;45038:38;;44980:102;;;:::o;45088:221::-;45228:34;45224:1;45216:6;45212:14;45205:58;45297:4;45292:2;45284:6;45280:15;45273:29;45088:221;:::o;45315:164::-;45455:16;45451:1;45443:6;45439:14;45432:40;45315:164;:::o;45485:225::-;45625:34;45621:1;45613:6;45609:14;45602:58;45694:8;45689:2;45681:6;45677:15;45670:33;45485:225;:::o;45716:229::-;45856:34;45852:1;45844:6;45840:14;45833:58;45925:12;45920:2;45912:6;45908:15;45901:37;45716:229;:::o;45951:170::-;46091:22;46087:1;46079:6;46075:14;46068:46;45951:170;:::o;46127:::-;46267:22;46263:1;46255:6;46251:14;46244:46;46127:170;:::o;46303:222::-;46443:34;46439:1;46431:6;46427:14;46420:58;46512:5;46507:2;46499:6;46495:15;46488:30;46303:222;:::o;46531:224::-;46671:34;46667:1;46659:6;46655:14;46648:58;46740:7;46735:2;46727:6;46723:15;46716:32;46531:224;:::o;46761:236::-;46901:34;46897:1;46889:6;46885:14;46878:58;46970:19;46965:2;46957:6;46953:15;46946:44;46761:236;:::o;47003:178::-;47143:30;47139:1;47131:6;47127:14;47120:54;47003:178;:::o;47187:159::-;47327:11;47323:1;47315:6;47311:14;47304:35;47187:159;:::o;47352:244::-;47492:34;47488:1;47480:6;47476:14;47469:58;47561:27;47556:2;47548:6;47544:15;47537:52;47352:244;:::o;47602:174::-;47742:26;47738:1;47730:6;47726:14;47719:50;47602:174;:::o;47782:230::-;47922:34;47918:1;47910:6;47906:14;47899:58;47991:13;47986:2;47978:6;47974:15;47967:38;47782:230;:::o;48018:225::-;48158:34;48154:1;48146:6;48142:14;48135:58;48227:8;48222:2;48214:6;48210:15;48203:33;48018:225;:::o;48249:155::-;48389:7;48385:1;48377:6;48373:14;48366:31;48249:155;:::o;48410:182::-;48550:34;48546:1;48538:6;48534:14;48527:58;48410:182;:::o;48598:174::-;48738:26;48734:1;48726:6;48722:14;48715:50;48598:174;:::o;48778:234::-;48918:34;48914:1;48906:6;48902:14;48895:58;48987:17;48982:2;48974:6;48970:15;48963:42;48778:234;:::o;49018:176::-;49158:28;49154:1;49146:6;49142:14;49135:52;49018:176;:::o;49200:237::-;49340:34;49336:1;49328:6;49324:14;49317:58;49409:20;49404:2;49396:6;49392:15;49385:45;49200:237;:::o;49443:179::-;49583:31;49579:1;49571:6;49567:14;49560:55;49443:179;:::o;49628:221::-;49768:34;49764:1;49756:6;49752:14;49745:58;49837:4;49832:2;49824:6;49820:15;49813:29;49628:221;:::o;49855:114::-;;:::o;49975:166::-;50115:18;50111:1;50103:6;50099:14;50092:42;49975:166;:::o;50147:238::-;50287:34;50283:1;50275:6;50271:14;50264:58;50356:21;50351:2;50343:6;50339:15;50332:46;50147:238;:::o;50391:220::-;50531:34;50527:1;50519:6;50515:14;50508:58;50600:3;50595:2;50587:6;50583:15;50576:28;50391:220;:::o;50617:227::-;50757:34;50753:1;50745:6;50741:14;50734:58;50826:10;50821:2;50813:6;50809:15;50802:35;50617:227;:::o;50850:169::-;50990:21;50986:1;50978:6;50974:14;50967:45;50850:169;:::o;51025:233::-;51165:34;51161:1;51153:6;51149:14;51142:58;51234:16;51229:2;51221:6;51217:15;51210:41;51025:233;:::o;51264:161::-;51404:13;51400:1;51392:6;51388:14;51381:37;51264:161;:::o;51431:181::-;51571:33;51567:1;51559:6;51555:14;51548:57;51431:181;:::o;51618:234::-;51758:34;51754:1;51746:6;51742:14;51735:58;51827:17;51822:2;51814:6;51810:15;51803:42;51618:234;:::o;51858:232::-;51998:34;51994:1;51986:6;51982:14;51975:58;52067:15;52062:2;52054:6;52050:15;52043:40;51858:232;:::o;52096:122::-;52169:24;52187:5;52169:24;:::i;:::-;52162:5;52159:35;52149:63;;52208:1;52205;52198:12;52149:63;52096:122;:::o;52224:116::-;52294:21;52309:5;52294:21;:::i;:::-;52287:5;52284:32;52274:60;;52330:1;52327;52320:12;52274:60;52224:116;:::o;52346:120::-;52418:23;52435:5;52418:23;:::i;:::-;52411:5;52408:34;52398:62;;52456:1;52453;52446:12;52398:62;52346:120;:::o;52472:122::-;52545:24;52563:5;52545:24;:::i;:::-;52538:5;52535:35;52525:63;;52584:1;52581;52574:12;52525:63;52472:122;:::o

Swarm Source

ipfs://625ae03481ba9ef48a177e5d8d6a7904835119320f3318a8f275e95ede99d101
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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