ETH Price: $2,901.55 (-9.94%)
Gas: 16 Gwei

Token

Kallax (KLX)
 

Overview

Max Total Supply

250 KLX

Holders

136

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
*😒️🐵️⛵️.eth
Balance
1 KLX
0x16d375f1D36b2B4A328e6B9b5701D613f5600217
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:
Kallax

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion
File 1 of 18 : Kallax.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.17.0;

import { ERC721A } from "@erc721a/ERC721A.sol";
import { NFTEventsAndErrors } from "./NFTEventsAndErrors.sol";
import { Base64 } from "@openzeppelin/contracts/utils/Base64.sol";
import { IERC2981 } from "@openzeppelin/contracts/interfaces/IERC2981.sol";
import { IERC165 } from "@openzeppelin/contracts/interfaces/IERC165.sol";
import { Utils } from "./utils/Utils.sol";
import { Constants } from "./utils/Constants.sol";
import { DefaultOperatorFilterer } from "operator-filter-registry/src/DefaultOperatorFilterer.sol";
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
import { SSTORE2 } from "@solady/utils/SSTORE2.sol";
import { TwoStepOwnable } from "./utils/TwoStepOwnable.sol";

/// @title Kallax NFT
/// @author Aspyn Palatnick (aspyn.eth, stuckinaboot.eth)
/// @notice On-chain NFT with art created by Nicolas Lebrun. Curated by Arteology.
contract Kallax is Constants, ERC721A, IERC2981, NFTEventsAndErrors, TwoStepOwnable, DefaultOperatorFilterer {
    string private previewImageUri;

    address private artPtr;
    uint16 private artInjectPtrIndex;

    mapping(address => bool) private publicMinted;

    bool private mintDisabled = true;

    constructor(
        uint16 initialArtInjectPtrIndex,
        string memory initialArtInject,
        string memory initialPreviewImageUri
    )
        ERC721A("Kallax", "KLX")
    {
        artInjectPtrIndex = initialArtInjectPtrIndex;
        artPtr = SSTORE2.write(bytes(initialArtInject));
        previewImageUri = initialPreviewImageUri;

        _mint(msg.sender, 1);
    }

    // Art

    /// @notice Set art for the collection.
    function setArt(uint16 _artInjectIndex, string calldata art) external onlyOwner {
        artInjectPtrIndex = _artInjectIndex;
        artPtr = SSTORE2.write(bytes(art));
    }

    /// @notice Set preview image uri for the collection.
    function setPreviewImageUri(string calldata _previewImageUri) external onlyOwner {
        previewImageUri = _previewImageUri;
    }

    // Mint

    function enableMint() external onlyOwner {
        mintDisabled = false;
    }

    /// @notice Mint tokens for public minters.
    function mintPublic() external payable {
        if (mintDisabled) {
            // Check mint is enabled
            revert MintNotEnabled();
        }

        if (PRICE != msg.value) {
            // Check payment by sender is correct
            revert InsufficientPayment();
        }

        if (PACKED_TOKENS.length < _nextTokenId()) {
            // Check max supply is not exceeded
            revert MaxSupplyReached();
        }

        if (publicMinted[msg.sender]) {
            revert MaxForAddressForMintStageReached();
        }

        // Update state
        publicMinted[msg.sender] = true;

        // Perform mint
        _mint(msg.sender, 1);
    }

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

    /// @notice Withdraw all ETH from the contract to the vault.
    function withdraw() external {
        (bool success,) = VAULT_ADDRESS.call{ value: address(this).balance }("");
        require(success);
    }

    // Metadata

    function getArt(uint256 tokenId) public view returns (string memory) {
        if (!_exists(tokenId)) {
            revert URIQueryForNonexistentToken();
        }

        return string.concat(
            string(SSTORE2.read(artPtr, 0, artInjectPtrIndex)),
            Strings.toHexString(
                uint256(
                    keccak256(
                        abi.encode(
                            // PACKED_TOKENS index starts at 0 and token IDs that will exist start at 1
                            Utils.unpackPackedToken(PACKED_TOKENS[tokenId - 1]).tokenArt
                        )
                    )
                )
            ),
            string(SSTORE2.read(artPtr, artInjectPtrIndex))
        );
    }

    /// @notice Get token uri for a particular token.
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) {
            revert URIQueryForNonexistentToken();
        }

        // PACKED_TOKENS index starts at 0 and token IDs that will exist start at 1
        Utils.UnpackedToken memory unpackedToken = Utils.unpackPackedToken(PACKED_TOKENS[tokenId - 1]);

        return Utils.formatTokenURI(
            string.concat(previewImageUri, _toString(tokenId)),
            Utils.htmlToURI(getArt(tokenId)),
            string.concat("Kallax #", _toString(tokenId)),
            "Kallax is an on-chain series, a generative work created with code where each edition has been carefully selected. It explores the layering of different blocks on a modular grid.",
            string.concat(
                "[",
                Utils.getTrait("Box density", DENSITY_VALS[unpackedToken.density], true),
                Utils.getTrait("Box depth", DEPTH_VALS[unpackedToken.depth], true),
                Utils.getTrait("Facing", FACING_VALS[unpackedToken.facing], true),
                Utils.getTrait("Split based", TILE_DIVISION_VALS[unpackedToken.tileDivision], true),
                Utils.getTrait("Cell width", SEGMENT_SIZE_VALS[unpackedToken.segmentSize], true),
                Utils.getTrait("Palette", PALETTE[unpackedToken.palette], false),
                "]"
            )
        );
    }

    // Royalties

    function royaltyInfo(uint256, uint256 salePrice) external pure returns (address receiver, uint256 royaltyAmount) {
        return (ROYALTY_ADDRESS, (salePrice * 750) / 10_000);
    }

    // Operator filter

    function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) {
        super.setApprovalForAll(operator, approved);
    }

    function approve(address operator, uint256 tokenId) public payable override onlyAllowedOperatorApproval(operator) {
        super.approve(operator, tokenId);
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    )
        public
        payable
        override
        onlyAllowedOperator(from)
    {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    )
        public
        payable
        override
        onlyAllowedOperator(from)
    {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    )
        public
        payable
        override
        onlyAllowedOperator(from)
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }

    // IERC165

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

File 2 of 18 : ERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import "./IERC721A.sol";

/**
 * @dev Interface of ERC721 token receiver.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    )
        external
        returns (bytes4);
}

/**
 * @title ERC721A
 *
 * @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721)
 * Non-Fungible Token Standard, including the Metadata extension.
 * Optimized for lower gas during batch mints.
 *
 * Token IDs are minted in sequential order (e.g. 0, 1, 2, 3, ...)
 * starting from `_startTokenId()`.
 *
 * Assumptions:
 *
 * - An owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 * - The maximum token ID cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is IERC721A {
    // Bypass for a `--via-ir` bug (https://github.com/chiru-labs/ERC721A/pull/364).
    struct TokenApprovalRef {
        address value;
    }

    // =============================================================
    //                           CONSTANTS
    // =============================================================

    // Mask of an entry in packed address data.
    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant _BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant _BITMASK_BURNED = 1 << 224;

    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The bit position of `extraData` in packed ownership.
    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    // Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`.
    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    // The mask of the lower 160 bits for addresses.
    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    // The maximum `quantity` that can be minted with {_mintERC2309}.
    // This limit is to prevent overflows on the address data entries.
    // For a limit of 5000, a total of 3.689e15 calls to {_mintERC2309}
    // is required to cause an overflow, which is unrealistic.
    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    // The `Transfer` event signature is given by:
    // `keccak256(bytes("Transfer(address,address,uint256)"))`.
    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    // =============================================================
    //                            STORAGE
    // =============================================================

    // The next token ID to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // 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 {_packedOwnershipOf} implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    // - [232..255] `extraData`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

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

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

    // =============================================================
    //                          CONSTRUCTOR
    // =============================================================

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

    // =============================================================
    //                   TOKEN COUNTING OPERATIONS
    // =============================================================

    /**
     * @dev Returns the starting token ID.
     * To change the starting token ID, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count.
     * To get the total number of tokens minted, please see {_totalMinted}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * @dev Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view virtual returns (uint256) {
        // Counter underflow is impossible as `_currentIndex` does not decrement,
        // and it is initialized to `_startTokenId()`.
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev Returns the total number of tokens burned.
     */
    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    // =============================================================
    //                    ADDRESS DATA OPERATIONS
    // =============================================================

    /**
     * @dev Returns the number of tokens in `owner`'s account.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    /**
     * Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    // =============================================================
    //                            IERC165
    // =============================================================

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30000 gas.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes
        // of the XOR of all function selectors in the interface.
        // See: [ERC165](https://eips.ethereum.org/EIPS/eip-165)
        // (e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`)
        return interfaceId == 0x01ffc9a7 // ERC165 interface ID for ERC165.
            || interfaceId == 0x80ac58cd // ERC165 interface ID for ERC721.
            || interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    // =============================================================
    //                        IERC721Metadata
    // =============================================================

    /**
     * @dev Returns the token collection name.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256) public view virtual override returns (string memory) {
        return "";
    }

    // =============================================================
    //                     OWNERSHIPS OPERATIONS
    // =============================================================

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    /**
     * @dev Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around over time.
     */
    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) {
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & _BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an initialized ownership slot
                        // (i.e. `ownership.addr != address(0) && ownership.burned == false`)
                        // before an unintialized ownership slot
                        // (i.e. `ownership.addr == address(0) && ownership.burned == false`)
                        // Hence, `curr` will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed will be zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

    /**
     * @dev Packs ownership data into a single uint256.
     */
    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    /**
     * @dev Returns the `nextInitialized` flag set if `quantity` equals 1.
     */
    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`.
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    // =============================================================
    //                      APPROVAL OPERATIONS
    // =============================================================

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

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

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom}
     * for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

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

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted. See {_mint}.
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex // If within bounds,
            && _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }

    /**
     * @dev Returns whether `msgSender` is equal to `approvedAddress` or `owner`.
     */
    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    )
        private
        pure
        returns (bool result)
    {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean.
            msgSender := and(msgSender, _BITMASK_ADDRESS)
            // `msgSender == owner || msgSender == approvedAddress`.
            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    /**
     * @dev Returns the storage slot and value for the approved address of `tokenId`.
     */
    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];
        // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId].value`.
        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    // =============================================================
    //                      TRANSFER OPERATIONS
    // =============================================================

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token
     * by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        // The nested ifs save around 20+ gas over a compound boolean condition.
        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) {
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // 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 {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _packOwnershipData(to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked));

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

    /**
     * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public payable virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token
     * by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement
     * {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    )
        public
        payable
        virtual
        override
    {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0) {
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token IDs
     * are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * `startTokenId` - the first token ID to be transferred.
     * `quantity` - the amount to be transferred.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual { }

    /**
     * @dev Hook that is called after a set of serially-ordered token IDs
     * have been transferred. This includes minting.
     * And also called after one token has been burned.
     *
     * `startTokenId` - the first token ID to be transferred.
     * `quantity` - the amount to be transferred.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual { }

    /**
     * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * `from` - Previous owner of the given token ID.
     * `to` - Target address that will receive the token.
     * `tokenId` - Token ID to be transferred.
     * `_data` - Optional data to send along with the call.
     *
     * Returns whether the call correctly returned the expected magic value.
     */
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    )
        private
        returns (bool)
    {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    // =============================================================
    //                        MINT OPERATIONS
    // =============================================================

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event for each mint.
     */
    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // `balance` and `numberMinted` have a maximum limit of 2**64.
        // `tokenId` has a maximum limit of 2**256.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _packOwnershipData(to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0));

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            // Use assembly to loop and emit the `Transfer` event for gas savings.
            // The duplicated `log4` removes an extra check and reduces stack juggling.
            // The assembly, together with the surrounding Solidity code, have been
            // delicately arranged to nudge the compiler into producing optimized opcodes.
            assembly {
                // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean.
                toMasked := and(to, _BITMASK_ADDRESS)
                // Emit the `Transfer` event.
                log4(
                    0, // Start of data (0, since no data).
                    0, // End of data (0, since no data).
                    _TRANSFER_EVENT_SIGNATURE, // Signature.
                    0, // `address(0)`.
                    toMasked, // `to`.
                    startTokenId // `tokenId`.
                )

                // The `iszero(eq(,))` check ensures that large values of `quantity`
                // that overflows uint256 will make the loop run out of gas.
                // The compiler will optimize the `iszero` away for performance.
                for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } {
                    // Emit the `Transfer` event. Similar to above.
                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * This function is intended for efficient minting only during contract creation.
     *
     * It emits only one {ConsecutiveTransfer} as defined in
     * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309),
     * instead of a sequence of {Transfer} event(s).
     *
     * Calling this function outside of contract creation WILL make your contract
     * non-compliant with the ERC721 standard.
     * For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309
     * {ConsecutiveTransfer} event is only permissible during contract creation.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {ConsecutiveTransfer} event.
     */
    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

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

        // Overflows are unrealistic due to the above check for `quantity` to be below the limit.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _packOwnershipData(to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0));

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

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

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, "");
    }

    // =============================================================
    //                        BURN OPERATIONS
    // =============================================================

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

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

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            // The nested ifs save around 20+ gas over a compound boolean condition.
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) {
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
            }
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // 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 {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << _BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    // =============================================================
    //                     EXTRA DATA OPERATIONS
    // =============================================================

    /**
     * @dev Directly sets the extra data for the ownership data `index`.
     */
    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        // Cast `extraData` with assembly to avoid redundant masking.
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    /**
     * @dev Called during each token transfer to set the 24bit `extraData` field.
     * Intended to be overridden by the cosumer contract.
     *
     * `previousExtraData` - the value of `extraData` before transfer.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _extraData(address from, address to, uint24 previousExtraData) internal view virtual returns (uint24) { }

    /**
     * @dev Returns the next extra data for the packed ownership data.
     * The returned result is shifted into position.
     */
    function _nextExtraData(address from, address to, uint256 prevOwnershipPacked) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    // =============================================================
    //                       OTHER OPERATIONS
    // =============================================================

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a uint256 to its ASCII string decimal representation.
     */
    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), but
            // we allocate 0xa0 bytes to keep the free memory pointer 32-byte word aligned.
            // We will need 1 word for the trailing zeros padding, 1 word for the length,
            // and 3 words for a maximum of 78 digits. Total: 5 * 0x20 = 0xa0.
            let m := add(mload(0x40), 0xa0)
            // Update the free memory pointer to allocate.
            mstore(0x40, m)
            // Assign the `str` to the end.
            str := sub(m, 0x20)
            // Zeroize the slot after the string.
            mstore(str, 0)

            // Cache the end of the memory to calculate the length later.
            let end := str

            // We write the string from rightmost digit to leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // prettier-ignore
            for { let temp := value } 1 { } {
                str := sub(str, 1)
                // Write the character to the pointer.
                // The ASCII index of the '0' character is 48.
                mstore8(str, add(48, mod(temp, 10)))
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
                // prettier-ignore
                if iszero(temp) { break }
            }

            let length := sub(end, str)
            // Move the pointer 32 bytes leftwards to make room for the length.
            str := sub(str, 0x20)
            // Store the length.
            mstore(str, length)
        }
    }
}

File 3 of 18 : NFTEventsAndErrors.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.17.0;

import { ERC721A } from "@erc721a/ERC721A.sol";

interface NFTEventsAndErrors {
    error InsufficientPayment();
    error MaxSupplyReached();
    error MaxForAddressForMintStageReached();
    error MintNotEnabled();
}

File 4 of 18 : Base64.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides a set of functions to operate with Base64 strings.
 *
 * _Available since v4.5._
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
}

File 5 of 18 : IERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

File 6 of 18 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

File 7 of 18 : Utils.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.17.0;

/// @title Utils
/// @author Aspyn Palatnick (aspyn.eth, stuckinaboot.eth)
/// @notice Utility functions for constructing on-chain Kallax NFT
library Utils {
    struct UnpackedToken {
        uint16 tokenArt;
        uint256 density;
        uint256 depth;
        uint256 facing;
        uint256 tileDivision;
        uint256 segmentSize;
        uint256 palette;
    }

    string internal constant BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    function htmlToURI(string memory _source) internal pure returns (string memory) {
        return string.concat("data:text/html;base64,", encodeBase64(bytes(_source)));
    }

    function formatTokenURI(
        string memory _imageURI,
        string memory _animationURI,
        string memory _name,
        string memory _description,
        string memory _properties
    )
        internal
        pure
        returns (string memory)
    {
        return string.concat(
            "data:application/json;base64,",
            encodeBase64(
                bytes(
                    string.concat(
                        '{"name":"',
                        _name,
                        '","description":"',
                        _description,
                        '","attributes":',
                        _properties,
                        ',"image":"',
                        _imageURI,
                        '","animation_url":"',
                        _animationURI,
                        '"}'
                    )
                )
            )
        );
    }

    function getTrait(
        string memory traitType,
        string memory value,
        bool includeTrailingComma
    )
        internal
        pure
        returns (string memory)
    {
        return string.concat(
            '{"trait_type":"',
            traitType,
            '","value":',
            string.concat('"', value, '"'),
            "}",
            includeTrailingComma ? "," : ""
        );
    }

    // Encode some bytes in base64
    // https://gist.github.com/mbvissers/8ba9ac1eca9ed0ef6973bd49b3c999ba
    function encodeBase64(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";

        // load the table into memory
        string memory table = BASE64_TABLE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for { } lt(dataPtr, endPtr) { } {
                dataPtr := add(dataPtr, 3)

                // read 3 bytes
                let input := mload(dataPtr)

                // write 4 characters
                mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F)))))
                resultPtr := add(resultPtr, 1)
                mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F)))))
                resultPtr := add(resultPtr, 1)
                mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F)))))
                resultPtr := add(resultPtr, 1)
                mstore(resultPtr, shl(248, mload(add(tablePtr, and(input, 0x3F)))))
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }
        }

        return result;
    }

    function unpackPackedToken(uint32 packedToken) internal pure returns (UnpackedToken memory) {
        uint256 bits2Mask = (1 << 2) - 1;
        return UnpackedToken({
            palette: (packedToken >> 0) & ((1 << 7) - 1),
            facing: (packedToken >> 7) & ((1 << 1) - 1),
            depth: (packedToken >> 8) & bits2Mask,
            tileDivision: (packedToken >> 10) & bits2Mask,
            segmentSize: (packedToken >> 12) & bits2Mask,
            density: (packedToken >> 14) & bits2Mask,
            tokenArt: uint16((packedToken >> 16) & ((1 << 16) - 1))
        });
    }
}

File 8 of 18 : Constants.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.17.0;

/// @title Constants
/// @author Aspyn Palatnick (aspyn.eth, stuckinaboot.eth)
/// @notice Constants for constructing on-chain Kallax NFT
contract Constants {
    uint256 internal constant PRICE = 0.1 ether;
    address payable internal constant VAULT_ADDRESS = payable(address(0xa52Ec4B923E1D0D5c2Dd2486f0749786AE111F1B));
    address payable internal constant ROYALTY_ADDRESS = payable(address(0xB4da20397Ea45fdC17C2122d35C0b8328f15D650));

    uint32[250] internal PACKED_TOKENS = [
        3_554_476_549,
        640_567_689,
        2_616_390_055,
        119_981_112,
        2_575_808_799,
        3_414_476_826,
        498_329_384,
        1_667_360_194,
        2_108_414_134,
        2_928_146_457,
        4_093_100_188,
        3_206_797_874,
        4_212_693_417,
        1_949_220_995,
        4_294_136_321,
        4_140_495_031,
        2_117_912_195,
        773_085_375,
        231_270_407,
        54_168_493,
        1_921_615_896,
        135_320_617,
        1_892_325_902,
        3_123_988_550,
        3_334_087_583,
        2_976_315_450,
        1_774_335_277,
        3_922_166_161,
        3_464_855_851,
        2_745_631_122,
        3_273_578_888,
        923_746_441,
        2_056_423_869,
        99_516_832,
        779_266_076,
        1_294_635_048,
        3_495_313_805,
        542_303_128,
        4_152_428_588,
        1_680_263_068,
        3_568_949_286,
        1_902_964_754,
        3_409_357_446,
        438_159_634,
        2_962_327_689,
        3_550_351_886,
        3_438_080_271,
        3_827_762_443,
        1_772_544_135,
        3_657_106_866,
        2_235_360_310,
        1_049_129_609,
        2_318_909_570,
        2_852_149_249,
        3_605_694_380,
        2_367_793_178,
        4_016_940_694,
        2_943_702_667,
        1_364_505_475,
        3_394_144_440,
        905_574_717,
        1_285_335_565,
        3_618_534_829,
        2_296_956_844,
        3_622_557_343,
        3_319_092_645,
        391_989_792,
        3_994_214_426,
        844_722_582,
        4_014_573_730,
        3_153_690_817,
        1_837_401_268,
        1_465_553_349,
        2_661_782_659,
        2_056_260_137,
        1_803_984_908,
        435_989_432,
        3_511_174_305,
        126_948_402,
        2_870_088_348,
        4_039_475_522,
        2_894_600_453,
        3_666_837_508,
        4_230_178_087,
        3_178_957_062,
        2_473_514_415,
        3_347_706_555,
        3_630_635_411,
        276_676_608,
        3_623_020_986,
        3_512_694_821,
        1_583_854_858,
        604_025_012,
        1_183_875_087,
        1_220_115_367,
        243_758_531,
        3_426_387_368,
        1_374_087_058,
        2_850_670_517,
        4_023_732_235,
        633_128_998,
        2_742_931_505,
        3_974_003_359,
        4_109_494_576,
        2_871_371_319,
        1_331_012_539,
        281_253_133,
        74_376_756,
        4_133_058_117,
        233_708_040,
        2_262_575_276,
        3_391_800_593,
        1_507_591_040,
        2_818_942_239,
        3_566_986_665,
        290_701_745,
        2_376_292_395,
        3_265_350_181,
        3_089_008_132,
        1_469_850_548,
        2_841_059_460,
        2_687_048_120,
        1_868_870_691,
        1_833_831_362,
        4_057_905_205,
        2_756_794_426,
        4_027_521_315,
        2_349_537_810,
        1_890_448_524,
        2_627_622_597,
        1_744_300_307,
        4_044_268_941,
        1_897_322_518,
        2_319_705_266,
        1_111_311_540,
        2_830_718_342,
        4_213_483_686,
        3_372_639_786,
        2_105_624_247,
        949_549_122,
        474_716_102,
        4_168_529_094,
        2_710_800_768,
        3_464_612_111,
        3_468_142_228,
        3_077_264_420,
        613_671_217,
        4_208_448_823,
        2_146_598_981,
        1_016_301_963,
        2_497_110_186,
        494_090_401,
        3_951_609_090,
        794_580_363,
        440_334_745,
        1_681_446_286,
        3_221_070_907,
        3_958_075_648,
        150_841_477,
        2_409_522_614,
        4_204_315_695,
        631_435_421,
        2_809_108_392,
        4_262_192_392,
        109_906_095,
        1_418_123_535,
        396_251_190,
        2_826_901_677,
        1_615_835_682,
        3_250_210_864,
        2_062_018_970,
        1_056_555_273,
        3_846_219_938,
        1_209_505_450,
        1_128_843_660,
        3_993_752_596,
        2_231_058_449,
        579_916_962,
        2_183_847_991,
        316_463_117,
        3_695_558_819,
        2_036_348_707,
        1_943_627_274,
        2_722_854_806,
        315_855_942,
        17_875_380,
        2_708_586_509,
        2_860_307_519,
        963_664_831,
        899_596_426,
        4_154_736_835,
        3_961_356_929,
        949_373_872,
        77_119_797,
        2_993_562_179,
        460_728_199,
        1_297_336_345,
        80_904_646,
        2_029_087_010,
        2_281_851_182,
        3_815_564_337,
        828_915_973,
        1_609_757_872,
        770_371_590,
        1_541_507_080,
        2_670_720_296,
        3_614_628_635,
        1_045_678_875,
        4_090_202_769,
        2_032_698_565,
        2_945_512_118,
        411_654_811,
        3_900_031_681,
        975_206_072,
        248_421_050,
        420_726_957,
        832_210_209,
        3_781_943_444,
        2_852_463_913,
        3_687_089_205,
        2_753_854_359,
        3_013_470_366,
        1_586_078_871,
        83_942_037,
        3_989_071_406,
        2_238_904_990,
        3_856_982_176,
        1_528_367_809,
        2_369_635_744,
        162_084_270,
        2_058_363_955,
        4_290_155_950,
        4_285_395_379,
        1_231_673_499,
        3_120_686_372,
        2_675_959_829,
        1_081_901_207,
        74_176_674,
        3_125_142_144,
        3_954_005_147,
        550_819_855,
        2_807_654_847,
        1_796_839_719,
        3_494_307_517,
        336_101_633,
        4_082_874_049,
        3_926_017_438,
        509_036_680,
        2_200_334_480,
        137_680_801
    ];

    string[] internal DENSITY_VALS = ["sparse", "scattered", "dense", "congested"];
    string[] internal DEPTH_VALS = ["shallow", "moderate", "deep", "profound"];
    string[] internal FACING_VALS = ["left", "right"];
    string[] internal TILE_DIVISION_VALS = ["random", "less division on the center", "more division on the center"];
    string[] internal SEGMENT_SIZE_VALS = ["small", "medium", "large", "huge"];
    string[] internal PALETTE = [
        "Violet Harmony",
        "Volcanic",
        "Purple Shades",
        "Ocean Breeze",
        "Frostbite",
        "Midnight Blues",
        "Muted Forest",
        "Pink Flamingo",
        "Grey Skies",
        "Indigo Nights",
        "Burgundy Bliss",
        "Mauve Magic",
        "Plum Perfection",
        "Purple Haze",
        "Golden Harvest",
        "Glamorous Nights",
        "Sunflower Fields",
        "Electric Vibes",
        "Amethyst Dreams",
        "Oceanic Fantasy",
        "Minty Fresh",
        "Woodland Trail",
        "Berry Crush",
        "Suede Color",
        "Slate Gray",
        "Deep Purple",
        "Stormy Seas",
        "Shiny Diamond",
        "Oceanic",
        "Cherry Cola",
        "Lemon Drop",
        "Pink Rose",
        "Yoga",
        "Sapphire",
        "Blue Ice",
        "Midnight Blue",
        "Fuchsia",
        "Eggplant",
        "Candy Store",
        "Vintage",
        "Nightlife",
        "Jelly Beans",
        "Twilight",
        "Gray Scale",
        "Blue Mist",
        "Midas Touch",
        "Polar mirage",
        "Blue Sky",
        "Minty",
        "Coral Reef",
        "Pink Lemonade",
        "Swamp Fog",
        "Arctic Garden",
        "Red Velvet",
        "Silver Lining",
        "Mono",
        "Peppermint",
        "Coastal Dusk",
        "Yellow Submarine",
        "Baby Blue",
        "Cherry Blossom",
        "Forest",
        "Hot Pink",
        "Mocha",
        "Sunburst",
        "Lavender Fields",
        "Scarlet",
        "Terracotta",
        "Pastel meadows",
        "Olive",
        "Sage"
    ];
}

File 9 of 18 : DefaultOperatorFilterer.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import {OperatorFilterer} from "./OperatorFilterer.sol";
import {CANONICAL_CORI_SUBSCRIPTION} from "./lib/Constants.sol";
/**
 * @title  DefaultOperatorFilterer
 * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.
 * @dev    Please note that if your token contract does not provide an owner with EIP-173, it must provide
 *         administration methods on the contract itself to interact with the registry otherwise the subscription
 *         will be locked to the options set during construction.
 */

abstract contract DefaultOperatorFilterer is OperatorFilterer {
    /// @dev The constructor that is called when the contract is being deployed.
    constructor() OperatorFilterer(CANONICAL_CORI_SUBSCRIPTION, true) {}
}

File 10 of 18 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

import "./math/Math.sol";

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @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] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

File 11 of 18 : SSTORE2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Read and write to persistent storage at a fraction of the cost.
/// @author Solady (https://github.com/vectorized/solmady/blob/main/src/utils/SSTORE2.sol)
/// @author Saw-mon-and-Natalie (https://github.com/Saw-mon-and-Natalie)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SSTORE2.sol)
/// @author Modified from 0xSequence (https://github.com/0xSequence/sstore2/blob/master/contracts/SSTORE2.sol)
library SSTORE2 {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         CONSTANTS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev We skip the first byte as it's a STOP opcode,
    /// which ensures the contract can't be called.
    uint256 internal constant DATA_OFFSET = 1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                        CUSTOM ERRORS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Unable to deploy the storage contract.
    error DeploymentFailed();

    /// @dev The storage contract address is invalid.
    error InvalidPointer();

    /// @dev Attempt to read outside of the storage contract's bytecode bounds.
    error ReadOutOfBounds();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         WRITE LOGIC                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Writes `data` into the bytecode of a storage contract and returns its address.
    function write(bytes memory data) internal returns (address pointer) {
        /// @solidity memory-safe-assembly
        assembly {
            let originalDataLength := mload(data)

            // Add 1 to data size since we are prefixing it with a STOP opcode.
            let dataSize := add(originalDataLength, DATA_OFFSET)

            /**
             * ------------------------------------------------------------------------------+
             * Opcode      | Mnemonic        | Stack                   | Memory              |
             * ------------------------------------------------------------------------------|
             * 61 codeSize | PUSH2 codeSize  | codeSize                |                     |
             * 80          | DUP1            | codeSize codeSize       |                     |
             * 60 0xa      | PUSH1 0xa       | 0xa codeSize codeSize   |                     |
             * 3D          | RETURNDATASIZE  | 0 0xa codeSize codeSize |                     |
             * 39          | CODECOPY        | codeSize                | [0..codeSize): code |
             * 3D          | RETURNDATASIZE  | 0 codeSize              | [0..codeSize): code |
             * F3          | RETURN          |                         | [0..codeSize): code |
             * 00          | STOP            |                         |                     |
             * ------------------------------------------------------------------------------+
             * @dev Prefix the bytecode with a STOP opcode to ensure it cannot be called.
             * Also PUSH2 is used since max contract size cap is 24,576 bytes which is less than 2 ** 16.
             */
            mstore(
                data,
                or(
                    0x61000080600a3d393df300,
                    // Left shift `dataSize` by 64 so that it lines up with the 0000 after PUSH2.
                    shl(0x40, dataSize)
                )
            )

            // Deploy a new contract with the generated creation code.
            pointer := create(0, add(data, 0x15), add(dataSize, 0xa))

            // If `pointer` is zero, revert.
            if iszero(pointer) {
                // Store the function selector of `DeploymentFailed()`.
                mstore(0x00, 0x30116425)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            // Restore original length of the variable size `data`.
            mstore(data, originalDataLength)
        }
    }

    /// @dev Writes `data` into the bytecode of a storage contract with `salt`
    /// and returns its deterministic address.
    function writeDeterministic(bytes memory data, bytes32 salt)
        internal
        returns (address pointer)
    {
        /// @solidity memory-safe-assembly
        assembly {
            let originalDataLength := mload(data)
            let dataSize := add(originalDataLength, DATA_OFFSET)

            mstore(data, or(0x61000080600a3d393df300, shl(0x40, dataSize)))

            // Deploy a new contract with the generated creation code.
            pointer := create2(0, add(data, 0x15), add(dataSize, 0xa), salt)

            // If `pointer` is zero, revert.
            if iszero(pointer) {
                // Store the function selector of `DeploymentFailed()`.
                mstore(0x00, 0x30116425)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            // Restore original length of the variable size `data`.
            mstore(data, originalDataLength)
        }
    }

    /// @dev Returns the initialization code hash of the storage contract for `data`.
    /// Used for mining vanity addresses with create2crunch.
    function initCodeHash(bytes memory data) internal pure returns (bytes32 hash) {
        /// @solidity memory-safe-assembly
        assembly {
            let originalDataLength := mload(data)
            let dataSize := add(originalDataLength, DATA_OFFSET)

            mstore(data, or(0x61000080600a3d393df300, shl(0x40, dataSize)))

            hash := keccak256(add(data, 0x15), add(dataSize, 0xa))

            // Restore original length of the variable size `data`.
            mstore(data, originalDataLength)
        }
    }

    /// @dev Returns the address of the storage contract for `data`
    /// deployed with `salt` by `deployer`.
    function predictDeterministicAddress(bytes memory data, bytes32 salt, address deployer)
        internal
        pure
        returns (address predicted)
    {
        bytes32 hash = initCodeHash(data);
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and store the bytecode hash.
            mstore8(0x00, 0xff) // Write the prefix.
            mstore(0x35, hash)
            mstore(0x01, shl(96, deployer))
            mstore(0x15, salt)
            predicted := keccak256(0x00, 0x55)
            // Restore the part of the free memory pointer that has been overwritten.
            mstore(0x35, 0)
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         READ LOGIC                         */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns all the `data` from the bytecode of the storage contract at `pointer`.
    function read(address pointer) internal view returns (bytes memory data) {
        /// @solidity memory-safe-assembly
        assembly {
            let pointerCodesize := extcodesize(pointer)
            if iszero(pointerCodesize) {
                // Store the function selector of `InvalidPointer()`.
                mstore(0x00, 0x11052bb4)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            // Offset all indices by 1 to skip the STOP opcode.
            let size := sub(pointerCodesize, DATA_OFFSET)

            // Get the pointer to the free memory and allocate
            // enough 32-byte words for the data and the length of the data,
            // then copy the code to the allocated memory.
            // Masking with 0xffe0 will suffice, since contract size is less than 16 bits.
            data := mload(0x40)
            mstore(0x40, add(data, and(add(size, 0x3f), 0xffe0)))
            mstore(data, size)
            mstore(add(add(data, 0x20), size), 0) // Zeroize the last slot.
            extcodecopy(pointer, add(data, 0x20), DATA_OFFSET, size)
        }
    }

    /// @dev Returns the `data` from the bytecode of the storage contract at `pointer`,
    /// from the byte at `start`, to the end of the data stored.
    function read(address pointer, uint256 start) internal view returns (bytes memory data) {
        /// @solidity memory-safe-assembly
        assembly {
            let pointerCodesize := extcodesize(pointer)
            if iszero(pointerCodesize) {
                // Store the function selector of `InvalidPointer()`.
                mstore(0x00, 0x11052bb4)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            // If `!(pointer.code.size > start)`, reverts.
            // This also handles the case where `start + DATA_OFFSET` overflows.
            if iszero(gt(pointerCodesize, start)) {
                // Store the function selector of `ReadOutOfBounds()`.
                mstore(0x00, 0x84eb0dd1)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            let size := sub(pointerCodesize, add(start, DATA_OFFSET))

            // Get the pointer to the free memory and allocate
            // enough 32-byte words for the data and the length of the data,
            // then copy the code to the allocated memory.
            // Masking with 0xffe0 will suffice, since contract size is less than 16 bits.
            data := mload(0x40)
            mstore(0x40, add(data, and(add(size, 0x3f), 0xffe0)))
            mstore(data, size)
            mstore(add(add(data, 0x20), size), 0) // Zeroize the last slot.
            extcodecopy(pointer, add(data, 0x20), add(start, DATA_OFFSET), size)
        }
    }

    /// @dev Returns the `data` from the bytecode of the storage contract at `pointer`,
    /// from the byte at `start`, to the byte at `end` (exclusive) of the data stored.
    function read(address pointer, uint256 start, uint256 end)
        internal
        view
        returns (bytes memory data)
    {
        /// @solidity memory-safe-assembly
        assembly {
            let pointerCodesize := extcodesize(pointer)
            if iszero(pointerCodesize) {
                // Store the function selector of `InvalidPointer()`.
                mstore(0x00, 0x11052bb4)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            // If `!(pointer.code.size > end) || (start > end)`, revert.
            // This also handles the cases where
            // `end + DATA_OFFSET` or `start + DATA_OFFSET` overflows.
            if iszero(
                and(
                    gt(pointerCodesize, end), // Within bounds.
                    iszero(gt(start, end)) // Valid range.
                )
            ) {
                // Store the function selector of `ReadOutOfBounds()`.
                mstore(0x00, 0x84eb0dd1)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }
            let size := sub(end, start)

            // Get the pointer to the free memory and allocate
            // enough 32-byte words for the data and the length of the data,
            // then copy the code to the allocated memory.
            // Masking with 0xffe0 will suffice, since contract size is less than 16 bits.
            data := mload(0x40)
            mstore(0x40, add(data, and(add(size, 0x3f), 0xffe0)))
            mstore(data, size)
            mstore(add(add(data, 0x20), size), 0) // Zeroize the last slot.
            extcodecopy(pointer, add(data, 0x20), add(start, DATA_OFFSET), size)
        }
    }
}

File 12 of 18 : TwoStepOwnable.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

/**
 * @notice A two-step extension of Ownable, where the new owner must claim ownership of the contract after owner
 * initiates transfer
 * Owner can cancel the transfer at any point before the new owner claims ownership.
 * Helpful in guarding against transferring ownership to an address that is unable to act as the Owner.
 */
abstract contract TwoStepOwnable {
    address private _owner;

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

    address internal potentialOwner;

    event PotentialOwnerUpdated(address newPotentialAdministrator);

    error NewOwnerIsZeroAddress();
    error NotNextOwner();
    error OnlyOwner();

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    constructor() {
        _transferOwnership(msg.sender);
    }

    ///@notice Initiate ownership transfer to newPotentialOwner. Note: new owner will have to manually acceptOwnership
    ///@param newPotentialOwner address of potential new owner
    function transferOwnership(address newPotentialOwner) public virtual onlyOwner {
        if (newPotentialOwner == address(0)) {
            revert NewOwnerIsZeroAddress();
        }
        potentialOwner = newPotentialOwner;
        emit PotentialOwnerUpdated(newPotentialOwner);
    }

    ///@notice Claim ownership of smart contract, after the current owner has initiated the process with
    /// transferOwnership
    function acceptOwnership() public virtual {
        address _potentialOwner = potentialOwner;
        if (msg.sender != _potentialOwner) {
            revert NotNextOwner();
        }
        delete potentialOwner;
        emit PotentialOwnerUpdated(address(0));
        _transferOwnership(_potentialOwner);
    }

    ///@notice cancel ownership transfer
    function cancelOwnershipTransfer() public virtual onlyOwner {
        delete potentialOwner;
        emit PotentialOwnerUpdated(address(0));
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (_owner != msg.sender) {
            revert OnlyOwner();
        }
    }

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

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

File 13 of 18 : IERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.3
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of ERC721A.
 */
interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the
     * ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    /**
     * The `quantity` minted with ERC2309 exceeds the safety limit.
     */
    error MintERC2309QuantityExceedsLimit();

    /**
     * The `extraData` cannot be set on an unintialized ownership slot.
     */
    error OwnershipNotInitializedForExtraData();

    // =============================================================
    //                            STRUCTS
    // =============================================================

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Stores the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
        // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}.
        uint24 extraData;
    }

    // =============================================================
    //                         TOKEN COUNTERS
    // =============================================================

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count.
     * To get the total number of tokens minted, please see {_totalMinted}.
     */
    function totalSupply() external view returns (uint256);

    // =============================================================
    //                            IERC165
    // =============================================================

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

    // =============================================================
    //                            IERC721
    // =============================================================

    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

    /**
     * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

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

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

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

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

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

    // =============================================================
    //                        IERC721Metadata
    // =============================================================

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

    // =============================================================
    //                           IERC2309
    // =============================================================

    /**
     * @dev Emitted when tokens in `fromTokenId` to `toTokenId`
     * (inclusive) is transferred from `from` to `to`, as defined in the
     * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard.
     *
     * See {_mintERC2309} for more details.
     */
    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

File 14 of 18 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 15 of 18 : OperatorFilterer.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import {IOperatorFilterRegistry} from "./IOperatorFilterRegistry.sol";
import {CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS} from "./lib/Constants.sol";
/**
 * @title  OperatorFilterer
 * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
 *         registrant's entries in the OperatorFilterRegistry.
 * @dev    This smart contract is meant to be inherited by token contracts so they can use the following:
 *         - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
 *         - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
 *         Please note that if your token contract does not provide an owner with EIP-173, it must provide
 *         administration methods on the contract itself to interact with the registry otherwise the subscription
 *         will be locked to the options set during construction.
 */

abstract contract OperatorFilterer {
    /// @dev Emitted when an operator is not allowed.
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS);

    /// @dev The constructor that is called when the contract is being deployed.
    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    /**
     * @dev A helper function to check if an operator is allowed.
     */
    modifier onlyAllowedOperator(address from) virtual {
        // Allow spending tokens from addresses with balance
        // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
        // from an EOA.
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    /**
     * @dev A helper function to check if an operator approval is allowed.
     */
    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }

    /**
     * @dev A helper function to check if an operator is allowed.
     */
    function _checkFilterOperator(address operator) internal view virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            // under normal circumstances, this function will revert rather than return false, but inheriting contracts
            // may specify their own OperatorFilterRegistry implementations, which may behave differently
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}

File 16 of 18 : Constants.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

address constant CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS = 0x000000000000AAeB6D7670E522A718067333cd4E;
address constant CANONICAL_CORI_SUBSCRIPTION = 0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6;

File 17 of 18 : Math.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
     * with further edits by Uniswap Labs also under MIT license.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1);

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator,
        Rounding rounding
    ) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10**64) {
                value /= 10**64;
                result += 64;
            }
            if (value >= 10**32) {
                value /= 10**32;
                result += 32;
            }
            if (value >= 10**16) {
                value /= 10**16;
                result += 16;
            }
            if (value >= 10**8) {
                value /= 10**8;
                result += 8;
            }
            if (value >= 10**4) {
                value /= 10**4;
                result += 4;
            }
            if (value >= 10**2) {
                value /= 10**2;
                result += 2;
            }
            if (value >= 10**1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256, rounded down, of a positive value.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);
        }
    }
}

File 18 of 18 : IOperatorFilterRegistry.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    /**
     * @notice Returns true if operator is not filtered for a given token, either by address or codeHash. Also returns
     *         true if supplied registrant address is not registered.
     */
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);

    /**
     * @notice Registers an address with the registry. May be called by address itself or by EIP-173 owner.
     */
    function register(address registrant) external;

    /**
     * @notice Registers an address with the registry and "subscribes" to another address's filtered operators and codeHashes.
     */
    function registerAndSubscribe(address registrant, address subscription) external;

    /**
     * @notice Registers an address with the registry and copies the filtered operators and codeHashes from another
     *         address without subscribing.
     */
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;

    /**
     * @notice Unregisters an address with the registry and removes its subscription. May be called by address itself or by EIP-173 owner.
     *         Note that this does not remove any filtered addresses or codeHashes.
     *         Also note that any subscriptions to this registrant will still be active and follow the existing filtered addresses and codehashes.
     */
    function unregister(address addr) external;

    /**
     * @notice Update an operator address for a registered address - when filtered is true, the operator is filtered.
     */
    function updateOperator(address registrant, address operator, bool filtered) external;

    /**
     * @notice Update multiple operators for a registered address - when filtered is true, the operators will be filtered. Reverts on duplicates.
     */
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;

    /**
     * @notice Update a codeHash for a registered address - when filtered is true, the codeHash is filtered.
     */
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;

    /**
     * @notice Update multiple codeHashes for a registered address - when filtered is true, the codeHashes will be filtered. Reverts on duplicates.
     */
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;

    /**
     * @notice Subscribe an address to another registrant's filtered operators and codeHashes. Will remove previous
     *         subscription if present.
     *         Note that accounts with subscriptions may go on to subscribe to other accounts - in this case,
     *         subscriptions will not be forwarded. Instead the former subscription's existing entries will still be
     *         used.
     */
    function subscribe(address registrant, address registrantToSubscribe) external;

    /**
     * @notice Unsubscribe an address from its current subscribed registrant, and optionally copy its filtered operators and codeHashes.
     */
    function unsubscribe(address registrant, bool copyExistingEntries) external;

    /**
     * @notice Get the subscription address of a given registrant, if any.
     */
    function subscriptionOf(address addr) external returns (address registrant);

    /**
     * @notice Get the set of addresses subscribed to a given registrant.
     *         Note that order is not guaranteed as updates are made.
     */
    function subscribers(address registrant) external returns (address[] memory);

    /**
     * @notice Get the subscriber at a given index in the set of addresses subscribed to a given registrant.
     *         Note that order is not guaranteed as updates are made.
     */
    function subscriberAt(address registrant, uint256 index) external returns (address);

    /**
     * @notice Copy filtered operators and codeHashes from a different registrantToCopy to addr.
     */
    function copyEntriesOf(address registrant, address registrantToCopy) external;

    /**
     * @notice Returns true if operator is filtered by a given address or its subscription.
     */
    function isOperatorFiltered(address registrant, address operator) external returns (bool);

    /**
     * @notice Returns true if the hash of an address's code is filtered by a given address or its subscription.
     */
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);

    /**
     * @notice Returns true if a codeHash is filtered by a given address or its subscription.
     */
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);

    /**
     * @notice Returns a list of filtered operators for a given address or its subscription.
     */
    function filteredOperators(address addr) external returns (address[] memory);

    /**
     * @notice Returns the set of filtered codeHashes for a given address or its subscription.
     *         Note that order is not guaranteed as updates are made.
     */
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);

    /**
     * @notice Returns the filtered operator at the given index of the set of filtered operators for a given address or
     *         its subscription.
     *         Note that order is not guaranteed as updates are made.
     */
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);

    /**
     * @notice Returns the filtered codeHash at the given index of the list of filtered codeHashes for a given address or
     *         its subscription.
     *         Note that order is not guaranteed as updates are made.
     */
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);

    /**
     * @notice Returns true if an address has registered
     */
    function isRegistered(address addr) external returns (bool);

    /**
     * @dev Convenience method to compute the code hash of an arbitrary contract
     */
    function codeHashOf(address addr) external returns (bytes32);
}

Settings
{
  "remappings": [
    "@erc721a/=lib/ERC721A/contracts/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@prb/test/=lib/prb-test/src/",
    "@solady/=lib/solady/src/",
    "ERC721A/=lib/ERC721A/contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/operator-filter-registry/lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts-upgradeable/=lib/operator-filter-registry/lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "operator-filter-registry/=lib/operator-filter-registry/",
    "prb-math/=lib/prb-math/src/",
    "prb-test/=lib/prb-test/src/",
    "solady/=lib/solady/src/",
    "solmate/=lib/solady/lib/solmate/src/",
    "src/=src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 100
  },
  "metadata": {
    "bytecodeHash": "none",
    "appendCBOR": false
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint16","name":"initialArtInjectPtrIndex","type":"uint16"},{"internalType":"string","name":"initialArtInject","type":"string"},{"internalType":"string","name":"initialPreviewImageUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InsufficientPayment","type":"error"},{"inputs":[],"name":"MaxForAddressForMintStageReached","type":"error"},{"inputs":[],"name":"MaxSupplyReached","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintNotEnabled","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NotNextOwner","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPotentialAdministrator","type":"address"}],"name":"PotentialOwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getArt","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"pure","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":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_artInjectIndex","type":"uint16"},{"internalType":"string","name":"art","type":"string"}],"name":"setArt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_previewImageUri","type":"string"}],"name":"setPreviewImageUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

611fc060405263d3dd0205608090815263262e498960a052639bf2f1a760c052630726c43860e052639987b91f6101005263cb84c81a61012052631db3e72861014052636361e5c261016052637dabd8b66101805263ae87f8196101a05263f3f7c09c6101c05263bf23da326101e05263fb1899a96102005263742ec0836102205263fff352016102405263f6caf0b761026052637e3cc68361028052632e1458bf6102a052630dc8e8076102c05263033a8bad6102e052637289881861030052630810d429610320526370ca9a0e6103405263ba3448466103605263c6ba239f6103805263b166f83a6103a0526369c2352d6103c05263e9c781916103e05263ce85812b6104005263a3a701926104205263c31ed9886104405263370f408961046052637a9289bd610480526305ee81a06104a052632e72a81c6104c052634d2a90286104e05263d056418d61050052632052e3986105205263f781082c61054052636426c79c6105605263d4b9d8266105805263716cf0126105a05263cb36aa866105c052631a1dc9126105e05263b09188896106005263d39e120e6106205263ccecf10f6106405263e427050b610660526369a6e0876106805263d9fb05b26106a05263853ce4366106c052633e8872896106e052638a37c0826107005263aa0058016107205263d6ea87ac61074052638d21a81a6107605263ef6da6966107805263af75568b6107a052635154b3836107c05263ca4e88b86107e0526335f9f93d61080052634c9caa0d6108205263d7ae75ad610840526388e8c7ac6108605263d7ebd69f6108805263c5d555a56108a05263175d4a206108c05263ee12e01a6108e05263325971966109005263ef4988a26109205263bbf980c161094052636d8484b46109605263575a91c561098052639ea794836109a052637a900a296109c052636b86a00c6109e0526319fcabb8610a005263d14844a1610a20526307911432610a405263ab12129c610a605263f0c58142610a805263ac881905610aa05263da8f8004610ac05263fc236527610ae05263bd7b0906610b005263936ed5af610b205263c789f2bb610b405263d8671993610b605263107dc000610b805263d7f2e9ba610ba05263d15f7825610bc052635e67b50a610be052632400b0b4610c0052634690800f610c20526348b97ba7610c4052630e8775c3610c605263cc3a85a8610c80526351e6e792610ca05263a9e9c7b5610cc05263efd5480b610ce0526325bcc826610d005263a37dd031610d205263ecde7a9f610d405263f4f1e930610d605263ab25a637610d8052634f55a3bb610da0526310c3950d610dc05263046ee634610de05263f6597645610e0052630dee1a08610e20526386dc28ac610e405263ca2ac511610e60526359dc0380610e805263a805a51f610ea05263d49be5a9610ec052631153c1b1610ee052638da3582b610f005263c2a14a25610f205263b81e8604610f405263579c23b4610f605263a9572084610f805263a02919b8610fa052636f64b423610fc052636d4e0bc2610fe05263f1deb8356110005263a451583a6110205263f00f192361104052638c0b1a12611060526370adf48c61108052639c9e56c56110a0526367f7e9136110c05263f10ea58d6110e052637116d81661110052638a43e4b26111205263423d44b46111405263a8b955866111605263fb24a8a66111805263c906662a6111a052637d8146b76111c052633898f8426111e052631c4b97c66112005263f876b4c66112205263a19389806112405263ce81c90f6112605263ceb7a6946112805263b76b54246112a052632493e1316112c05263fad7d5376112e052637ff2804561130052633c93898b611320526394d6e0aa61134052631d7338a16113605263eb88c50261138052632f5c558b6113a052631a3ef9996113c052636438d58e6113e05263bffda43b6114005263ebeb7100611420526308fda88561144052638f9e65b66114605263fa98c42f611480526325a2f09d6114a05263a76f97a86114c05263fe0be5086114e05263068d08af61150052635486d90f6115205263179e50366115405263a87f18ad6115605263604fb2226115805263c1ba48306115a052637ae7e99a6115c052633ef9c1096115e05263e540a8a26116005263481796aa61162052634348c98c6116405263ee0bd414611660526384fb401161168052632290d4a26116a05263822ae0376116c0526312dcd80d6116e05263dc45c0a3611700526379603723611720526373d9660a6117405263a24b7796611760526312d3944661178052630110c1b46117a05263a171c00d6117c05263aa7cd43f6117e0526339705bbf6118005263359ec08a6118205263f7a440c36118405263ec1d8281611860526338964bb061188052630498c1356118a05263b26e22436118c052631b7627876118e052634d53c819611900526304d281c6611920526378f1692261194052638802492e6119605263e36ce4316119805263316841056119a052635ff2f4b06119c052632deaf0066119e052635be18808611a0052639f2ff528611a205263d772db1b611a4052633e53cb1b611a605263f3cb8a91611a805263792884c5611aa05263af90f2b6611ac0526318895a9b611ae05263e875c2c1611b0052633a2076b8611b2052630ece9aba611b4052631913c8ad611b605263319a8521611b805263e16be094611ba05263aa052529611bc05263dbc48435611be05263a4247b97611c005263b39de89e611c2052635e89a497611c4052630500da95611c605263edc4662e611c8052638572fa9e611ca05263e5e4e0a0611cc052635b190ac1611ce052638d3dc5a0611d00526309a935ae611d2052637ab02433611d405263ffb695ae611d605263ff6df1b3611d8052634969d89b611da05263ba01e524611dc052639f7fe815611de05263407c8097611e005263046bd8a2611e205263ba45e280611e405263ebad549b611e60526320d4d80f611e805263a75969bf611ea052636b199927611ec05263d046e6bd611ee0526314088101611f005263f35bb6c1611f205263ea02459e611f4052631e574888611f60526383267090611f8052630834d7a1611fa052620008dd9060009060fa620019ca565b506040805160c0810182526006608082019081526573706172736560d01b60a08301528152815180830183526009808252681cd8d85d1d195c995960ba1b6020838101919091528084019290925283518085018552600581526464656e736560d81b8184015283850152835180850190945283526818dbdb99d95cdd195960ba1b838201526060820192909252620009789190600462001a6d565b506040518060800160405280604051806040016040528060078152602001667368616c6c6f7760c81b8152508152602001604051806040016040528060088152602001676d6f64657261746560c01b8152508152602001604051806040016040528060048152602001630646565760e41b8152508152602001604051806040016040528060088152602001671c1c9bd99bdd5b9960c21b815250815250602190600462000a2792919062001a6d565b50604080516080810182526004818301908152631b19599d60e21b60608301528152815180830190925260058252641c9a59da1d60da1b60208381019190915281019190915262000a7d90602290600262001ac6565b5060405180606001604052806040518060400160405280600681526020016572616e646f6d60d01b81525081526020016040518060400160405280601b81526020017f6c657373206469766973696f6e206f6e207468652063656e746572000000000081525081526020016040518060400160405280601b81526020017f6d6f7265206469766973696f6e206f6e207468652063656e7465720000000000815250815250602390600362000b3392919062001b11565b506040518060800160405280604051806040016040528060058152602001641cdb585b1b60da1b8152508152602001604051806040016040528060068152602001656d656469756d60d01b8152508152602001604051806040016040528060058152602001646c6172676560d81b8152508152602001604051806040016040528060048152602001636875676560e01b815250815250602490600462000bdb92919062001a6d565b506040805161092081018252600e6108e082018181526d56696f6c6574204861726d6f6e7960901b610900840152825282518084018452600880825267566f6c63616e696360c01b6020838101919091528085019290925284518086018652600d8082526c507572706c652053686164657360981b828501528587019190915285518087018752600c8082526b4f6365616e20427265657a6560a01b8286015260608701919091528651808801885260098082526846726f73746269746560b81b828701526080880191909152875180890189528681526d4d69646e6967687420426c75657360901b8187015260a0880152875180890189528281526b135d5d195908119bdc995cdd60a21b8187015260c0880152875180890189528381526c50696e6b20466c616d696e676f60981b8187015260e088015287518089018952600a808252694772657920536b69657360b01b828801526101008901919091528851808a018a528481526c496e6469676f204e696768747360981b818801526101208901528851808a018a528781526d42757267756e647920426c69737360901b818801526101408901528851808a018a52600b8082526a4d61757665204d6167696360a81b828901526101608a01919091528951808b018b52600f8082526e28363ab6902832b93332b1ba34b7b760891b828a01526101808b01919091528a51808c018c528281526a507572706c652048617a6560a81b818a01526101a08b01528a51808c018c528981526d11dbdb19195b8812185c9d995cdd60921b818a01526101c08b01528a51808c018c5260108082526f476c616d6f726f7573204e696768747360801b828b01526101e08c01919091528b51808d018d528181526f53756e666c6f776572204669656c647360801b818b01526102008c01528b51808d018d528a81526d456c65637472696320566962657360901b818b01526102208c01528b51808d018d528281526e416d65746879737420447265616d7360881b818b01526102408c01528b51808d018d528281526e4f6365616e69632046616e7461737960881b818b01526102608c01528b51808d018d528381526a09ad2dce8f2408ce4cae6d60ab1b818b01526102808c01528b51808d018d528a81526d15dbdbd91b185b9908151c985a5b60921b818b01526102a08c01528b51808d018d528381526a084cae4e4f24086e4eae6d60ab1b818b01526102c08c01528b51808d018d528381526a29bab2b2329021b7b637b960a91b818b01526102e08c01528b51808d018d5284815269536c617465204772617960b01b818b01526103008c01528b51808d018d528381526a4465657020507572706c6560a81b818b01526103208c01528b51808d018d528381526a53746f726d79205365617360a81b818b01526103408c01528b51808d018d528781526c14da1a5b9e48111a585b5bdb99609a1b818b01526103608c01528b51808d018d526007808252664f6365616e696360c81b828c01526103808d01919091528c51808e018e528481526a43686572727920436f6c6160a81b818c01526103a08d01528c51808e018e528581526904c656d6f6e2044726f760b41b818c01526103c08d01528c51808e018e528681526850696e6b20526f736560b81b818c01526103e08d01528c51808e018e52600480825263596f676160e01b828d01526104008e01919091528d51808f018f528a815267536170706869726560c01b818d01526104208e01528d51808f018f528a815267426c75652049636560c01b818d01526104408e01528d51808f018f528981526c4d69646e6967687420426c756560981b818d01526104608e01528d51808f018f52828152664675636873696160c81b818d01526104808e01528d51808f018f528a8152671159d9dc1b185b9d60c21b818d01526104a08e01528d51808f018f528581526a43616e64792053746f726560a81b818d01526104c08e01528d51808f018f528281526656696e7461676560c81b818d01526104e08e01528d51808f018f52878152684e696768746c69666560b81b818d01526105008e01528d51808f018f528581526a4a656c6c79204265616e7360a81b818d01526105208e01528d51808f018f528a815267151dda5b1a59da1d60c21b818d01526105408e01528d51808f018f528681526947726179205363616c6560b01b818d01526105608e01528d51808f018f5287815268109b1d5948135a5cdd60ba1b818d01526105808e01528d51808f018f529485526a09ad2c8c2e640a8deeac6d60ab1b858c01526105a08d01949094528c51808e018e528781526b506f6c6172206d697261676560a01b818c01526105c08d01528c51808e018e5289815267426c756520536b7960c01b818c01526105e08d01528c51808e018e526005808252644d696e747960d81b828d01526106008e01919091528d51808f018f528681526921b7b930b6102932b2b360b11b818d01526106208e01528d51808f018f528981526c50696e6b204c656d6f6e61646560981b818d01526106408e01528d51808f018f52878152685377616d7020466f6760b81b818d01526106608e01528d51808f018f528981526c20b931ba34b19023b0b93232b760991b818d01526106808e01528d51808f018f52868152691499590815995b1d995d60b21b818d01526106a08e01528d51808f018f529889526c53696c766572204c696e696e6760981b898c01526106c08d01989098528c51808e018e52848152634d6f6e6f60e01b818c01526106e08d01528c51808e018e528581526914195c1c195c9b5a5b9d60b21b818c01526107008d01528c51808e018e529687526b436f617374616c204475736b60a01b878b01526107208c01969096528b51808d018d529081526f59656c6c6f77205375626d6172696e6560801b818a01526107408b01528a51808c018c52938452684261627920426c756560b81b848901526107608a01939093528951808b018b528881526d43686572727920426c6f73736f6d60901b818901526107808a01528951808b018b526006815265119bdc995cdd60d21b818901526107a08a01528951808b018b5286815267486f742050696e6b60c01b818901526107c08a01528951808b018b52858152644d6f63686160d81b818901526107e08a01528951808b018b529586526714dd5b989d5c9cdd60c21b868801526108008901959095528851808a018a529182526e4c6176656e646572204669656c647360881b82870152610820880191909152875180890189529182526614d8d85c9b195d60ca1b8286015261084087019190915286518088018852908152695465727261636f74746160b01b81850152610860860152855180870187529384526d50617374656c206d6561646f777360901b8484015261088085019390935284518086018652928352644f6c69766560d81b838301526108a08401929092528351808501909452908352635361676560e01b908301526108c0810191909152620015e090602590604762001b5c565b506033805460ff19166001179055348015620015fb57600080fd5b506040516200462b3803806200462b8339810160408190526200161e9162001ce6565b733cc6cdda760b79bafa08df41ecfa224f810dceb6600160405180604001604052806006815260200165096c2d8d8c2f60d31b8152506040518060400160405280600381526020016209698b60eb1b815250816028908162001681919062001df9565b50602962001690828262001df9565b5050600160265550620016a33362001854565b6daaeb6d7670e522a718067333cd4e3b15620017e85780156200173657604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200171757600080fd5b505af11580156200172c573d6000803e3d6000fd5b50505050620017e8565b6001600160a01b03821615620017875760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620016fc565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620017ce57600080fd5b505af1158015620017e3573d6000803e3d6000fd5b505050505b50506031805461ffff60a01b1916600160a01b61ffff8616021790556200180f82620018a6565b603180546001600160a01b0319166001600160a01b039290921691909117905560306200183d828262001df9565b506200184b336001620018e9565b50505062001ec5565b602e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f092505081620018e35763301164256000526004601cfd5b90915290565b60265460008290036200190f5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383166000818152602b602090815260408083208054680100000000000000018802019055848352602a90915281206001851460e11b4260a01b178317905582840190839083906000805160206200460b8339815191528180a4600183015b8181146200199e57808360006000805160206200460b833981519152600080a460010162001975565b5081600003620019c057604051622e076360e81b815260040160405180910390fd5b602655505b505050565b60208301918390821562001a5b5791602002820160005b8382111562001a2757835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302620019e1565b801562001a595782816101000a81549063ffffffff021916905560040160208160030104928301926001030262001a27565b505b5062001a6992915062001ba7565b5090565b82805482825590600052602060002090810192821562001ab8579160200282015b8281111562001ab8578251829062001aa7908262001df9565b509160200191906001019062001a8e565b5062001a6992915062001bbe565b82805482825590600052602060002090810192821562001ab8579160200282015b8281111562001ab8578251829062001b00908262001df9565b509160200191906001019062001ae7565b82805482825590600052602060002090810192821562001ab8579160200282015b8281111562001ab8578251829062001b4b908262001df9565b509160200191906001019062001b32565b82805482825590600052602060002090810192821562001ab8579160200282015b8281111562001ab8578251829062001b96908262001df9565b509160200191906001019062001b7d565b5b8082111562001a69576000815560010162001ba8565b8082111562001a6957600062001bd5828262001bdf565b5060010162001bbe565b50805462001bed9062001d6b565b6000825580601f1062001bfe575050565b601f01602090049060005260206000209081019062001c1e919062001ba7565b50565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262001c4957600080fd5b81516001600160401b038082111562001c665762001c6662001c21565b604051601f8301601f19908116603f0116810190828211818310171562001c915762001c9162001c21565b8160405283815260209250868385880101111562001cae57600080fd5b600091505b8382101562001cd2578582018301518183018401529082019062001cb3565b600093810190920192909252949350505050565b60008060006060848603121562001cfc57600080fd5b835161ffff8116811462001d0f57600080fd5b60208501519093506001600160401b038082111562001d2d57600080fd5b62001d3b8783880162001c37565b9350604086015191508082111562001d5257600080fd5b5062001d618682870162001c37565b9150509250925092565b600181811c9082168062001d8057607f821691505b60208210810362001da157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620019c557600081815260208120601f850160051c8101602086101562001dd05750805b601f850160051c820191505b8181101562001df15782815560010162001ddc565b505050505050565b81516001600160401b0381111562001e155762001e1562001c21565b62001e2d8162001e26845462001d6b565b8462001da7565b602080601f83116001811462001e65576000841562001e4c5750858301515b600019600386901b1c1916600185901b17855562001df1565b600085815260208120601f198616915b8281101562001e965788860151825594840194600190910190840162001e75565b508582101562001eb55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6127368062001ed56000396000f3fe60806040526004361061016c5760003560e01c80636352211e116100cc5780638da5cb5b1161007a5780638da5cb5b146103c957806395d89b41146103e7578063a22cb465146103fc578063b88d4fde1461041c578063c87b56dd1461042f578063e985e9c51461044f578063f2fde38b1461046f57600080fd5b80636352211e1461031757806365263a211461033757806370a0823114610357578063715018a61461037757806379ba50971461038c5780638c4796c7146103a15780638c874ebd146103c157600080fd5b806323b872dd1161012957806323b872dd146102465780632a55205a1461025957806331154421146102985780633ccfd60b146102b857806341f43434146102cd57806342842e0e146102ef57806344b28d591461030257600080fd5b806301ffc9a71461017157806306fdde03146101a6578063081812fc146101c8578063095ea7b3146101f557806318160ddd1461020a57806323452b9c14610231575b600080fd5b34801561017d57600080fd5b5061019161018c366004611c18565b61048f565b60405190151581526020015b60405180910390f35b3480156101b257600080fd5b506101bb6104ba565b60405161019d9190611c85565b3480156101d457600080fd5b506101e86101e3366004611c98565b61054c565b60405161019d9190611cb1565b610208610203366004611ce1565b610590565b005b34801561021657600080fd5b5060275460265403600019015b60405190815260200161019d565b34801561023d57600080fd5b506102086105a9565b610208610254366004611d0b565b6105ea565b34801561026557600080fd5b50610279610274366004611d47565b610615565b604080516001600160a01b03909316835260208301919091520161019d565b3480156102a457600080fd5b506102086102b3366004611daa565b610652565b3480156102c457600080fd5b50610208610667565b3480156102d957600080fd5b506101e86daaeb6d7670e522a718067333cd4e81565b6102086102fd366004611d0b565b6106d3565b34801561030e57600080fd5b506102086106f8565b34801561032357600080fd5b506101e8610332366004611c98565b61070c565b34801561034357600080fd5b50610208610352366004611deb565b610717565b34801561036357600080fd5b50610223610372366004611e46565b61079b565b34801561038357600080fd5b506102086107e9565b34801561039857600080fd5b506102086107fd565b3480156103ad57600080fd5b506101bb6103bc366004611c98565b610869565b610208610973565b3480156103d557600080fd5b50602e546001600160a01b03166101e8565b3480156103f357600080fd5b506101bb610a3b565b34801561040857600080fd5b50610208610417366004611e6f565b610a4a565b61020861042a366004611ebc565b610a5e565b34801561043b57600080fd5b506101bb61044a366004611c98565b610a8b565b34801561045b57600080fd5b5061019161046a366004611f97565b610e0e565b34801561047b57600080fd5b5061020861048a366004611e46565b610e3c565b60006001600160e01b0319821663152a902d60e11b14806104b457506104b482610eaf565b92915050565b6060602880546104c990611fca565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611fca565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b600061055782610efd565b610574576040516333d1c03960e21b815260040160405180910390fd5b506000908152602c60205260409020546001600160a01b031690565b8161059a81610f32565b6105a48383610feb565b505050565b6105b161108b565b602f80546001600160a01b03191690556040516000805160206126f6833981519152906105e090600090611cb1565b60405180910390a1565b826001600160a01b03811633146106045761060433610f32565b61060f8484846110b6565b50505050565b60008073b4da20397ea45fdc17c2122d35c0b8328f15d65061271061063c856102ee61201a565b6106469190612031565b915091505b9250929050565b61065a61108b565b60306105a4828483612099565b60405160009073a52ec4b923e1d0d5c2dd2486f0749786ae111f1b9047908381818185875af1925050503d80600081146106bd576040519150601f19603f3d011682016040523d82523d6000602084013e6106c2565b606091505b50509050806106d057600080fd5b50565b826001600160a01b03811633146106ed576106ed33610f32565b61060f84848461123d565b61070061108b565b6033805460ff19169055565b60006104b482611258565b61071f61108b565b6031805461ffff60a01b1916600160a01b61ffff861602179055604080516020601f84018190048102820181019092528281526107769184908490819084018382808284376000920191909152506112c792505050565b603180546001600160a01b0319166001600160a01b0392909216919091179055505050565b60006001600160a01b0382166107c4576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152602b60205260409020546001600160401b031690565b6107f161108b565b6107fb6000611309565b565b602f546001600160a01b031633811461082957604051636b7584e760e11b815260040160405180910390fd5b602f80546001600160a01b03191690556040516000805160206126f68339815191529061085890600090611cb1565b60405180910390a16106d081611309565b606061087482610efd565b61089157604051630a14c4b560e41b815260040160405180910390fd5b6031546108b6906001600160a01b03811690600090600160a01b900461ffff1661135b565b6109296108fa60006108c9600187612158565b60fa81106108d9576108d961216b565b600891828204019190066004029054906101000a900463ffffffff166113c1565b516040805161ffff9092166020830152016040516020818303038152906040528051906020012060001c61146a565b60315461094b906001600160a01b03811690600160a01b900461ffff16611481565b60405160200161095d9392919061219d565b6040516020818303038152906040529050919050565b60335460ff16156109975760405163447691f760e01b815260040160405180910390fd5b3467016345785d8a0000146109bf5760405163cd1c886760e01b815260040160405180910390fd5b60265460fa10156109e35760405163d05cb60960e01b815260040160405180910390fd5b3360009081526032602052604090205460ff1615610a145760405163af5af9e960e01b815260040160405180910390fd5b336000818152603260205260409020805460ff191660019081179091556107fb91906114e5565b6060602980546104c990611fca565b81610a5481610f32565b6105a483836115bf565b836001600160a01b0381163314610a7857610a7833610f32565b610a848585858561162b565b5050505050565b6060610a9682610efd565b610ab357604051630a14c4b560e41b815260040160405180910390fd5b6000610ac4816108c9600186612158565b9050610e076030610ad48561166f565b604051602001610ae59291906121e0565b604051602081830303815290604052610b05610b0086610869565b6116b3565b610b0e8661166f565b604051602001610b1e9190612267565b60408051601f1981840301815260e0830190915260b18083529091906126056020830139610c1a6040518060400160405280600b81526020016a426f782064656e7369747960a81b8152506020886020015181548110610b8057610b8061216b565b906000526020600020018054610b9590611fca565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190611fca565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b505050505060016116ce565b610c5660405180604001604052806009815260200168084def040c8cae0e8d60bb1b8152506021896040015181548110610b8057610b8061216b565b610c8f60405180604001604052806006815260200165466163696e6760d01b81525060228a6060015181548110610b8057610b8061216b565b610ccd6040518060400160405280600b81526020016a14dc1b1a5d0818985cd95960aa1b81525060238b6080015181548110610b8057610b8061216b565b610d0a6040518060400160405280600a815260200169086cad8d840eed2c8e8d60b31b81525060248c60a0015181548110610b8057610b8061216b565b610dde6040518060400160405280600781526020016650616c6574746560c81b81525060258d60c0015181548110610d4457610d4461216b565b906000526020600020018054610d5990611fca565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8590611fca565b8015610dd25780601f10610da757610100808354040283529160200191610dd2565b820191906000526020600020905b815481529060010190602001808311610db557829003601f168201915b505050505060006116ce565b604051602001610df396959493929190612297565b604051602081830303815290604052611750565b9392505050565b6001600160a01b039182166000908152602d6020908152604080832093909416825291909152205460ff1690565b610e4461108b565b6001600160a01b038116610e6b57604051633a247dd760e11b815260040160405180910390fd5b602f80546001600160a01b0319166001600160a01b0383161790556040516000805160206126f683398151915290610ea4908390611cb1565b60405180910390a150565b60006301ffc9a760e01b6001600160e01b031983161480610ee057506380ac58cd60e01b6001600160e01b03198316145b806104b45750506001600160e01b031916635b5e139f60e01b1490565b600081600111158015610f11575060265482105b80156104b45750506000908152602a6020526040902054600160e01b161590565b6daaeb6d7670e522a718067333cd4e3b156106d057604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc39190612338565b6106d05780604051633b79c77360e21b8152600401610fe29190611cb1565b60405180910390fd5b6000610ff68261070c565b9050336001600160a01b0382161461102f576110128133610e0e565b61102f576040516367d9dca160e11b815260040160405180910390fd5b6000828152602c602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b602e546001600160a01b031633146107fb57604051635fc483c560e01b815260040160405180910390fd5b60006110c182611258565b9050836001600160a01b0316816001600160a01b0316146110f45760405162a1148160e81b815260040160405180910390fd5b6000828152602c602052604090208054338082146001600160a01b03881690911417611141576111248633610e0e565b61114157604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661116857604051633a954ecd60e21b815260040160405180910390fd5b801561117357600082555b6001600160a01b038681166000908152602b60205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b176000858152602a6020526040812091909155600160e11b8416900361120557600184016000818152602a60205260408120549003611203576026548114611203576000818152602a602052604090208490555b505b83856001600160a01b0316876001600160a01b031660008051602061271683398151915260405160405180910390a45b505050505050565b6105a483838360405180602001604052806000815250610a5e565b600081806001116112ae576026548110156112ae576000818152602a602052604081205490600160e01b821690036112ac575b80600003610e075750600019016000818152602a602052604090205461128b565b505b604051636f96cda160e11b815260040160405180910390fd5b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f0925050816113035763301164256000526004601cfd5b90915290565b602e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060833b80611372576311052bb46000526004601cfd5b828411158382111661138c576384eb0dd16000526004601cfd5b50828203604051915061ffe0603f8201168201604052808252600081602084010152806001850160208401873c509392505050565b6114056040518060e00160405280600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506040805160e081018252601083901c61ffff1681526003600e84901c81166020830152600884901c811692820192909252600783901c6001166060820152600a83901c82166080820152600c83901c90911660a0820152607f90911660c082015290565b60606104b482611479846117ac565b600101611816565b6060823b80611498576311052bb46000526004601cfd5b8281116114ad576384eb0dd16000526004601cfd5b6001830181039050604051915061ffe0603f8201168201604052808252600081602084010152806001840160208401863c5092915050565b602654600082900361150a5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383166000818152602b602090815260408083208054680100000000000000018802019055848352602a90915281206001851460e11b4260a01b178317905582840190839083906000805160206127168339815191528180a4600183015b8181146115955780836000600080516020612716833981519152600080a460010161156f565b50816000036115b657604051622e076360e81b815260040160405180910390fd5b60265550505050565b336000818152602d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6116368484846105ea565b6001600160a01b0383163b1561060f57611652848484846119b1565b61060f576040516368d2bf6b60e11b815260040160405180910390fd5b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806116895750819003601f19909101908152919050565b60606116be82611a9c565b60405160200161095d9190612355565b606083836040516020016116e29190612393565b6040516020818303038152906040528361170b5760405180602001604052806000815250611726565b604051806040016040528060018152602001600b60fa1b8152505b604051602001611738939291906123c1565b60405160208183030381529060405290509392505050565b6060611782848484898960405160200161176e959493929190612445565b604051602081830303815290604052611a9c565b604051602001611792919061253b565b604051602081830303815290604052905095945050505050565b600080608083901c156117c45760809290921c916010015b604083901c156117d95760409290921c916008015b602083901c156117ee5760209290921c916004015b601083901c156118035760109290921c916002015b600883901c156104b45760010192915050565b6060600061182583600261201a565b611830906002612580565b6001600160401b0381111561184757611847611ea6565b6040519080825280601f01601f191660200182016040528015611871576020820181803683370190505b509050600360fc1b8160008151811061188c5761188c61216b565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118bb576118bb61216b565b60200101906001600160f81b031916908160001a90535060006118df84600261201a565b6118ea906001612580565b90505b6001811115611962576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061191e5761191e61216b565b1a60f81b8282815181106119345761193461216b565b60200101906001600160f81b031916908160001a90535060049490941c9361195b81612593565b90506118ed565b508315610e075760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610fe2565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906119e69033908990889088906004016125aa565b6020604051808303816000875af1925050508015611a21575060408051601f3d908101601f19168201909252611a1e918101906125e7565b60015b611a7f573d808015611a4f576040519150601f19603f3d011682016040523d82523d6000602084013e611a54565b606091505b508051600003611a77576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60608151600003611abb57505060408051602081019091526000815290565b60006040518060600160405280604081526020016126b66040913990506000600384516002611aea9190612580565b611af49190612031565b611aff90600461201a565b90506000611b0e826020612580565b6001600160401b03811115611b2557611b25611ea6565b6040519080825280601f01601f191660200182016040528015611b4f576020820181803683370190505b509050818152600183018586518101602084015b81831015611bbd5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611b63565b600389510660018114611bd75760028114611be857611bf4565b613d3d60f01b600119830152611bf4565b603d60f81b6000198301525b509398975050505050505050565b6001600160e01b0319811681146106d057600080fd5b600060208284031215611c2a57600080fd5b8135610e0781611c02565b60005b83811015611c50578181015183820152602001611c38565b50506000910152565b60008151808452611c71816020860160208601611c35565b601f01601f19169290920160200192915050565b602081526000610e076020830184611c59565b600060208284031215611caa57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80356001600160a01b0381168114611cdc57600080fd5b919050565b60008060408385031215611cf457600080fd5b611cfd83611cc5565b946020939093013593505050565b600080600060608486031215611d2057600080fd5b611d2984611cc5565b9250611d3760208501611cc5565b9150604084013590509250925092565b60008060408385031215611d5a57600080fd5b50508035926020909101359150565b60008083601f840112611d7b57600080fd5b5081356001600160401b03811115611d9257600080fd5b60208301915083602082850101111561064b57600080fd5b60008060208385031215611dbd57600080fd5b82356001600160401b03811115611dd357600080fd5b611ddf85828601611d69565b90969095509350505050565b600080600060408486031215611e0057600080fd5b833561ffff81168114611e1257600080fd5b925060208401356001600160401b03811115611e2d57600080fd5b611e3986828701611d69565b9497909650939450505050565b600060208284031215611e5857600080fd5b610e0782611cc5565b80151581146106d057600080fd5b60008060408385031215611e8257600080fd5b611e8b83611cc5565b91506020830135611e9b81611e61565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611ed257600080fd5b611edb85611cc5565b9350611ee960208601611cc5565b92506040850135915060608501356001600160401b0380821115611f0c57600080fd5b818701915087601f830112611f2057600080fd5b813581811115611f3257611f32611ea6565b604051601f8201601f19908116603f01168101908382118183101715611f5a57611f5a611ea6565b816040528281528a6020848701011115611f7357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611faa57600080fd5b611fb383611cc5565b9150611fc160208401611cc5565b90509250929050565b600181811c90821680611fde57607f821691505b602082108103611ffe57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176104b4576104b4612004565b60008261204e57634e487b7160e01b600052601260045260246000fd5b500490565b601f8211156105a457600081815260208120601f850160051c8101602086101561207a5750805b601f850160051c820191505b8181101561123557828155600101612086565b6001600160401b038311156120b0576120b0611ea6565b6120c4836120be8354611fca565b83612053565b6000601f8411600181146120f857600085156120e05750838201355b600019600387901b1c1916600186901b178355610a84565b600083815260209020601f19861690835b828110156121295786850135825560209485019460019092019101612109565b50868210156121465760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818103818111156104b4576104b4612004565b634e487b7160e01b600052603260045260246000fd5b60008151612193818560208601611c35565b9290920192915050565b600084516121af818460208901611c35565b8451908301906121c3818360208901611c35565b84519101906121d6818360208801611c35565b0195945050505050565b60008084546121ee81611fca565b60018281168015612206576001811461221b5761224a565b60ff198416875282151583028701945061224a565b8860005260208060002060005b858110156122415781548a820152908401908201612228565b50505082870194505b50505050835161225e818360208801611c35565b01949350505050565b674b616c6c6178202360c01b81526000825161228a816008850160208701611c35565b9190910160080192915050565b605b60f81b815260006001885160206122b582848701838e01611c35565b8951918501916122ca81858501848e01611c35565b89519201916122de81858501848d01611c35565b88519201916122f281858501848c01611c35565b875192019161230681858501848b01611c35565b865192019161231a81858501848a01611c35565b605d60f81b9201928301919091525060020198975050505050505050565b60006020828403121561234a57600080fd5b8151610e0781611e61565b7519185d184e9d195e1d0bda1d1b5b0ed8985cd94d8d0b60521b815260008251612386816016850160208701611c35565b9190910160160192915050565b6000601160f91b80835283516123b0816001860160208801611c35565b600193019283015250600201919050565b6e3d913a3930b4ba2fba3cb832911d1160891b815283516000906123ec81600f850160208901611c35565b691116113b30b63ab2911d60b11b600f918401918201528451612416816019840160208901611c35565b607d60f81b60199290910191820152835161243881601a840160208801611c35565b01601a0195945050505050565b683d913730b6b2911d1160b91b8152855160009061246a816009850160208b01611c35565b701116113232b9b1b934b83a34b7b7111d1160791b600991840191820152865161249b81601a840160208b01611c35565b6e11161130ba3a3934b13aba32b9911d60891b601a929091019182015285516124cb816029840160208a01611c35565b69161134b6b0b3b2911d1160b11b6029929091019182015284516124f6816033840160208901611c35565b7211161130b734b6b0ba34b7b72fbab936111d1160691b603392909101918201526125246046820185612181565b61227d60f01b815260020198975050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161257381601d850160208701611c35565b91909101601d0192915050565b808201808211156104b4576104b4612004565b6000816125a2576125a2612004565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125dd90830184611c59565b9695505050505050565b6000602082840312156125f957600080fd5b8151610e0781611c0256fe4b616c6c617820697320616e206f6e2d636861696e207365726965732c20612067656e6572617469766520776f726b2063726561746564207769746820636f646520776865726520656163682065646974696f6e20686173206265656e206361726566756c6c792073656c65637465642e204974206578706c6f72657320746865206c61796572696e67206f6620646966666572656e7420626c6f636b73206f6e2061206d6f64756c617220677269642e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974daddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef000000000000000000000000000000000000000000000000000000000000009100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000005a8000000000000000000000000000000000000000000000000000000000000059ed3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c6d65746120636861727365743d227574662d3822202f3e3c7363726970743e6c657420616c7068616265743d223132333435363738396162636465666768696a6b6d6e6f707172737475767778797a41424344454647484a4b4c4d4e505152535455565758595a223b766172206678686173683d22223b6c6574206235386465633d653d3e5b2e2e2e655d2e7265647563652828652c68293d3e652a616c7068616265742e6c656e6774682b616c7068616265742e696e6465784f662868297c302c30292c6678686173685472756e633d6678686173682e736c6963652832292c72656765783d52656745787028222e7b222b286678686173682e6c656e6774682f347c30292b227d222c226722292c6861736865733d6678686173685472756e632e6d61746368287265676578292e6d617028653d3e623538646563286529292c73666333323d28652c682c612c73293d3e28293d3e7b617c3d303b76617220243d2828657c3d30292b28687c3d30297c30292b28737c3d30297c303b72657475726e20733d732b317c302c653d685e683e3e3e392c683d612b28613c3c33297c302c613d28613d613c3c32317c613e3e3e3131292b247c302c28243e3e3e30292f343239343936373239367d3b76617220667872616e643d7366633332282e2e2e686173686573293b3c2f7363726970743e3c7374796c653e626f64792c68746d6c7b666f6e742d73697a653a313870787d406d6564696120286f7269656e746174696f6e3a6c616e647363617065297b626f64792c68746d6c7b666f6e742d73697a653a313670787d7d626f64797b6d617267696e3a303b70616464696e673a303b77696474683a31303076773b6865696768743a31303076683b6d61782d77696474683a31303076773b6d61782d6865696768743a31303076683b6f766572666c6f773a68696464656e3b646973706c61793a666c65783b616c69676e2d6974656d733a63656e7465723b6a7573746966792d636f6e74656e743a63656e7465723b6261636b67726f756e642d636f6c6f723a236631663166313b666f6e742d66616d696c793a73616e732d73657269667d63616e7661732c7376677b6d61782d77696474683a313030253b6d61782d6865696768743a313030257d3c2f7374796c653e3c2f686561643e3c626f64793e3c7363726970742064656665723d226465666572223e2828293d3e7b76617220743d7b3235303a66756e6374696f6e28742c65297b2166756e6374696f6e2874297b2275736520737472696374223b76617220653d66756e6374696f6e28742c65297b313d3d3d617267756d656e74732e6c656e67746826262841727261792e697341727261792874293f28653d745b315d2c743d745b305d293a28653d742e792c743d742e7829292c746869732e783d742c746869732e793d652c746869732e6e6578743d6e756c6c2c746869732e707265763d6e756c6c2c746869732e5f636f72726573706f6e64696e673d6e756c6c2c746869732e5f64697374616e63653d302c746869732e5f6973456e7472793d21302c746869732e5f6973496e74657273656374696f6e3d21312c746869732e5f766973697465643d21317d3b652e637265617465496e74657273656374696f6e3d66756e6374696f6e28742c6e2c69297b76617220723d6e6577206528742c6e293b72657475726e20722e5f64697374616e63653d692c722e5f6973496e74657273656374696f6e3d21302c722e5f6973456e7472793d21312c727d2c652e70726f746f747970652e76697369743d66756e6374696f6e28297b746869732e5f766973697465643d21302c6e756c6c3d3d3d746869732e5f636f72726573706f6e64696e677c7c746869732e5f636f72726573706f6e64696e672e5f766973697465647c7c746869732e5f636f72726573706f6e64696e672e766973697428297d2c652e70726f746f747970652e657175616c733d66756e6374696f6e2874297b72657475726e20746869732e783d3d3d742e782626746869732e793d3d3d742e797d2c652e70726f746f747970652e6973496e736964653d66756e6374696f6e2874297b76617220653d21312c6e3d742e66697273742c693d6e2e6e6578742c723d746869732e782c733d746869732e793b646f286e2e793c732626692e793e3d737c7c692e793c7326266e2e793e3d73292626286e2e783c3d727c7c692e783c3d7229262628655e3d6e2e782b28732d6e2e79292f28692e792d6e2e79292a28692e782d6e2e78293c72292c693d286e3d6e2e6e657874292e6e6578747c7c742e66697273743b7768696c6528216e2e657175616c7328742e666972737429293b72657475726e20657d3b766172206e3d66756e6374696f6e28742c652c6e2c69297b746869732e783d302c746869732e793d302c746869732e746f536f757263653d302c746869732e746f436c69703d303b76617220723d28692e792d6e2e79292a28652e782d742e78292d28692e782d6e2e78292a28652e792d742e79293b30213d3d72262628746869732e746f536f757263653d2828692e782d6e2e78292a28742e792d6e2e79292d28692e792d6e2e79292a28742e782d6e2e7829292f722c746869732e746f436c69703d2828652e782d742e78292a28742e792d6e2e79292d28652e792d742e79292a28742e782d6e2e7829292f722c746869732e76616c69642829262628746869732e783d742e782b746869732e746f536f757263652a28652e782d742e78292c746869732e793d742e792b746869732e746f536f757263652a28652e792d742e792929297d3b6e2e70726f746f747970652e76616c69643d66756e6374696f6e28297b72657475726e20303c746869732e746f536f757263652626746869732e746f536f757263653c312626303c746869732e746f436c69702626746869732e746f436c69703c317d3b76617220693d66756e6374696f6e28742c6e297b746869732e66697273743d6e756c6c2c746869732e76657274696365733d302c746869732e5f6c617374556e70726f6365737365643d6e756c6c2c746869732e5f617272617956657274696365733d766f696420303d3d3d6e3f41727261792e6973417272617928745b305d293a6e3b666f722876617220693d302c723d742e6c656e6774683b693c723b692b2b29746869732e616464566572746578286e6577206528745b695d29297d3b66756e6374696f6e207228742c652c6e2c72297b76617220733d6e657720692874292c6f3d6e657720692865293b72657475726e20732e636c6970286f2c6e2c72297d692e70726f746f747970652e6164645665727465783d66756e6374696f6e2874297b6966286e756c6c3d3d3d746869732e666972737429746869732e66697273743d742c746869732e66697273742e6e6578743d742c746869732e66697273742e707265763d743b656c73657b76617220653d746869732e66697273742c6e3d652e707265763b652e707265763d742c742e6e6578743d652c742e707265763d6e2c6e2e6e6578743d747d746869732e76657274696365732b2b7d2c692e70726f746f747970652e696e736572745665727465783d66756e6374696f6e28742c652c6e297b666f722876617220692c723d653b21722e657175616c73286e292626722e5f64697374616e63653c742e5f64697374616e63653b29723d722e6e6578743b742e6e6578743d722c693d722e707265762c742e707265763d692c692e6e6578743d742c722e707265763d742c746869732e76657274696365732b2b7d2c692e70726f746f747970652e6765744e6578743d66756e6374696f6e2874297b666f722876617220653d743b652e5f6973496e74657273656374696f6e3b29653d652e6e6578743b72657475726e20657d2c692e70726f746f747970652e6765744669727374496e746572736563743d66756e6374696f6e28297b76617220743d746869732e5f6669727374496e746572736563747c7c746869732e66697273743b646f7b696628742e5f6973496e74657273656374696f6e262621742e5f7669736974656429627265616b3b743d742e6e6578747d7768696c652821742e657175616c7328746869732e666972737429293b72657475726e20746869732e5f6669727374496e746572736563743d742c747d2c692e70726f746f747970652e686173556e70726f6365737365643d66756e6374696f6e28297b76617220743d746869732e5f6c617374556e70726f6365737365647c7c746869732e66697273743b646f7b696628742e5f6973496e74657273656374696f6e262621742e5f766973697465642972657475726e20746869732e5f6c617374556e70726f6365737365643d742c21303b743d742e6e6578747d7768696c652821742e657175616c7328746869732e666972737429293b72657475726e20746869732e5f6c617374556e70726f6365737365643d6e756c6c2c21317d2c692e70726f746f747970652e676574506f696e74733d66756e6374696f6e28297b76617220743d5b5d2c653d746869732e66697273743b696628746869732e5f6172726179566572746963657329646f20742e70757368285b652e782c652e795d292c653d652e6e6578743b7768696c652865213d3d746869732e6669727374293b656c736520646f20742e70757368287b783a652e782c793a652e797d292c653d652e6e6578743b7768696c652865213d3d746869732e6669727374293b72657475726e20747d2c692e70726f746f747970652e636c69703d66756e6374696f6e28742c722c73297b766172206f2c612c633d746869732e66697273742c6c3d742e66697273742c683d2172262621732c663d722626733b646f7b69662821632e5f6973496e74657273656374696f6e29646f7b696628216c2e5f6973496e74657273656374696f6e297b76617220643d6e6577206e28632c746869732e6765744e65787428632e6e657874292c6c2c742e6765744e657874286c2e6e65787429293b696628642e76616c69642829297b76617220703d652e637265617465496e74657273656374696f6e28642e782c642e792c642e746f536f75726365292c753d652e637265617465496e74657273656374696f6e28642e782c642e792c642e746f436c6970293b702e5f636f72726573706f6e64696e673d752c752e5f636f72726573706f6e64696e673d702c746869732e696e7365727456657274657828702c632c746869732e6765744e65787428632e6e65787429292c742e696e7365727456657274657828752c6c2c742e6765744e657874286c2e6e65787429297d7d6c3d6c2e6e6578747d7768696c6528216c2e657175616c7328742e666972737429293b633d632e6e6578747d7768696c652821632e657175616c7328746869732e666972737429293b633d746869732e66697273742c6c3d742e66697273742c725e3d6f3d632e6973496e736964652874292c735e3d613d6c2e6973496e736964652874686973293b646f20632e5f6973496e74657273656374696f6e262628632e5f6973456e7472793d722c723d2172292c633d632e6e6578743b7768696c652821632e657175616c7328746869732e666972737429293b646f206c2e5f6973496e74657273656374696f6e2626286c2e5f6973456e7472793d732c733d2173292c6c3d6c2e6e6578743b7768696c6528216c2e657175616c7328742e666972737429293b666f722876617220243d5b5d3b746869732e686173556e70726f63657373656428293b297b766172205f3d746869732e6765744669727374496e7465727365637428292c793d6e65772069285b5d2c746869732e5f61727261795665727469636573293b792e616464566572746578286e65772065285f2e782c5f2e7929293b646f7b6966285f2e766973697428292c5f2e5f6973456e74727929646f205f3d5f2e6e6578742c792e616464566572746578286e65772065285f2e782c5f2e7929293b7768696c6528215f2e5f6973496e74657273656374696f6e293b656c736520646f205f3d5f2e707265762c792e616464566572746578286e65772065285f2e782c5f2e7929293b7768696c6528215f2e5f6973496e74657273656374696f6e293b5f3d5f2e5f636f72726573706f6e64696e677d7768696c6528215f2e5f76697369746564293b242e7075736828792e676574506f696e74732829297d72657475726e20303d3d3d242e6c656e677468262628683f6f3f242e7075736828742e676574506f696e74732829293a613f242e7075736828746869732e676574506f696e74732829293a242e7075736828746869732e676574506f696e747328292c742e676574506f696e74732829293a663f6f3f242e7075736828746869732e676574506f696e74732829293a612626242e7075736828742e676574506f696e74732829293a6f3f242e7075736828742e676574506f696e747328292c746869732e676574506f696e74732829293a613f242e7075736828746869732e676574506f696e747328292c742e676574506f696e74732829293a242e7075736828746869732e676574506f696e74732829292c303d3d3d242e6c656e677468262628243d6e756c6c29292c247d2c742e756e696f6e3d66756e6374696f6e28742c65297b72657475726e207228742c652c21312c2131297d2c742e696e74657273656374696f6e3d66756e6374696f6e28742c65297b72657475726e207228742c652c21302c2130297d2c742e646966663d66756e6374696f6e28742c65297b72657475726e207228742c652c21312c2130297d2c742e636c69703d722c4f626a6563742e646566696e6550726f706572747928742c225f5f65734d6f64756c65222c7b76616c75653a21307d297d2865297d7d2c653d7b7d3b66756e6374696f6e206e2869297b76617220723d655b695d3b696628766f69642030213d3d722972657475726e20722e6578706f7274733b76617220733d655b695d3d7b6578706f7274733a7b7d7d3b72657475726e20745b695d2e63616c6c28732e6578706f7274732c732c732e6578706f7274732c6e292c732e6578706f7274737d2828293d3e7b2275736520737472696374223b76617220743d6e28323530292c653d22687474703a2f2f7777772e77332e6f72672f323030302f737667222c693d7b5f3a766f696420302c77696474683a6e756c6c2c6865696768743a6e756c6c2c7363616c653a312c7374726f6b653a6e756c6c2c67726f7570733a5b5d2c67726f75705265663a5b5d2c696e69743a66756e6374696f6e28742c6e2c722c732c6f297b692e5f3d646f63756d656e742e637265617465456c656d656e744e5328652c2273766722292c692e5f2e736574417474726962757465282276657273696f6e222c22312e3122292c692e5f2e7365744174747269627574652822786d6c6e73222c65292c692e5f2e7365744174747269627574652822786d6c6e733a737667222c65292c692e5f2e7365744174747269627574652822786d6c6e733a786c696e6b222c22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b22292c692e5f2e7365744174747269627574652822786d6c6e733a696e6b7363617065222c22687474703a2f2f7777772e696e6b73636170652e6f72672f6e616d657370616365732f696e6b736361706522292c692e5f2e73657441747472696275746528227769647468222c22222e636f6e63617428742c2270782229292c692e5f2e7365744174747269627574652822686569676874222c22222e636f6e636174286e2c2270782229292c692e5f2e736574417474726962757465282276696577426f78222c2230203020222e636f6e63617428742c222022292e636f6e636174286e29292c692e5f2e7374796c652e6261636b67726f756e64436f6c6f723d6f7d2c63726561746547726f75703a66756e6374696f6e28742c6e2c72297b766f696420303d3d3d72262628723d226e6f6e6522293b76617220733d646f63756d656e742e637265617465456c656d656e744e5328652c226722293b732e73657441747472696275746528226e616d65222c74292c732e73657441747472696275746528227374726f6b65222c6e292c732e736574417474726962757465282266696c6c222c72292c692e5f2e617070656e644368696c642873292c692e67726f7570732e707573682873292c692e67726f75705265662e707573682874297d2c636c65617247726f75703a66756e6374696f6e2874297b76617220653d692e67726f75705265662e696e6465784f662874293b692e67726f7570735b655d2e696e6e657248544d4c3d22227d2c696e736572743a66756e6374696f6e2874297b742e617070656e644368696c6428692e5f297d2c647261774c696e653a66756e6374696f6e28742c6e2c722c73297b766f696420303d3d3d6e2626286e3d2131292c766f696420303d3d3d72262628723d2222293b666f7228766172206f3d646f63756d656e742e637265617465456c656d656e744e5328652c227061746822292c613d224d20222e636f6e63617428745b305d5b305d2c222022292e636f6e63617428745b305d5b315d292c633d313b633c742e6c656e6774683b632b2b29612b3d22204c222e636f6e63617428745b635d5b305d2c222022292e636f6e63617428745b635d5b315d293b6966286e262628612b3d22204c222e636f6e63617428745b305d5b305d2c222022292e636f6e63617428745b305d5b315d29292c6f2e736574417474726962757465282264222c61292c2222213d3d7226266f2e7365744174747269627574652822636c617373222c72292c73297b766172206c3d692e67726f75705265662e696e6465784f662873293b692e67726f7570735b6c5d2e617070656e644368696c64286f297d656c736520692e5f2e617070656e644368696c64286f297d2c646f776e6c6f61643a66756e6374696f6e2874297b76617220653d6e756c6c2c6e3d273c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e5c6e2020202020202020272e636f6e63617428692e5f2e6f7574657248544d4c292c723d6e657720426c6f62285b6e5d2c7b747970653a226170706c69636174696f6e2f786d6c227d293b6e756c6c213d3d65262677696e646f772e55524c2e7265766f6b654f626a65637455524c2865292c653d77696e646f772e55524c2e6372656174654f626a65637455524c2872293b76617220733d646f63756d656e742e637265617465456c656d656e7428226122293b732e687265663d652c732e646f776e6c6f61643d22222e636f6e63617428742c222e73766722292c732e636c69636b28297d2c64656c6574653a66756e6374696f6e2874297b742e72656d6f76654368696c6428692e5f297d7d3b6c657420723d693b76617220733d7b2256696f6c6574204861726d6f6e79223a22233434333835373b3a233535366661313b3a236466653765303b3a23663961343334222c566f6c63616e69633a22233537363037313b3a233931393961623b3a236639366435643b3a23636265346562222c22507572706c6520536861646573223a22233437333534663b3a236131646335343b3a233965396562313b3a236639366435643b3a23653065326537222c224f6365616e20427265657a65223a22233442344239353b3a236462343434623b3a236664646336363b3a236439663065333b3a23346238326130222c46726f7374626974653a22233433313663613b3a236635646364353b3a236638313431633b3a233533303161353b3a23396566666430222c224d69646e6967687420426c756573223a22233434303041333b3a233735423942453b3a236664643834343b3a23656538383231222c224d7574656420466f72657374223a22233333343434343b3a236533663531353b3a236665343134623b3a236461653365343b3a23353533363644222c2250696e6b20466c616d696e676f223a22233434343436363b3a236535653264663b3a236665633263343b3a233863336663373b3a23343530336130222c224772657920536b696573223a22233738386539333b3a236532646665353b3a233961663363313b3a23353934633631222c22496e6469676f204e6967687473223a22233438343635643b3a233465373762313b3a236539643364313b3a23646436653561222c2242757267756e647920426c697373223a22233442323336453b3a236636316531653b3a236565663564363b3a23343843374234222c224d61757665204d61676963223a22233436333735333b3a236364366436363b3a236539643464323b3a23383238656130222c22506c756d2050657266656374696f6e223a22233534343836353b3a233734396139323b3a236533653064383b3a23663764643866222c22507572706c652048617a65223a22233466326137343b3a236437656666333b3a236633646664353b3a23666637643764222c22476f6c64656e2048617276657374223a22233462343337323b3a236438646263633b3a236666656337303b3a23666134363366222c22476c616d6f726f7573204e6967687473223a22233435333835363b3a233533343862653b3a233862646466623b3a23663464326363222c2253756e666c6f776572204669656c6473223a22233643373138393b3a236464643731623b3a236630343033373b3a23643639663532222c22456c656374726963205669626573223a22236664333232663b3a236630636464373b3a233562303166373b3a23353630433937222c22416d65746879737420447265616d73223a22233436333734613b3a236437353735303b3a236535653264643b3a23653465313532222c224f6365616e69632046616e74617379223a22233462343635633b3a233465353961663b3a236465653364643b3a23656565303938222c224d696e7479204672657368223a22233536356638613b3a233831653162313b3a236536653964363b3a23663337613661222c22576f6f646c616e6420547261696c223a22236230353935393b3a233465336164333b3a236638666265663b3a23373439613935222c224265727279204372757368223a22233466333834663b3a233930643061653b3a236463643264303b3a23353536313738222c22537565646520436f6c6f72223a22233432333135323b3a233764386437653b3a233738363938333b3a236565386130643b3a23633561663939222c22536c6174652047726179223a22233534353537373b3a236430383033353b3a236465643964313b3a23383638633964222c224465657020507572706c65223a22233443334441343b3a236630323231663b3a236564653264313b3a23363165386664222c2253746f726d792053656173223a22233539363637383b3a236566653438353b3a236536653365313b3a23613139616164222c225368696e79204469616d6f6e64223a22234237463146443b3a233945423843413b3a236332663666663b3a233544364637373b3a236436666666643b3a23633266396666222c4f6365616e69633a22233534383138653b3a236661333937333b3a236664656636643b3a23646665396465222c2243686572727920436f6c61223a22233533363438333b3a236564303432373b3a236638646264323b3a23353244304530222c224c656d6f6e2044726f70223a22236666666666663b3a236666663965393b3a236665666661383b3a236666666563653b3a23666266666530222c2250696e6b20526f7365223a22234538323139353b3a23443245374546222c596f67613a22233966633565383b3a233666383961323b3a236666666666663b3a236262626262623b3a23343434343434222c53617070686972653a22233432343839453b3a23443036443632222c22426c756520496365223a22233744363638363b3a23383545324645222c224d69646e6967687420426c7565223a22233537313731303b3a23363134424633222c467563687369613a22234439343938413b3a23343438443946222c456767706c616e743a22233545324538383b3a23453243434238222c2243616e64792053746f7265223a22234630334336393b3a234642444343373b3a234535343339433b3a23353436434339222c56696e746167653a22234431433744313b3a236130386539303b3a236662346532333b3a23346638616533222c4e696768746c6966653a22233433343435353b3a233744383142383b3a234631343733463b3a23464641383133222c224a656c6c79204265616e73223a22234632433630323b3a233531344643463b3a233446423942413b3a23463939303335222c5477696c696768743a22233545343739413b3a23433444304432222c2247726179205363616c65223a22233532353235323b3a233835383538353b3a236238623862383b3a23636363636363222c22426c7565204d697374223a22233434353537373b3a233636434343433b3a23434343434343222c224d6964617320546f756368223a22236632613630323b3a236661643131643b3a23666666383733222c22506f6c6172206d6972616765223a22233561393263343b3a23653236363238222c22426c756520536b79223a22233432353542333b3a23464245414542222c4d696e74793a22233643353935393b3a234537453844313b3a23413742454145222c22436f72616c2052656566223a22233538343634363b3a233437414543423b3a233930656539303b3a23643534383438222c2250696e6b204c656d6f6e616465223a22234639363136373b3a23464345373744222c225377616d7020466f67223a22233463353536303b3a236134633063353b3a236339643864323b3a233864613039363b3a23353636313563222c224172637469632047617264656e223a22234634454446443b3a23343441303943222c225265642056656c766574223a22233939303031313b3a23464346364635222c2253696c766572204c696e696e67223a22233841414145353b3a23463346334633222c4d6f6e6f3a22233434343434343b3a23636363636363222c5065707065726d696e743a22234643454444413b3a23454534453334222c22436f617374616c204475736b223a22233561363461623b3a233931346636643b3a23366639306137222c2259656c6c6f77205375626d6172696e65223a22233531393743443b3a23464246384245222c224261627920426c7565223a22234144443845363b3a23343734374431222c2243686572727920426c6f73736f6d223a22233839414245333b3a23454137333844222c466f726573743a22233732623336623b3a236639633034643b3a236565663066323b3a236132393939653b3a23383436613661222c22486f742050696e6b223a22234543343439423b3a23393946343433222c4d6f6368613a22233461343534613b3a234530413936443b3a23444443334135222c53756e62757273743a22234646413335313b3a234646424537423b3a23454544393731222c224c6176656e646572204669656c6473223a22233841333037463b3a233739413744333b3a23363838334243222c536361726c65743a22234343333133443b3a23463743354343222c5465727261636f7474613a22233738333933373b3a234643373636413b3a23463141433838222c2250617374656c206d6561646f7773223a22233932373763663b3a236234663863383b3a23666666666432222c4f6c6976653a22233437396134393b3a23424143453844222c536167653a22233436423637393b3a23464346364635227d3b66756e6374696f6e206f28742c652c6e297b72657475726e20742a286e2d65292b657d76617220613d7b736b6574636857696474683a3130302c73697a654265747765656e3a7b6d696e3a302c6d61783a317d2c666978656453697a653a2e352c73747261746567793a22222c70726e673a4d6174682e72616e646f6d2c696e69743a66756e6374696f6e28742c652c6e2c692c72297b612e736b6574636857696474683d742c612e70726e673d652c612e73697a654265747765656e3d6e2c612e666978656453697a653d692c612e73747261746567793d727d2c67657453697a653a66756e6374696f6e2874297b6966282246756c6c2072616e646f6d223d3d3d612e73747261746567792972657475726e206f28612e70726e6728292c612e73697a654265747765656e2e6d696e2c612e73697a654265747765656e2e6d6178292a612e736b6574636857696474683b6966282252616e646f6d20756e697175652076616c7565223d3d3d612e73747261746567792972657475726e20612e666978656453697a652a612e736b6574636857696474683b6966282253696e77617665223d3d3d612e7374726174656779297b76617220653d742f612e736b6574636857696474683b72657475726e204d6174682e6d617828612e73697a654265747765656e2e6d696e2a612e736b6574636857696474682c4d6174682e73696e28652a4d6174682e5049292a612e736b6574636857696474682a612e73697a654265747765656e2e6d6178297d7d7d3b66756e6374696f6e206328742c65297b766172206e3d4d6174682e6174616e3228745b315d2e792d745b305d2e792c745b315d2e782d745b305d2e78292c693d4d6174682e6879706f7428745b305d2e782d745b315d2e782c745b305d2e792d745b315d2e79293b72657475726e7b783a745b305d2e782b4d6174682e636f73286e292a692a652c793a745b305d2e792b4d6174682e73696e286e292a692a657d7d766172206c3d66756e6374696f6e28742c652c6e2c69297b666f722876617220723d655b305d2f322c733d655b315d2f322c6f3d4d6174682e6879706f7428655b305d2c655b315d292c613d312e33332a6f2c6c3d2e37352a6f2c683d2e37352a4d6174682e50492c663d5b7b783a722b4d6174682e636f7328742d682f32292a612c793a732b4d6174682e73696e28742d682f32292a617d2c7b783a722b4d6174682e636f7328742b682f32292a612c793a732b4d6174682e73696e28742b682f32292a617d2c7b783a722b4d6174682e636f7328742b682f32292a6c2c793a732b4d6174682e73696e28742b682f32292a6c7d2c7b783a722b4d6174682e636f7328742d682f32292a6c2c793a732b4d6174682e73696e28742d682f32292a6c7d5d2c643d5b665b305d2c665b335d5d2c703d5b665b315d2c665b325d5d2c753d5b5d2c243d303b243c3d363b242b2b29752e70757368285b6328642c363d3d3d243f242f363a28242b286e28292d2e3529292f36292c6328702c363d3d3d243f242f363a28242b286e28292d2e3529292f36295d293b766172205f3d5b5d3b666f7228243d303b243c752e6c656e6774682d313b242b2b29666f722876617220793d5b5d2c783d313b783c755b245d2e6c656e6774683b782b2b297b666f722876617220673d755b245d5b782d315d2c763d755b242b315d5b782d315d2c773d313b773c3d32303b772b2b297b76617220623d63285b755b245d5b782d315d2c755b245d5b785d5d2c772f3230292c6d3d63285b755b242b315d5b782d315d2c755b242b315d5b785d5d2c772f3230292c413d7b7074733a5b672c622c6d2c765d2c693a7b783a32302a782b772c793a247d7d3b792e707573682841292c673d622c763d6d7d5f2e707573682879297d72657475726e7b636c69703a662c74696c653a5f7d7d2c683d66756e6374696f6e28742c652c6e2c69297b72657475726e7b7074733a5b745b655d5b6e5d2c745b655d5b6e2b315d2c745b652b315d5b6e2b312b695d2c745b652b315d5b6e2b695d5d7d7d2c663d66756e6374696f6e28742c652c6e2c692c722c73297b696628693c6e2e6c656e6774682d322626723c6e5b692b315d2e6c656e6774682d312626723c6e5b692b735d2e6c656e6774682d322626722b732b313c6e5b695d2e6c656e6774682d322626722b312b733c6e5b692b315d2e6c656e6774682d312626722b733e30297b766172206f2c612c6c2c662c642c702c752c242c5f2c792c782c672c762c772c622c6d2c412c432c452c462c422c533d74286e5b695d5b725d2e782c6e5b695d5b725d2e79293b696628533e2e37352972657475726e5b68286e2c692c722c73295d3b696628533c2e37352626533e2e352972657475726e206528293e2e353f286f3d6e2c613d692c6c3d722c663d732c643d63285b6f5b615d5b6c5d2c6f5b615d5b6c2b315d5d2c2e35292c703d63285b6f5b612b315d5b6c2b665d2c6f5b612b315d5b6c2b312b665d5d2c2e35292c5b7b7074733a5b6f5b615d5b6c5d2c642c702c6f5b612b315d5b6c2b665d5d7d2c7b7074733a5b642c6f5b615d5b6c2b315d2c6f5b612b315d5b6c2b312b665d2c705d7d5d293a28753d6e2c243d692c5f3d722c793d732c783d63285b755b245d5b5f5d2c755b242b315d5b5f2b795d5d2c2e35292c673d63285b755b245d5b5f2b315d2c755b242b315d5b5f2b312b795d5d2c2e35292c5b7b7074733a5b782c672c755b242b315d5b5f2b312b795d2c755b242b315d5b5f2b795d5d7d2c7b7074733a5b755b245d5b5f5d2c755b245d5b5f2b315d2c672c785d7d5d293b696628533c2e352626533e2e32352972657475726e20763d6e2c773d692c623d722c6d3d732c413d63285b765b775d5b625d2c765b775d5b622b315d5d2c2e35292c433d63285b765b772b315d5b622b6d5d2c765b772b315d5b622b312b6d5d5d2c2e35292c453d63285b765b775d5b625d2c765b772b315d5b622b6d5d5d2c2e35292c463d63285b765b775d5b622b315d2c765b772b315d5b622b312b6d5d5d2c2e35292c423d63285b412c435d2c2e35292c5b7b7074733a5b452c422c432c765b772b315d5b622b6d5d5d7d2c7b7074733a5b422c462c765b772b315d5b622b312b6d5d2c435d7d2c7b7074733a5b765b775d5b625d2c412c422c455d7d2c7b7074733a5b412c765b775d5b622b315d2c462c425d7d5d7d7d3b66756e6374696f6e20642874297b666f722876617220653d302c6e3d302c693d302c723d742e6c656e6774682c733d303b733c723b732b2b297b766172206f3d733d3d3d722d313f303a732b312c613d745b735d2c633d745b6f5d2c6c3d612e782a632e792d632e782a612e793b652b3d6c2c6e2b3d28612e782b632e78292a6c2c692b3d28612e792b632e79292a6c7d76617220683d332a653b72657475726e7b783a6e2f682c793a692f687d7d66756e6374696f6e207028742c65297b766f696420303d3d3d65262628653d3132293b666f7228766172206e3d5b5d2c693d642874292c723d303b723c742e6c656e6774683b722b2b297b76617220733d745b725d2c6f3d745b28722b312925742e6c656e6774685d2c613d745b28722b322925742e6c656e6774685d2c633d4d6174682e73717274284d6174682e706f77286f2e782d732e782c32292b4d6174682e706f77286f2e792d732e792c3229292c6c3d4d6174682e73717274284d6174682e706f77286f2e782d612e782c32292b4d6174682e706f77286f2e792d612e792c3229292c683d4d6174682e73717274284d6174682e706f7728612e782d732e782c32292b4d6174682e706f7728612e792d732e792c3229292c663d2d652f4d6174682e73696e284d6174682e61636f7328286c2a6c2b632a632d682a68292f28322a6c2a6329292f32292c703d4d6174682e6174616e32286f2e792d692e792c6f2e782d692e78293b696628663c3d2d282e342a4d6174682e73717274284d6174682e706f77286f2e782d692e782c32292b4d6174682e706f77286f2e792d692e792c322929292972657475726e21313b6e2e70757368287b783a6f2e782b4d6174682e636f732870292a662c793a6f2e792b4d6174682e73696e2870292a667d297d72657475726e206e7d76617220753d66756e6374696f6e28742c652c6e2c69297b76617220723d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c66726f6e743a5b5d2c636c69703a5b5d2c636f6c6f723a697d2c733d7028742e7074732c6e293b69662873297b766172206f3d63285b735b305d2c735b325d5d2c2e35292c613d63285b735b325d2c735b335d5d2c2e35292c6c3d63285b735b315d2c735b325d5d2c2e35293b722e706f6c792e70757368285b735b305d2c6c2c6f2c615d292c722e706f6c792e70757368285b6f2c6c2c735b315d2c735b325d5d292c722e706f6c792e70757368285b735b335d2c735b305d2c6f2c615d292c722e736861646f77417265613d5b5b735b305d2c735b315d2c6c2c6f5d2c5b735b325d2c6c2c6f2c615d5d7d72657475726e20727d2c243d66756e6374696f6e28742c652c6e2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a737d2c613d5b5d2c633d7028742e7074732c6e293b69662863297b666f7228766172206c3d4d6174682e6174616e3228742e7074735b335d2e792d742e7074735b305d2e792c742e7074735b335d2e782d742e7074735b305d2e78292c683d312b4d6174682e6365696c286528292a72292a6e2c663d4d6174682e50492a28693f2e37353a312e3235292c643d632e6d61702866756e6374696f6e2874297b72657475726e7b783a742e782b4d6174682e636f73286c2b66292a682c793a742e792b4d6174682e73696e286c2b66292a687d7d292c753d303b753c632e6c656e6774683b752b2b29612e70757368285b742e7074735b28752b312925742e7074732e6c656e6774685d2c635b755d5d293b6f2e706f6c792e707573682864292c6f2e706f6c792e70757368285b645b305d2c645b315d2c635b315d2c635b305d5d292c6f2e706f6c792e70757368285b645b325d2c645b315d2c635b315d2c635b325d5d292c6f2e736861646f77417265613d5b5b645b325d2c645b335d2c635b335d2c635b325d5d5d2c6f2e66726f6e743d642c6f2e636c69703d5b645b305d2c645b315d2c635b315d2c635b325d2c635b335d2c645b335d5d7d72657475726e206f7d2c5f3d66756e6374696f6e28742c652c6e2c69297b76617220723d6428742e707473292c733d4d6174682e6174616e3228742e7074735b305d2e792d742e7074735b335d2e792c742e7074735b305d2e782d742e7074735b305d2e78292c6f3d4d6174682e50492a286e3f2e353a2e3235292c613d7b783a722e782b4d6174682e636f7328732b6f292a652a286e3f2d313a31292c793a722e792b4d6174682e73696e28732b6f292a652a286e3f2d313a31297d3b72657475726e7b706f6c793a5b5b742e7074735b325d2c742e7074735b315d2c615d5d2c736861646f77417265613a5b5b742e7074735b335d2c742e7074735b305d2c615d2c5b612c742e7074735b315d2c742e7074735b305d5d5d2c676c696e74417265613a5b5b742e7074735b325d2c742e7074735b335d2c615d5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a697d7d2c793d66756e6374696f6e28742c65297b766172206e3d21313b2223223d3d745b305d262628743d742e736c6963652831292c6e3d2130293b76617220693d7061727365496e7428742c3136292c723d28693e3e3136292b653b723e3235353f723d3235353a723c30262628723d30293b76617220733d28693e3e3826323535292b653b733e3235353f733d3235353a733c30262628733d30293b766172206f3d283235352669292b653b72657475726e206f3e3235353f6f3d3235353a6f3c302626286f3d30292c286e3f2223223a2222292b286f7c733c3c387c723c3c3136292e746f537472696e67283136297d2c783d66756e6374696f6e28742c652c6e297b6966286e7c7c323d3d3d617267756d656e74732e6c656e67746829666f722876617220692c723d302c733d652e6c656e6774683b723c733b722b2b29216926267220696e20657c7c28697c7c28693d41727261792e70726f746f747970652e736c6963652e63616c6c28652c302c7229292c695b725d3d655b725d293b72657475726e20742e636f6e63617428697c7c41727261792e70726f746f747970652e736c6963652e63616c6c286529297d2c673d66756e6374696f6e2874297b72657475726e5b63285b745b315d2c745b325d5d2c2e35292c745b335d2c745b305d5d7d2c763d66756e6374696f6e28297b72657475726e28763d4f626a6563742e61737369676e7c7c66756e6374696f6e2874297b666f722876617220652c6e3d312c693d617267756d656e74732e6c656e6774683b6e3c693b6e2b2b29666f7228766172207220696e20653d617267756d656e74735b6e5d294f626a6563742e70726f746f747970652e6861734f776e50726f70657274792e63616c6c28652c7229262628745b725d3d655b725d293b72657475726e20747d292e6170706c7928746869732c617267756d656e7473297d2c773d66756e6374696f6e2874297b72657475726e204d6174682e726f756e64283165352a74292f3165357d2c623d7b736d616c6c3a5b2e30392c2e315d2c6d656469756d3a5b2e312c2e31325d2c6c617267653a5b2e31342c2e31365d2c687567653a5b2e31382c2e32325d7d3b66756e6374696f6e206d28742c65297b72657475726e20745b4d6174682e666c6f6f7228652a742e6c656e677468295d7d66756e6374696f6e204128742c652c6e297b72657475726e206e2a28652d74292b747d76617220432c453d38302c463d6d285b2246756c6c2072616e646f6d222c2252616e646f6d20756e697175652076616c7565222c2253696e77617665225d2c667872616e642829292c423d4d6174682e666c6f6f7228412831322c34382c667872616e64282929292c533d77284128312c31362c667872616e64282929292c6b3d772841282e352c312c667872616e64282929292c443d6d285b2272616e646f6d222c226c657373206469766973696f6e206f6e207468652063656e746572222c226d6f7265206469766973696f6e206f6e207468652063656e746572225d2c667872616e642829292c503d6d284f626a6563742e6b6579732862292c667872616e642829292c7a3d7b6d696e3a625b505d5b305d2c6d61783a625b505d5b315d7d2c493d77286f28667872616e6428292c7a2e6d696e2c7a2e6d617829292c4c3d2e353e667872616e6428293f313a302c543d6d285b2272616e646f6d222c2273696e676c65225d2c667872616e642829292c4d3d77284128362c31302c667872616e64282929292c4e3d4d6174682e6365696c284128302c322c667872616e64282929292c563d6d284f626a6563742e6b6579732873292c667872616e642829292c713d735b565d2e73706c697428223b3a22292c473d2e353e667872616e6428293b77696e646f772e2466786861736846656174757265733d7b22426f782064656e73697479223a28433d6b293c2e3632353f22737061727365223a433c2e37353f22736361747465726564223a433c2e3837353f2264656e7365223a22636f6e676573746564222c2243656c6c207769647468223a502c2253706c6974206261736564223a442c22426f78206465707468223a66756e6374696f6e2874297b666f722876617220653d5b312c352c392c31332c31365d2c6e3d5b227368616c6c6f77222c226d6f646572617465222c2264656570222c2270726f666f756e64225d2c693d303b693c652e6c656e6774682d313b692b2b29696628743e3d655b695d2626743c655b692b315d2972657475726e206e5b695d3b72657475726e206e5b6e2e6c656e6774682d315d7d2853292c466163696e673a473f227269676874223a226c656674222c50616c657474653a537472696e672856297d3b76617220523d5b313932302c313932305d2c553d7b6e616d653a224b616c6c6178222c73697a653a522c646961676f6e616c3a4d6174682e6879706f7428525b305d2c525b315d292f322c73656374696f6e53697a653a612c626f7865733a5b5d2c6c696e65733a5b5d2c7368617065733a5b5d2c66723a302c7368617065447261776e3a302c626c6f636b42794672616d653a302c73706c697454696c653a66756e6374696f6e28742c65297b6966282272616e646f6d223d3d3d442972657475726e202e32352b2e352a667872616e6428293b766172206e3d4d6174682e6879706f7428742d525b305d2f322c652d525b315d2f32293b72657475726e226d6f7265206469766973696f6e206f6e207468652063656e746572223d3d3d443f2e32352b6e2f552e646961676f6e616c3a312e32352d6e2f552e646961676f6e616c7d2c73636872696e6b54696c653a66756e6374696f6e28297b72657475726e2272616e646f6d223d3d3d543f77286f28667872616e6428292c362c313029293a4d7d2c647261773a66756e6374696f6e28297b76617220743d746869733b746869732e73656374696f6e53697a652e696e697428746869732e73697a655b305d2c667872616e642c7a2c492c46292c722e696e697428746869732e73697a655b305d2c746869732e73697a655b315d2c5b5b452c746869732e73697a655b305d2d455d2c5b452c746869732e73697a655b315d2d455d5d2c2223333333222c22776869746522292c722e696e7365727428646f63756d656e742e626f6479293b76617220653d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226465667322292c6e3d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c227374796c6522293b6e2e696e6e657248544d4c3d225c6e726563742e6261636b67726f756e64207b2066696c6c3a20222e636f6e63617428715b305d2c2232363b207d5c6e70617468207b207374726f6b653a2072676228302c302c302c30293b207d5c6e706174682e74696c65207b2066696c6c3a207267626128302c20302c20302c2030293b207374726f6b653a2022292e636f6e636174287928715b305d2c3430292c223b207374726f6b652d77696474683a20333b207d5c6e22292c712e666f72456163682866756e6374696f6e28742c65297b72657475726e206e2e696e6e657248544d4c2b3d225c6e706174682e636f6c2d222e636f6e63617428652c227b2066696c6c3a2022292e636f6e63617428742c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d676c6e74207b2066696c6c3a2022292e636f6e636174287928742c3230292c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d736864772d30207b2066696c6c3a2022292e636f6e636174287928742c2d3235292c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d736864772d31207b2066696c6c3a2022292e636f6e636174287928742c2d3530292c223b207d22297d292c652e617070656e644368696c64286e293b76617220693d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226c696e6561724772616469656e7422293b692e73657441747472696275746528226964222c226261636b4772616469656e7422292c692e73657441747472696275746528227831222c223022292c692e73657441747472696275746528227832222c223022292c692e73657441747472696275746528227931222c223022292c692e73657441747472696275746528227932222c223122292c692e696e6e657248544d4c3d275c6e20202020202020203c73746f70206f66667365743d223025222073746f702d636f6c6f723d22272e636f6e636174287928715b305d2c2d3130292c27222f3e5c6e20202020202020203c73746f70206f66667365743d2231303025222073746f702d636f6c6f723d2227292e636f6e636174287928715b305d2c2d3230292c27222f3e5c6e202020202020202027292c652e617070656e644368696c642869292c722e5f2e617070656e644368696c642865293b76617220733d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c227265637422293b732e73657441747472696275746528227769647468222c22222e636f6e63617428746869732e73697a655b305d29292c732e7365744174747269627574652822686569676874222c22222e636f6e63617428746869732e73697a655b315d29292c732e636c6173734c6973742e61646428226261636b67726f756e6422292c722e5f2e617070656e644368696c642873293b76617220613d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226722293b612e73657441747472696275746528227472616e73666f726d222c227472616e736c61746528222e636f6e63617428452c222c2022292e636f6e63617428452c22292229293b76617220633d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c227265637422293b632e73657441747472696275746528227769647468222c22222e636f6e63617428746869732e73697a655b305d2d31363029292c632e7365744174747269627574652822686569676874222c22222e636f6e63617428746869732e73697a655b315d2d31363029292c632e736574417474726962757465282266696c6c222c2275726c28236261636b4772616469656e742922292c612e617070656e644368696c642863292c722e5f2e617070656e644368696c642861292c722e63726561746547726f757028227073222c226e6f6e65222c226e6f6e6522293b76617220683d66756e6374696f6e28742c652c6e2c69297b666f722876617220722c733d5b5d2c6f3d303b6f3c742e6c656e6774682d313b6f2b2b297b735b6f5d3d5b5d3b76617220613d6f25323d3d303f693a303b696628745b6f5d2e6c656e6774683e3129666f722876617220633d303b633c745b6f5d2e6c656e6774683b632b2b2928723d735b6f5d292e707573682e6170706c7928722c6628652c6e2c742c6f2c632c6129297d72657475726e20737d2866756e6374696f6e28742c652c6e2c692c722c73297b666f722876617220613d5b5d2c633d4d6174682e6879706f7428655b305d5b315d2d655b305d5b305d2c655b315d5b315d2d655b315d5b305d292c6c3d632f28742d31292c683d303b683c743b682b2b29696628615b685d3d5b5d2c6e297b666f722876617220663d5b2d4d6174682e50492f31302c2d4d6174682e50492f31365d2c643d655b305d5b305d2c703d632d6c2a28682b31293b643c655b305d5b315d2626703e655b315d5b305d2626703c655b315d5b315d3b297b76617220753d692864292c243d6f287228292c665b305d2c665b315d292c5f3d642b4d6174682e636f732824292a752c793d702b4d6174682e73696e2824292a753b615b685d2e70757368287b783a642c793a707d292c643d5f2c703d797d615b685d2e70757368287b783a642c793a707d297d656c73657b666f7228663d5b4d6174682e50492b4d6174682e50492f31362c4d6174682e50492b4d6174682e50492f31305d2c643d655b305d5b315d2c703d632d6c2a28682b31293b643e655b305d5b305d2626703e655b315d5b305d2626703c655b315d5b315d3b29753d692864292c243d6f287228292c665b305d2c665b315d292c5f3d642b4d6174682e636f732824292a752c793d702b4d6174682e73696e2824292a752c615b685d2e70757368287b783a642c793a707d292c643d5f2c703d793b615b685d2e70757368287b783a642c793a707d297d72657475726e20617d28422c5b5b2d282e352a746869732e73697a655b305d292c312e352a746869732e73697a655b305d5d2c5b2d282e31352a746869732e73697a655b315d292c312e352a746869732e73697a655b315d5d5d2c472c746869732e73656374696f6e53697a652e67657453697a652c667872616e64292c746869732e73706c697454696c652c667872616e642c4c292c703d4d6174682e50492a667872616e6428292c783d5b5d3b4e3e302626782e70757368286c28702c746869732e73697a652c667872616e6429292c4e3e312626782e70757368286c28702b4d6174682e50492a282e352b2e352a667872616e642829292c746869732e73697a652c667872616e6429292c682e666f72456163682866756e6374696f6e2865297b28653d652e726576657273652829292e666f72456163682866756e6374696f6e2865297b766172206e3b667872616e6428293c6b2626282e32353e667872616e6428293f286e3d7528652c667872616e642c742e73636872696e6b54696c6528292c3129292e706f6c792e6c656e6774683e302626742e64726177426f78286e293a286e3d2428652c667872616e642c742e73636872696e6b54696c6528292c472c532c3129292e636c697026266e2e706f6c792e6c656e6774683e302626742e626f7865732e70757368286e29292c742e64726177536f6c696428652e7074732c2274696c6522297d297d292c746869732e626f7865732e666f72456163682866756e6374696f6e2865297b72657475726e20742e64726177426f782865297d292c746869732e626f7865733d5b5d2c782e666f72456163682866756e6374696f6e2865297b742e64726177536f6c696428652e636c69702c22636f6c2d3022292c652e74696c652e666f72456163682866756e6374696f6e286e2c69297b6e2e666f72456163682866756e6374696f6e286e297b696628693c652e74696c652e6c656e6774682d31297b76617220722c732c6f2c613d28723d6e2c733d6428722e707473292c6f3d722e7074732e6d61702866756e6374696f6e2874297b72657475726e20762876287b7d2c74292c7b616e676c653a4d6174682e6174616e3228742e792d732e792c742e782d732e78297d297d292e736f72742866756e6374696f6e28742c65297b72657475726e20742e616e676c652d652e616e676c657d292e6d61702866756e6374696f6e2874297b72657475726e7b783a742e782c793a742e797d7d292c722e7074733d5b6f5b325d2c6f5b335d2c6f5b305d2c6f5b315d5d2c72293b6966282e353e667872616e642829297b6966282e353e667872616e642829297b76617220633d7528612c667872616e642c742e73636872696e6b54696c6528292c31293b632e706f6c792e6c656e6774683e312626742e64726177426f782863297d656c73657b766172206c3d5f28612c532c472c31293b6c2e706f6c792e6c656e6774683e312626742e64726177426f78286c297d7d656c736520742e64726177536f6c6964286e2e7074732c2274696c6522297d656c736520742e64726177536f6c6964286e2e7074732c2274696c6522297d297d297d292c746869732e626f7865732e666f72456163682866756e6374696f6e2865297b72657475726e20742e64726177426f782865297d292c746869732e626c6f636b42794672616d653d746869732e7368617065732e6c656e6774682f3435302c746869732e616e696d28297d2c616e696d3a66756e6374696f6e28297b696628552e7368617065447261776e3c552e7368617065732e6c656e6774682d31297b666f722876617220743d303b743c4d6174682e6d696e28552e626c6f636b42794672616d652c552e7368617065732e6c656e6774682d28552e7368617065447261776e2b3129293b742b2b292166756e6374696f6e2874297b76617220653d552e7368617065735b552e7368617065447261776e5d3b652e662e6d61702866756e6374696f6e2874297b722e647261774c696e6528742e6d61702866756e6374696f6e2874297b72657475726e5b4d6174682e726f756e6428742e78292c4d6174682e726f756e6428742e79295d7d292c21302c652e632c22707322297d292c552e7368617065447261776e2b2b7d28293b552e66723d77696e646f772e72657175657374416e696d6174696f6e4672616d6528552e616e696d297d656c73652077696e646f772e63616e63656c416e696d6174696f6e4672616d6528552e6672297d2c64726177536f6c69643a66756e6374696f6e28652c6e297b76617220693d28302c742e696e74657273656374696f6e2928652c5b7b783a452c793a457d2c7b783a746869732e73697a655b305d2d452c793a457d2c7b783a746869732e73697a655b305d2d452c793a746869732e73697a655b315d2d457d2c7b783a452c793a746869732e73697a655b315d2d457d5d293b69262628226e756d626572223d3d747970656f6620695b305d5b305d262628693d5b695d292c746869732e7368617065732e70757368287b663a692c633a6e7d29297d2c64726177426f783a66756e6374696f6e2874297b76617220653d746869732c6e3d742e636f6c6f723b696628742e706f6c792e6c656e6774683e302626742e706f6c792e6d61702866756e6374696f6e2874297b742e6c656e6774683e302626652e64726177536f6c696428742c22636f6c2d222e636f6e636174286e29297d292c766f69642030213d3d742e736861646f77417265612626742e736861646f77417265612e6c656e6774683e302626742e736861646f77417265612e666f72456163682866756e6374696f6e28742c69297b742e6c656e6774683e302626652e64726177536f6c696428742c22636f6c2d222e636f6e636174286e2c222d736864772d22292e636f6e636174286929297d292c766f69642030213d3d742e676c696e74417265612626742e676c696e74417265612e6c656e6774683e302626742e676c696e74417265612e666f72456163682866756e6374696f6e2874297b742e6c656e6774683e302626652e64726177536f6c696428742c22636f6c2d222e636f6e636174286e2c222d676c6e742229297d292c742e66726f6e742e6c656e6774683e31297b746869732e64726177536f6c696428742e66726f6e742c22636f6c2d222e636f6e636174286e29293b76617220692c723d667872616e6428292c733d7b7074733a5b742e66726f6e745b335d2c742e66726f6e745b305d2c742e66726f6e745b315d2c742e66726f6e745b325d5d7d2c6f3d28742e636f6c6f722b312925712e6c656e6774683b696628723c2e3134297b76617220613d7528732c667872616e642c746869732e73636872696e6b54696c6528292c6f293b612e706f6c792e6c656e6774683e302626746869732e64726177426f782861297d656c736520696628723c2e32382928693d2428732c667872616e642c746869732e73636872696e6b54696c6528292c472c532c6f29292e66726f6e742e6c656e6774683e312626746869732e64726177536f6c696428692e66726f6e742c22636f6c2d222e636f6e636174286e29292c692e706f6c792e6c656e6774683e302626746869732e64726177426f782869293b656c736520696628723c2e3432297b766172206c3d5f28732c532c472c742e636f6c6f72293b6c2e706f6c792e6c656e6774683e302626746869732e64726177426f78286c297d656c736520696628723c2e3537297b76617220683d66756e6374696f6e28742c652c6e2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a737d2c613d7028742e7074732c69293b69662861297b766172206c3d672861292c683d63285b6c5b305d2c6c5b315d5d2c2e35292c663d63285b6c5b325d2c685d2c2e35292c643d5b63285b6c5b305d2c6c5b315d5d2c2e3235292c63285b6c5b305d2c6c5b315d5d2c2e3735295d3b6f2e706f6c793d5b6c5d2c6f2e736861646f77417265613d5b5b6c5b305d2c645b305d2c662c6c5b325d5d2c78285b665d2c642c2130295d7d72657475726e206f7d28732c302c667872616e642c746869732e73636872696e6b54696c6528292c302c6f293b682e706f6c792e6c656e6774683e302626746869732e64726177426f782868297d656c736520696628723c2e3731297b76617220663d66756e6374696f6e28742c652c6e2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a737d2c613d7028742e7074732c69293b69662861297b76617220633d4d6174682e6174616e3228742e7074735b335d2e792d742e7074735b305d2e792c742e7074735b335d2e782d742e7074735b305d2e78292c6c3d312b4d6174682e6365696c286e28292a65292a692c683d4d6174682e50492a28723f2e37353a312e3235292c663d672861292c643d662e6d61702866756e6374696f6e2874297b72657475726e7b783a742e782b4d6174682e636f7328632b68292a6c2c793a742e792b4d6174682e73696e28632b68292a6c7d7d293b6f2e706f6c793d5b642c5b665b305d2c645b305d2c645b325d2c665b325d5d5d2c6f2e736861646f77417265613d5b5b665b305d2c665b315d2c645b315d2c645b305d5d5d7d72657475726e206f7d28732c532c667872616e642c746869732e73636872696e6b54696c6528292c472c6f293b662e706f6c792e6c656e6774683e302626746869732e64726177426f782866297d656c736528693d2428732c667872616e642c746869732e73636872696e6b54696c6528292c472c532c6f29292e66726f6e742e6c656e6774683e312626746869732e64726177536f6c696428692e66726f6e742c22636f6c2d222e636f6e636174286e29292c692e706f6c792e6c656e6774683e302626746869732e64726177426f782869297d7d2c646f776e6c6f61645356473a66756e6374696f6e2874297b722e646f776e6c6f61642874297d7d3b552e6472617728292c722e5f2e6164644576656e744c697374656e65722822636c69636b222c66756e6374696f6e2874297b552e7368617065447261776e3d302c722e636c65617247726f75702822707322292c552e626c6f636b42794672616d653d552e7368617065732e6c656e6774682f3930302c552e66723d77696e646f772e72657175657374416e696d6174696f6e4672616d6528552e616e696d297d292c646f63756d656e742e6164644576656e744c697374656e657228226b65797072657373222c66756e6374696f6e2874297b5b2244222c2264225d2e696e636c7564657328742e6b6579292626552e646f776e6c6f616453564728224b616c6c6178202d20222e636f6e63617428562c22202d204e69636f6c6173204c656272756e2229297d297d2928297d2928293b3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696275326c36736261356d6d6b76767365686767626968616d686b3563773671696d6a6d647a79706a79376432796570677a6b686d2f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061016c5760003560e01c80636352211e116100cc5780638da5cb5b1161007a5780638da5cb5b146103c957806395d89b41146103e7578063a22cb465146103fc578063b88d4fde1461041c578063c87b56dd1461042f578063e985e9c51461044f578063f2fde38b1461046f57600080fd5b80636352211e1461031757806365263a211461033757806370a0823114610357578063715018a61461037757806379ba50971461038c5780638c4796c7146103a15780638c874ebd146103c157600080fd5b806323b872dd1161012957806323b872dd146102465780632a55205a1461025957806331154421146102985780633ccfd60b146102b857806341f43434146102cd57806342842e0e146102ef57806344b28d591461030257600080fd5b806301ffc9a71461017157806306fdde03146101a6578063081812fc146101c8578063095ea7b3146101f557806318160ddd1461020a57806323452b9c14610231575b600080fd5b34801561017d57600080fd5b5061019161018c366004611c18565b61048f565b60405190151581526020015b60405180910390f35b3480156101b257600080fd5b506101bb6104ba565b60405161019d9190611c85565b3480156101d457600080fd5b506101e86101e3366004611c98565b61054c565b60405161019d9190611cb1565b610208610203366004611ce1565b610590565b005b34801561021657600080fd5b5060275460265403600019015b60405190815260200161019d565b34801561023d57600080fd5b506102086105a9565b610208610254366004611d0b565b6105ea565b34801561026557600080fd5b50610279610274366004611d47565b610615565b604080516001600160a01b03909316835260208301919091520161019d565b3480156102a457600080fd5b506102086102b3366004611daa565b610652565b3480156102c457600080fd5b50610208610667565b3480156102d957600080fd5b506101e86daaeb6d7670e522a718067333cd4e81565b6102086102fd366004611d0b565b6106d3565b34801561030e57600080fd5b506102086106f8565b34801561032357600080fd5b506101e8610332366004611c98565b61070c565b34801561034357600080fd5b50610208610352366004611deb565b610717565b34801561036357600080fd5b50610223610372366004611e46565b61079b565b34801561038357600080fd5b506102086107e9565b34801561039857600080fd5b506102086107fd565b3480156103ad57600080fd5b506101bb6103bc366004611c98565b610869565b610208610973565b3480156103d557600080fd5b50602e546001600160a01b03166101e8565b3480156103f357600080fd5b506101bb610a3b565b34801561040857600080fd5b50610208610417366004611e6f565b610a4a565b61020861042a366004611ebc565b610a5e565b34801561043b57600080fd5b506101bb61044a366004611c98565b610a8b565b34801561045b57600080fd5b5061019161046a366004611f97565b610e0e565b34801561047b57600080fd5b5061020861048a366004611e46565b610e3c565b60006001600160e01b0319821663152a902d60e11b14806104b457506104b482610eaf565b92915050565b6060602880546104c990611fca565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611fca565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b600061055782610efd565b610574576040516333d1c03960e21b815260040160405180910390fd5b506000908152602c60205260409020546001600160a01b031690565b8161059a81610f32565b6105a48383610feb565b505050565b6105b161108b565b602f80546001600160a01b03191690556040516000805160206126f6833981519152906105e090600090611cb1565b60405180910390a1565b826001600160a01b03811633146106045761060433610f32565b61060f8484846110b6565b50505050565b60008073b4da20397ea45fdc17c2122d35c0b8328f15d65061271061063c856102ee61201a565b6106469190612031565b915091505b9250929050565b61065a61108b565b60306105a4828483612099565b60405160009073a52ec4b923e1d0d5c2dd2486f0749786ae111f1b9047908381818185875af1925050503d80600081146106bd576040519150601f19603f3d011682016040523d82523d6000602084013e6106c2565b606091505b50509050806106d057600080fd5b50565b826001600160a01b03811633146106ed576106ed33610f32565b61060f84848461123d565b61070061108b565b6033805460ff19169055565b60006104b482611258565b61071f61108b565b6031805461ffff60a01b1916600160a01b61ffff861602179055604080516020601f84018190048102820181019092528281526107769184908490819084018382808284376000920191909152506112c792505050565b603180546001600160a01b0319166001600160a01b0392909216919091179055505050565b60006001600160a01b0382166107c4576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152602b60205260409020546001600160401b031690565b6107f161108b565b6107fb6000611309565b565b602f546001600160a01b031633811461082957604051636b7584e760e11b815260040160405180910390fd5b602f80546001600160a01b03191690556040516000805160206126f68339815191529061085890600090611cb1565b60405180910390a16106d081611309565b606061087482610efd565b61089157604051630a14c4b560e41b815260040160405180910390fd5b6031546108b6906001600160a01b03811690600090600160a01b900461ffff1661135b565b6109296108fa60006108c9600187612158565b60fa81106108d9576108d961216b565b600891828204019190066004029054906101000a900463ffffffff166113c1565b516040805161ffff9092166020830152016040516020818303038152906040528051906020012060001c61146a565b60315461094b906001600160a01b03811690600160a01b900461ffff16611481565b60405160200161095d9392919061219d565b6040516020818303038152906040529050919050565b60335460ff16156109975760405163447691f760e01b815260040160405180910390fd5b3467016345785d8a0000146109bf5760405163cd1c886760e01b815260040160405180910390fd5b60265460fa10156109e35760405163d05cb60960e01b815260040160405180910390fd5b3360009081526032602052604090205460ff1615610a145760405163af5af9e960e01b815260040160405180910390fd5b336000818152603260205260409020805460ff191660019081179091556107fb91906114e5565b6060602980546104c990611fca565b81610a5481610f32565b6105a483836115bf565b836001600160a01b0381163314610a7857610a7833610f32565b610a848585858561162b565b5050505050565b6060610a9682610efd565b610ab357604051630a14c4b560e41b815260040160405180910390fd5b6000610ac4816108c9600186612158565b9050610e076030610ad48561166f565b604051602001610ae59291906121e0565b604051602081830303815290604052610b05610b0086610869565b6116b3565b610b0e8661166f565b604051602001610b1e9190612267565b60408051601f1981840301815260e0830190915260b18083529091906126056020830139610c1a6040518060400160405280600b81526020016a426f782064656e7369747960a81b8152506020886020015181548110610b8057610b8061216b565b906000526020600020018054610b9590611fca565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190611fca565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b505050505060016116ce565b610c5660405180604001604052806009815260200168084def040c8cae0e8d60bb1b8152506021896040015181548110610b8057610b8061216b565b610c8f60405180604001604052806006815260200165466163696e6760d01b81525060228a6060015181548110610b8057610b8061216b565b610ccd6040518060400160405280600b81526020016a14dc1b1a5d0818985cd95960aa1b81525060238b6080015181548110610b8057610b8061216b565b610d0a6040518060400160405280600a815260200169086cad8d840eed2c8e8d60b31b81525060248c60a0015181548110610b8057610b8061216b565b610dde6040518060400160405280600781526020016650616c6574746560c81b81525060258d60c0015181548110610d4457610d4461216b565b906000526020600020018054610d5990611fca565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8590611fca565b8015610dd25780601f10610da757610100808354040283529160200191610dd2565b820191906000526020600020905b815481529060010190602001808311610db557829003601f168201915b505050505060006116ce565b604051602001610df396959493929190612297565b604051602081830303815290604052611750565b9392505050565b6001600160a01b039182166000908152602d6020908152604080832093909416825291909152205460ff1690565b610e4461108b565b6001600160a01b038116610e6b57604051633a247dd760e11b815260040160405180910390fd5b602f80546001600160a01b0319166001600160a01b0383161790556040516000805160206126f683398151915290610ea4908390611cb1565b60405180910390a150565b60006301ffc9a760e01b6001600160e01b031983161480610ee057506380ac58cd60e01b6001600160e01b03198316145b806104b45750506001600160e01b031916635b5e139f60e01b1490565b600081600111158015610f11575060265482105b80156104b45750506000908152602a6020526040902054600160e01b161590565b6daaeb6d7670e522a718067333cd4e3b156106d057604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc39190612338565b6106d05780604051633b79c77360e21b8152600401610fe29190611cb1565b60405180910390fd5b6000610ff68261070c565b9050336001600160a01b0382161461102f576110128133610e0e565b61102f576040516367d9dca160e11b815260040160405180910390fd5b6000828152602c602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b602e546001600160a01b031633146107fb57604051635fc483c560e01b815260040160405180910390fd5b60006110c182611258565b9050836001600160a01b0316816001600160a01b0316146110f45760405162a1148160e81b815260040160405180910390fd5b6000828152602c602052604090208054338082146001600160a01b03881690911417611141576111248633610e0e565b61114157604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661116857604051633a954ecd60e21b815260040160405180910390fd5b801561117357600082555b6001600160a01b038681166000908152602b60205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b176000858152602a6020526040812091909155600160e11b8416900361120557600184016000818152602a60205260408120549003611203576026548114611203576000818152602a602052604090208490555b505b83856001600160a01b0316876001600160a01b031660008051602061271683398151915260405160405180910390a45b505050505050565b6105a483838360405180602001604052806000815250610a5e565b600081806001116112ae576026548110156112ae576000818152602a602052604081205490600160e01b821690036112ac575b80600003610e075750600019016000818152602a602052604090205461128b565b505b604051636f96cda160e11b815260040160405180910390fd5b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f0925050816113035763301164256000526004601cfd5b90915290565b602e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060833b80611372576311052bb46000526004601cfd5b828411158382111661138c576384eb0dd16000526004601cfd5b50828203604051915061ffe0603f8201168201604052808252600081602084010152806001850160208401873c509392505050565b6114056040518060e00160405280600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506040805160e081018252601083901c61ffff1681526003600e84901c81166020830152600884901c811692820192909252600783901c6001166060820152600a83901c82166080820152600c83901c90911660a0820152607f90911660c082015290565b60606104b482611479846117ac565b600101611816565b6060823b80611498576311052bb46000526004601cfd5b8281116114ad576384eb0dd16000526004601cfd5b6001830181039050604051915061ffe0603f8201168201604052808252600081602084010152806001840160208401863c5092915050565b602654600082900361150a5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383166000818152602b602090815260408083208054680100000000000000018802019055848352602a90915281206001851460e11b4260a01b178317905582840190839083906000805160206127168339815191528180a4600183015b8181146115955780836000600080516020612716833981519152600080a460010161156f565b50816000036115b657604051622e076360e81b815260040160405180910390fd5b60265550505050565b336000818152602d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6116368484846105ea565b6001600160a01b0383163b1561060f57611652848484846119b1565b61060f576040516368d2bf6b60e11b815260040160405180910390fd5b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806116895750819003601f19909101908152919050565b60606116be82611a9c565b60405160200161095d9190612355565b606083836040516020016116e29190612393565b6040516020818303038152906040528361170b5760405180602001604052806000815250611726565b604051806040016040528060018152602001600b60fa1b8152505b604051602001611738939291906123c1565b60405160208183030381529060405290509392505050565b6060611782848484898960405160200161176e959493929190612445565b604051602081830303815290604052611a9c565b604051602001611792919061253b565b604051602081830303815290604052905095945050505050565b600080608083901c156117c45760809290921c916010015b604083901c156117d95760409290921c916008015b602083901c156117ee5760209290921c916004015b601083901c156118035760109290921c916002015b600883901c156104b45760010192915050565b6060600061182583600261201a565b611830906002612580565b6001600160401b0381111561184757611847611ea6565b6040519080825280601f01601f191660200182016040528015611871576020820181803683370190505b509050600360fc1b8160008151811061188c5761188c61216b565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106118bb576118bb61216b565b60200101906001600160f81b031916908160001a90535060006118df84600261201a565b6118ea906001612580565b90505b6001811115611962576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061191e5761191e61216b565b1a60f81b8282815181106119345761193461216b565b60200101906001600160f81b031916908160001a90535060049490941c9361195b81612593565b90506118ed565b508315610e075760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610fe2565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906119e69033908990889088906004016125aa565b6020604051808303816000875af1925050508015611a21575060408051601f3d908101601f19168201909252611a1e918101906125e7565b60015b611a7f573d808015611a4f576040519150601f19603f3d011682016040523d82523d6000602084013e611a54565b606091505b508051600003611a77576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60608151600003611abb57505060408051602081019091526000815290565b60006040518060600160405280604081526020016126b66040913990506000600384516002611aea9190612580565b611af49190612031565b611aff90600461201a565b90506000611b0e826020612580565b6001600160401b03811115611b2557611b25611ea6565b6040519080825280601f01601f191660200182016040528015611b4f576020820181803683370190505b509050818152600183018586518101602084015b81831015611bbd5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611b63565b600389510660018114611bd75760028114611be857611bf4565b613d3d60f01b600119830152611bf4565b603d60f81b6000198301525b509398975050505050505050565b6001600160e01b0319811681146106d057600080fd5b600060208284031215611c2a57600080fd5b8135610e0781611c02565b60005b83811015611c50578181015183820152602001611c38565b50506000910152565b60008151808452611c71816020860160208601611c35565b601f01601f19169290920160200192915050565b602081526000610e076020830184611c59565b600060208284031215611caa57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80356001600160a01b0381168114611cdc57600080fd5b919050565b60008060408385031215611cf457600080fd5b611cfd83611cc5565b946020939093013593505050565b600080600060608486031215611d2057600080fd5b611d2984611cc5565b9250611d3760208501611cc5565b9150604084013590509250925092565b60008060408385031215611d5a57600080fd5b50508035926020909101359150565b60008083601f840112611d7b57600080fd5b5081356001600160401b03811115611d9257600080fd5b60208301915083602082850101111561064b57600080fd5b60008060208385031215611dbd57600080fd5b82356001600160401b03811115611dd357600080fd5b611ddf85828601611d69565b90969095509350505050565b600080600060408486031215611e0057600080fd5b833561ffff81168114611e1257600080fd5b925060208401356001600160401b03811115611e2d57600080fd5b611e3986828701611d69565b9497909650939450505050565b600060208284031215611e5857600080fd5b610e0782611cc5565b80151581146106d057600080fd5b60008060408385031215611e8257600080fd5b611e8b83611cc5565b91506020830135611e9b81611e61565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611ed257600080fd5b611edb85611cc5565b9350611ee960208601611cc5565b92506040850135915060608501356001600160401b0380821115611f0c57600080fd5b818701915087601f830112611f2057600080fd5b813581811115611f3257611f32611ea6565b604051601f8201601f19908116603f01168101908382118183101715611f5a57611f5a611ea6565b816040528281528a6020848701011115611f7357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611faa57600080fd5b611fb383611cc5565b9150611fc160208401611cc5565b90509250929050565b600181811c90821680611fde57607f821691505b602082108103611ffe57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176104b4576104b4612004565b60008261204e57634e487b7160e01b600052601260045260246000fd5b500490565b601f8211156105a457600081815260208120601f850160051c8101602086101561207a5750805b601f850160051c820191505b8181101561123557828155600101612086565b6001600160401b038311156120b0576120b0611ea6565b6120c4836120be8354611fca565b83612053565b6000601f8411600181146120f857600085156120e05750838201355b600019600387901b1c1916600186901b178355610a84565b600083815260209020601f19861690835b828110156121295786850135825560209485019460019092019101612109565b50868210156121465760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818103818111156104b4576104b4612004565b634e487b7160e01b600052603260045260246000fd5b60008151612193818560208601611c35565b9290920192915050565b600084516121af818460208901611c35565b8451908301906121c3818360208901611c35565b84519101906121d6818360208801611c35565b0195945050505050565b60008084546121ee81611fca565b60018281168015612206576001811461221b5761224a565b60ff198416875282151583028701945061224a565b8860005260208060002060005b858110156122415781548a820152908401908201612228565b50505082870194505b50505050835161225e818360208801611c35565b01949350505050565b674b616c6c6178202360c01b81526000825161228a816008850160208701611c35565b9190910160080192915050565b605b60f81b815260006001885160206122b582848701838e01611c35565b8951918501916122ca81858501848e01611c35565b89519201916122de81858501848d01611c35565b88519201916122f281858501848c01611c35565b875192019161230681858501848b01611c35565b865192019161231a81858501848a01611c35565b605d60f81b9201928301919091525060020198975050505050505050565b60006020828403121561234a57600080fd5b8151610e0781611e61565b7519185d184e9d195e1d0bda1d1b5b0ed8985cd94d8d0b60521b815260008251612386816016850160208701611c35565b9190910160160192915050565b6000601160f91b80835283516123b0816001860160208801611c35565b600193019283015250600201919050565b6e3d913a3930b4ba2fba3cb832911d1160891b815283516000906123ec81600f850160208901611c35565b691116113b30b63ab2911d60b11b600f918401918201528451612416816019840160208901611c35565b607d60f81b60199290910191820152835161243881601a840160208801611c35565b01601a0195945050505050565b683d913730b6b2911d1160b91b8152855160009061246a816009850160208b01611c35565b701116113232b9b1b934b83a34b7b7111d1160791b600991840191820152865161249b81601a840160208b01611c35565b6e11161130ba3a3934b13aba32b9911d60891b601a929091019182015285516124cb816029840160208a01611c35565b69161134b6b0b3b2911d1160b11b6029929091019182015284516124f6816033840160208901611c35565b7211161130b734b6b0ba34b7b72fbab936111d1160691b603392909101918201526125246046820185612181565b61227d60f01b815260020198975050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161257381601d850160208701611c35565b91909101601d0192915050565b808201808211156104b4576104b4612004565b6000816125a2576125a2612004565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125dd90830184611c59565b9695505050505050565b6000602082840312156125f957600080fd5b8151610e0781611c0256fe4b616c6c617820697320616e206f6e2d636861696e207365726965732c20612067656e6572617469766520776f726b2063726561746564207769746820636f646520776865726520656163682065646974696f6e20686173206265656e206361726566756c6c792073656c65637465642e204974206578706c6f72657320746865206c61796572696e67206f6620646966666572656e7420626c6f636b73206f6e2061206d6f64756c617220677269642e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974daddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

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

000000000000000000000000000000000000000000000000000000000000009100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000005a8000000000000000000000000000000000000000000000000000000000000059ed3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c6d65746120636861727365743d227574662d3822202f3e3c7363726970743e6c657420616c7068616265743d223132333435363738396162636465666768696a6b6d6e6f707172737475767778797a41424344454647484a4b4c4d4e505152535455565758595a223b766172206678686173683d22223b6c6574206235386465633d653d3e5b2e2e2e655d2e7265647563652828652c68293d3e652a616c7068616265742e6c656e6774682b616c7068616265742e696e6465784f662868297c302c30292c6678686173685472756e633d6678686173682e736c6963652832292c72656765783d52656745787028222e7b222b286678686173682e6c656e6774682f347c30292b227d222c226722292c6861736865733d6678686173685472756e632e6d61746368287265676578292e6d617028653d3e623538646563286529292c73666333323d28652c682c612c73293d3e28293d3e7b617c3d303b76617220243d2828657c3d30292b28687c3d30297c30292b28737c3d30297c303b72657475726e20733d732b317c302c653d685e683e3e3e392c683d612b28613c3c33297c302c613d28613d613c3c32317c613e3e3e3131292b247c302c28243e3e3e30292f343239343936373239367d3b76617220667872616e643d7366633332282e2e2e686173686573293b3c2f7363726970743e3c7374796c653e626f64792c68746d6c7b666f6e742d73697a653a313870787d406d6564696120286f7269656e746174696f6e3a6c616e647363617065297b626f64792c68746d6c7b666f6e742d73697a653a313670787d7d626f64797b6d617267696e3a303b70616464696e673a303b77696474683a31303076773b6865696768743a31303076683b6d61782d77696474683a31303076773b6d61782d6865696768743a31303076683b6f766572666c6f773a68696464656e3b646973706c61793a666c65783b616c69676e2d6974656d733a63656e7465723b6a7573746966792d636f6e74656e743a63656e7465723b6261636b67726f756e642d636f6c6f723a236631663166313b666f6e742d66616d696c793a73616e732d73657269667d63616e7661732c7376677b6d61782d77696474683a313030253b6d61782d6865696768743a313030257d3c2f7374796c653e3c2f686561643e3c626f64793e3c7363726970742064656665723d226465666572223e2828293d3e7b76617220743d7b3235303a66756e6374696f6e28742c65297b2166756e6374696f6e2874297b2275736520737472696374223b76617220653d66756e6374696f6e28742c65297b313d3d3d617267756d656e74732e6c656e67746826262841727261792e697341727261792874293f28653d745b315d2c743d745b305d293a28653d742e792c743d742e7829292c746869732e783d742c746869732e793d652c746869732e6e6578743d6e756c6c2c746869732e707265763d6e756c6c2c746869732e5f636f72726573706f6e64696e673d6e756c6c2c746869732e5f64697374616e63653d302c746869732e5f6973456e7472793d21302c746869732e5f6973496e74657273656374696f6e3d21312c746869732e5f766973697465643d21317d3b652e637265617465496e74657273656374696f6e3d66756e6374696f6e28742c6e2c69297b76617220723d6e6577206528742c6e293b72657475726e20722e5f64697374616e63653d692c722e5f6973496e74657273656374696f6e3d21302c722e5f6973456e7472793d21312c727d2c652e70726f746f747970652e76697369743d66756e6374696f6e28297b746869732e5f766973697465643d21302c6e756c6c3d3d3d746869732e5f636f72726573706f6e64696e677c7c746869732e5f636f72726573706f6e64696e672e5f766973697465647c7c746869732e5f636f72726573706f6e64696e672e766973697428297d2c652e70726f746f747970652e657175616c733d66756e6374696f6e2874297b72657475726e20746869732e783d3d3d742e782626746869732e793d3d3d742e797d2c652e70726f746f747970652e6973496e736964653d66756e6374696f6e2874297b76617220653d21312c6e3d742e66697273742c693d6e2e6e6578742c723d746869732e782c733d746869732e793b646f286e2e793c732626692e793e3d737c7c692e793c7326266e2e793e3d73292626286e2e783c3d727c7c692e783c3d7229262628655e3d6e2e782b28732d6e2e79292f28692e792d6e2e79292a28692e782d6e2e78293c72292c693d286e3d6e2e6e657874292e6e6578747c7c742e66697273743b7768696c6528216e2e657175616c7328742e666972737429293b72657475726e20657d3b766172206e3d66756e6374696f6e28742c652c6e2c69297b746869732e783d302c746869732e793d302c746869732e746f536f757263653d302c746869732e746f436c69703d303b76617220723d28692e792d6e2e79292a28652e782d742e78292d28692e782d6e2e78292a28652e792d742e79293b30213d3d72262628746869732e746f536f757263653d2828692e782d6e2e78292a28742e792d6e2e79292d28692e792d6e2e79292a28742e782d6e2e7829292f722c746869732e746f436c69703d2828652e782d742e78292a28742e792d6e2e79292d28652e792d742e79292a28742e782d6e2e7829292f722c746869732e76616c69642829262628746869732e783d742e782b746869732e746f536f757263652a28652e782d742e78292c746869732e793d742e792b746869732e746f536f757263652a28652e792d742e792929297d3b6e2e70726f746f747970652e76616c69643d66756e6374696f6e28297b72657475726e20303c746869732e746f536f757263652626746869732e746f536f757263653c312626303c746869732e746f436c69702626746869732e746f436c69703c317d3b76617220693d66756e6374696f6e28742c6e297b746869732e66697273743d6e756c6c2c746869732e76657274696365733d302c746869732e5f6c617374556e70726f6365737365643d6e756c6c2c746869732e5f617272617956657274696365733d766f696420303d3d3d6e3f41727261792e6973417272617928745b305d293a6e3b666f722876617220693d302c723d742e6c656e6774683b693c723b692b2b29746869732e616464566572746578286e6577206528745b695d29297d3b66756e6374696f6e207228742c652c6e2c72297b76617220733d6e657720692874292c6f3d6e657720692865293b72657475726e20732e636c6970286f2c6e2c72297d692e70726f746f747970652e6164645665727465783d66756e6374696f6e2874297b6966286e756c6c3d3d3d746869732e666972737429746869732e66697273743d742c746869732e66697273742e6e6578743d742c746869732e66697273742e707265763d743b656c73657b76617220653d746869732e66697273742c6e3d652e707265763b652e707265763d742c742e6e6578743d652c742e707265763d6e2c6e2e6e6578743d747d746869732e76657274696365732b2b7d2c692e70726f746f747970652e696e736572745665727465783d66756e6374696f6e28742c652c6e297b666f722876617220692c723d653b21722e657175616c73286e292626722e5f64697374616e63653c742e5f64697374616e63653b29723d722e6e6578743b742e6e6578743d722c693d722e707265762c742e707265763d692c692e6e6578743d742c722e707265763d742c746869732e76657274696365732b2b7d2c692e70726f746f747970652e6765744e6578743d66756e6374696f6e2874297b666f722876617220653d743b652e5f6973496e74657273656374696f6e3b29653d652e6e6578743b72657475726e20657d2c692e70726f746f747970652e6765744669727374496e746572736563743d66756e6374696f6e28297b76617220743d746869732e5f6669727374496e746572736563747c7c746869732e66697273743b646f7b696628742e5f6973496e74657273656374696f6e262621742e5f7669736974656429627265616b3b743d742e6e6578747d7768696c652821742e657175616c7328746869732e666972737429293b72657475726e20746869732e5f6669727374496e746572736563743d742c747d2c692e70726f746f747970652e686173556e70726f6365737365643d66756e6374696f6e28297b76617220743d746869732e5f6c617374556e70726f6365737365647c7c746869732e66697273743b646f7b696628742e5f6973496e74657273656374696f6e262621742e5f766973697465642972657475726e20746869732e5f6c617374556e70726f6365737365643d742c21303b743d742e6e6578747d7768696c652821742e657175616c7328746869732e666972737429293b72657475726e20746869732e5f6c617374556e70726f6365737365643d6e756c6c2c21317d2c692e70726f746f747970652e676574506f696e74733d66756e6374696f6e28297b76617220743d5b5d2c653d746869732e66697273743b696628746869732e5f6172726179566572746963657329646f20742e70757368285b652e782c652e795d292c653d652e6e6578743b7768696c652865213d3d746869732e6669727374293b656c736520646f20742e70757368287b783a652e782c793a652e797d292c653d652e6e6578743b7768696c652865213d3d746869732e6669727374293b72657475726e20747d2c692e70726f746f747970652e636c69703d66756e6374696f6e28742c722c73297b766172206f2c612c633d746869732e66697273742c6c3d742e66697273742c683d2172262621732c663d722626733b646f7b69662821632e5f6973496e74657273656374696f6e29646f7b696628216c2e5f6973496e74657273656374696f6e297b76617220643d6e6577206e28632c746869732e6765744e65787428632e6e657874292c6c2c742e6765744e657874286c2e6e65787429293b696628642e76616c69642829297b76617220703d652e637265617465496e74657273656374696f6e28642e782c642e792c642e746f536f75726365292c753d652e637265617465496e74657273656374696f6e28642e782c642e792c642e746f436c6970293b702e5f636f72726573706f6e64696e673d752c752e5f636f72726573706f6e64696e673d702c746869732e696e7365727456657274657828702c632c746869732e6765744e65787428632e6e65787429292c742e696e7365727456657274657828752c6c2c742e6765744e657874286c2e6e65787429297d7d6c3d6c2e6e6578747d7768696c6528216c2e657175616c7328742e666972737429293b633d632e6e6578747d7768696c652821632e657175616c7328746869732e666972737429293b633d746869732e66697273742c6c3d742e66697273742c725e3d6f3d632e6973496e736964652874292c735e3d613d6c2e6973496e736964652874686973293b646f20632e5f6973496e74657273656374696f6e262628632e5f6973456e7472793d722c723d2172292c633d632e6e6578743b7768696c652821632e657175616c7328746869732e666972737429293b646f206c2e5f6973496e74657273656374696f6e2626286c2e5f6973456e7472793d732c733d2173292c6c3d6c2e6e6578743b7768696c6528216c2e657175616c7328742e666972737429293b666f722876617220243d5b5d3b746869732e686173556e70726f63657373656428293b297b766172205f3d746869732e6765744669727374496e7465727365637428292c793d6e65772069285b5d2c746869732e5f61727261795665727469636573293b792e616464566572746578286e65772065285f2e782c5f2e7929293b646f7b6966285f2e766973697428292c5f2e5f6973456e74727929646f205f3d5f2e6e6578742c792e616464566572746578286e65772065285f2e782c5f2e7929293b7768696c6528215f2e5f6973496e74657273656374696f6e293b656c736520646f205f3d5f2e707265762c792e616464566572746578286e65772065285f2e782c5f2e7929293b7768696c6528215f2e5f6973496e74657273656374696f6e293b5f3d5f2e5f636f72726573706f6e64696e677d7768696c6528215f2e5f76697369746564293b242e7075736828792e676574506f696e74732829297d72657475726e20303d3d3d242e6c656e677468262628683f6f3f242e7075736828742e676574506f696e74732829293a613f242e7075736828746869732e676574506f696e74732829293a242e7075736828746869732e676574506f696e747328292c742e676574506f696e74732829293a663f6f3f242e7075736828746869732e676574506f696e74732829293a612626242e7075736828742e676574506f696e74732829293a6f3f242e7075736828742e676574506f696e747328292c746869732e676574506f696e74732829293a613f242e7075736828746869732e676574506f696e747328292c742e676574506f696e74732829293a242e7075736828746869732e676574506f696e74732829292c303d3d3d242e6c656e677468262628243d6e756c6c29292c247d2c742e756e696f6e3d66756e6374696f6e28742c65297b72657475726e207228742c652c21312c2131297d2c742e696e74657273656374696f6e3d66756e6374696f6e28742c65297b72657475726e207228742c652c21302c2130297d2c742e646966663d66756e6374696f6e28742c65297b72657475726e207228742c652c21312c2130297d2c742e636c69703d722c4f626a6563742e646566696e6550726f706572747928742c225f5f65734d6f64756c65222c7b76616c75653a21307d297d2865297d7d2c653d7b7d3b66756e6374696f6e206e2869297b76617220723d655b695d3b696628766f69642030213d3d722972657475726e20722e6578706f7274733b76617220733d655b695d3d7b6578706f7274733a7b7d7d3b72657475726e20745b695d2e63616c6c28732e6578706f7274732c732c732e6578706f7274732c6e292c732e6578706f7274737d2828293d3e7b2275736520737472696374223b76617220743d6e28323530292c653d22687474703a2f2f7777772e77332e6f72672f323030302f737667222c693d7b5f3a766f696420302c77696474683a6e756c6c2c6865696768743a6e756c6c2c7363616c653a312c7374726f6b653a6e756c6c2c67726f7570733a5b5d2c67726f75705265663a5b5d2c696e69743a66756e6374696f6e28742c6e2c722c732c6f297b692e5f3d646f63756d656e742e637265617465456c656d656e744e5328652c2273766722292c692e5f2e736574417474726962757465282276657273696f6e222c22312e3122292c692e5f2e7365744174747269627574652822786d6c6e73222c65292c692e5f2e7365744174747269627574652822786d6c6e733a737667222c65292c692e5f2e7365744174747269627574652822786d6c6e733a786c696e6b222c22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b22292c692e5f2e7365744174747269627574652822786d6c6e733a696e6b7363617065222c22687474703a2f2f7777772e696e6b73636170652e6f72672f6e616d657370616365732f696e6b736361706522292c692e5f2e73657441747472696275746528227769647468222c22222e636f6e63617428742c2270782229292c692e5f2e7365744174747269627574652822686569676874222c22222e636f6e636174286e2c2270782229292c692e5f2e736574417474726962757465282276696577426f78222c2230203020222e636f6e63617428742c222022292e636f6e636174286e29292c692e5f2e7374796c652e6261636b67726f756e64436f6c6f723d6f7d2c63726561746547726f75703a66756e6374696f6e28742c6e2c72297b766f696420303d3d3d72262628723d226e6f6e6522293b76617220733d646f63756d656e742e637265617465456c656d656e744e5328652c226722293b732e73657441747472696275746528226e616d65222c74292c732e73657441747472696275746528227374726f6b65222c6e292c732e736574417474726962757465282266696c6c222c72292c692e5f2e617070656e644368696c642873292c692e67726f7570732e707573682873292c692e67726f75705265662e707573682874297d2c636c65617247726f75703a66756e6374696f6e2874297b76617220653d692e67726f75705265662e696e6465784f662874293b692e67726f7570735b655d2e696e6e657248544d4c3d22227d2c696e736572743a66756e6374696f6e2874297b742e617070656e644368696c6428692e5f297d2c647261774c696e653a66756e6374696f6e28742c6e2c722c73297b766f696420303d3d3d6e2626286e3d2131292c766f696420303d3d3d72262628723d2222293b666f7228766172206f3d646f63756d656e742e637265617465456c656d656e744e5328652c227061746822292c613d224d20222e636f6e63617428745b305d5b305d2c222022292e636f6e63617428745b305d5b315d292c633d313b633c742e6c656e6774683b632b2b29612b3d22204c222e636f6e63617428745b635d5b305d2c222022292e636f6e63617428745b635d5b315d293b6966286e262628612b3d22204c222e636f6e63617428745b305d5b305d2c222022292e636f6e63617428745b305d5b315d29292c6f2e736574417474726962757465282264222c61292c2222213d3d7226266f2e7365744174747269627574652822636c617373222c72292c73297b766172206c3d692e67726f75705265662e696e6465784f662873293b692e67726f7570735b6c5d2e617070656e644368696c64286f297d656c736520692e5f2e617070656e644368696c64286f297d2c646f776e6c6f61643a66756e6374696f6e2874297b76617220653d6e756c6c2c6e3d273c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e5c6e2020202020202020272e636f6e63617428692e5f2e6f7574657248544d4c292c723d6e657720426c6f62285b6e5d2c7b747970653a226170706c69636174696f6e2f786d6c227d293b6e756c6c213d3d65262677696e646f772e55524c2e7265766f6b654f626a65637455524c2865292c653d77696e646f772e55524c2e6372656174654f626a65637455524c2872293b76617220733d646f63756d656e742e637265617465456c656d656e7428226122293b732e687265663d652c732e646f776e6c6f61643d22222e636f6e63617428742c222e73766722292c732e636c69636b28297d2c64656c6574653a66756e6374696f6e2874297b742e72656d6f76654368696c6428692e5f297d7d3b6c657420723d693b76617220733d7b2256696f6c6574204861726d6f6e79223a22233434333835373b3a233535366661313b3a236466653765303b3a23663961343334222c566f6c63616e69633a22233537363037313b3a233931393961623b3a236639366435643b3a23636265346562222c22507572706c6520536861646573223a22233437333534663b3a236131646335343b3a233965396562313b3a236639366435643b3a23653065326537222c224f6365616e20427265657a65223a22233442344239353b3a236462343434623b3a236664646336363b3a236439663065333b3a23346238326130222c46726f7374626974653a22233433313663613b3a236635646364353b3a236638313431633b3a233533303161353b3a23396566666430222c224d69646e6967687420426c756573223a22233434303041333b3a233735423942453b3a236664643834343b3a23656538383231222c224d7574656420466f72657374223a22233333343434343b3a236533663531353b3a236665343134623b3a236461653365343b3a23353533363644222c2250696e6b20466c616d696e676f223a22233434343436363b3a236535653264663b3a236665633263343b3a233863336663373b3a23343530336130222c224772657920536b696573223a22233738386539333b3a236532646665353b3a233961663363313b3a23353934633631222c22496e6469676f204e6967687473223a22233438343635643b3a233465373762313b3a236539643364313b3a23646436653561222c2242757267756e647920426c697373223a22233442323336453b3a236636316531653b3a236565663564363b3a23343843374234222c224d61757665204d61676963223a22233436333735333b3a236364366436363b3a236539643464323b3a23383238656130222c22506c756d2050657266656374696f6e223a22233534343836353b3a233734396139323b3a236533653064383b3a23663764643866222c22507572706c652048617a65223a22233466326137343b3a236437656666333b3a236633646664353b3a23666637643764222c22476f6c64656e2048617276657374223a22233462343337323b3a236438646263633b3a236666656337303b3a23666134363366222c22476c616d6f726f7573204e6967687473223a22233435333835363b3a233533343862653b3a233862646466623b3a23663464326363222c2253756e666c6f776572204669656c6473223a22233643373138393b3a236464643731623b3a236630343033373b3a23643639663532222c22456c656374726963205669626573223a22236664333232663b3a236630636464373b3a233562303166373b3a23353630433937222c22416d65746879737420447265616d73223a22233436333734613b3a236437353735303b3a236535653264643b3a23653465313532222c224f6365616e69632046616e74617379223a22233462343635633b3a233465353961663b3a236465653364643b3a23656565303938222c224d696e7479204672657368223a22233536356638613b3a233831653162313b3a236536653964363b3a23663337613661222c22576f6f646c616e6420547261696c223a22236230353935393b3a233465336164333b3a236638666265663b3a23373439613935222c224265727279204372757368223a22233466333834663b3a233930643061653b3a236463643264303b3a23353536313738222c22537565646520436f6c6f72223a22233432333135323b3a233764386437653b3a233738363938333b3a236565386130643b3a23633561663939222c22536c6174652047726179223a22233534353537373b3a236430383033353b3a236465643964313b3a23383638633964222c224465657020507572706c65223a22233443334441343b3a236630323231663b3a236564653264313b3a23363165386664222c2253746f726d792053656173223a22233539363637383b3a236566653438353b3a236536653365313b3a23613139616164222c225368696e79204469616d6f6e64223a22234237463146443b3a233945423843413b3a236332663666663b3a233544364637373b3a236436666666643b3a23633266396666222c4f6365616e69633a22233534383138653b3a236661333937333b3a236664656636643b3a23646665396465222c2243686572727920436f6c61223a22233533363438333b3a236564303432373b3a236638646264323b3a23353244304530222c224c656d6f6e2044726f70223a22236666666666663b3a236666663965393b3a236665666661383b3a236666666563653b3a23666266666530222c2250696e6b20526f7365223a22234538323139353b3a23443245374546222c596f67613a22233966633565383b3a233666383961323b3a236666666666663b3a236262626262623b3a23343434343434222c53617070686972653a22233432343839453b3a23443036443632222c22426c756520496365223a22233744363638363b3a23383545324645222c224d69646e6967687420426c7565223a22233537313731303b3a23363134424633222c467563687369613a22234439343938413b3a23343438443946222c456767706c616e743a22233545324538383b3a23453243434238222c2243616e64792053746f7265223a22234630334336393b3a234642444343373b3a234535343339433b3a23353436434339222c56696e746167653a22234431433744313b3a236130386539303b3a236662346532333b3a23346638616533222c4e696768746c6966653a22233433343435353b3a233744383142383b3a234631343733463b3a23464641383133222c224a656c6c79204265616e73223a22234632433630323b3a233531344643463b3a233446423942413b3a23463939303335222c5477696c696768743a22233545343739413b3a23433444304432222c2247726179205363616c65223a22233532353235323b3a233835383538353b3a236238623862383b3a23636363636363222c22426c7565204d697374223a22233434353537373b3a233636434343433b3a23434343434343222c224d6964617320546f756368223a22236632613630323b3a236661643131643b3a23666666383733222c22506f6c6172206d6972616765223a22233561393263343b3a23653236363238222c22426c756520536b79223a22233432353542333b3a23464245414542222c4d696e74793a22233643353935393b3a234537453844313b3a23413742454145222c22436f72616c2052656566223a22233538343634363b3a233437414543423b3a233930656539303b3a23643534383438222c2250696e6b204c656d6f6e616465223a22234639363136373b3a23464345373744222c225377616d7020466f67223a22233463353536303b3a236134633063353b3a236339643864323b3a233864613039363b3a23353636313563222c224172637469632047617264656e223a22234634454446443b3a23343441303943222c225265642056656c766574223a22233939303031313b3a23464346364635222c2253696c766572204c696e696e67223a22233841414145353b3a23463346334633222c4d6f6e6f3a22233434343434343b3a23636363636363222c5065707065726d696e743a22234643454444413b3a23454534453334222c22436f617374616c204475736b223a22233561363461623b3a233931346636643b3a23366639306137222c2259656c6c6f77205375626d6172696e65223a22233531393743443b3a23464246384245222c224261627920426c7565223a22234144443845363b3a23343734374431222c2243686572727920426c6f73736f6d223a22233839414245333b3a23454137333844222c466f726573743a22233732623336623b3a236639633034643b3a236565663066323b3a236132393939653b3a23383436613661222c22486f742050696e6b223a22234543343439423b3a23393946343433222c4d6f6368613a22233461343534613b3a234530413936443b3a23444443334135222c53756e62757273743a22234646413335313b3a234646424537423b3a23454544393731222c224c6176656e646572204669656c6473223a22233841333037463b3a233739413744333b3a23363838334243222c536361726c65743a22234343333133443b3a23463743354343222c5465727261636f7474613a22233738333933373b3a234643373636413b3a23463141433838222c2250617374656c206d6561646f7773223a22233932373763663b3a236234663863383b3a23666666666432222c4f6c6976653a22233437396134393b3a23424143453844222c536167653a22233436423637393b3a23464346364635227d3b66756e6374696f6e206f28742c652c6e297b72657475726e20742a286e2d65292b657d76617220613d7b736b6574636857696474683a3130302c73697a654265747765656e3a7b6d696e3a302c6d61783a317d2c666978656453697a653a2e352c73747261746567793a22222c70726e673a4d6174682e72616e646f6d2c696e69743a66756e6374696f6e28742c652c6e2c692c72297b612e736b6574636857696474683d742c612e70726e673d652c612e73697a654265747765656e3d6e2c612e666978656453697a653d692c612e73747261746567793d727d2c67657453697a653a66756e6374696f6e2874297b6966282246756c6c2072616e646f6d223d3d3d612e73747261746567792972657475726e206f28612e70726e6728292c612e73697a654265747765656e2e6d696e2c612e73697a654265747765656e2e6d6178292a612e736b6574636857696474683b6966282252616e646f6d20756e697175652076616c7565223d3d3d612e73747261746567792972657475726e20612e666978656453697a652a612e736b6574636857696474683b6966282253696e77617665223d3d3d612e7374726174656779297b76617220653d742f612e736b6574636857696474683b72657475726e204d6174682e6d617828612e73697a654265747765656e2e6d696e2a612e736b6574636857696474682c4d6174682e73696e28652a4d6174682e5049292a612e736b6574636857696474682a612e73697a654265747765656e2e6d6178297d7d7d3b66756e6374696f6e206328742c65297b766172206e3d4d6174682e6174616e3228745b315d2e792d745b305d2e792c745b315d2e782d745b305d2e78292c693d4d6174682e6879706f7428745b305d2e782d745b315d2e782c745b305d2e792d745b315d2e79293b72657475726e7b783a745b305d2e782b4d6174682e636f73286e292a692a652c793a745b305d2e792b4d6174682e73696e286e292a692a657d7d766172206c3d66756e6374696f6e28742c652c6e2c69297b666f722876617220723d655b305d2f322c733d655b315d2f322c6f3d4d6174682e6879706f7428655b305d2c655b315d292c613d312e33332a6f2c6c3d2e37352a6f2c683d2e37352a4d6174682e50492c663d5b7b783a722b4d6174682e636f7328742d682f32292a612c793a732b4d6174682e73696e28742d682f32292a617d2c7b783a722b4d6174682e636f7328742b682f32292a612c793a732b4d6174682e73696e28742b682f32292a617d2c7b783a722b4d6174682e636f7328742b682f32292a6c2c793a732b4d6174682e73696e28742b682f32292a6c7d2c7b783a722b4d6174682e636f7328742d682f32292a6c2c793a732b4d6174682e73696e28742d682f32292a6c7d5d2c643d5b665b305d2c665b335d5d2c703d5b665b315d2c665b325d5d2c753d5b5d2c243d303b243c3d363b242b2b29752e70757368285b6328642c363d3d3d243f242f363a28242b286e28292d2e3529292f36292c6328702c363d3d3d243f242f363a28242b286e28292d2e3529292f36295d293b766172205f3d5b5d3b666f7228243d303b243c752e6c656e6774682d313b242b2b29666f722876617220793d5b5d2c783d313b783c755b245d2e6c656e6774683b782b2b297b666f722876617220673d755b245d5b782d315d2c763d755b242b315d5b782d315d2c773d313b773c3d32303b772b2b297b76617220623d63285b755b245d5b782d315d2c755b245d5b785d5d2c772f3230292c6d3d63285b755b242b315d5b782d315d2c755b242b315d5b785d5d2c772f3230292c413d7b7074733a5b672c622c6d2c765d2c693a7b783a32302a782b772c793a247d7d3b792e707573682841292c673d622c763d6d7d5f2e707573682879297d72657475726e7b636c69703a662c74696c653a5f7d7d2c683d66756e6374696f6e28742c652c6e2c69297b72657475726e7b7074733a5b745b655d5b6e5d2c745b655d5b6e2b315d2c745b652b315d5b6e2b312b695d2c745b652b315d5b6e2b695d5d7d7d2c663d66756e6374696f6e28742c652c6e2c692c722c73297b696628693c6e2e6c656e6774682d322626723c6e5b692b315d2e6c656e6774682d312626723c6e5b692b735d2e6c656e6774682d322626722b732b313c6e5b695d2e6c656e6774682d322626722b312b733c6e5b692b315d2e6c656e6774682d312626722b733e30297b766172206f2c612c6c2c662c642c702c752c242c5f2c792c782c672c762c772c622c6d2c412c432c452c462c422c533d74286e5b695d5b725d2e782c6e5b695d5b725d2e79293b696628533e2e37352972657475726e5b68286e2c692c722c73295d3b696628533c2e37352626533e2e352972657475726e206528293e2e353f286f3d6e2c613d692c6c3d722c663d732c643d63285b6f5b615d5b6c5d2c6f5b615d5b6c2b315d5d2c2e35292c703d63285b6f5b612b315d5b6c2b665d2c6f5b612b315d5b6c2b312b665d5d2c2e35292c5b7b7074733a5b6f5b615d5b6c5d2c642c702c6f5b612b315d5b6c2b665d5d7d2c7b7074733a5b642c6f5b615d5b6c2b315d2c6f5b612b315d5b6c2b312b665d2c705d7d5d293a28753d6e2c243d692c5f3d722c793d732c783d63285b755b245d5b5f5d2c755b242b315d5b5f2b795d5d2c2e35292c673d63285b755b245d5b5f2b315d2c755b242b315d5b5f2b312b795d5d2c2e35292c5b7b7074733a5b782c672c755b242b315d5b5f2b312b795d2c755b242b315d5b5f2b795d5d7d2c7b7074733a5b755b245d5b5f5d2c755b245d5b5f2b315d2c672c785d7d5d293b696628533c2e352626533e2e32352972657475726e20763d6e2c773d692c623d722c6d3d732c413d63285b765b775d5b625d2c765b775d5b622b315d5d2c2e35292c433d63285b765b772b315d5b622b6d5d2c765b772b315d5b622b312b6d5d5d2c2e35292c453d63285b765b775d5b625d2c765b772b315d5b622b6d5d5d2c2e35292c463d63285b765b775d5b622b315d2c765b772b315d5b622b312b6d5d5d2c2e35292c423d63285b412c435d2c2e35292c5b7b7074733a5b452c422c432c765b772b315d5b622b6d5d5d7d2c7b7074733a5b422c462c765b772b315d5b622b312b6d5d2c435d7d2c7b7074733a5b765b775d5b625d2c412c422c455d7d2c7b7074733a5b412c765b775d5b622b315d2c462c425d7d5d7d7d3b66756e6374696f6e20642874297b666f722876617220653d302c6e3d302c693d302c723d742e6c656e6774682c733d303b733c723b732b2b297b766172206f3d733d3d3d722d313f303a732b312c613d745b735d2c633d745b6f5d2c6c3d612e782a632e792d632e782a612e793b652b3d6c2c6e2b3d28612e782b632e78292a6c2c692b3d28612e792b632e79292a6c7d76617220683d332a653b72657475726e7b783a6e2f682c793a692f687d7d66756e6374696f6e207028742c65297b766f696420303d3d3d65262628653d3132293b666f7228766172206e3d5b5d2c693d642874292c723d303b723c742e6c656e6774683b722b2b297b76617220733d745b725d2c6f3d745b28722b312925742e6c656e6774685d2c613d745b28722b322925742e6c656e6774685d2c633d4d6174682e73717274284d6174682e706f77286f2e782d732e782c32292b4d6174682e706f77286f2e792d732e792c3229292c6c3d4d6174682e73717274284d6174682e706f77286f2e782d612e782c32292b4d6174682e706f77286f2e792d612e792c3229292c683d4d6174682e73717274284d6174682e706f7728612e782d732e782c32292b4d6174682e706f7728612e792d732e792c3229292c663d2d652f4d6174682e73696e284d6174682e61636f7328286c2a6c2b632a632d682a68292f28322a6c2a6329292f32292c703d4d6174682e6174616e32286f2e792d692e792c6f2e782d692e78293b696628663c3d2d282e342a4d6174682e73717274284d6174682e706f77286f2e782d692e782c32292b4d6174682e706f77286f2e792d692e792c322929292972657475726e21313b6e2e70757368287b783a6f2e782b4d6174682e636f732870292a662c793a6f2e792b4d6174682e73696e2870292a667d297d72657475726e206e7d76617220753d66756e6374696f6e28742c652c6e2c69297b76617220723d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c66726f6e743a5b5d2c636c69703a5b5d2c636f6c6f723a697d2c733d7028742e7074732c6e293b69662873297b766172206f3d63285b735b305d2c735b325d5d2c2e35292c613d63285b735b325d2c735b335d5d2c2e35292c6c3d63285b735b315d2c735b325d5d2c2e35293b722e706f6c792e70757368285b735b305d2c6c2c6f2c615d292c722e706f6c792e70757368285b6f2c6c2c735b315d2c735b325d5d292c722e706f6c792e70757368285b735b335d2c735b305d2c6f2c615d292c722e736861646f77417265613d5b5b735b305d2c735b315d2c6c2c6f5d2c5b735b325d2c6c2c6f2c615d5d7d72657475726e20727d2c243d66756e6374696f6e28742c652c6e2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a737d2c613d5b5d2c633d7028742e7074732c6e293b69662863297b666f7228766172206c3d4d6174682e6174616e3228742e7074735b335d2e792d742e7074735b305d2e792c742e7074735b335d2e782d742e7074735b305d2e78292c683d312b4d6174682e6365696c286528292a72292a6e2c663d4d6174682e50492a28693f2e37353a312e3235292c643d632e6d61702866756e6374696f6e2874297b72657475726e7b783a742e782b4d6174682e636f73286c2b66292a682c793a742e792b4d6174682e73696e286c2b66292a687d7d292c753d303b753c632e6c656e6774683b752b2b29612e70757368285b742e7074735b28752b312925742e7074732e6c656e6774685d2c635b755d5d293b6f2e706f6c792e707573682864292c6f2e706f6c792e70757368285b645b305d2c645b315d2c635b315d2c635b305d5d292c6f2e706f6c792e70757368285b645b325d2c645b315d2c635b315d2c635b325d5d292c6f2e736861646f77417265613d5b5b645b325d2c645b335d2c635b335d2c635b325d5d5d2c6f2e66726f6e743d642c6f2e636c69703d5b645b305d2c645b315d2c635b315d2c635b325d2c635b335d2c645b335d5d7d72657475726e206f7d2c5f3d66756e6374696f6e28742c652c6e2c69297b76617220723d6428742e707473292c733d4d6174682e6174616e3228742e7074735b305d2e792d742e7074735b335d2e792c742e7074735b305d2e782d742e7074735b305d2e78292c6f3d4d6174682e50492a286e3f2e353a2e3235292c613d7b783a722e782b4d6174682e636f7328732b6f292a652a286e3f2d313a31292c793a722e792b4d6174682e73696e28732b6f292a652a286e3f2d313a31297d3b72657475726e7b706f6c793a5b5b742e7074735b325d2c742e7074735b315d2c615d5d2c736861646f77417265613a5b5b742e7074735b335d2c742e7074735b305d2c615d2c5b612c742e7074735b315d2c742e7074735b305d5d5d2c676c696e74417265613a5b5b742e7074735b325d2c742e7074735b335d2c615d5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a697d7d2c793d66756e6374696f6e28742c65297b766172206e3d21313b2223223d3d745b305d262628743d742e736c6963652831292c6e3d2130293b76617220693d7061727365496e7428742c3136292c723d28693e3e3136292b653b723e3235353f723d3235353a723c30262628723d30293b76617220733d28693e3e3826323535292b653b733e3235353f733d3235353a733c30262628733d30293b766172206f3d283235352669292b653b72657475726e206f3e3235353f6f3d3235353a6f3c302626286f3d30292c286e3f2223223a2222292b286f7c733c3c387c723c3c3136292e746f537472696e67283136297d2c783d66756e6374696f6e28742c652c6e297b6966286e7c7c323d3d3d617267756d656e74732e6c656e67746829666f722876617220692c723d302c733d652e6c656e6774683b723c733b722b2b29216926267220696e20657c7c28697c7c28693d41727261792e70726f746f747970652e736c6963652e63616c6c28652c302c7229292c695b725d3d655b725d293b72657475726e20742e636f6e63617428697c7c41727261792e70726f746f747970652e736c6963652e63616c6c286529297d2c673d66756e6374696f6e2874297b72657475726e5b63285b745b315d2c745b325d5d2c2e35292c745b335d2c745b305d5d7d2c763d66756e6374696f6e28297b72657475726e28763d4f626a6563742e61737369676e7c7c66756e6374696f6e2874297b666f722876617220652c6e3d312c693d617267756d656e74732e6c656e6774683b6e3c693b6e2b2b29666f7228766172207220696e20653d617267756d656e74735b6e5d294f626a6563742e70726f746f747970652e6861734f776e50726f70657274792e63616c6c28652c7229262628745b725d3d655b725d293b72657475726e20747d292e6170706c7928746869732c617267756d656e7473297d2c773d66756e6374696f6e2874297b72657475726e204d6174682e726f756e64283165352a74292f3165357d2c623d7b736d616c6c3a5b2e30392c2e315d2c6d656469756d3a5b2e312c2e31325d2c6c617267653a5b2e31342c2e31365d2c687567653a5b2e31382c2e32325d7d3b66756e6374696f6e206d28742c65297b72657475726e20745b4d6174682e666c6f6f7228652a742e6c656e677468295d7d66756e6374696f6e204128742c652c6e297b72657475726e206e2a28652d74292b747d76617220432c453d38302c463d6d285b2246756c6c2072616e646f6d222c2252616e646f6d20756e697175652076616c7565222c2253696e77617665225d2c667872616e642829292c423d4d6174682e666c6f6f7228412831322c34382c667872616e64282929292c533d77284128312c31362c667872616e64282929292c6b3d772841282e352c312c667872616e64282929292c443d6d285b2272616e646f6d222c226c657373206469766973696f6e206f6e207468652063656e746572222c226d6f7265206469766973696f6e206f6e207468652063656e746572225d2c667872616e642829292c503d6d284f626a6563742e6b6579732862292c667872616e642829292c7a3d7b6d696e3a625b505d5b305d2c6d61783a625b505d5b315d7d2c493d77286f28667872616e6428292c7a2e6d696e2c7a2e6d617829292c4c3d2e353e667872616e6428293f313a302c543d6d285b2272616e646f6d222c2273696e676c65225d2c667872616e642829292c4d3d77284128362c31302c667872616e64282929292c4e3d4d6174682e6365696c284128302c322c667872616e64282929292c563d6d284f626a6563742e6b6579732873292c667872616e642829292c713d735b565d2e73706c697428223b3a22292c473d2e353e667872616e6428293b77696e646f772e2466786861736846656174757265733d7b22426f782064656e73697479223a28433d6b293c2e3632353f22737061727365223a433c2e37353f22736361747465726564223a433c2e3837353f2264656e7365223a22636f6e676573746564222c2243656c6c207769647468223a502c2253706c6974206261736564223a442c22426f78206465707468223a66756e6374696f6e2874297b666f722876617220653d5b312c352c392c31332c31365d2c6e3d5b227368616c6c6f77222c226d6f646572617465222c2264656570222c2270726f666f756e64225d2c693d303b693c652e6c656e6774682d313b692b2b29696628743e3d655b695d2626743c655b692b315d2972657475726e206e5b695d3b72657475726e206e5b6e2e6c656e6774682d315d7d2853292c466163696e673a473f227269676874223a226c656674222c50616c657474653a537472696e672856297d3b76617220523d5b313932302c313932305d2c553d7b6e616d653a224b616c6c6178222c73697a653a522c646961676f6e616c3a4d6174682e6879706f7428525b305d2c525b315d292f322c73656374696f6e53697a653a612c626f7865733a5b5d2c6c696e65733a5b5d2c7368617065733a5b5d2c66723a302c7368617065447261776e3a302c626c6f636b42794672616d653a302c73706c697454696c653a66756e6374696f6e28742c65297b6966282272616e646f6d223d3d3d442972657475726e202e32352b2e352a667872616e6428293b766172206e3d4d6174682e6879706f7428742d525b305d2f322c652d525b315d2f32293b72657475726e226d6f7265206469766973696f6e206f6e207468652063656e746572223d3d3d443f2e32352b6e2f552e646961676f6e616c3a312e32352d6e2f552e646961676f6e616c7d2c73636872696e6b54696c653a66756e6374696f6e28297b72657475726e2272616e646f6d223d3d3d543f77286f28667872616e6428292c362c313029293a4d7d2c647261773a66756e6374696f6e28297b76617220743d746869733b746869732e73656374696f6e53697a652e696e697428746869732e73697a655b305d2c667872616e642c7a2c492c46292c722e696e697428746869732e73697a655b305d2c746869732e73697a655b315d2c5b5b452c746869732e73697a655b305d2d455d2c5b452c746869732e73697a655b315d2d455d5d2c2223333333222c22776869746522292c722e696e7365727428646f63756d656e742e626f6479293b76617220653d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226465667322292c6e3d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c227374796c6522293b6e2e696e6e657248544d4c3d225c6e726563742e6261636b67726f756e64207b2066696c6c3a20222e636f6e63617428715b305d2c2232363b207d5c6e70617468207b207374726f6b653a2072676228302c302c302c30293b207d5c6e706174682e74696c65207b2066696c6c3a207267626128302c20302c20302c2030293b207374726f6b653a2022292e636f6e636174287928715b305d2c3430292c223b207374726f6b652d77696474683a20333b207d5c6e22292c712e666f72456163682866756e6374696f6e28742c65297b72657475726e206e2e696e6e657248544d4c2b3d225c6e706174682e636f6c2d222e636f6e63617428652c227b2066696c6c3a2022292e636f6e63617428742c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d676c6e74207b2066696c6c3a2022292e636f6e636174287928742c3230292c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d736864772d30207b2066696c6c3a2022292e636f6e636174287928742c2d3235292c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d736864772d31207b2066696c6c3a2022292e636f6e636174287928742c2d3530292c223b207d22297d292c652e617070656e644368696c64286e293b76617220693d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226c696e6561724772616469656e7422293b692e73657441747472696275746528226964222c226261636b4772616469656e7422292c692e73657441747472696275746528227831222c223022292c692e73657441747472696275746528227832222c223022292c692e73657441747472696275746528227931222c223022292c692e73657441747472696275746528227932222c223122292c692e696e6e657248544d4c3d275c6e20202020202020203c73746f70206f66667365743d223025222073746f702d636f6c6f723d22272e636f6e636174287928715b305d2c2d3130292c27222f3e5c6e20202020202020203c73746f70206f66667365743d2231303025222073746f702d636f6c6f723d2227292e636f6e636174287928715b305d2c2d3230292c27222f3e5c6e202020202020202027292c652e617070656e644368696c642869292c722e5f2e617070656e644368696c642865293b76617220733d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c227265637422293b732e73657441747472696275746528227769647468222c22222e636f6e63617428746869732e73697a655b305d29292c732e7365744174747269627574652822686569676874222c22222e636f6e63617428746869732e73697a655b315d29292c732e636c6173734c6973742e61646428226261636b67726f756e6422292c722e5f2e617070656e644368696c642873293b76617220613d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c226722293b612e73657441747472696275746528227472616e73666f726d222c227472616e736c61746528222e636f6e63617428452c222c2022292e636f6e63617428452c22292229293b76617220633d646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c227265637422293b632e73657441747472696275746528227769647468222c22222e636f6e63617428746869732e73697a655b305d2d31363029292c632e7365744174747269627574652822686569676874222c22222e636f6e63617428746869732e73697a655b315d2d31363029292c632e736574417474726962757465282266696c6c222c2275726c28236261636b4772616469656e742922292c612e617070656e644368696c642863292c722e5f2e617070656e644368696c642861292c722e63726561746547726f757028227073222c226e6f6e65222c226e6f6e6522293b76617220683d66756e6374696f6e28742c652c6e2c69297b666f722876617220722c733d5b5d2c6f3d303b6f3c742e6c656e6774682d313b6f2b2b297b735b6f5d3d5b5d3b76617220613d6f25323d3d303f693a303b696628745b6f5d2e6c656e6774683e3129666f722876617220633d303b633c745b6f5d2e6c656e6774683b632b2b2928723d735b6f5d292e707573682e6170706c7928722c6628652c6e2c742c6f2c632c6129297d72657475726e20737d2866756e6374696f6e28742c652c6e2c692c722c73297b666f722876617220613d5b5d2c633d4d6174682e6879706f7428655b305d5b315d2d655b305d5b305d2c655b315d5b315d2d655b315d5b305d292c6c3d632f28742d31292c683d303b683c743b682b2b29696628615b685d3d5b5d2c6e297b666f722876617220663d5b2d4d6174682e50492f31302c2d4d6174682e50492f31365d2c643d655b305d5b305d2c703d632d6c2a28682b31293b643c655b305d5b315d2626703e655b315d5b305d2626703c655b315d5b315d3b297b76617220753d692864292c243d6f287228292c665b305d2c665b315d292c5f3d642b4d6174682e636f732824292a752c793d702b4d6174682e73696e2824292a753b615b685d2e70757368287b783a642c793a707d292c643d5f2c703d797d615b685d2e70757368287b783a642c793a707d297d656c73657b666f7228663d5b4d6174682e50492b4d6174682e50492f31362c4d6174682e50492b4d6174682e50492f31305d2c643d655b305d5b315d2c703d632d6c2a28682b31293b643e655b305d5b305d2626703e655b315d5b305d2626703c655b315d5b315d3b29753d692864292c243d6f287228292c665b305d2c665b315d292c5f3d642b4d6174682e636f732824292a752c793d702b4d6174682e73696e2824292a752c615b685d2e70757368287b783a642c793a707d292c643d5f2c703d793b615b685d2e70757368287b783a642c793a707d297d72657475726e20617d28422c5b5b2d282e352a746869732e73697a655b305d292c312e352a746869732e73697a655b305d5d2c5b2d282e31352a746869732e73697a655b315d292c312e352a746869732e73697a655b315d5d5d2c472c746869732e73656374696f6e53697a652e67657453697a652c667872616e64292c746869732e73706c697454696c652c667872616e642c4c292c703d4d6174682e50492a667872616e6428292c783d5b5d3b4e3e302626782e70757368286c28702c746869732e73697a652c667872616e6429292c4e3e312626782e70757368286c28702b4d6174682e50492a282e352b2e352a667872616e642829292c746869732e73697a652c667872616e6429292c682e666f72456163682866756e6374696f6e2865297b28653d652e726576657273652829292e666f72456163682866756e6374696f6e2865297b766172206e3b667872616e6428293c6b2626282e32353e667872616e6428293f286e3d7528652c667872616e642c742e73636872696e6b54696c6528292c3129292e706f6c792e6c656e6774683e302626742e64726177426f78286e293a286e3d2428652c667872616e642c742e73636872696e6b54696c6528292c472c532c3129292e636c697026266e2e706f6c792e6c656e6774683e302626742e626f7865732e70757368286e29292c742e64726177536f6c696428652e7074732c2274696c6522297d297d292c746869732e626f7865732e666f72456163682866756e6374696f6e2865297b72657475726e20742e64726177426f782865297d292c746869732e626f7865733d5b5d2c782e666f72456163682866756e6374696f6e2865297b742e64726177536f6c696428652e636c69702c22636f6c2d3022292c652e74696c652e666f72456163682866756e6374696f6e286e2c69297b6e2e666f72456163682866756e6374696f6e286e297b696628693c652e74696c652e6c656e6774682d31297b76617220722c732c6f2c613d28723d6e2c733d6428722e707473292c6f3d722e7074732e6d61702866756e6374696f6e2874297b72657475726e20762876287b7d2c74292c7b616e676c653a4d6174682e6174616e3228742e792d732e792c742e782d732e78297d297d292e736f72742866756e6374696f6e28742c65297b72657475726e20742e616e676c652d652e616e676c657d292e6d61702866756e6374696f6e2874297b72657475726e7b783a742e782c793a742e797d7d292c722e7074733d5b6f5b325d2c6f5b335d2c6f5b305d2c6f5b315d5d2c72293b6966282e353e667872616e642829297b6966282e353e667872616e642829297b76617220633d7528612c667872616e642c742e73636872696e6b54696c6528292c31293b632e706f6c792e6c656e6774683e312626742e64726177426f782863297d656c73657b766172206c3d5f28612c532c472c31293b6c2e706f6c792e6c656e6774683e312626742e64726177426f78286c297d7d656c736520742e64726177536f6c6964286e2e7074732c2274696c6522297d656c736520742e64726177536f6c6964286e2e7074732c2274696c6522297d297d297d292c746869732e626f7865732e666f72456163682866756e6374696f6e2865297b72657475726e20742e64726177426f782865297d292c746869732e626c6f636b42794672616d653d746869732e7368617065732e6c656e6774682f3435302c746869732e616e696d28297d2c616e696d3a66756e6374696f6e28297b696628552e7368617065447261776e3c552e7368617065732e6c656e6774682d31297b666f722876617220743d303b743c4d6174682e6d696e28552e626c6f636b42794672616d652c552e7368617065732e6c656e6774682d28552e7368617065447261776e2b3129293b742b2b292166756e6374696f6e2874297b76617220653d552e7368617065735b552e7368617065447261776e5d3b652e662e6d61702866756e6374696f6e2874297b722e647261774c696e6528742e6d61702866756e6374696f6e2874297b72657475726e5b4d6174682e726f756e6428742e78292c4d6174682e726f756e6428742e79295d7d292c21302c652e632c22707322297d292c552e7368617065447261776e2b2b7d28293b552e66723d77696e646f772e72657175657374416e696d6174696f6e4672616d6528552e616e696d297d656c73652077696e646f772e63616e63656c416e696d6174696f6e4672616d6528552e6672297d2c64726177536f6c69643a66756e6374696f6e28652c6e297b76617220693d28302c742e696e74657273656374696f6e2928652c5b7b783a452c793a457d2c7b783a746869732e73697a655b305d2d452c793a457d2c7b783a746869732e73697a655b305d2d452c793a746869732e73697a655b315d2d457d2c7b783a452c793a746869732e73697a655b315d2d457d5d293b69262628226e756d626572223d3d747970656f6620695b305d5b305d262628693d5b695d292c746869732e7368617065732e70757368287b663a692c633a6e7d29297d2c64726177426f783a66756e6374696f6e2874297b76617220653d746869732c6e3d742e636f6c6f723b696628742e706f6c792e6c656e6774683e302626742e706f6c792e6d61702866756e6374696f6e2874297b742e6c656e6774683e302626652e64726177536f6c696428742c22636f6c2d222e636f6e636174286e29297d292c766f69642030213d3d742e736861646f77417265612626742e736861646f77417265612e6c656e6774683e302626742e736861646f77417265612e666f72456163682866756e6374696f6e28742c69297b742e6c656e6774683e302626652e64726177536f6c696428742c22636f6c2d222e636f6e636174286e2c222d736864772d22292e636f6e636174286929297d292c766f69642030213d3d742e676c696e74417265612626742e676c696e74417265612e6c656e6774683e302626742e676c696e74417265612e666f72456163682866756e6374696f6e2874297b742e6c656e6774683e302626652e64726177536f6c696428742c22636f6c2d222e636f6e636174286e2c222d676c6e742229297d292c742e66726f6e742e6c656e6774683e31297b746869732e64726177536f6c696428742e66726f6e742c22636f6c2d222e636f6e636174286e29293b76617220692c723d667872616e6428292c733d7b7074733a5b742e66726f6e745b335d2c742e66726f6e745b305d2c742e66726f6e745b315d2c742e66726f6e745b325d5d7d2c6f3d28742e636f6c6f722b312925712e6c656e6774683b696628723c2e3134297b76617220613d7528732c667872616e642c746869732e73636872696e6b54696c6528292c6f293b612e706f6c792e6c656e6774683e302626746869732e64726177426f782861297d656c736520696628723c2e32382928693d2428732c667872616e642c746869732e73636872696e6b54696c6528292c472c532c6f29292e66726f6e742e6c656e6774683e312626746869732e64726177536f6c696428692e66726f6e742c22636f6c2d222e636f6e636174286e29292c692e706f6c792e6c656e6774683e302626746869732e64726177426f782869293b656c736520696628723c2e3432297b766172206c3d5f28732c532c472c742e636f6c6f72293b6c2e706f6c792e6c656e6774683e302626746869732e64726177426f78286c297d656c736520696628723c2e3537297b76617220683d66756e6374696f6e28742c652c6e2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a737d2c613d7028742e7074732c69293b69662861297b766172206c3d672861292c683d63285b6c5b305d2c6c5b315d5d2c2e35292c663d63285b6c5b325d2c685d2c2e35292c643d5b63285b6c5b305d2c6c5b315d5d2c2e3235292c63285b6c5b305d2c6c5b315d5d2c2e3735295d3b6f2e706f6c793d5b6c5d2c6f2e736861646f77417265613d5b5b6c5b305d2c645b305d2c662c6c5b325d5d2c78285b665d2c642c2130295d7d72657475726e206f7d28732c302c667872616e642c746869732e73636872696e6b54696c6528292c302c6f293b682e706f6c792e6c656e6774683e302626746869732e64726177426f782868297d656c736520696628723c2e3731297b76617220663d66756e6374696f6e28742c652c6e2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a737d2c613d7028742e7074732c69293b69662861297b76617220633d4d6174682e6174616e3228742e7074735b335d2e792d742e7074735b305d2e792c742e7074735b335d2e782d742e7074735b305d2e78292c6c3d312b4d6174682e6365696c286e28292a65292a692c683d4d6174682e50492a28723f2e37353a312e3235292c663d672861292c643d662e6d61702866756e6374696f6e2874297b72657475726e7b783a742e782b4d6174682e636f7328632b68292a6c2c793a742e792b4d6174682e73696e28632b68292a6c7d7d293b6f2e706f6c793d5b642c5b665b305d2c645b305d2c645b325d2c665b325d5d5d2c6f2e736861646f77417265613d5b5b665b305d2c665b315d2c645b315d2c645b305d5d5d7d72657475726e206f7d28732c532c667872616e642c746869732e73636872696e6b54696c6528292c472c6f293b662e706f6c792e6c656e6774683e302626746869732e64726177426f782866297d656c736528693d2428732c667872616e642c746869732e73636872696e6b54696c6528292c472c532c6f29292e66726f6e742e6c656e6774683e312626746869732e64726177536f6c696428692e66726f6e742c22636f6c2d222e636f6e636174286e29292c692e706f6c792e6c656e6774683e302626746869732e64726177426f782869297d7d2c646f776e6c6f61645356473a66756e6374696f6e2874297b722e646f776e6c6f61642874297d7d3b552e6472617728292c722e5f2e6164644576656e744c697374656e65722822636c69636b222c66756e6374696f6e2874297b552e7368617065447261776e3d302c722e636c65617247726f75702822707322292c552e626c6f636b42794672616d653d552e7368617065732e6c656e6774682f3930302c552e66723d77696e646f772e72657175657374416e696d6174696f6e4672616d6528552e616e696d297d292c646f63756d656e742e6164644576656e744c697374656e657228226b65797072657373222c66756e6374696f6e2874297b5b2244222c2264225d2e696e636c7564657328742e6b6579292626552e646f776e6c6f616453564728224b616c6c6178202d20222e636f6e63617428562c22202d204e69636f6c6173204c656272756e2229297d297d2928297d2928293b3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696275326c36736261356d6d6b76767365686767626968616d686b3563773671696d6a6d647a79706a79376432796570677a6b686d2f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : initialArtInjectPtrIndex (uint16): 145
Arg [1] : initialArtInject (string): <!DOCTYPE html><html><head><meta charset="utf-8" /><script>let alphabet="123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";var fxhash="";let b58dec=e=>[...e].reduce((e,h)=>e*alphabet.length+alphabet.indexOf(h)|0,0),fxhashTrunc=fxhash.slice(2),regex=RegExp(".{"+(fxhash.length/4|0)+"}","g"),hashes=fxhashTrunc.match(regex).map(e=>b58dec(e)),sfc32=(e,h,a,s)=>()=>{a|=0;var $=((e|=0)+(h|=0)|0)+(s|=0)|0;return s=s+1|0,e=h^h>>>9,h=a+(a<<3)|0,a=(a=a<<21|a>>>11)+$|0,($>>>0)/4294967296};var fxrand=sfc32(...hashes);</script><style>body,html{font-size:18px}@media (orientation:landscape){body,html{font-size:16px}}body{margin:0;padding:0;width:100vw;height:100vh;max-width:100vw;max-height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center;background-color:#f1f1f1;font-family:sans-serif}canvas,svg{max-width:100%;max-height:100%}</style></head><body><script defer="defer">(()=>{var t={250:function(t,e){!function(t){"use strict";var e=function(t,e){1===arguments.length&&(Array.isArray(t)?(e=t[1],t=t[0]):(e=t.y,t=t.x)),this.x=t,this.y=e,this.next=null,this.prev=null,this._corresponding=null,this._distance=0,this._isEntry=!0,this._isIntersection=!1,this._visited=!1};e.createIntersection=function(t,n,i){var r=new e(t,n);return r._distance=i,r._isIntersection=!0,r._isEntry=!1,r},e.prototype.visit=function(){this._visited=!0,null===this._corresponding||this._corresponding._visited||this._corresponding.visit()},e.prototype.equals=function(t){return this.x===t.x&&this.y===t.y},e.prototype.isInside=function(t){var e=!1,n=t.first,i=n.next,r=this.x,s=this.y;do(n.y<s&&i.y>=s||i.y<s&&n.y>=s)&&(n.x<=r||i.x<=r)&&(e^=n.x+(s-n.y)/(i.y-n.y)*(i.x-n.x)<r),i=(n=n.next).next||t.first;while(!n.equals(t.first));return e};var n=function(t,e,n,i){this.x=0,this.y=0,this.toSource=0,this.toClip=0;var r=(i.y-n.y)*(e.x-t.x)-(i.x-n.x)*(e.y-t.y);0!==r&&(this.toSource=((i.x-n.x)*(t.y-n.y)-(i.y-n.y)*(t.x-n.x))/r,this.toClip=((e.x-t.x)*(t.y-n.y)-(e.y-t.y)*(t.x-n.x))/r,this.valid()&&(this.x=t.x+this.toSource*(e.x-t.x),this.y=t.y+this.toSource*(e.y-t.y)))};n.prototype.valid=function(){return 0<this.toSource&&this.toSource<1&&0<this.toClip&&this.toClip<1};var i=function(t,n){this.first=null,this.vertices=0,this._lastUnprocessed=null,this._arrayVertices=void 0===n?Array.isArray(t[0]):n;for(var i=0,r=t.length;i<r;i++)this.addVertex(new e(t[i]))};function r(t,e,n,r){var s=new i(t),o=new i(e);return s.clip(o,n,r)}i.prototype.addVertex=function(t){if(null===this.first)this.first=t,this.first.next=t,this.first.prev=t;else{var e=this.first,n=e.prev;e.prev=t,t.next=e,t.prev=n,n.next=t}this.vertices++},i.prototype.insertVertex=function(t,e,n){for(var i,r=e;!r.equals(n)&&r._distance<t._distance;)r=r.next;t.next=r,i=r.prev,t.prev=i,i.next=t,r.prev=t,this.vertices++},i.prototype.getNext=function(t){for(var e=t;e._isIntersection;)e=e.next;return e},i.prototype.getFirstIntersect=function(){var t=this._firstIntersect||this.first;do{if(t._isIntersection&&!t._visited)break;t=t.next}while(!t.equals(this.first));return this._firstIntersect=t,t},i.prototype.hasUnprocessed=function(){var t=this._lastUnprocessed||this.first;do{if(t._isIntersection&&!t._visited)return this._lastUnprocessed=t,!0;t=t.next}while(!t.equals(this.first));return this._lastUnprocessed=null,!1},i.prototype.getPoints=function(){var t=[],e=this.first;if(this._arrayVertices)do t.push([e.x,e.y]),e=e.next;while(e!==this.first);else do t.push({x:e.x,y:e.y}),e=e.next;while(e!==this.first);return t},i.prototype.clip=function(t,r,s){var o,a,c=this.first,l=t.first,h=!r&&!s,f=r&&s;do{if(!c._isIntersection)do{if(!l._isIntersection){var d=new n(c,this.getNext(c.next),l,t.getNext(l.next));if(d.valid()){var p=e.createIntersection(d.x,d.y,d.toSource),u=e.createIntersection(d.x,d.y,d.toClip);p._corresponding=u,u._corresponding=p,this.insertVertex(p,c,this.getNext(c.next)),t.insertVertex(u,l,t.getNext(l.next))}}l=l.next}while(!l.equals(t.first));c=c.next}while(!c.equals(this.first));c=this.first,l=t.first,r^=o=c.isInside(t),s^=a=l.isInside(this);do c._isIntersection&&(c._isEntry=r,r=!r),c=c.next;while(!c.equals(this.first));do l._isIntersection&&(l._isEntry=s,s=!s),l=l.next;while(!l.equals(t.first));for(var $=[];this.hasUnprocessed();){var _=this.getFirstIntersect(),y=new i([],this._arrayVertices);y.addVertex(new e(_.x,_.y));do{if(_.visit(),_._isEntry)do _=_.next,y.addVertex(new e(_.x,_.y));while(!_._isIntersection);else do _=_.prev,y.addVertex(new e(_.x,_.y));while(!_._isIntersection);_=_._corresponding}while(!_._visited);$.push(y.getPoints())}return 0===$.length&&(h?o?$.push(t.getPoints()):a?$.push(this.getPoints()):$.push(this.getPoints(),t.getPoints()):f?o?$.push(this.getPoints()):a&&$.push(t.getPoints()):o?$.push(t.getPoints(),this.getPoints()):a?$.push(this.getPoints(),t.getPoints()):$.push(this.getPoints()),0===$.length&&($=null)),$},t.union=function(t,e){return r(t,e,!1,!1)},t.intersection=function(t,e){return r(t,e,!0,!0)},t.diff=function(t,e){return r(t,e,!1,!0)},t.clip=r,Object.defineProperty(t,"__esModule",{value:!0})}(e)}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var s=e[i]={exports:{}};return t[i].call(s.exports,s,s.exports,n),s.exports}(()=>{"use strict";var t=n(250),e="http://www.w3.org/2000/svg",i={_:void 0,width:null,height:null,scale:1,stroke:null,groups:[],groupRef:[],init:function(t,n,r,s,o){i._=document.createElementNS(e,"svg"),i._.setAttribute("version","1.1"),i._.setAttribute("xmlns",e),i._.setAttribute("xmlns:svg",e),i._.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),i._.setAttribute("xmlns:inkscape","http://www.inkscape.org/namespaces/inkscape"),i._.setAttribute("width","".concat(t,"px")),i._.setAttribute("height","".concat(n,"px")),i._.setAttribute("viewBox","0 0 ".concat(t," ").concat(n)),i._.style.backgroundColor=o},createGroup:function(t,n,r){void 0===r&&(r="none");var s=document.createElementNS(e,"g");s.setAttribute("name",t),s.setAttribute("stroke",n),s.setAttribute("fill",r),i._.appendChild(s),i.groups.push(s),i.groupRef.push(t)},clearGroup:function(t){var e=i.groupRef.indexOf(t);i.groups[e].innerHTML=""},insert:function(t){t.appendChild(i._)},drawLine:function(t,n,r,s){void 0===n&&(n=!1),void 0===r&&(r="");for(var o=document.createElementNS(e,"path"),a="M ".concat(t[0][0]," ").concat(t[0][1]),c=1;c<t.length;c++)a+=" L".concat(t[c][0]," ").concat(t[c][1]);if(n&&(a+=" L".concat(t[0][0]," ").concat(t[0][1])),o.setAttribute("d",a),""!==r&&o.setAttribute("class",r),s){var l=i.groupRef.indexOf(s);i.groups[l].appendChild(o)}else i._.appendChild(o)},download:function(t){var e=null,n='<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n '.concat(i._.outerHTML),r=new Blob([n],{type:"application/xml"});null!==e&&window.URL.revokeObjectURL(e),e=window.URL.createObjectURL(r);var s=document.createElement("a");s.href=e,s.download="".concat(t,".svg"),s.click()},delete:function(t){t.removeChild(i._)}};let r=i;var s={"Violet Harmony":"#443857;:#556fa1;:#dfe7e0;:#f9a434",Volcanic:"#576071;:#9199ab;:#f96d5d;:#cbe4eb","Purple Shades":"#47354f;:#a1dc54;:#9e9eb1;:#f96d5d;:#e0e2e7","Ocean Breeze":"#4B4B95;:#db444b;:#fddc66;:#d9f0e3;:#4b82a0",Frostbite:"#4316ca;:#f5dcd5;:#f8141c;:#5301a5;:#9effd0","Midnight Blues":"#4400A3;:#75B9BE;:#fdd844;:#ee8821","Muted Forest":"#334444;:#e3f515;:#fe414b;:#dae3e4;:#55366D","Pink Flamingo":"#444466;:#e5e2df;:#fec2c4;:#8c3fc7;:#4503a0","Grey Skies":"#788e93;:#e2dfe5;:#9af3c1;:#594c61","Indigo Nights":"#48465d;:#4e77b1;:#e9d3d1;:#dd6e5a","Burgundy Bliss":"#4B236E;:#f61e1e;:#eef5d6;:#48C7B4","Mauve Magic":"#463753;:#cd6d66;:#e9d4d2;:#828ea0","Plum Perfection":"#544865;:#749a92;:#e3e0d8;:#f7dd8f","Purple Haze":"#4f2a74;:#d7eff3;:#f3dfd5;:#ff7d7d","Golden Harvest":"#4b4372;:#d8dbcc;:#ffec70;:#fa463f","Glamorous Nights":"#453856;:#5348be;:#8bddfb;:#f4d2cc","Sunflower Fields":"#6C7189;:#ddd71b;:#f04037;:#d69f52","Electric Vibes":"#fd322f;:#f0cdd7;:#5b01f7;:#560C97","Amethyst Dreams":"#46374a;:#d75750;:#e5e2dd;:#e4e152","Oceanic Fantasy":"#4b465c;:#4e59af;:#dee3dd;:#eee098","Minty Fresh":"#565f8a;:#81e1b1;:#e6e9d6;:#f37a6a","Woodland Trail":"#b05959;:#4e3ad3;:#f8fbef;:#749a95","Berry Crush":"#4f384f;:#90d0ae;:#dcd2d0;:#556178","Suede Color":"#423152;:#7d8d7e;:#786983;:#ee8a0d;:#c5af99","Slate Gray":"#545577;:#d08035;:#ded9d1;:#868c9d","Deep Purple":"#4C3DA4;:#f0221f;:#ede2d1;:#61e8fd","Stormy Seas":"#596678;:#efe485;:#e6e3e1;:#a19aad","Shiny Diamond":"#B7F1FD;:#9EB8CA;:#c2f6ff;:#5D6F77;:#d6fffd;:#c2f9ff",Oceanic:"#54818e;:#fa3973;:#fdef6d;:#dfe9de","Cherry Cola":"#536483;:#ed0427;:#f8dbd2;:#52D0E0","Lemon Drop":"#ffffff;:#fff9e9;:#feffa8;:#fffece;:#fbffe0","Pink Rose":"#E82195;:#D2E7EF",Yoga:"#9fc5e8;:#6f89a2;:#ffffff;:#bbbbbb;:#444444",Sapphire:"#42489E;:#D06D62","Blue Ice":"#7D6686;:#85E2FE","Midnight Blue":"#571710;:#614BF3",Fuchsia:"#D9498A;:#448D9F",Eggplant:"#5E2E88;:#E2CCB8","Candy Store":"#F03C69;:#FBDCC7;:#E5439C;:#546CC9",Vintage:"#D1C7D1;:#a08e90;:#fb4e23;:#4f8ae3",Nightlife:"#434455;:#7D81B8;:#F1473F;:#FFA813","Jelly Beans":"#F2C602;:#514FCF;:#4FB9BA;:#F99035",Twilight:"#5E479A;:#C4D0D2","Gray Scale":"#525252;:#858585;:#b8b8b8;:#cccccc","Blue Mist":"#445577;:#66CCCC;:#CCCCCC","Midas Touch":"#f2a602;:#fad11d;:#fff873","Polar mirage":"#5a92c4;:#e26628","Blue Sky":"#4255B3;:#FBEAEB",Minty:"#6C5959;:#E7E8D1;:#A7BEAE","Coral Reef":"#584646;:#47AECB;:#90ee90;:#d54848","Pink Lemonade":"#F96167;:#FCE77D","Swamp Fog":"#4c5560;:#a4c0c5;:#c9d8d2;:#8da096;:#56615c","Arctic Garden":"#F4EDFD;:#44A09C","Red Velvet":"#990011;:#FCF6F5","Silver Lining":"#8AAAE5;:#F3F3F3",Mono:"#444444;:#cccccc",Peppermint:"#FCEDDA;:#EE4E34","Coastal Dusk":"#5a64ab;:#914f6d;:#6f90a7","Yellow Submarine":"#5197CD;:#FBF8BE","Baby Blue":"#ADD8E6;:#4747D1","Cherry Blossom":"#89ABE3;:#EA738D",Forest:"#72b36b;:#f9c04d;:#eef0f2;:#a2999e;:#846a6a","Hot Pink":"#EC449B;:#99F443",Mocha:"#4a454a;:#E0A96D;:#DDC3A5",Sunburst:"#FFA351;:#FFBE7B;:#EED971","Lavender Fields":"#8A307F;:#79A7D3;:#6883BC",Scarlet:"#CC313D;:#F7C5CC",Terracotta:"#783937;:#FC766A;:#F1AC88","Pastel meadows":"#9277cf;:#b4f8c8;:#ffffd2",Olive:"#479a49;:#BACE8D",Sage:"#46B679;:#FCF6F5"};function o(t,e,n){return t*(n-e)+e}var a={sketchWidth:100,sizeBetween:{min:0,max:1},fixedSize:.5,strategy:"",prng:Math.random,init:function(t,e,n,i,r){a.sketchWidth=t,a.prng=e,a.sizeBetween=n,a.fixedSize=i,a.strategy=r},getSize:function(t){if("Full random"===a.strategy)return o(a.prng(),a.sizeBetween.min,a.sizeBetween.max)*a.sketchWidth;if("Random unique value"===a.strategy)return a.fixedSize*a.sketchWidth;if("Sinwave"===a.strategy){var e=t/a.sketchWidth;return Math.max(a.sizeBetween.min*a.sketchWidth,Math.sin(e*Math.PI)*a.sketchWidth*a.sizeBetween.max)}}};function c(t,e){var n=Math.atan2(t[1].y-t[0].y,t[1].x-t[0].x),i=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y);return{x:t[0].x+Math.cos(n)*i*e,y:t[0].y+Math.sin(n)*i*e}}var l=function(t,e,n,i){for(var r=e[0]/2,s=e[1]/2,o=Math.hypot(e[0],e[1]),a=1.33*o,l=.75*o,h=.75*Math.PI,f=[{x:r+Math.cos(t-h/2)*a,y:s+Math.sin(t-h/2)*a},{x:r+Math.cos(t+h/2)*a,y:s+Math.sin(t+h/2)*a},{x:r+Math.cos(t+h/2)*l,y:s+Math.sin(t+h/2)*l},{x:r+Math.cos(t-h/2)*l,y:s+Math.sin(t-h/2)*l}],d=[f[0],f[3]],p=[f[1],f[2]],u=[],$=0;$<=6;$++)u.push([c(d,6===$?$/6:($+(n()-.5))/6),c(p,6===$?$/6:($+(n()-.5))/6)]);var _=[];for($=0;$<u.length-1;$++)for(var y=[],x=1;x<u[$].length;x++){for(var g=u[$][x-1],v=u[$+1][x-1],w=1;w<=20;w++){var b=c([u[$][x-1],u[$][x]],w/20),m=c([u[$+1][x-1],u[$+1][x]],w/20),A={pts:[g,b,m,v],i:{x:20*x+w,y:$}};y.push(A),g=b,v=m}_.push(y)}return{clip:f,tile:_}},h=function(t,e,n,i){return{pts:[t[e][n],t[e][n+1],t[e+1][n+1+i],t[e+1][n+i]]}},f=function(t,e,n,i,r,s){if(i<n.length-2&&r<n[i+1].length-1&&r<n[i+s].length-2&&r+s+1<n[i].length-2&&r+1+s<n[i+1].length-1&&r+s>0){var o,a,l,f,d,p,u,$,_,y,x,g,v,w,b,m,A,C,E,F,B,S=t(n[i][r].x,n[i][r].y);if(S>.75)return[h(n,i,r,s)];if(S<.75&&S>.5)return e()>.5?(o=n,a=i,l=r,f=s,d=c([o[a][l],o[a][l+1]],.5),p=c([o[a+1][l+f],o[a+1][l+1+f]],.5),[{pts:[o[a][l],d,p,o[a+1][l+f]]},{pts:[d,o[a][l+1],o[a+1][l+1+f],p]}]):(u=n,$=i,_=r,y=s,x=c([u[$][_],u[$+1][_+y]],.5),g=c([u[$][_+1],u[$+1][_+1+y]],.5),[{pts:[x,g,u[$+1][_+1+y],u[$+1][_+y]]},{pts:[u[$][_],u[$][_+1],g,x]}]);if(S<.5&&S>.25)return v=n,w=i,b=r,m=s,A=c([v[w][b],v[w][b+1]],.5),C=c([v[w+1][b+m],v[w+1][b+1+m]],.5),E=c([v[w][b],v[w+1][b+m]],.5),F=c([v[w][b+1],v[w+1][b+1+m]],.5),B=c([A,C],.5),[{pts:[E,B,C,v[w+1][b+m]]},{pts:[B,F,v[w+1][b+1+m],C]},{pts:[v[w][b],A,B,E]},{pts:[A,v[w][b+1],F,B]}]}};function d(t){for(var e=0,n=0,i=0,r=t.length,s=0;s<r;s++){var o=s===r-1?0:s+1,a=t[s],c=t[o],l=a.x*c.y-c.x*a.y;e+=l,n+=(a.x+c.x)*l,i+=(a.y+c.y)*l}var h=3*e;return{x:n/h,y:i/h}}function p(t,e){void 0===e&&(e=12);for(var n=[],i=d(t),r=0;r<t.length;r++){var s=t[r],o=t[(r+1)%t.length],a=t[(r+2)%t.length],c=Math.sqrt(Math.pow(o.x-s.x,2)+Math.pow(o.y-s.y,2)),l=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),h=Math.sqrt(Math.pow(a.x-s.x,2)+Math.pow(a.y-s.y,2)),f=-e/Math.sin(Math.acos((l*l+c*c-h*h)/(2*l*c))/2),p=Math.atan2(o.y-i.y,o.x-i.x);if(f<=-(.4*Math.sqrt(Math.pow(o.x-i.x,2)+Math.pow(o.y-i.y,2))))return!1;n.push({x:o.x+Math.cos(p)*f,y:o.y+Math.sin(p)*f})}return n}var u=function(t,e,n,i){var r={poly:[],shadowArea:[],glintArea:[],front:[],clip:[],color:i},s=p(t.pts,n);if(s){var o=c([s[0],s[2]],.5),a=c([s[2],s[3]],.5),l=c([s[1],s[2]],.5);r.poly.push([s[0],l,o,a]),r.poly.push([o,l,s[1],s[2]]),r.poly.push([s[3],s[0],o,a]),r.shadowArea=[[s[0],s[1],l,o],[s[2],l,o,a]]}return r},$=function(t,e,n,i,r,s){var o={poly:[],shadowArea:[],glintArea:[],clip:[],front:[],color:s},a=[],c=p(t.pts,n);if(c){for(var l=Math.atan2(t.pts[3].y-t.pts[0].y,t.pts[3].x-t.pts[0].x),h=1+Math.ceil(e()*r)*n,f=Math.PI*(i?.75:1.25),d=c.map(function(t){return{x:t.x+Math.cos(l+f)*h,y:t.y+Math.sin(l+f)*h}}),u=0;u<c.length;u++)a.push([t.pts[(u+1)%t.pts.length],c[u]]);o.poly.push(d),o.poly.push([d[0],d[1],c[1],c[0]]),o.poly.push([d[2],d[1],c[1],c[2]]),o.shadowArea=[[d[2],d[3],c[3],c[2]]],o.front=d,o.clip=[d[0],d[1],c[1],c[2],c[3],d[3]]}return o},_=function(t,e,n,i){var r=d(t.pts),s=Math.atan2(t.pts[0].y-t.pts[3].y,t.pts[0].x-t.pts[0].x),o=Math.PI*(n?.5:.25),a={x:r.x+Math.cos(s+o)*e*(n?-1:1),y:r.y+Math.sin(s+o)*e*(n?-1:1)};return{poly:[[t.pts[2],t.pts[1],a]],shadowArea:[[t.pts[3],t.pts[0],a],[a,t.pts[1],t.pts[0]]],glintArea:[[t.pts[2],t.pts[3],a]],clip:[],front:[],color:i}},y=function(t,e){var n=!1;"#"==t[0]&&(t=t.slice(1),n=!0);var i=parseInt(t,16),r=(i>>16)+e;r>255?r=255:r<0&&(r=0);var s=(i>>8&255)+e;s>255?s=255:s<0&&(s=0);var o=(255&i)+e;return o>255?o=255:o<0&&(o=0),(n?"#":"")+(o|s<<8|r<<16).toString(16)},x=function(t,e,n){if(n||2===arguments.length)for(var i,r=0,s=e.length;r<s;r++)!i&&r in e||(i||(i=Array.prototype.slice.call(e,0,r)),i[r]=e[r]);return t.concat(i||Array.prototype.slice.call(e))},g=function(t){return[c([t[1],t[2]],.5),t[3],t[0]]},v=function(){return(v=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)},w=function(t){return Math.round(1e5*t)/1e5},b={small:[.09,.1],medium:[.1,.12],large:[.14,.16],huge:[.18,.22]};function m(t,e){return t[Math.floor(e*t.length)]}function A(t,e,n){return n*(e-t)+t}var C,E=80,F=m(["Full random","Random unique value","Sinwave"],fxrand()),B=Math.floor(A(12,48,fxrand())),S=w(A(1,16,fxrand())),k=w(A(.5,1,fxrand())),D=m(["random","less division on the center","more division on the center"],fxrand()),P=m(Object.keys(b),fxrand()),z={min:b[P][0],max:b[P][1]},I=w(o(fxrand(),z.min,z.max)),L=.5>fxrand()?1:0,T=m(["random","single"],fxrand()),M=w(A(6,10,fxrand())),N=Math.ceil(A(0,2,fxrand())),V=m(Object.keys(s),fxrand()),q=s[V].split(";:"),G=.5>fxrand();window.$fxhashFeatures={"Box density":(C=k)<.625?"sparse":C<.75?"scattered":C<.875?"dense":"congested","Cell width":P,"Split based":D,"Box depth":function(t){for(var e=[1,5,9,13,16],n=["shallow","moderate","deep","profound"],i=0;i<e.length-1;i++)if(t>=e[i]&&t<e[i+1])return n[i];return n[n.length-1]}(S),Facing:G?"right":"left",Palette:String(V)};var R=[1920,1920],U={name:"Kallax",size:R,diagonal:Math.hypot(R[0],R[1])/2,sectionSize:a,boxes:[],lines:[],shapes:[],fr:0,shapeDrawn:0,blockByFrame:0,splitTile:function(t,e){if("random"===D)return .25+.5*fxrand();var n=Math.hypot(t-R[0]/2,e-R[1]/2);return"more division on the center"===D?.25+n/U.diagonal:1.25-n/U.diagonal},schrinkTile:function(){return"random"===T?w(o(fxrand(),6,10)):M},draw:function(){var t=this;this.sectionSize.init(this.size[0],fxrand,z,I,F),r.init(this.size[0],this.size[1],[[E,this.size[0]-E],[E,this.size[1]-E]],"#333","white"),r.insert(document.body);var e=document.createElementNS("http://www.w3.org/2000/svg","defs"),n=document.createElementNS("http://www.w3.org/2000/svg","style");n.innerHTML="\nrect.background { fill: ".concat(q[0],"26; }\npath { stroke: rgb(0,0,0,0); }\npath.tile { fill: rgba(0, 0, 0, 0); stroke: ").concat(y(q[0],40),"; stroke-width: 3; }\n"),q.forEach(function(t,e){return n.innerHTML+="\npath.col-".concat(e,"{ fill: ").concat(t,"; }\npath.col-").concat(e,"-glnt { fill: ").concat(y(t,20),"; }\npath.col-").concat(e,"-shdw-0 { fill: ").concat(y(t,-25),"; }\npath.col-").concat(e,"-shdw-1 { fill: ").concat(y(t,-50),"; }")}),e.appendChild(n);var i=document.createElementNS("http://www.w3.org/2000/svg","linearGradient");i.setAttribute("id","backGradient"),i.setAttribute("x1","0"),i.setAttribute("x2","0"),i.setAttribute("y1","0"),i.setAttribute("y2","1"),i.innerHTML='\n <stop offset="0%" stop-color="'.concat(y(q[0],-10),'"/>\n <stop offset="100%" stop-color="').concat(y(q[0],-20),'"/>\n '),e.appendChild(i),r._.appendChild(e);var s=document.createElementNS("http://www.w3.org/2000/svg","rect");s.setAttribute("width","".concat(this.size[0])),s.setAttribute("height","".concat(this.size[1])),s.classList.add("background"),r._.appendChild(s);var a=document.createElementNS("http://www.w3.org/2000/svg","g");a.setAttribute("transform","translate(".concat(E,", ").concat(E,")"));var c=document.createElementNS("http://www.w3.org/2000/svg","rect");c.setAttribute("width","".concat(this.size[0]-160)),c.setAttribute("height","".concat(this.size[1]-160)),c.setAttribute("fill","url(#backGradient)"),a.appendChild(c),r._.appendChild(a),r.createGroup("ps","none","none");var h=function(t,e,n,i){for(var r,s=[],o=0;o<t.length-1;o++){s[o]=[];var a=o%2==0?i:0;if(t[o].length>1)for(var c=0;c<t[o].length;c++)(r=s[o]).push.apply(r,f(e,n,t,o,c,a))}return s}(function(t,e,n,i,r,s){for(var a=[],c=Math.hypot(e[0][1]-e[0][0],e[1][1]-e[1][0]),l=c/(t-1),h=0;h<t;h++)if(a[h]=[],n){for(var f=[-Math.PI/10,-Math.PI/16],d=e[0][0],p=c-l*(h+1);d<e[0][1]&&p>e[1][0]&&p<e[1][1];){var u=i(d),$=o(r(),f[0],f[1]),_=d+Math.cos($)*u,y=p+Math.sin($)*u;a[h].push({x:d,y:p}),d=_,p=y}a[h].push({x:d,y:p})}else{for(f=[Math.PI+Math.PI/16,Math.PI+Math.PI/10],d=e[0][1],p=c-l*(h+1);d>e[0][0]&&p>e[1][0]&&p<e[1][1];)u=i(d),$=o(r(),f[0],f[1]),_=d+Math.cos($)*u,y=p+Math.sin($)*u,a[h].push({x:d,y:p}),d=_,p=y;a[h].push({x:d,y:p})}return a}(B,[[-(.5*this.size[0]),1.5*this.size[0]],[-(.15*this.size[1]),1.5*this.size[1]]],G,this.sectionSize.getSize,fxrand),this.splitTile,fxrand,L),p=Math.PI*fxrand(),x=[];N>0&&x.push(l(p,this.size,fxrand)),N>1&&x.push(l(p+Math.PI*(.5+.5*fxrand()),this.size,fxrand)),h.forEach(function(e){(e=e.reverse()).forEach(function(e){var n;fxrand()<k&&(.25>fxrand()?(n=u(e,fxrand,t.schrinkTile(),1)).poly.length>0&&t.drawBox(n):(n=$(e,fxrand,t.schrinkTile(),G,S,1)).clip&&n.poly.length>0&&t.boxes.push(n)),t.drawSolid(e.pts,"tile")})}),this.boxes.forEach(function(e){return t.drawBox(e)}),this.boxes=[],x.forEach(function(e){t.drawSolid(e.clip,"col-0"),e.tile.forEach(function(n,i){n.forEach(function(n){if(i<e.tile.length-1){var r,s,o,a=(r=n,s=d(r.pts),o=r.pts.map(function(t){return v(v({},t),{angle:Math.atan2(t.y-s.y,t.x-s.x)})}).sort(function(t,e){return t.angle-e.angle}).map(function(t){return{x:t.x,y:t.y}}),r.pts=[o[2],o[3],o[0],o[1]],r);if(.5>fxrand()){if(.5>fxrand()){var c=u(a,fxrand,t.schrinkTile(),1);c.poly.length>1&&t.drawBox(c)}else{var l=_(a,S,G,1);l.poly.length>1&&t.drawBox(l)}}else t.drawSolid(n.pts,"tile")}else t.drawSolid(n.pts,"tile")})})}),this.boxes.forEach(function(e){return t.drawBox(e)}),this.blockByFrame=this.shapes.length/450,this.anim()},anim:function(){if(U.shapeDrawn<U.shapes.length-1){for(var t=0;t<Math.min(U.blockByFrame,U.shapes.length-(U.shapeDrawn+1));t++)!function(t){var e=U.shapes[U.shapeDrawn];e.f.map(function(t){r.drawLine(t.map(function(t){return[Math.round(t.x),Math.round(t.y)]}),!0,e.c,"ps")}),U.shapeDrawn++}();U.fr=window.requestAnimationFrame(U.anim)}else window.cancelAnimationFrame(U.fr)},drawSolid:function(e,n){var i=(0,t.intersection)(e,[{x:E,y:E},{x:this.size[0]-E,y:E},{x:this.size[0]-E,y:this.size[1]-E},{x:E,y:this.size[1]-E}]);i&&("number"==typeof i[0][0]&&(i=[i]),this.shapes.push({f:i,c:n}))},drawBox:function(t){var e=this,n=t.color;if(t.poly.length>0&&t.poly.map(function(t){t.length>0&&e.drawSolid(t,"col-".concat(n))}),void 0!==t.shadowArea&&t.shadowArea.length>0&&t.shadowArea.forEach(function(t,i){t.length>0&&e.drawSolid(t,"col-".concat(n,"-shdw-").concat(i))}),void 0!==t.glintArea&&t.glintArea.length>0&&t.glintArea.forEach(function(t){t.length>0&&e.drawSolid(t,"col-".concat(n,"-glnt"))}),t.front.length>1){this.drawSolid(t.front,"col-".concat(n));var i,r=fxrand(),s={pts:[t.front[3],t.front[0],t.front[1],t.front[2]]},o=(t.color+1)%q.length;if(r<.14){var a=u(s,fxrand,this.schrinkTile(),o);a.poly.length>0&&this.drawBox(a)}else if(r<.28)(i=$(s,fxrand,this.schrinkTile(),G,S,o)).front.length>1&&this.drawSolid(i.front,"col-".concat(n)),i.poly.length>0&&this.drawBox(i);else if(r<.42){var l=_(s,S,G,t.color);l.poly.length>0&&this.drawBox(l)}else if(r<.57){var h=function(t,e,n,i,r,s){var o={poly:[],shadowArea:[],glintArea:[],clip:[],front:[],color:s},a=p(t.pts,i);if(a){var l=g(a),h=c([l[0],l[1]],.5),f=c([l[2],h],.5),d=[c([l[0],l[1]],.25),c([l[0],l[1]],.75)];o.poly=[l],o.shadowArea=[[l[0],d[0],f,l[2]],x([f],d,!0)]}return o}(s,0,fxrand,this.schrinkTile(),0,o);h.poly.length>0&&this.drawBox(h)}else if(r<.71){var f=function(t,e,n,i,r,s){var o={poly:[],shadowArea:[],glintArea:[],clip:[],front:[],color:s},a=p(t.pts,i);if(a){var c=Math.atan2(t.pts[3].y-t.pts[0].y,t.pts[3].x-t.pts[0].x),l=1+Math.ceil(n()*e)*i,h=Math.PI*(r?.75:1.25),f=g(a),d=f.map(function(t){return{x:t.x+Math.cos(c+h)*l,y:t.y+Math.sin(c+h)*l}});o.poly=[d,[f[0],d[0],d[2],f[2]]],o.shadowArea=[[f[0],f[1],d[1],d[0]]]}return o}(s,S,fxrand,this.schrinkTile(),G,o);f.poly.length>0&&this.drawBox(f)}else(i=$(s,fxrand,this.schrinkTile(),G,S,o)).front.length>1&&this.drawSolid(i.front,"col-".concat(n)),i.poly.length>0&&this.drawBox(i)}},downloadSVG:function(t){r.download(t)}};U.draw(),r._.addEventListener("click",function(t){U.shapeDrawn=0,r.clearGroup("ps"),U.blockByFrame=U.shapes.length/900,U.fr=window.requestAnimationFrame(U.anim)}),document.addEventListener("keypress",function(t){["D","d"].includes(t.key)&&U.downloadSVG("Kallax - ".concat(V," - Nicolas Lebrun"))})})()})();</script></body></html>
Arg [2] : initialPreviewImageUri (string): ipfs://bafybeibu2l6sba5mmkvvsehggbihamhk5cw6qimjmdzypjy7d2yepgzkhm/

-----Encoded View---------------
728 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000091
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000005a80
Arg [3] : 00000000000000000000000000000000000000000000000000000000000059ed
Arg [4] : 3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c6d657461
Arg [5] : 20636861727365743d227574662d3822202f3e3c7363726970743e6c65742061
Arg [6] : 6c7068616265743d223132333435363738396162636465666768696a6b6d6e6f
Arg [7] : 707172737475767778797a41424344454647484a4b4c4d4e5051525354555657
Arg [8] : 58595a223b766172206678686173683d22223b6c6574206235386465633d653d
Arg [9] : 3e5b2e2e2e655d2e7265647563652828652c68293d3e652a616c706861626574
Arg [10] : 2e6c656e6774682b616c7068616265742e696e6465784f662868297c302c3029
Arg [11] : 2c6678686173685472756e633d6678686173682e736c6963652832292c726567
Arg [12] : 65783d52656745787028222e7b222b286678686173682e6c656e6774682f347c
Arg [13] : 30292b227d222c226722292c6861736865733d6678686173685472756e632e6d
Arg [14] : 61746368287265676578292e6d617028653d3e623538646563286529292c7366
Arg [15] : 6333323d28652c682c612c73293d3e28293d3e7b617c3d303b76617220243d28
Arg [16] : 28657c3d30292b28687c3d30297c30292b28737c3d30297c303b72657475726e
Arg [17] : 20733d732b317c302c653d685e683e3e3e392c683d612b28613c3c33297c302c
Arg [18] : 613d28613d613c3c32317c613e3e3e3131292b247c302c28243e3e3e30292f34
Arg [19] : 3239343936373239367d3b76617220667872616e643d7366633332282e2e2e68
Arg [20] : 6173686573293b3c2f7363726970743e3c7374796c653e626f64792c68746d6c
Arg [21] : 7b666f6e742d73697a653a313870787d406d6564696120286f7269656e746174
Arg [22] : 696f6e3a6c616e647363617065297b626f64792c68746d6c7b666f6e742d7369
Arg [23] : 7a653a313670787d7d626f64797b6d617267696e3a303b70616464696e673a30
Arg [24] : 3b77696474683a31303076773b6865696768743a31303076683b6d61782d7769
Arg [25] : 6474683a31303076773b6d61782d6865696768743a31303076683b6f76657266
Arg [26] : 6c6f773a68696464656e3b646973706c61793a666c65783b616c69676e2d6974
Arg [27] : 656d733a63656e7465723b6a7573746966792d636f6e74656e743a63656e7465
Arg [28] : 723b6261636b67726f756e642d636f6c6f723a236631663166313b666f6e742d
Arg [29] : 66616d696c793a73616e732d73657269667d63616e7661732c7376677b6d6178
Arg [30] : 2d77696474683a313030253b6d61782d6865696768743a313030257d3c2f7374
Arg [31] : 796c653e3c2f686561643e3c626f64793e3c7363726970742064656665723d22
Arg [32] : 6465666572223e2828293d3e7b76617220743d7b3235303a66756e6374696f6e
Arg [33] : 28742c65297b2166756e6374696f6e2874297b2275736520737472696374223b
Arg [34] : 76617220653d66756e6374696f6e28742c65297b313d3d3d617267756d656e74
Arg [35] : 732e6c656e67746826262841727261792e697341727261792874293f28653d74
Arg [36] : 5b315d2c743d745b305d293a28653d742e792c743d742e7829292c746869732e
Arg [37] : 783d742c746869732e793d652c746869732e6e6578743d6e756c6c2c74686973
Arg [38] : 2e707265763d6e756c6c2c746869732e5f636f72726573706f6e64696e673d6e
Arg [39] : 756c6c2c746869732e5f64697374616e63653d302c746869732e5f6973456e74
Arg [40] : 72793d21302c746869732e5f6973496e74657273656374696f6e3d21312c7468
Arg [41] : 69732e5f766973697465643d21317d3b652e637265617465496e746572736563
Arg [42] : 74696f6e3d66756e6374696f6e28742c6e2c69297b76617220723d6e65772065
Arg [43] : 28742c6e293b72657475726e20722e5f64697374616e63653d692c722e5f6973
Arg [44] : 496e74657273656374696f6e3d21302c722e5f6973456e7472793d21312c727d
Arg [45] : 2c652e70726f746f747970652e76697369743d66756e6374696f6e28297b7468
Arg [46] : 69732e5f766973697465643d21302c6e756c6c3d3d3d746869732e5f636f7272
Arg [47] : 6573706f6e64696e677c7c746869732e5f636f72726573706f6e64696e672e5f
Arg [48] : 766973697465647c7c746869732e5f636f72726573706f6e64696e672e766973
Arg [49] : 697428297d2c652e70726f746f747970652e657175616c733d66756e6374696f
Arg [50] : 6e2874297b72657475726e20746869732e783d3d3d742e782626746869732e79
Arg [51] : 3d3d3d742e797d2c652e70726f746f747970652e6973496e736964653d66756e
Arg [52] : 6374696f6e2874297b76617220653d21312c6e3d742e66697273742c693d6e2e
Arg [53] : 6e6578742c723d746869732e782c733d746869732e793b646f286e2e793c7326
Arg [54] : 26692e793e3d737c7c692e793c7326266e2e793e3d73292626286e2e783c3d72
Arg [55] : 7c7c692e783c3d7229262628655e3d6e2e782b28732d6e2e79292f28692e792d
Arg [56] : 6e2e79292a28692e782d6e2e78293c72292c693d286e3d6e2e6e657874292e6e
Arg [57] : 6578747c7c742e66697273743b7768696c6528216e2e657175616c7328742e66
Arg [58] : 6972737429293b72657475726e20657d3b766172206e3d66756e6374696f6e28
Arg [59] : 742c652c6e2c69297b746869732e783d302c746869732e793d302c746869732e
Arg [60] : 746f536f757263653d302c746869732e746f436c69703d303b76617220723d28
Arg [61] : 692e792d6e2e79292a28652e782d742e78292d28692e782d6e2e78292a28652e
Arg [62] : 792d742e79293b30213d3d72262628746869732e746f536f757263653d282869
Arg [63] : 2e782d6e2e78292a28742e792d6e2e79292d28692e792d6e2e79292a28742e78
Arg [64] : 2d6e2e7829292f722c746869732e746f436c69703d2828652e782d742e78292a
Arg [65] : 28742e792d6e2e79292d28652e792d742e79292a28742e782d6e2e7829292f72
Arg [66] : 2c746869732e76616c69642829262628746869732e783d742e782b746869732e
Arg [67] : 746f536f757263652a28652e782d742e78292c746869732e793d742e792b7468
Arg [68] : 69732e746f536f757263652a28652e792d742e792929297d3b6e2e70726f746f
Arg [69] : 747970652e76616c69643d66756e6374696f6e28297b72657475726e20303c74
Arg [70] : 6869732e746f536f757263652626746869732e746f536f757263653c31262630
Arg [71] : 3c746869732e746f436c69702626746869732e746f436c69703c317d3b766172
Arg [72] : 20693d66756e6374696f6e28742c6e297b746869732e66697273743d6e756c6c
Arg [73] : 2c746869732e76657274696365733d302c746869732e5f6c617374556e70726f
Arg [74] : 6365737365643d6e756c6c2c746869732e5f617272617956657274696365733d
Arg [75] : 766f696420303d3d3d6e3f41727261792e6973417272617928745b305d293a6e
Arg [76] : 3b666f722876617220693d302c723d742e6c656e6774683b693c723b692b2b29
Arg [77] : 746869732e616464566572746578286e6577206528745b695d29297d3b66756e
Arg [78] : 6374696f6e207228742c652c6e2c72297b76617220733d6e657720692874292c
Arg [79] : 6f3d6e657720692865293b72657475726e20732e636c6970286f2c6e2c72297d
Arg [80] : 692e70726f746f747970652e6164645665727465783d66756e6374696f6e2874
Arg [81] : 297b6966286e756c6c3d3d3d746869732e666972737429746869732e66697273
Arg [82] : 743d742c746869732e66697273742e6e6578743d742c746869732e6669727374
Arg [83] : 2e707265763d743b656c73657b76617220653d746869732e66697273742c6e3d
Arg [84] : 652e707265763b652e707265763d742c742e6e6578743d652c742e707265763d
Arg [85] : 6e2c6e2e6e6578743d747d746869732e76657274696365732b2b7d2c692e7072
Arg [86] : 6f746f747970652e696e736572745665727465783d66756e6374696f6e28742c
Arg [87] : 652c6e297b666f722876617220692c723d653b21722e657175616c73286e2926
Arg [88] : 26722e5f64697374616e63653c742e5f64697374616e63653b29723d722e6e65
Arg [89] : 78743b742e6e6578743d722c693d722e707265762c742e707265763d692c692e
Arg [90] : 6e6578743d742c722e707265763d742c746869732e76657274696365732b2b7d
Arg [91] : 2c692e70726f746f747970652e6765744e6578743d66756e6374696f6e287429
Arg [92] : 7b666f722876617220653d743b652e5f6973496e74657273656374696f6e3b29
Arg [93] : 653d652e6e6578743b72657475726e20657d2c692e70726f746f747970652e67
Arg [94] : 65744669727374496e746572736563743d66756e6374696f6e28297b76617220
Arg [95] : 743d746869732e5f6669727374496e746572736563747c7c746869732e666972
Arg [96] : 73743b646f7b696628742e5f6973496e74657273656374696f6e262621742e5f
Arg [97] : 7669736974656429627265616b3b743d742e6e6578747d7768696c652821742e
Arg [98] : 657175616c7328746869732e666972737429293b72657475726e20746869732e
Arg [99] : 5f6669727374496e746572736563743d742c747d2c692e70726f746f74797065
Arg [100] : 2e686173556e70726f6365737365643d66756e6374696f6e28297b7661722074
Arg [101] : 3d746869732e5f6c617374556e70726f6365737365647c7c746869732e666972
Arg [102] : 73743b646f7b696628742e5f6973496e74657273656374696f6e262621742e5f
Arg [103] : 766973697465642972657475726e20746869732e5f6c617374556e70726f6365
Arg [104] : 737365643d742c21303b743d742e6e6578747d7768696c652821742e65717561
Arg [105] : 6c7328746869732e666972737429293b72657475726e20746869732e5f6c6173
Arg [106] : 74556e70726f6365737365643d6e756c6c2c21317d2c692e70726f746f747970
Arg [107] : 652e676574506f696e74733d66756e6374696f6e28297b76617220743d5b5d2c
Arg [108] : 653d746869732e66697273743b696628746869732e5f61727261795665727469
Arg [109] : 63657329646f20742e70757368285b652e782c652e795d292c653d652e6e6578
Arg [110] : 743b7768696c652865213d3d746869732e6669727374293b656c736520646f20
Arg [111] : 742e70757368287b783a652e782c793a652e797d292c653d652e6e6578743b77
Arg [112] : 68696c652865213d3d746869732e6669727374293b72657475726e20747d2c69
Arg [113] : 2e70726f746f747970652e636c69703d66756e6374696f6e28742c722c73297b
Arg [114] : 766172206f2c612c633d746869732e66697273742c6c3d742e66697273742c68
Arg [115] : 3d2172262621732c663d722626733b646f7b69662821632e5f6973496e746572
Arg [116] : 73656374696f6e29646f7b696628216c2e5f6973496e74657273656374696f6e
Arg [117] : 297b76617220643d6e6577206e28632c746869732e6765744e65787428632e6e
Arg [118] : 657874292c6c2c742e6765744e657874286c2e6e65787429293b696628642e76
Arg [119] : 616c69642829297b76617220703d652e637265617465496e7465727365637469
Arg [120] : 6f6e28642e782c642e792c642e746f536f75726365292c753d652e6372656174
Arg [121] : 65496e74657273656374696f6e28642e782c642e792c642e746f436c6970293b
Arg [122] : 702e5f636f72726573706f6e64696e673d752c752e5f636f72726573706f6e64
Arg [123] : 696e673d702c746869732e696e7365727456657274657828702c632c74686973
Arg [124] : 2e6765744e65787428632e6e65787429292c742e696e73657274566572746578
Arg [125] : 28752c6c2c742e6765744e657874286c2e6e65787429297d7d6c3d6c2e6e6578
Arg [126] : 747d7768696c6528216c2e657175616c7328742e666972737429293b633d632e
Arg [127] : 6e6578747d7768696c652821632e657175616c7328746869732e666972737429
Arg [128] : 293b633d746869732e66697273742c6c3d742e66697273742c725e3d6f3d632e
Arg [129] : 6973496e736964652874292c735e3d613d6c2e6973496e736964652874686973
Arg [130] : 293b646f20632e5f6973496e74657273656374696f6e262628632e5f6973456e
Arg [131] : 7472793d722c723d2172292c633d632e6e6578743b7768696c652821632e6571
Arg [132] : 75616c7328746869732e666972737429293b646f206c2e5f6973496e74657273
Arg [133] : 656374696f6e2626286c2e5f6973456e7472793d732c733d2173292c6c3d6c2e
Arg [134] : 6e6578743b7768696c6528216c2e657175616c7328742e666972737429293b66
Arg [135] : 6f722876617220243d5b5d3b746869732e686173556e70726f63657373656428
Arg [136] : 293b297b766172205f3d746869732e6765744669727374496e74657273656374
Arg [137] : 28292c793d6e65772069285b5d2c746869732e5f617272617956657274696365
Arg [138] : 73293b792e616464566572746578286e65772065285f2e782c5f2e7929293b64
Arg [139] : 6f7b6966285f2e766973697428292c5f2e5f6973456e74727929646f205f3d5f
Arg [140] : 2e6e6578742c792e616464566572746578286e65772065285f2e782c5f2e7929
Arg [141] : 293b7768696c6528215f2e5f6973496e74657273656374696f6e293b656c7365
Arg [142] : 20646f205f3d5f2e707265762c792e616464566572746578286e65772065285f
Arg [143] : 2e782c5f2e7929293b7768696c6528215f2e5f6973496e74657273656374696f
Arg [144] : 6e293b5f3d5f2e5f636f72726573706f6e64696e677d7768696c6528215f2e5f
Arg [145] : 76697369746564293b242e7075736828792e676574506f696e74732829297d72
Arg [146] : 657475726e20303d3d3d242e6c656e677468262628683f6f3f242e7075736828
Arg [147] : 742e676574506f696e74732829293a613f242e7075736828746869732e676574
Arg [148] : 506f696e74732829293a242e7075736828746869732e676574506f696e747328
Arg [149] : 292c742e676574506f696e74732829293a663f6f3f242e707573682874686973
Arg [150] : 2e676574506f696e74732829293a612626242e7075736828742e676574506f69
Arg [151] : 6e74732829293a6f3f242e7075736828742e676574506f696e747328292c7468
Arg [152] : 69732e676574506f696e74732829293a613f242e7075736828746869732e6765
Arg [153] : 74506f696e747328292c742e676574506f696e74732829293a242e7075736828
Arg [154] : 746869732e676574506f696e74732829292c303d3d3d242e6c656e6774682626
Arg [155] : 28243d6e756c6c29292c247d2c742e756e696f6e3d66756e6374696f6e28742c
Arg [156] : 65297b72657475726e207228742c652c21312c2131297d2c742e696e74657273
Arg [157] : 656374696f6e3d66756e6374696f6e28742c65297b72657475726e207228742c
Arg [158] : 652c21302c2130297d2c742e646966663d66756e6374696f6e28742c65297b72
Arg [159] : 657475726e207228742c652c21312c2130297d2c742e636c69703d722c4f626a
Arg [160] : 6563742e646566696e6550726f706572747928742c225f5f65734d6f64756c65
Arg [161] : 222c7b76616c75653a21307d297d2865297d7d2c653d7b7d3b66756e6374696f
Arg [162] : 6e206e2869297b76617220723d655b695d3b696628766f69642030213d3d7229
Arg [163] : 72657475726e20722e6578706f7274733b76617220733d655b695d3d7b657870
Arg [164] : 6f7274733a7b7d7d3b72657475726e20745b695d2e63616c6c28732e6578706f
Arg [165] : 7274732c732c732e6578706f7274732c6e292c732e6578706f7274737d282829
Arg [166] : 3d3e7b2275736520737472696374223b76617220743d6e28323530292c653d22
Arg [167] : 687474703a2f2f7777772e77332e6f72672f323030302f737667222c693d7b5f
Arg [168] : 3a766f696420302c77696474683a6e756c6c2c6865696768743a6e756c6c2c73
Arg [169] : 63616c653a312c7374726f6b653a6e756c6c2c67726f7570733a5b5d2c67726f
Arg [170] : 75705265663a5b5d2c696e69743a66756e6374696f6e28742c6e2c722c732c6f
Arg [171] : 297b692e5f3d646f63756d656e742e637265617465456c656d656e744e532865
Arg [172] : 2c2273766722292c692e5f2e736574417474726962757465282276657273696f
Arg [173] : 6e222c22312e3122292c692e5f2e7365744174747269627574652822786d6c6e
Arg [174] : 73222c65292c692e5f2e7365744174747269627574652822786d6c6e733a7376
Arg [175] : 67222c65292c692e5f2e7365744174747269627574652822786d6c6e733a786c
Arg [176] : 696e6b222c22687474703a2f2f7777772e77332e6f72672f313939392f786c69
Arg [177] : 6e6b22292c692e5f2e7365744174747269627574652822786d6c6e733a696e6b
Arg [178] : 7363617065222c22687474703a2f2f7777772e696e6b73636170652e6f72672f
Arg [179] : 6e616d657370616365732f696e6b736361706522292c692e5f2e736574417474
Arg [180] : 72696275746528227769647468222c22222e636f6e63617428742c2270782229
Arg [181] : 292c692e5f2e7365744174747269627574652822686569676874222c22222e63
Arg [182] : 6f6e636174286e2c2270782229292c692e5f2e73657441747472696275746528
Arg [183] : 2276696577426f78222c2230203020222e636f6e63617428742c222022292e63
Arg [184] : 6f6e636174286e29292c692e5f2e7374796c652e6261636b67726f756e64436f
Arg [185] : 6c6f723d6f7d2c63726561746547726f75703a66756e6374696f6e28742c6e2c
Arg [186] : 72297b766f696420303d3d3d72262628723d226e6f6e6522293b76617220733d
Arg [187] : 646f63756d656e742e637265617465456c656d656e744e5328652c226722293b
Arg [188] : 732e73657441747472696275746528226e616d65222c74292c732e7365744174
Arg [189] : 7472696275746528227374726f6b65222c6e292c732e73657441747472696275
Arg [190] : 7465282266696c6c222c72292c692e5f2e617070656e644368696c642873292c
Arg [191] : 692e67726f7570732e707573682873292c692e67726f75705265662e70757368
Arg [192] : 2874297d2c636c65617247726f75703a66756e6374696f6e2874297b76617220
Arg [193] : 653d692e67726f75705265662e696e6465784f662874293b692e67726f757073
Arg [194] : 5b655d2e696e6e657248544d4c3d22227d2c696e736572743a66756e6374696f
Arg [195] : 6e2874297b742e617070656e644368696c6428692e5f297d2c647261774c696e
Arg [196] : 653a66756e6374696f6e28742c6e2c722c73297b766f696420303d3d3d6e2626
Arg [197] : 286e3d2131292c766f696420303d3d3d72262628723d2222293b666f72287661
Arg [198] : 72206f3d646f63756d656e742e637265617465456c656d656e744e5328652c22
Arg [199] : 7061746822292c613d224d20222e636f6e63617428745b305d5b305d2c222022
Arg [200] : 292e636f6e63617428745b305d5b315d292c633d313b633c742e6c656e677468
Arg [201] : 3b632b2b29612b3d22204c222e636f6e63617428745b635d5b305d2c22202229
Arg [202] : 2e636f6e63617428745b635d5b315d293b6966286e262628612b3d22204c222e
Arg [203] : 636f6e63617428745b305d5b305d2c222022292e636f6e63617428745b305d5b
Arg [204] : 315d29292c6f2e736574417474726962757465282264222c61292c2222213d3d
Arg [205] : 7226266f2e7365744174747269627574652822636c617373222c72292c73297b
Arg [206] : 766172206c3d692e67726f75705265662e696e6465784f662873293b692e6772
Arg [207] : 6f7570735b6c5d2e617070656e644368696c64286f297d656c736520692e5f2e
Arg [208] : 617070656e644368696c64286f297d2c646f776e6c6f61643a66756e6374696f
Arg [209] : 6e2874297b76617220653d6e756c6c2c6e3d273c3f786d6c2076657273696f6e
Arg [210] : 3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f
Arg [211] : 6e653d226e6f223f3e5c6e2020202020202020272e636f6e63617428692e5f2e
Arg [212] : 6f7574657248544d4c292c723d6e657720426c6f62285b6e5d2c7b747970653a
Arg [213] : 226170706c69636174696f6e2f786d6c227d293b6e756c6c213d3d6526267769
Arg [214] : 6e646f772e55524c2e7265766f6b654f626a65637455524c2865292c653d7769
Arg [215] : 6e646f772e55524c2e6372656174654f626a65637455524c2872293b76617220
Arg [216] : 733d646f63756d656e742e637265617465456c656d656e7428226122293b732e
Arg [217] : 687265663d652c732e646f776e6c6f61643d22222e636f6e63617428742c222e
Arg [218] : 73766722292c732e636c69636b28297d2c64656c6574653a66756e6374696f6e
Arg [219] : 2874297b742e72656d6f76654368696c6428692e5f297d7d3b6c657420723d69
Arg [220] : 3b76617220733d7b2256696f6c6574204861726d6f6e79223a22233434333835
Arg [221] : 373b3a233535366661313b3a236466653765303b3a23663961343334222c566f
Arg [222] : 6c63616e69633a22233537363037313b3a233931393961623b3a236639366435
Arg [223] : 643b3a23636265346562222c22507572706c6520536861646573223a22233437
Arg [224] : 333534663b3a236131646335343b3a233965396562313b3a236639366435643b
Arg [225] : 3a23653065326537222c224f6365616e20427265657a65223a22233442344239
Arg [226] : 353b3a236462343434623b3a236664646336363b3a236439663065333b3a2334
Arg [227] : 6238326130222c46726f7374626974653a22233433313663613b3a2366356463
Arg [228] : 64353b3a236638313431633b3a233533303161353b3a23396566666430222c22
Arg [229] : 4d69646e6967687420426c756573223a22233434303041333b3a233735423942
Arg [230] : 453b3a236664643834343b3a23656538383231222c224d7574656420466f7265
Arg [231] : 7374223a22233333343434343b3a236533663531353b3a236665343134623b3a
Arg [232] : 236461653365343b3a23353533363644222c2250696e6b20466c616d696e676f
Arg [233] : 223a22233434343436363b3a236535653264663b3a236665633263343b3a2338
Arg [234] : 63336663373b3a23343530336130222c224772657920536b696573223a222337
Arg [235] : 38386539333b3a236532646665353b3a233961663363313b3a23353934633631
Arg [236] : 222c22496e6469676f204e6967687473223a22233438343635643b3a23346537
Arg [237] : 3762313b3a236539643364313b3a23646436653561222c2242757267756e6479
Arg [238] : 20426c697373223a22233442323336453b3a236636316531653b3a2365656635
Arg [239] : 64363b3a23343843374234222c224d61757665204d61676963223a2223343633
Arg [240] : 3735333b3a236364366436363b3a236539643464323b3a23383238656130222c
Arg [241] : 22506c756d2050657266656374696f6e223a22233534343836353b3a23373439
Arg [242] : 6139323b3a236533653064383b3a23663764643866222c22507572706c652048
Arg [243] : 617a65223a22233466326137343b3a236437656666333b3a236633646664353b
Arg [244] : 3a23666637643764222c22476f6c64656e2048617276657374223a2223346234
Arg [245] : 3337323b3a236438646263633b3a236666656337303b3a23666134363366222c
Arg [246] : 22476c616d6f726f7573204e6967687473223a22233435333835363b3a233533
Arg [247] : 343862653b3a233862646466623b3a23663464326363222c2253756e666c6f77
Arg [248] : 6572204669656c6473223a22233643373138393b3a236464643731623b3a2366
Arg [249] : 30343033373b3a23643639663532222c22456c65637472696320566962657322
Arg [250] : 3a22236664333232663b3a236630636464373b3a233562303166373b3a233536
Arg [251] : 30433937222c22416d65746879737420447265616d73223a2223343633373461
Arg [252] : 3b3a236437353735303b3a236535653264643b3a23653465313532222c224f63
Arg [253] : 65616e69632046616e74617379223a22233462343635633b3a23346535396166
Arg [254] : 3b3a236465653364643b3a23656565303938222c224d696e7479204672657368
Arg [255] : 223a22233536356638613b3a233831653162313b3a236536653964363b3a2366
Arg [256] : 3337613661222c22576f6f646c616e6420547261696c223a2223623035393539
Arg [257] : 3b3a233465336164333b3a236638666265663b3a23373439613935222c224265
Arg [258] : 727279204372757368223a22233466333834663b3a233930643061653b3a2364
Arg [259] : 63643264303b3a23353536313738222c22537565646520436f6c6f72223a2223
Arg [260] : 3432333135323b3a233764386437653b3a233738363938333b3a236565386130
Arg [261] : 643b3a23633561663939222c22536c6174652047726179223a22233534353537
Arg [262] : 373b3a236430383033353b3a236465643964313b3a23383638633964222c2244
Arg [263] : 65657020507572706c65223a22233443334441343b3a236630323231663b3a23
Arg [264] : 6564653264313b3a23363165386664222c2253746f726d792053656173223a22
Arg [265] : 233539363637383b3a236566653438353b3a236536653365313b3a2361313961
Arg [266] : 6164222c225368696e79204469616d6f6e64223a22234237463146443b3a2339
Arg [267] : 45423843413b3a236332663666663b3a233544364637373b3a23643666666664
Arg [268] : 3b3a23633266396666222c4f6365616e69633a22233534383138653b3a236661
Arg [269] : 333937333b3a236664656636643b3a23646665396465222c2243686572727920
Arg [270] : 436f6c61223a22233533363438333b3a236564303432373b3a23663864626432
Arg [271] : 3b3a23353244304530222c224c656d6f6e2044726f70223a2223666666666666
Arg [272] : 3b3a236666663965393b3a236665666661383b3a236666666563653b3a236662
Arg [273] : 66666530222c2250696e6b20526f7365223a22234538323139353b3a23443245
Arg [274] : 374546222c596f67613a22233966633565383b3a233666383961323b3a236666
Arg [275] : 666666663b3a236262626262623b3a23343434343434222c5361707068697265
Arg [276] : 3a22233432343839453b3a23443036443632222c22426c756520496365223a22
Arg [277] : 233744363638363b3a23383545324645222c224d69646e6967687420426c7565
Arg [278] : 223a22233537313731303b3a23363134424633222c467563687369613a222344
Arg [279] : 39343938413b3a23343438443946222c456767706c616e743a22233545324538
Arg [280] : 383b3a23453243434238222c2243616e64792053746f7265223a222346303343
Arg [281] : 36393b3a234642444343373b3a234535343339433b3a23353436434339222c56
Arg [282] : 696e746167653a22234431433744313b3a236130386539303b3a236662346532
Arg [283] : 333b3a23346638616533222c4e696768746c6966653a22233433343435353b3a
Arg [284] : 233744383142383b3a234631343733463b3a23464641383133222c224a656c6c
Arg [285] : 79204265616e73223a22234632433630323b3a233531344643463b3a23344642
Arg [286] : 3942413b3a23463939303335222c5477696c696768743a22233545343739413b
Arg [287] : 3a23433444304432222c2247726179205363616c65223a22233532353235323b
Arg [288] : 3a233835383538353b3a236238623862383b3a23636363636363222c22426c75
Arg [289] : 65204d697374223a22233434353537373b3a233636434343433b3a2343434343
Arg [290] : 4343222c224d6964617320546f756368223a22236632613630323b3a23666164
Arg [291] : 3131643b3a23666666383733222c22506f6c6172206d6972616765223a222335
Arg [292] : 61393263343b3a23653236363238222c22426c756520536b79223a2223343235
Arg [293] : 3542333b3a23464245414542222c4d696e74793a22233643353935393b3a2345
Arg [294] : 37453844313b3a23413742454145222c22436f72616c2052656566223a222335
Arg [295] : 38343634363b3a233437414543423b3a233930656539303b3a23643534383438
Arg [296] : 222c2250696e6b204c656d6f6e616465223a22234639363136373b3a23464345
Arg [297] : 373744222c225377616d7020466f67223a22233463353536303b3a2361346330
Arg [298] : 63353b3a236339643864323b3a233864613039363b3a23353636313563222c22
Arg [299] : 4172637469632047617264656e223a22234634454446443b3a23343441303943
Arg [300] : 222c225265642056656c766574223a22233939303031313b3a23464346364635
Arg [301] : 222c2253696c766572204c696e696e67223a22233841414145353b3a23463346
Arg [302] : 334633222c4d6f6e6f3a22233434343434343b3a23636363636363222c506570
Arg [303] : 7065726d696e743a22234643454444413b3a23454534453334222c22436f6173
Arg [304] : 74616c204475736b223a22233561363461623b3a233931346636643b3a233666
Arg [305] : 39306137222c2259656c6c6f77205375626d6172696e65223a22233531393743
Arg [306] : 443b3a23464246384245222c224261627920426c7565223a2223414444384536
Arg [307] : 3b3a23343734374431222c2243686572727920426c6f73736f6d223a22233839
Arg [308] : 414245333b3a23454137333844222c466f726573743a22233732623336623b3a
Arg [309] : 236639633034643b3a236565663066323b3a236132393939653b3a2338343661
Arg [310] : 3661222c22486f742050696e6b223a22234543343439423b3a23393946343433
Arg [311] : 222c4d6f6368613a22233461343534613b3a234530413936443b3a2344444333
Arg [312] : 4135222c53756e62757273743a22234646413335313b3a234646424537423b3a
Arg [313] : 23454544393731222c224c6176656e646572204669656c6473223a2223384133
Arg [314] : 3037463b3a233739413744333b3a23363838334243222c536361726c65743a22
Arg [315] : 234343333133443b3a23463743354343222c5465727261636f7474613a222337
Arg [316] : 38333933373b3a234643373636413b3a23463141433838222c2250617374656c
Arg [317] : 206d6561646f7773223a22233932373763663b3a236234663863383b3a236666
Arg [318] : 66666432222c4f6c6976653a22233437396134393b3a23424143453844222c53
Arg [319] : 6167653a22233436423637393b3a23464346364635227d3b66756e6374696f6e
Arg [320] : 206f28742c652c6e297b72657475726e20742a286e2d65292b657d7661722061
Arg [321] : 3d7b736b6574636857696474683a3130302c73697a654265747765656e3a7b6d
Arg [322] : 696e3a302c6d61783a317d2c666978656453697a653a2e352c73747261746567
Arg [323] : 793a22222c70726e673a4d6174682e72616e646f6d2c696e69743a66756e6374
Arg [324] : 696f6e28742c652c6e2c692c72297b612e736b6574636857696474683d742c61
Arg [325] : 2e70726e673d652c612e73697a654265747765656e3d6e2c612e666978656453
Arg [326] : 697a653d692c612e73747261746567793d727d2c67657453697a653a66756e63
Arg [327] : 74696f6e2874297b6966282246756c6c2072616e646f6d223d3d3d612e737472
Arg [328] : 61746567792972657475726e206f28612e70726e6728292c612e73697a654265
Arg [329] : 747765656e2e6d696e2c612e73697a654265747765656e2e6d6178292a612e73
Arg [330] : 6b6574636857696474683b6966282252616e646f6d20756e697175652076616c
Arg [331] : 7565223d3d3d612e73747261746567792972657475726e20612e666978656453
Arg [332] : 697a652a612e736b6574636857696474683b6966282253696e77617665223d3d
Arg [333] : 3d612e7374726174656779297b76617220653d742f612e736b65746368576964
Arg [334] : 74683b72657475726e204d6174682e6d617828612e73697a654265747765656e
Arg [335] : 2e6d696e2a612e736b6574636857696474682c4d6174682e73696e28652a4d61
Arg [336] : 74682e5049292a612e736b6574636857696474682a612e73697a654265747765
Arg [337] : 656e2e6d6178297d7d7d3b66756e6374696f6e206328742c65297b766172206e
Arg [338] : 3d4d6174682e6174616e3228745b315d2e792d745b305d2e792c745b315d2e78
Arg [339] : 2d745b305d2e78292c693d4d6174682e6879706f7428745b305d2e782d745b31
Arg [340] : 5d2e782c745b305d2e792d745b315d2e79293b72657475726e7b783a745b305d
Arg [341] : 2e782b4d6174682e636f73286e292a692a652c793a745b305d2e792b4d617468
Arg [342] : 2e73696e286e292a692a657d7d766172206c3d66756e6374696f6e28742c652c
Arg [343] : 6e2c69297b666f722876617220723d655b305d2f322c733d655b315d2f322c6f
Arg [344] : 3d4d6174682e6879706f7428655b305d2c655b315d292c613d312e33332a6f2c
Arg [345] : 6c3d2e37352a6f2c683d2e37352a4d6174682e50492c663d5b7b783a722b4d61
Arg [346] : 74682e636f7328742d682f32292a612c793a732b4d6174682e73696e28742d68
Arg [347] : 2f32292a617d2c7b783a722b4d6174682e636f7328742b682f32292a612c793a
Arg [348] : 732b4d6174682e73696e28742b682f32292a617d2c7b783a722b4d6174682e63
Arg [349] : 6f7328742b682f32292a6c2c793a732b4d6174682e73696e28742b682f32292a
Arg [350] : 6c7d2c7b783a722b4d6174682e636f7328742d682f32292a6c2c793a732b4d61
Arg [351] : 74682e73696e28742d682f32292a6c7d5d2c643d5b665b305d2c665b335d5d2c
Arg [352] : 703d5b665b315d2c665b325d5d2c753d5b5d2c243d303b243c3d363b242b2b29
Arg [353] : 752e70757368285b6328642c363d3d3d243f242f363a28242b286e28292d2e35
Arg [354] : 29292f36292c6328702c363d3d3d243f242f363a28242b286e28292d2e352929
Arg [355] : 2f36295d293b766172205f3d5b5d3b666f7228243d303b243c752e6c656e6774
Arg [356] : 682d313b242b2b29666f722876617220793d5b5d2c783d313b783c755b245d2e
Arg [357] : 6c656e6774683b782b2b297b666f722876617220673d755b245d5b782d315d2c
Arg [358] : 763d755b242b315d5b782d315d2c773d313b773c3d32303b772b2b297b766172
Arg [359] : 20623d63285b755b245d5b782d315d2c755b245d5b785d5d2c772f3230292c6d
Arg [360] : 3d63285b755b242b315d5b782d315d2c755b242b315d5b785d5d2c772f323029
Arg [361] : 2c413d7b7074733a5b672c622c6d2c765d2c693a7b783a32302a782b772c793a
Arg [362] : 247d7d3b792e707573682841292c673d622c763d6d7d5f2e707573682879297d
Arg [363] : 72657475726e7b636c69703a662c74696c653a5f7d7d2c683d66756e6374696f
Arg [364] : 6e28742c652c6e2c69297b72657475726e7b7074733a5b745b655d5b6e5d2c74
Arg [365] : 5b655d5b6e2b315d2c745b652b315d5b6e2b312b695d2c745b652b315d5b6e2b
Arg [366] : 695d5d7d7d2c663d66756e6374696f6e28742c652c6e2c692c722c73297b6966
Arg [367] : 28693c6e2e6c656e6774682d322626723c6e5b692b315d2e6c656e6774682d31
Arg [368] : 2626723c6e5b692b735d2e6c656e6774682d322626722b732b313c6e5b695d2e
Arg [369] : 6c656e6774682d322626722b312b733c6e5b692b315d2e6c656e6774682d3126
Arg [370] : 26722b733e30297b766172206f2c612c6c2c662c642c702c752c242c5f2c792c
Arg [371] : 782c672c762c772c622c6d2c412c432c452c462c422c533d74286e5b695d5b72
Arg [372] : 5d2e782c6e5b695d5b725d2e79293b696628533e2e37352972657475726e5b68
Arg [373] : 286e2c692c722c73295d3b696628533c2e37352626533e2e352972657475726e
Arg [374] : 206528293e2e353f286f3d6e2c613d692c6c3d722c663d732c643d63285b6f5b
Arg [375] : 615d5b6c5d2c6f5b615d5b6c2b315d5d2c2e35292c703d63285b6f5b612b315d
Arg [376] : 5b6c2b665d2c6f5b612b315d5b6c2b312b665d5d2c2e35292c5b7b7074733a5b
Arg [377] : 6f5b615d5b6c5d2c642c702c6f5b612b315d5b6c2b665d5d7d2c7b7074733a5b
Arg [378] : 642c6f5b615d5b6c2b315d2c6f5b612b315d5b6c2b312b665d2c705d7d5d293a
Arg [379] : 28753d6e2c243d692c5f3d722c793d732c783d63285b755b245d5b5f5d2c755b
Arg [380] : 242b315d5b5f2b795d5d2c2e35292c673d63285b755b245d5b5f2b315d2c755b
Arg [381] : 242b315d5b5f2b312b795d5d2c2e35292c5b7b7074733a5b782c672c755b242b
Arg [382] : 315d5b5f2b312b795d2c755b242b315d5b5f2b795d5d7d2c7b7074733a5b755b
Arg [383] : 245d5b5f5d2c755b245d5b5f2b315d2c672c785d7d5d293b696628533c2e3526
Arg [384] : 26533e2e32352972657475726e20763d6e2c773d692c623d722c6d3d732c413d
Arg [385] : 63285b765b775d5b625d2c765b775d5b622b315d5d2c2e35292c433d63285b76
Arg [386] : 5b772b315d5b622b6d5d2c765b772b315d5b622b312b6d5d5d2c2e35292c453d
Arg [387] : 63285b765b775d5b625d2c765b772b315d5b622b6d5d5d2c2e35292c463d6328
Arg [388] : 5b765b775d5b622b315d2c765b772b315d5b622b312b6d5d5d2c2e35292c423d
Arg [389] : 63285b412c435d2c2e35292c5b7b7074733a5b452c422c432c765b772b315d5b
Arg [390] : 622b6d5d5d7d2c7b7074733a5b422c462c765b772b315d5b622b312b6d5d2c43
Arg [391] : 5d7d2c7b7074733a5b765b775d5b625d2c412c422c455d7d2c7b7074733a5b41
Arg [392] : 2c765b775d5b622b315d2c462c425d7d5d7d7d3b66756e6374696f6e20642874
Arg [393] : 297b666f722876617220653d302c6e3d302c693d302c723d742e6c656e677468
Arg [394] : 2c733d303b733c723b732b2b297b766172206f3d733d3d3d722d313f303a732b
Arg [395] : 312c613d745b735d2c633d745b6f5d2c6c3d612e782a632e792d632e782a612e
Arg [396] : 793b652b3d6c2c6e2b3d28612e782b632e78292a6c2c692b3d28612e792b632e
Arg [397] : 79292a6c7d76617220683d332a653b72657475726e7b783a6e2f682c793a692f
Arg [398] : 687d7d66756e6374696f6e207028742c65297b766f696420303d3d3d65262628
Arg [399] : 653d3132293b666f7228766172206e3d5b5d2c693d642874292c723d303b723c
Arg [400] : 742e6c656e6774683b722b2b297b76617220733d745b725d2c6f3d745b28722b
Arg [401] : 312925742e6c656e6774685d2c613d745b28722b322925742e6c656e6774685d
Arg [402] : 2c633d4d6174682e73717274284d6174682e706f77286f2e782d732e782c3229
Arg [403] : 2b4d6174682e706f77286f2e792d732e792c3229292c6c3d4d6174682e737172
Arg [404] : 74284d6174682e706f77286f2e782d612e782c32292b4d6174682e706f77286f
Arg [405] : 2e792d612e792c3229292c683d4d6174682e73717274284d6174682e706f7728
Arg [406] : 612e782d732e782c32292b4d6174682e706f7728612e792d732e792c3229292c
Arg [407] : 663d2d652f4d6174682e73696e284d6174682e61636f7328286c2a6c2b632a63
Arg [408] : 2d682a68292f28322a6c2a6329292f32292c703d4d6174682e6174616e32286f
Arg [409] : 2e792d692e792c6f2e782d692e78293b696628663c3d2d282e342a4d6174682e
Arg [410] : 73717274284d6174682e706f77286f2e782d692e782c32292b4d6174682e706f
Arg [411] : 77286f2e792d692e792c322929292972657475726e21313b6e2e70757368287b
Arg [412] : 783a6f2e782b4d6174682e636f732870292a662c793a6f2e792b4d6174682e73
Arg [413] : 696e2870292a667d297d72657475726e206e7d76617220753d66756e6374696f
Arg [414] : 6e28742c652c6e2c69297b76617220723d7b706f6c793a5b5d2c736861646f77
Arg [415] : 417265613a5b5d2c676c696e74417265613a5b5d2c66726f6e743a5b5d2c636c
Arg [416] : 69703a5b5d2c636f6c6f723a697d2c733d7028742e7074732c6e293b69662873
Arg [417] : 297b766172206f3d63285b735b305d2c735b325d5d2c2e35292c613d63285b73
Arg [418] : 5b325d2c735b335d5d2c2e35292c6c3d63285b735b315d2c735b325d5d2c2e35
Arg [419] : 293b722e706f6c792e70757368285b735b305d2c6c2c6f2c615d292c722e706f
Arg [420] : 6c792e70757368285b6f2c6c2c735b315d2c735b325d5d292c722e706f6c792e
Arg [421] : 70757368285b735b335d2c735b305d2c6f2c615d292c722e736861646f774172
Arg [422] : 65613d5b5b735b305d2c735b315d2c6c2c6f5d2c5b735b325d2c6c2c6f2c615d
Arg [423] : 5d7d72657475726e20727d2c243d66756e6374696f6e28742c652c6e2c692c72
Arg [424] : 2c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265613a5b5d
Arg [425] : 2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a5b5d2c63
Arg [426] : 6f6c6f723a737d2c613d5b5d2c633d7028742e7074732c6e293b69662863297b
Arg [427] : 666f7228766172206c3d4d6174682e6174616e3228742e7074735b335d2e792d
Arg [428] : 742e7074735b305d2e792c742e7074735b335d2e782d742e7074735b305d2e78
Arg [429] : 292c683d312b4d6174682e6365696c286528292a72292a6e2c663d4d6174682e
Arg [430] : 50492a28693f2e37353a312e3235292c643d632e6d61702866756e6374696f6e
Arg [431] : 2874297b72657475726e7b783a742e782b4d6174682e636f73286c2b66292a68
Arg [432] : 2c793a742e792b4d6174682e73696e286c2b66292a687d7d292c753d303b753c
Arg [433] : 632e6c656e6774683b752b2b29612e70757368285b742e7074735b28752b3129
Arg [434] : 25742e7074732e6c656e6774685d2c635b755d5d293b6f2e706f6c792e707573
Arg [435] : 682864292c6f2e706f6c792e70757368285b645b305d2c645b315d2c635b315d
Arg [436] : 2c635b305d5d292c6f2e706f6c792e70757368285b645b325d2c645b315d2c63
Arg [437] : 5b315d2c635b325d5d292c6f2e736861646f77417265613d5b5b645b325d2c64
Arg [438] : 5b335d2c635b335d2c635b325d5d5d2c6f2e66726f6e743d642c6f2e636c6970
Arg [439] : 3d5b645b305d2c645b315d2c635b315d2c635b325d2c635b335d2c645b335d5d
Arg [440] : 7d72657475726e206f7d2c5f3d66756e6374696f6e28742c652c6e2c69297b76
Arg [441] : 617220723d6428742e707473292c733d4d6174682e6174616e3228742e707473
Arg [442] : 5b305d2e792d742e7074735b335d2e792c742e7074735b305d2e782d742e7074
Arg [443] : 735b305d2e78292c6f3d4d6174682e50492a286e3f2e353a2e3235292c613d7b
Arg [444] : 783a722e782b4d6174682e636f7328732b6f292a652a286e3f2d313a31292c79
Arg [445] : 3a722e792b4d6174682e73696e28732b6f292a652a286e3f2d313a31297d3b72
Arg [446] : 657475726e7b706f6c793a5b5b742e7074735b325d2c742e7074735b315d2c61
Arg [447] : 5d5d2c736861646f77417265613a5b5b742e7074735b335d2c742e7074735b30
Arg [448] : 5d2c615d2c5b612c742e7074735b315d2c742e7074735b305d5d5d2c676c696e
Arg [449] : 74417265613a5b5b742e7074735b325d2c742e7074735b335d2c615d5d2c636c
Arg [450] : 69703a5b5d2c66726f6e743a5b5d2c636f6c6f723a697d7d2c793d66756e6374
Arg [451] : 696f6e28742c65297b766172206e3d21313b2223223d3d745b305d262628743d
Arg [452] : 742e736c6963652831292c6e3d2130293b76617220693d7061727365496e7428
Arg [453] : 742c3136292c723d28693e3e3136292b653b723e3235353f723d3235353a723c
Arg [454] : 30262628723d30293b76617220733d28693e3e3826323535292b653b733e3235
Arg [455] : 353f733d3235353a733c30262628733d30293b766172206f3d28323535266929
Arg [456] : 2b653b72657475726e206f3e3235353f6f3d3235353a6f3c302626286f3d3029
Arg [457] : 2c286e3f2223223a2222292b286f7c733c3c387c723c3c3136292e746f537472
Arg [458] : 696e67283136297d2c783d66756e6374696f6e28742c652c6e297b6966286e7c
Arg [459] : 7c323d3d3d617267756d656e74732e6c656e67746829666f722876617220692c
Arg [460] : 723d302c733d652e6c656e6774683b723c733b722b2b29216926267220696e20
Arg [461] : 657c7c28697c7c28693d41727261792e70726f746f747970652e736c6963652e
Arg [462] : 63616c6c28652c302c7229292c695b725d3d655b725d293b72657475726e2074
Arg [463] : 2e636f6e63617428697c7c41727261792e70726f746f747970652e736c696365
Arg [464] : 2e63616c6c286529297d2c673d66756e6374696f6e2874297b72657475726e5b
Arg [465] : 63285b745b315d2c745b325d5d2c2e35292c745b335d2c745b305d5d7d2c763d
Arg [466] : 66756e6374696f6e28297b72657475726e28763d4f626a6563742e6173736967
Arg [467] : 6e7c7c66756e6374696f6e2874297b666f722876617220652c6e3d312c693d61
Arg [468] : 7267756d656e74732e6c656e6774683b6e3c693b6e2b2b29666f722876617220
Arg [469] : 7220696e20653d617267756d656e74735b6e5d294f626a6563742e70726f746f
Arg [470] : 747970652e6861734f776e50726f70657274792e63616c6c28652c7229262628
Arg [471] : 745b725d3d655b725d293b72657475726e20747d292e6170706c792874686973
Arg [472] : 2c617267756d656e7473297d2c773d66756e6374696f6e2874297b7265747572
Arg [473] : 6e204d6174682e726f756e64283165352a74292f3165357d2c623d7b736d616c
Arg [474] : 6c3a5b2e30392c2e315d2c6d656469756d3a5b2e312c2e31325d2c6c61726765
Arg [475] : 3a5b2e31342c2e31365d2c687567653a5b2e31382c2e32325d7d3b66756e6374
Arg [476] : 696f6e206d28742c65297b72657475726e20745b4d6174682e666c6f6f722865
Arg [477] : 2a742e6c656e677468295d7d66756e6374696f6e204128742c652c6e297b7265
Arg [478] : 7475726e206e2a28652d74292b747d76617220432c453d38302c463d6d285b22
Arg [479] : 46756c6c2072616e646f6d222c2252616e646f6d20756e697175652076616c75
Arg [480] : 65222c2253696e77617665225d2c667872616e642829292c423d4d6174682e66
Arg [481] : 6c6f6f7228412831322c34382c667872616e64282929292c533d77284128312c
Arg [482] : 31362c667872616e64282929292c6b3d772841282e352c312c667872616e6428
Arg [483] : 2929292c443d6d285b2272616e646f6d222c226c657373206469766973696f6e
Arg [484] : 206f6e207468652063656e746572222c226d6f7265206469766973696f6e206f
Arg [485] : 6e207468652063656e746572225d2c667872616e642829292c503d6d284f626a
Arg [486] : 6563742e6b6579732862292c667872616e642829292c7a3d7b6d696e3a625b50
Arg [487] : 5d5b305d2c6d61783a625b505d5b315d7d2c493d77286f28667872616e642829
Arg [488] : 2c7a2e6d696e2c7a2e6d617829292c4c3d2e353e667872616e6428293f313a30
Arg [489] : 2c543d6d285b2272616e646f6d222c2273696e676c65225d2c667872616e6428
Arg [490] : 29292c4d3d77284128362c31302c667872616e64282929292c4e3d4d6174682e
Arg [491] : 6365696c284128302c322c667872616e64282929292c563d6d284f626a656374
Arg [492] : 2e6b6579732873292c667872616e642829292c713d735b565d2e73706c697428
Arg [493] : 223b3a22292c473d2e353e667872616e6428293b77696e646f772e2466786861
Arg [494] : 736846656174757265733d7b22426f782064656e73697479223a28433d6b293c
Arg [495] : 2e3632353f22737061727365223a433c2e37353f22736361747465726564223a
Arg [496] : 433c2e3837353f2264656e7365223a22636f6e676573746564222c2243656c6c
Arg [497] : 207769647468223a502c2253706c6974206261736564223a442c22426f782064
Arg [498] : 65707468223a66756e6374696f6e2874297b666f722876617220653d5b312c35
Arg [499] : 2c392c31332c31365d2c6e3d5b227368616c6c6f77222c226d6f646572617465
Arg [500] : 222c2264656570222c2270726f666f756e64225d2c693d303b693c652e6c656e
Arg [501] : 6774682d313b692b2b29696628743e3d655b695d2626743c655b692b315d2972
Arg [502] : 657475726e206e5b695d3b72657475726e206e5b6e2e6c656e6774682d315d7d
Arg [503] : 2853292c466163696e673a473f227269676874223a226c656674222c50616c65
Arg [504] : 7474653a537472696e672856297d3b76617220523d5b313932302c313932305d
Arg [505] : 2c553d7b6e616d653a224b616c6c6178222c73697a653a522c646961676f6e61
Arg [506] : 6c3a4d6174682e6879706f7428525b305d2c525b315d292f322c73656374696f
Arg [507] : 6e53697a653a612c626f7865733a5b5d2c6c696e65733a5b5d2c736861706573
Arg [508] : 3a5b5d2c66723a302c7368617065447261776e3a302c626c6f636b4279467261
Arg [509] : 6d653a302c73706c697454696c653a66756e6374696f6e28742c65297b696628
Arg [510] : 2272616e646f6d223d3d3d442972657475726e202e32352b2e352a667872616e
Arg [511] : 6428293b766172206e3d4d6174682e6879706f7428742d525b305d2f322c652d
Arg [512] : 525b315d2f32293b72657475726e226d6f7265206469766973696f6e206f6e20
Arg [513] : 7468652063656e746572223d3d3d443f2e32352b6e2f552e646961676f6e616c
Arg [514] : 3a312e32352d6e2f552e646961676f6e616c7d2c73636872696e6b54696c653a
Arg [515] : 66756e6374696f6e28297b72657475726e2272616e646f6d223d3d3d543f7728
Arg [516] : 6f28667872616e6428292c362c313029293a4d7d2c647261773a66756e637469
Arg [517] : 6f6e28297b76617220743d746869733b746869732e73656374696f6e53697a65
Arg [518] : 2e696e697428746869732e73697a655b305d2c667872616e642c7a2c492c4629
Arg [519] : 2c722e696e697428746869732e73697a655b305d2c746869732e73697a655b31
Arg [520] : 5d2c5b5b452c746869732e73697a655b305d2d455d2c5b452c746869732e7369
Arg [521] : 7a655b315d2d455d5d2c2223333333222c22776869746522292c722e696e7365
Arg [522] : 727428646f63756d656e742e626f6479293b76617220653d646f63756d656e74
Arg [523] : 2e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e
Arg [524] : 6f72672f323030302f737667222c226465667322292c6e3d646f63756d656e74
Arg [525] : 2e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e
Arg [526] : 6f72672f323030302f737667222c227374796c6522293b6e2e696e6e65724854
Arg [527] : 4d4c3d225c6e726563742e6261636b67726f756e64207b2066696c6c3a20222e
Arg [528] : 636f6e63617428715b305d2c2232363b207d5c6e70617468207b207374726f6b
Arg [529] : 653a2072676228302c302c302c30293b207d5c6e706174682e74696c65207b20
Arg [530] : 66696c6c3a207267626128302c20302c20302c2030293b207374726f6b653a20
Arg [531] : 22292e636f6e636174287928715b305d2c3430292c223b207374726f6b652d77
Arg [532] : 696474683a20333b207d5c6e22292c712e666f72456163682866756e6374696f
Arg [533] : 6e28742c65297b72657475726e206e2e696e6e657248544d4c2b3d225c6e7061
Arg [534] : 74682e636f6c2d222e636f6e63617428652c227b2066696c6c3a2022292e636f
Arg [535] : 6e63617428742c223b207d5c6e706174682e636f6c2d22292e636f6e63617428
Arg [536] : 652c222d676c6e74207b2066696c6c3a2022292e636f6e636174287928742c32
Arg [537] : 30292c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d
Arg [538] : 736864772d30207b2066696c6c3a2022292e636f6e636174287928742c2d3235
Arg [539] : 292c223b207d5c6e706174682e636f6c2d22292e636f6e63617428652c222d73
Arg [540] : 6864772d31207b2066696c6c3a2022292e636f6e636174287928742c2d353029
Arg [541] : 2c223b207d22297d292c652e617070656e644368696c64286e293b7661722069
Arg [542] : 3d646f63756d656e742e637265617465456c656d656e744e532822687474703a
Arg [543] : 2f2f7777772e77332e6f72672f323030302f737667222c226c696e6561724772
Arg [544] : 616469656e7422293b692e73657441747472696275746528226964222c226261
Arg [545] : 636b4772616469656e7422292c692e7365744174747269627574652822783122
Arg [546] : 2c223022292c692e73657441747472696275746528227832222c223022292c69
Arg [547] : 2e73657441747472696275746528227931222c223022292c692e736574417474
Arg [548] : 72696275746528227932222c223122292c692e696e6e657248544d4c3d275c6e
Arg [549] : 20202020202020203c73746f70206f66667365743d223025222073746f702d63
Arg [550] : 6f6c6f723d22272e636f6e636174287928715b305d2c2d3130292c27222f3e5c
Arg [551] : 6e20202020202020203c73746f70206f66667365743d2231303025222073746f
Arg [552] : 702d636f6c6f723d2227292e636f6e636174287928715b305d2c2d3230292c27
Arg [553] : 222f3e5c6e202020202020202027292c652e617070656e644368696c64286929
Arg [554] : 2c722e5f2e617070656e644368696c642865293b76617220733d646f63756d65
Arg [555] : 6e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77
Arg [556] : 332e6f72672f323030302f737667222c227265637422293b732e736574417474
Arg [557] : 72696275746528227769647468222c22222e636f6e63617428746869732e7369
Arg [558] : 7a655b305d29292c732e7365744174747269627574652822686569676874222c
Arg [559] : 22222e636f6e63617428746869732e73697a655b315d29292c732e636c617373
Arg [560] : 4c6973742e61646428226261636b67726f756e6422292c722e5f2e617070656e
Arg [561] : 644368696c642873293b76617220613d646f63756d656e742e63726561746545
Arg [562] : 6c656d656e744e532822687474703a2f2f7777772e77332e6f72672f32303030
Arg [563] : 2f737667222c226722293b612e73657441747472696275746528227472616e73
Arg [564] : 666f726d222c227472616e736c61746528222e636f6e63617428452c222c2022
Arg [565] : 292e636f6e63617428452c22292229293b76617220633d646f63756d656e742e
Arg [566] : 637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f
Arg [567] : 72672f323030302f737667222c227265637422293b632e736574417474726962
Arg [568] : 75746528227769647468222c22222e636f6e63617428746869732e73697a655b
Arg [569] : 305d2d31363029292c632e736574417474726962757465282268656967687422
Arg [570] : 2c22222e636f6e63617428746869732e73697a655b315d2d31363029292c632e
Arg [571] : 736574417474726962757465282266696c6c222c2275726c28236261636b4772
Arg [572] : 616469656e742922292c612e617070656e644368696c642863292c722e5f2e61
Arg [573] : 7070656e644368696c642861292c722e63726561746547726f75702822707322
Arg [574] : 2c226e6f6e65222c226e6f6e6522293b76617220683d66756e6374696f6e2874
Arg [575] : 2c652c6e2c69297b666f722876617220722c733d5b5d2c6f3d303b6f3c742e6c
Arg [576] : 656e6774682d313b6f2b2b297b735b6f5d3d5b5d3b76617220613d6f25323d3d
Arg [577] : 303f693a303b696628745b6f5d2e6c656e6774683e3129666f72287661722063
Arg [578] : 3d303b633c745b6f5d2e6c656e6774683b632b2b2928723d735b6f5d292e7075
Arg [579] : 73682e6170706c7928722c6628652c6e2c742c6f2c632c6129297d7265747572
Arg [580] : 6e20737d2866756e6374696f6e28742c652c6e2c692c722c73297b666f722876
Arg [581] : 617220613d5b5d2c633d4d6174682e6879706f7428655b305d5b315d2d655b30
Arg [582] : 5d5b305d2c655b315d5b315d2d655b315d5b305d292c6c3d632f28742d31292c
Arg [583] : 683d303b683c743b682b2b29696628615b685d3d5b5d2c6e297b666f72287661
Arg [584] : 7220663d5b2d4d6174682e50492f31302c2d4d6174682e50492f31365d2c643d
Arg [585] : 655b305d5b305d2c703d632d6c2a28682b31293b643c655b305d5b315d262670
Arg [586] : 3e655b315d5b305d2626703c655b315d5b315d3b297b76617220753d69286429
Arg [587] : 2c243d6f287228292c665b305d2c665b315d292c5f3d642b4d6174682e636f73
Arg [588] : 2824292a752c793d702b4d6174682e73696e2824292a753b615b685d2e707573
Arg [589] : 68287b783a642c793a707d292c643d5f2c703d797d615b685d2e70757368287b
Arg [590] : 783a642c793a707d297d656c73657b666f7228663d5b4d6174682e50492b4d61
Arg [591] : 74682e50492f31362c4d6174682e50492b4d6174682e50492f31305d2c643d65
Arg [592] : 5b305d5b315d2c703d632d6c2a28682b31293b643e655b305d5b305d2626703e
Arg [593] : 655b315d5b305d2626703c655b315d5b315d3b29753d692864292c243d6f2872
Arg [594] : 28292c665b305d2c665b315d292c5f3d642b4d6174682e636f732824292a752c
Arg [595] : 793d702b4d6174682e73696e2824292a752c615b685d2e70757368287b783a64
Arg [596] : 2c793a707d292c643d5f2c703d793b615b685d2e70757368287b783a642c793a
Arg [597] : 707d297d72657475726e20617d28422c5b5b2d282e352a746869732e73697a65
Arg [598] : 5b305d292c312e352a746869732e73697a655b305d5d2c5b2d282e31352a7468
Arg [599] : 69732e73697a655b315d292c312e352a746869732e73697a655b315d5d5d2c47
Arg [600] : 2c746869732e73656374696f6e53697a652e67657453697a652c667872616e64
Arg [601] : 292c746869732e73706c697454696c652c667872616e642c4c292c703d4d6174
Arg [602] : 682e50492a667872616e6428292c783d5b5d3b4e3e302626782e70757368286c
Arg [603] : 28702c746869732e73697a652c667872616e6429292c4e3e312626782e707573
Arg [604] : 68286c28702b4d6174682e50492a282e352b2e352a667872616e642829292c74
Arg [605] : 6869732e73697a652c667872616e6429292c682e666f72456163682866756e63
Arg [606] : 74696f6e2865297b28653d652e726576657273652829292e666f724561636828
Arg [607] : 66756e6374696f6e2865297b766172206e3b667872616e6428293c6b2626282e
Arg [608] : 32353e667872616e6428293f286e3d7528652c667872616e642c742e73636872
Arg [609] : 696e6b54696c6528292c3129292e706f6c792e6c656e6774683e302626742e64
Arg [610] : 726177426f78286e293a286e3d2428652c667872616e642c742e73636872696e
Arg [611] : 6b54696c6528292c472c532c3129292e636c697026266e2e706f6c792e6c656e
Arg [612] : 6774683e302626742e626f7865732e70757368286e29292c742e64726177536f
Arg [613] : 6c696428652e7074732c2274696c6522297d297d292c746869732e626f786573
Arg [614] : 2e666f72456163682866756e6374696f6e2865297b72657475726e20742e6472
Arg [615] : 6177426f782865297d292c746869732e626f7865733d5b5d2c782e666f724561
Arg [616] : 63682866756e6374696f6e2865297b742e64726177536f6c696428652e636c69
Arg [617] : 702c22636f6c2d3022292c652e74696c652e666f72456163682866756e637469
Arg [618] : 6f6e286e2c69297b6e2e666f72456163682866756e6374696f6e286e297b6966
Arg [619] : 28693c652e74696c652e6c656e6774682d31297b76617220722c732c6f2c613d
Arg [620] : 28723d6e2c733d6428722e707473292c6f3d722e7074732e6d61702866756e63
Arg [621] : 74696f6e2874297b72657475726e20762876287b7d2c74292c7b616e676c653a
Arg [622] : 4d6174682e6174616e3228742e792d732e792c742e782d732e78297d297d292e
Arg [623] : 736f72742866756e6374696f6e28742c65297b72657475726e20742e616e676c
Arg [624] : 652d652e616e676c657d292e6d61702866756e6374696f6e2874297b72657475
Arg [625] : 726e7b783a742e782c793a742e797d7d292c722e7074733d5b6f5b325d2c6f5b
Arg [626] : 335d2c6f5b305d2c6f5b315d5d2c72293b6966282e353e667872616e64282929
Arg [627] : 7b6966282e353e667872616e642829297b76617220633d7528612c667872616e
Arg [628] : 642c742e73636872696e6b54696c6528292c31293b632e706f6c792e6c656e67
Arg [629] : 74683e312626742e64726177426f782863297d656c73657b766172206c3d5f28
Arg [630] : 612c532c472c31293b6c2e706f6c792e6c656e6774683e312626742e64726177
Arg [631] : 426f78286c297d7d656c736520742e64726177536f6c6964286e2e7074732c22
Arg [632] : 74696c6522297d656c736520742e64726177536f6c6964286e2e7074732c2274
Arg [633] : 696c6522297d297d297d292c746869732e626f7865732e666f72456163682866
Arg [634] : 756e6374696f6e2865297b72657475726e20742e64726177426f782865297d29
Arg [635] : 2c746869732e626c6f636b42794672616d653d746869732e7368617065732e6c
Arg [636] : 656e6774682f3435302c746869732e616e696d28297d2c616e696d3a66756e63
Arg [637] : 74696f6e28297b696628552e7368617065447261776e3c552e7368617065732e
Arg [638] : 6c656e6774682d31297b666f722876617220743d303b743c4d6174682e6d696e
Arg [639] : 28552e626c6f636b42794672616d652c552e7368617065732e6c656e6774682d
Arg [640] : 28552e7368617065447261776e2b3129293b742b2b292166756e6374696f6e28
Arg [641] : 74297b76617220653d552e7368617065735b552e7368617065447261776e5d3b
Arg [642] : 652e662e6d61702866756e6374696f6e2874297b722e647261774c696e652874
Arg [643] : 2e6d61702866756e6374696f6e2874297b72657475726e5b4d6174682e726f75
Arg [644] : 6e6428742e78292c4d6174682e726f756e6428742e79295d7d292c21302c652e
Arg [645] : 632c22707322297d292c552e7368617065447261776e2b2b7d28293b552e6672
Arg [646] : 3d77696e646f772e72657175657374416e696d6174696f6e4672616d6528552e
Arg [647] : 616e696d297d656c73652077696e646f772e63616e63656c416e696d6174696f
Arg [648] : 6e4672616d6528552e6672297d2c64726177536f6c69643a66756e6374696f6e
Arg [649] : 28652c6e297b76617220693d28302c742e696e74657273656374696f6e292865
Arg [650] : 2c5b7b783a452c793a457d2c7b783a746869732e73697a655b305d2d452c793a
Arg [651] : 457d2c7b783a746869732e73697a655b305d2d452c793a746869732e73697a65
Arg [652] : 5b315d2d457d2c7b783a452c793a746869732e73697a655b315d2d457d5d293b
Arg [653] : 69262628226e756d626572223d3d747970656f6620695b305d5b305d26262869
Arg [654] : 3d5b695d292c746869732e7368617065732e70757368287b663a692c633a6e7d
Arg [655] : 29297d2c64726177426f783a66756e6374696f6e2874297b76617220653d7468
Arg [656] : 69732c6e3d742e636f6c6f723b696628742e706f6c792e6c656e6774683e3026
Arg [657] : 26742e706f6c792e6d61702866756e6374696f6e2874297b742e6c656e677468
Arg [658] : 3e302626652e64726177536f6c696428742c22636f6c2d222e636f6e63617428
Arg [659] : 6e29297d292c766f69642030213d3d742e736861646f77417265612626742e73
Arg [660] : 6861646f77417265612e6c656e6774683e302626742e736861646f7741726561
Arg [661] : 2e666f72456163682866756e6374696f6e28742c69297b742e6c656e6774683e
Arg [662] : 302626652e64726177536f6c696428742c22636f6c2d222e636f6e636174286e
Arg [663] : 2c222d736864772d22292e636f6e636174286929297d292c766f69642030213d
Arg [664] : 3d742e676c696e74417265612626742e676c696e74417265612e6c656e677468
Arg [665] : 3e302626742e676c696e74417265612e666f72456163682866756e6374696f6e
Arg [666] : 2874297b742e6c656e6774683e302626652e64726177536f6c696428742c2263
Arg [667] : 6f6c2d222e636f6e636174286e2c222d676c6e742229297d292c742e66726f6e
Arg [668] : 742e6c656e6774683e31297b746869732e64726177536f6c696428742e66726f
Arg [669] : 6e742c22636f6c2d222e636f6e636174286e29293b76617220692c723d667872
Arg [670] : 616e6428292c733d7b7074733a5b742e66726f6e745b335d2c742e66726f6e74
Arg [671] : 5b305d2c742e66726f6e745b315d2c742e66726f6e745b325d5d7d2c6f3d2874
Arg [672] : 2e636f6c6f722b312925712e6c656e6774683b696628723c2e3134297b766172
Arg [673] : 20613d7528732c667872616e642c746869732e73636872696e6b54696c652829
Arg [674] : 2c6f293b612e706f6c792e6c656e6774683e302626746869732e64726177426f
Arg [675] : 782861297d656c736520696628723c2e32382928693d2428732c667872616e64
Arg [676] : 2c746869732e73636872696e6b54696c6528292c472c532c6f29292e66726f6e
Arg [677] : 742e6c656e6774683e312626746869732e64726177536f6c696428692e66726f
Arg [678] : 6e742c22636f6c2d222e636f6e636174286e29292c692e706f6c792e6c656e67
Arg [679] : 74683e302626746869732e64726177426f782869293b656c736520696628723c
Arg [680] : 2e3432297b766172206c3d5f28732c532c472c742e636f6c6f72293b6c2e706f
Arg [681] : 6c792e6c656e6774683e302626746869732e64726177426f78286c297d656c73
Arg [682] : 6520696628723c2e3537297b76617220683d66756e6374696f6e28742c652c6e
Arg [683] : 2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77417265
Arg [684] : 613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f6e743a
Arg [685] : 5b5d2c636f6c6f723a737d2c613d7028742e7074732c69293b69662861297b76
Arg [686] : 6172206c3d672861292c683d63285b6c5b305d2c6c5b315d5d2c2e35292c663d
Arg [687] : 63285b6c5b325d2c685d2c2e35292c643d5b63285b6c5b305d2c6c5b315d5d2c
Arg [688] : 2e3235292c63285b6c5b305d2c6c5b315d5d2c2e3735295d3b6f2e706f6c793d
Arg [689] : 5b6c5d2c6f2e736861646f77417265613d5b5b6c5b305d2c645b305d2c662c6c
Arg [690] : 5b325d5d2c78285b665d2c642c2130295d7d72657475726e206f7d28732c302c
Arg [691] : 667872616e642c746869732e73636872696e6b54696c6528292c302c6f293b68
Arg [692] : 2e706f6c792e6c656e6774683e302626746869732e64726177426f782868297d
Arg [693] : 656c736520696628723c2e3731297b76617220663d66756e6374696f6e28742c
Arg [694] : 652c6e2c692c722c73297b766172206f3d7b706f6c793a5b5d2c736861646f77
Arg [695] : 417265613a5b5d2c676c696e74417265613a5b5d2c636c69703a5b5d2c66726f
Arg [696] : 6e743a5b5d2c636f6c6f723a737d2c613d7028742e7074732c69293b69662861
Arg [697] : 297b76617220633d4d6174682e6174616e3228742e7074735b335d2e792d742e
Arg [698] : 7074735b305d2e792c742e7074735b335d2e782d742e7074735b305d2e78292c
Arg [699] : 6c3d312b4d6174682e6365696c286e28292a65292a692c683d4d6174682e5049
Arg [700] : 2a28723f2e37353a312e3235292c663d672861292c643d662e6d61702866756e
Arg [701] : 6374696f6e2874297b72657475726e7b783a742e782b4d6174682e636f732863
Arg [702] : 2b68292a6c2c793a742e792b4d6174682e73696e28632b68292a6c7d7d293b6f
Arg [703] : 2e706f6c793d5b642c5b665b305d2c645b305d2c645b325d2c665b325d5d5d2c
Arg [704] : 6f2e736861646f77417265613d5b5b665b305d2c665b315d2c645b315d2c645b
Arg [705] : 305d5d5d7d72657475726e206f7d28732c532c667872616e642c746869732e73
Arg [706] : 636872696e6b54696c6528292c472c6f293b662e706f6c792e6c656e6774683e
Arg [707] : 302626746869732e64726177426f782866297d656c736528693d2428732c6678
Arg [708] : 72616e642c746869732e73636872696e6b54696c6528292c472c532c6f29292e
Arg [709] : 66726f6e742e6c656e6774683e312626746869732e64726177536f6c69642869
Arg [710] : 2e66726f6e742c22636f6c2d222e636f6e636174286e29292c692e706f6c792e
Arg [711] : 6c656e6774683e302626746869732e64726177426f782869297d7d2c646f776e
Arg [712] : 6c6f61645356473a66756e6374696f6e2874297b722e646f776e6c6f61642874
Arg [713] : 297d7d3b552e6472617728292c722e5f2e6164644576656e744c697374656e65
Arg [714] : 722822636c69636b222c66756e6374696f6e2874297b552e7368617065447261
Arg [715] : 776e3d302c722e636c65617247726f75702822707322292c552e626c6f636b42
Arg [716] : 794672616d653d552e7368617065732e6c656e6774682f3930302c552e66723d
Arg [717] : 77696e646f772e72657175657374416e696d6174696f6e4672616d6528552e61
Arg [718] : 6e696d297d292c646f63756d656e742e6164644576656e744c697374656e6572
Arg [719] : 28226b65797072657373222c66756e6374696f6e2874297b5b2244222c226422
Arg [720] : 5d2e696e636c7564657328742e6b6579292626552e646f776e6c6f6164535647
Arg [721] : 28224b616c6c6178202d20222e636f6e63617428562c22202d204e69636f6c61
Arg [722] : 73204c656272756e2229297d297d2928297d2928293b3c2f7363726970743e3c
Arg [723] : 2f626f64793e3c2f68746d6c3e00000000000000000000000000000000000000
Arg [724] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [725] : 697066733a2f2f626166796265696275326c36736261356d6d6b767673656867
Arg [726] : 67626968616d686b3563773671696d6a6d647a79706a79376432796570677a6b
Arg [727] : 686d2f0000000000000000000000000000000000000000000000000000000000


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.