ETH Price: $2,712.78 (+2.98%)

Token

MutantCandy (MutantCandy)
 

Overview

Max Total Supply

34 MutantCandy

Holders

22

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MutantCandy
0x49c999198ae468abd3ff9de0a4ffe538930abd09
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:
MutantCandy

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 10 of 13: MutantCandy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./ERC721A.sol";
import "./Strings.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";
import "./IERC165.sol";
import "./IERC721.sol";
import "./IERC721Enumerable.sol";
import "./IERC721Metadata.sol";
import "./IERC721Receiver.sol";
interface ContractInterface {
    function ownerOf(uint256 tokenId) external payable returns(address);
    
}

contract MutantCandy is Ownable, ERC721A, ReentrancyGuard {
  uint256 public immutable maxPer;
  bool isStart = false;
  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_

  ) ERC721A("MutantCandy", "MutantCandy", maxBatchSize_, collectionSize_) {
    maxPer = maxBatchSize_;
  }
  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
  uint256 price = 6800000000000000;

  function publicSaleMint(uint8 quantity)
    external
    payable
    callerIsUser
  {  
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    require(
      numberMinted(msg.sender) + quantity <= maxPer,
      "can not mint this many"
    );
    uint256 totalprice;
    if(numberMinted(msg.sender)<1){
      totalprice = (quantity - 1) * price;
    }else{
      totalprice = quantity  * price;
    }
    _safeMint(msg.sender, quantity);
    refundIfOver(totalprice);
  }

  function refundIfOver(uint256 cost) private {
    require(msg.value >= cost, "Need to send more ETH.");
    if (msg.value > cost) {
      payable(msg.sender).transfer(msg.value - cost);
  }
  }
  // // metadata URI
  string private _baseTokenURI;

 
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }
 
  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

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



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

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

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 2 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 4 of 13: ERC721A.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./IERC721Enumerable.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";
import "./Ownable.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable,
    Ownable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
        bool burned;
    }
    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
        uint128 numberBurned;
    }

    uint256 private currentIndex = 1;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    uint256 internal _burnCounter;

    error TransferCallerNotOwnerNorApproved();
    error MintToZeroAddress();
    error MintZeroQuantity();
    error TransferToNonERC721ReceiverImplementer();
    error TransferFromIncorrectOwner();
    error TransferToZeroAddress();

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    //
    string private baseExtension = ".json";
 
    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) private _ownerships;

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

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

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    //Mapping from tokenId to burn address
    mapping(uint256 => address) burnedAddress;
    address burnContract;

    /**
     * @dev
     * `maxBatchSize` refers to how much a minter can mint at a time.
     * `collectionSize_` refers to how many tokens are in the collection.
     */
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }


    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }
    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return currentIndex - _burnCounter - _startTokenId();
        }
    }
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return currentIndex - _startTokenId();
        }
    }

    function setBurnContract(address _burnContract) public onlyOwner{
        burnContract = _burnContract;
    } 
    function isBurnContract() internal view returns(bool){
        return _msgSender() == burnContract;
    }
    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < currentIndex , "ERC721A: global index out of bounds");
        return index;
    }
    
    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(
            index <= balanceOf(owner),
            "ERC721A: owner index out of bounds"
        );
        uint256 numMintedSoFar = currentIndex - 1;
        uint256 tokenIdsIdx = 1;
        address currOwnershipAddr = address(0);
        for (uint256 i = 1; i <= numMintedSoFar; i++) {
          TokenOwnership memory ownership = _ownerships[i];
          if(ownership.burned == false){
            if (ownership.addr != address(0) ) 
            {
            currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) 
            {
                if (tokenIdsIdx == index) {
                  return i;
                }
              tokenIdsIdx++;
            }
          }
            
        }
        revert("ERC721A: unable to get token of owner by index");
    }

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

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

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

    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        
            require(
                _exists(tokenId),
                "ERC721Metadata: URI query for nonexistent token"
            );
            require(
                tokenId != 0,
                "ERC721Metadata: URI query for nonexistent token"
            );
            string memory baseURI = _baseURI();
            return
                bytes(baseURI).length > 0
                    ? string(
                        abi.encodePacked(
                            baseURI,
                            tokenId.toString(),
                            baseExtension
                        )
                    )
                    : "";
        
    }

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

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

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

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - there must be `quantity` tokens remaining unminted in the total collection.
     * - `to` cannot be the zero address.
     * - `quantity` cannot be larger than the max batch size.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

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

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (
                        !_checkContractOnERC721Received(
                            address(0),
                            to,
                            updatedIndex++,
                            _data
                        )
                    ) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function burn(uint256 tokenId) external virtual {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        address from = prevOwnership.addr;


        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender() || isBurnContract()) ;
        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();

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

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

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

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }
        function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

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

    uint256 public nextOwnerToExplicitlySet = 0;

    /**
     * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
     */


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

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

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

File 5 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 6 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 7 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 8 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 9 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 11 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 12 of 13: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

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

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","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":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quantity","type":"uint8"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnContract","type":"address"}],"name":"setBurnContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600180556040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506005908051906020019062000055929190620002f8565b506000600c556000600e60006101000a81548160ff0219169083151502179055506618289060790000600f553480156200008e57600080fd5b5060405162004f9a38038062004f9a8339818101604052810190620000b49190620003bf565b6040518060400160405280600b81526020017f4d7574616e7443616e64790000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f4d7574616e7443616e6479000000000000000000000000000000000000000000815250838362000142620001366200022c60201b60201c565b6200023460201b60201c565b6000811162000188576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017f9062000476565b60405180910390fd5b60008211620001ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c59062000454565b60405180910390fd5b8360039080519060200190620001e6929190620002f8565b508260049080519060200190620001ff929190620002f8565b508160a081815250508060808181525050505050506001600d819055508160c081815250505050620005d5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200030690620004b3565b90600052602060002090601f0160209004810192826200032a576000855562000376565b82601f106200034557805160ff191683800117855562000376565b8280016001018555821562000376579182015b828111156200037557825182559160200191906001019062000358565b5b50905062000385919062000389565b5090565b5b80821115620003a45760008160009055506001016200038a565b5090565b600081519050620003b981620005bb565b92915050565b60008060408385031215620003d957620003d862000518565b5b6000620003e985828601620003a8565b9250506020620003fc85828601620003a8565b9150509250929050565b60006200041560278362000498565b915062000422826200051d565b604082019050919050565b60006200043c602e8362000498565b915062000449826200056c565b604082019050919050565b600060208201905081810360008301526200046f8162000406565b9050919050565b6000602082019050818103600083015262000491816200042d565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004cc57607f821691505b60208210811415620004e357620004e2620004e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005c681620004a9565b8114620005d257600080fd5b50565b60805160a05160c0516149876200061360003960008181610a6e015261196001526000818161238301526123ac015260006118e801526149876000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec578063b88d4fde1161008a578063d7224ba011610064578063d7224ba01461060d578063dc33e68114610638578063e985e9c514610675578063f2fde38b146106b2576101b7565b8063b88d4fde1461058b578063c76df80e146105b4578063c87b56dd146105d0576101b7565b80639231ab2a116100c65780639231ab2a146104e357806395d89b4114610520578063a22cb4651461054b578063ac44600214610574576101b7565b806370a0823114610464578063715018a6146104a15780638da5cb5b146104b8576101b7565b80632f745c591161015957806342966c681161013357806342966c68146103985780634f6ccce7146103c157806355f804b3146103fe5780636352211e14610427576101b7565b80632f745c591461030957806337beafe01461034657806342842e0e1461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631c53f256146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613515565b6106db565b6040516101f09190613b83565b60405180910390f35b34801561020557600080fd5b5061020e610825565b60405161021b9190613b9e565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906135bc565b6108b7565b6040516102589190613b1c565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906134d5565b61093c565b005b34801561029657600080fd5b5061029f610a55565b6040516102ac9190613e7b565b60405180910390f35b3480156102c157600080fd5b506102ca610a6c565b6040516102d79190613e7b565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906133bf565b610a90565b005b34801561031557600080fd5b50610330600480360381019061032b91906134d5565b610aa0565b60405161033d9190613e7b565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613352565b610cd9565b005b34801561037b57600080fd5b50610396600480360381019061039191906133bf565b610d99565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906135bc565b610db9565b005b3480156103cd57600080fd5b506103e860048036038101906103e391906135bc565b6111e0565b6040516103f59190613e7b565b60405180910390f35b34801561040a57600080fd5b506104256004803603810190610420919061356f565b61122e565b005b34801561043357600080fd5b5061044e600480360381019061044991906135bc565b6112c0565b60405161045b9190613b1c565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190613352565b6112d6565b6040516104989190613e7b565b60405180910390f35b3480156104ad57600080fd5b506104b66113bf565b005b3480156104c457600080fd5b506104cd611447565b6040516104da9190613b1c565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906135bc565b611470565b6040516105179190613e60565b60405180910390f35b34801561052c57600080fd5b50610535611488565b6040516105429190613b9e565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190613495565b61151a565b005b34801561058057600080fd5b5061058961169b565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613412565b61181c565b005b6105ce60048036038101906105c991906135e9565b611878565b005b3480156105dc57600080fd5b506105f760048036038101906105f291906135bc565b611a3c565b6040516106049190613b9e565b60405180910390f35b34801561061957600080fd5b50610622611b2a565b60405161062f9190613e7b565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190613352565b611b30565b60405161066c9190613e7b565b60405180910390f35b34801561068157600080fd5b5061069c6004803603810190610697919061337f565b611b42565b6040516106a99190613b83565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613352565b611bd6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081e575061081d82611cce565b5b9050919050565b60606003805461083490614199565b80601f016020809104026020016040519081016040528092919081815260200182805461086090614199565b80156108ad5780601f10610882576101008083540402835291602001916108ad565b820191906000526020600020905b81548152906001019060200180831161089057829003601f168201915b5050505050905090565b60006108c282611d38565b610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890613e40565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610947826112c0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613d40565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d7611d86565b73ffffffffffffffffffffffffffffffffffffffff161480610a065750610a0581610a00611d86565b611b42565b5b610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c90613c80565b60405180910390fd5b610a50838383611d8e565b505050565b6000610a5f611e40565b6002546001540303905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a9b838383611e49565b505050565b6000610aab836112d6565b821115610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490613bc0565b60405180910390fd5b600060018054610afd9190614030565b9050600060019050600080600190505b838111610c97576000600660008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905060001515816040015115151415610c8357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c2a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c825786841415610c73578195505050505050610cd3565b8380610c7e906141fc565b9450505b5b508080610c8f906141fc565b915050610b0d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90613de0565b60405180910390fd5b92915050565b610ce1611d86565b73ffffffffffffffffffffffffffffffffffffffff16610cff611447565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613ce0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610db48383836040518060200160405280600081525061181c565b505050565b6000610dc48261232f565b905060008160000151905060008173ffffffffffffffffffffffffffffffffffffffff16610df0611d86565b73ffffffffffffffffffffffffffffffffffffffff161480610e1f5750610e1e82610e19611d86565b611b42565b5b80610e645750610e2d611d86565b73ffffffffffffffffffffffffffffffffffffffff16610e4c856108b7565b73ffffffffffffffffffffffffffffffffffffffff16145b80610e735750610e7261254d565b5b905080610eac576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eba8260008660016125ac565b610ec660008584611d8e565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060018160010160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600660008781526020019081526020016000209050838160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600660008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561115a57600154821461115957858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46111c88260008660016125b2565b60026000815480929190600101919050555050505050565b60006001548210611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613c20565b60405180910390fd5b819050919050565b611236611d86565b73ffffffffffffffffffffffffffffffffffffffff16611254611447565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613ce0565b60405180910390fd5b8181601091906112bb929190613128565b505050565b60006112cb8261232f565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90613ca0565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113c7611d86565b73ffffffffffffffffffffffffffffffffffffffff166113e5611447565b73ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290613ce0565b60405180910390fd5b61144560006125b8565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114786131ae565b6114818261232f565b9050919050565b60606004805461149790614199565b80601f01602080910402602001604051908101604052809291908181526020018280546114c390614199565b80156115105780601f106114e557610100808354040283529160200191611510565b820191906000526020600020905b8154815290600101906020018083116114f357829003601f168201915b5050505050905090565b611522611d86565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613d20565b60405180910390fd5b806009600061159d611d86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164a611d86565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168f9190613b83565b60405180910390a35050565b6116a3611d86565b73ffffffffffffffffffffffffffffffffffffffff166116c1611447565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613ce0565b60405180910390fd5b6002600d54141561175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490613e00565b60405180910390fd5b6002600d8190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178b90613b07565b60006040518083038185875af1925050503d80600081146117c8576040519150601f19603f3d011682016040523d82523d6000602084013e6117cd565b606091505b5050905080611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180890613d60565b60405180910390fd5b506001600d81905550565b611827848484611e49565b6118338484848461267c565b611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613d80565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90613c60565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160ff16611913610a55565b61191d9190613f4f565b111561195e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195590613cc0565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160ff1661198c33611b30565b6119969190613f4f565b11156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613dc0565b60405180910390fd5b600060016119e433611b30565b1015611a0e57600f546001836119fa9190614064565b60ff16611a079190613fd6565b9050611a22565b600f548260ff16611a1f9190613fd6565b90505b611a2f338360ff16612813565b611a3881612831565b5050565b6060611a4782611d38565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613d00565b60405180910390fd5b6000821415611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190613d00565b60405180910390fd5b6000611ad46128d2565b90506000815111611af45760405180602001604052806000815250611b22565b80611afe84612964565b6005604051602001611b1293929190613ad6565b6040516020818303038152906040525b915050919050565b600c5481565b6000611b3b82612ac5565b9050919050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bde611d86565b73ffffffffffffffffffffffffffffffffffffffff16611bfc611447565b73ffffffffffffffffffffffffffffffffffffffff1614611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613ce0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990613be0565b60405180910390fd5b611ccb816125b8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611d43611e40565b11158015611d52575060015482105b8015611d7f575060066000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611e548261232f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611ee0611d86565b73ffffffffffffffffffffffffffffffffffffffff161480611f0f5750611f0e85611f09611d86565b611b42565b5b80611f545750611f1d611d86565b73ffffffffffffffffffffffffffffffffffffffff16611f3c846108b7565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611f8d576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff4576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61200185858560016125ac565b61200d60008487611d8e565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600660008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600660008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122bd5760015482146122bc57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461232885858560016125b2565b5050505050565b6123376131ae565b61234082611d38565b61237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690613c00565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106123e35760017f0000000000000000000000000000000000000000000000000000000000000000846123d69190614030565b6123e09190613f4f565b90505b60008390505b81811061250c576000600660008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124f857809350505050612548565b5080806125049061416f565b9150506123e9565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f90613e20565b60405180910390fd5b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612590611d86565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b50505050565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061269d8473ffffffffffffffffffffffffffffffffffffffff16612bae565b15612806578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126c6611d86565b8786866040518563ffffffff1660e01b81526004016126e89493929190613b37565b602060405180830381600087803b15801561270257600080fd5b505af192505050801561273357506040513d601f19601f820116820180604052508101906127309190613542565b60015b6127b6573d8060008114612763576040519150601f19603f3d011682016040523d82523d6000602084013e612768565b606091505b506000815114156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590613d80565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061280b565b600190505b949350505050565b61282d828260405180602001604052806000815250612bc1565b5050565b80341015612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90613da0565b60405180910390fd5b803411156128cf573373ffffffffffffffffffffffffffffffffffffffff166108fc82346128a29190614030565b9081150290604051600060405180830381858888f193505050501580156128cd573d6000803e3d6000fd5b505b50565b6060601080546128e190614199565b80601f016020809104026020016040519081016040528092919081815260200182805461290d90614199565b801561295a5780601f1061292f5761010080835404028352916020019161295a565b820191906000526020600020905b81548152906001019060200180831161293d57829003601f168201915b5050505050905090565b606060008214156129ac576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ac0565b600082905060005b600082146129de5780806129c7906141fc565b915050600a826129d79190613fa5565b91506129b4565b60008167ffffffffffffffff8111156129fa576129f9614332565b5b6040519080825280601f01601f191660200182016040528015612a2c5781602001600182028036833780820191505090505b5090505b60008514612ab957600182612a459190614030565b9150600a85612a549190614245565b6030612a609190613f4f565b60f81b818381518110612a7657612a75614303565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ab29190613fa5565b9450612a30565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d90613c40565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b600080823b905060008111915050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c2f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612c6a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c7760008583866125ac565b8267ffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508267ffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836006600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426006600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612e7c8673ffffffffffffffffffffffffffffffffffffffff16612bae565b15612f41575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ef16000878480600101955087612fc8565b612f27576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612e82578260015414612f3c57600080fd5b612fac565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612f42575b816001819055505050612fc260008583866125b2565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fee611d86565b8786866040518563ffffffff1660e01b81526004016130109493929190613b37565b602060405180830381600087803b15801561302a57600080fd5b505af192505050801561305b57506040513d601f19601f820116820180604052508101906130589190613542565b60015b6130d5573d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b506000815114156130cd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b82805461313490614199565b90600052602060002090601f016020900481019282613156576000855561319d565b82601f1061316f57803560ff191683800117855561319d565b8280016001018555821561319d579182015b8281111561319c578235825591602001919060010190613181565b5b5090506131aa91906131f1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561320a5760008160009055506001016131f2565b5090565b600061322161321c84613ebb565b613e96565b90508281526020810184848401111561323d5761323c614370565b5b61324884828561412d565b509392505050565b60008135905061325f816148de565b92915050565b600081359050613274816148f5565b92915050565b6000813590506132898161490c565b92915050565b60008151905061329e8161490c565b92915050565b600082601f8301126132b9576132b8614366565b5b81356132c984826020860161320e565b91505092915050565b60008083601f8401126132e8576132e7614366565b5b8235905067ffffffffffffffff81111561330557613304614361565b5b6020830191508360018202830111156133215761332061436b565b5b9250929050565b60008135905061333781614923565b92915050565b60008135905061334c8161493a565b92915050565b6000602082840312156133685761336761437a565b5b600061337684828501613250565b91505092915050565b600080604083850312156133965761339561437a565b5b60006133a485828601613250565b92505060206133b585828601613250565b9150509250929050565b6000806000606084860312156133d8576133d761437a565b5b60006133e686828701613250565b93505060206133f786828701613250565b925050604061340886828701613328565b9150509250925092565b6000806000806080858703121561342c5761342b61437a565b5b600061343a87828801613250565b945050602061344b87828801613250565b935050604061345c87828801613328565b925050606085013567ffffffffffffffff81111561347d5761347c614375565b5b613489878288016132a4565b91505092959194509250565b600080604083850312156134ac576134ab61437a565b5b60006134ba85828601613250565b92505060206134cb85828601613265565b9150509250929050565b600080604083850312156134ec576134eb61437a565b5b60006134fa85828601613250565b925050602061350b85828601613328565b9150509250929050565b60006020828403121561352b5761352a61437a565b5b60006135398482850161327a565b91505092915050565b6000602082840312156135585761355761437a565b5b60006135668482850161328f565b91505092915050565b600080602083850312156135865761358561437a565b5b600083013567ffffffffffffffff8111156135a4576135a3614375565b5b6135b0858286016132d2565b92509250509250929050565b6000602082840312156135d2576135d161437a565b5b60006135e084828501613328565b91505092915050565b6000602082840312156135ff576135fe61437a565b5b600061360d8482850161333d565b91505092915050565b61361f81614098565b82525050565b61362e81614098565b82525050565b61363d816140aa565b82525050565b61364c816140aa565b82525050565b600061365d82613f01565b6136678185613f17565b935061367781856020860161413c565b6136808161437f565b840191505092915050565b600061369682613f0c565b6136a08185613f33565b93506136b081856020860161413c565b6136b98161437f565b840191505092915050565b60006136cf82613f0c565b6136d98185613f44565b93506136e981856020860161413c565b80840191505092915050565b6000815461370281614199565b61370c8186613f44565b9450600182166000811461372757600181146137385761376b565b60ff1983168652818601935061376b565b61374185613eec565b60005b8381101561376357815481890152600182019150602081019050613744565b838801955050505b50505092915050565b6000613781602283613f33565b915061378c82614390565b604082019050919050565b60006137a4602683613f33565b91506137af826143df565b604082019050919050565b60006137c7602a83613f33565b91506137d28261442e565b604082019050919050565b60006137ea602383613f33565b91506137f58261447d565b604082019050919050565b600061380d603183613f33565b9150613818826144cc565b604082019050919050565b6000613830601e83613f33565b915061383b8261451b565b602082019050919050565b6000613853603983613f33565b915061385e82614544565b604082019050919050565b6000613876602b83613f33565b915061388182614593565b604082019050919050565b6000613899601283613f33565b91506138a4826145e2565b602082019050919050565b60006138bc602083613f33565b91506138c78261460b565b602082019050919050565b60006138df602f83613f33565b91506138ea82614634565b604082019050919050565b6000613902601a83613f33565b915061390d82614683565b602082019050919050565b6000613925602283613f33565b9150613930826146ac565b604082019050919050565b6000613948600083613f28565b9150613953826146fb565b600082019050919050565b600061396b601083613f33565b9150613976826146fe565b602082019050919050565b600061398e603383613f33565b915061399982614727565b604082019050919050565b60006139b1601683613f33565b91506139bc82614776565b602082019050919050565b60006139d4601683613f33565b91506139df8261479f565b602082019050919050565b60006139f7602e83613f33565b9150613a02826147c8565b604082019050919050565b6000613a1a601f83613f33565b9150613a2582614817565b602082019050919050565b6000613a3d602f83613f33565b9150613a4882614840565b604082019050919050565b6000613a60602d83613f33565b9150613a6b8261488f565b604082019050919050565b606082016000820151613a8c6000850182613616565b506020820151613a9f6020850182613ac7565b506040820151613ab26040850182613634565b50505050565b613ac181614102565b82525050565b613ad08161410c565b82525050565b6000613ae282866136c4565b9150613aee82856136c4565b9150613afa82846136f5565b9150819050949350505050565b6000613b128261393b565b9150819050919050565b6000602082019050613b316000830184613625565b92915050565b6000608082019050613b4c6000830187613625565b613b596020830186613625565b613b666040830185613ab8565b8181036060830152613b788184613652565b905095945050505050565b6000602082019050613b986000830184613643565b92915050565b60006020820190508181036000830152613bb8818461368b565b905092915050565b60006020820190508181036000830152613bd981613774565b9050919050565b60006020820190508181036000830152613bf981613797565b9050919050565b60006020820190508181036000830152613c19816137ba565b9050919050565b60006020820190508181036000830152613c39816137dd565b9050919050565b60006020820190508181036000830152613c5981613800565b9050919050565b60006020820190508181036000830152613c7981613823565b9050919050565b60006020820190508181036000830152613c9981613846565b9050919050565b60006020820190508181036000830152613cb981613869565b9050919050565b60006020820190508181036000830152613cd98161388c565b9050919050565b60006020820190508181036000830152613cf9816138af565b9050919050565b60006020820190508181036000830152613d19816138d2565b9050919050565b60006020820190508181036000830152613d39816138f5565b9050919050565b60006020820190508181036000830152613d5981613918565b9050919050565b60006020820190508181036000830152613d798161395e565b9050919050565b60006020820190508181036000830152613d9981613981565b9050919050565b60006020820190508181036000830152613db9816139a4565b9050919050565b60006020820190508181036000830152613dd9816139c7565b9050919050565b60006020820190508181036000830152613df9816139ea565b9050919050565b60006020820190508181036000830152613e1981613a0d565b9050919050565b60006020820190508181036000830152613e3981613a30565b9050919050565b60006020820190508181036000830152613e5981613a53565b9050919050565b6000606082019050613e756000830184613a76565b92915050565b6000602082019050613e906000830184613ab8565b92915050565b6000613ea0613eb1565b9050613eac82826141cb565b919050565b6000604051905090565b600067ffffffffffffffff821115613ed657613ed5614332565b5b613edf8261437f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f5a82614102565b9150613f6583614102565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9a57613f99614276565b5b828201905092915050565b6000613fb082614102565b9150613fbb83614102565b925082613fcb57613fca6142a5565b5b828204905092915050565b6000613fe182614102565b9150613fec83614102565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402557614024614276565b5b828202905092915050565b600061403b82614102565b915061404683614102565b92508282101561405957614058614276565b5b828203905092915050565b600061406f82614120565b915061407a83614120565b92508282101561408d5761408c614276565b5b828203905092915050565b60006140a3826140e2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561415a57808201518184015260208101905061413f565b83811115614169576000848401525b50505050565b600061417a82614102565b9150600082141561418e5761418d614276565b5b600182039050919050565b600060028204905060018216806141b157607f821691505b602082108114156141c5576141c46142d4565b5b50919050565b6141d48261437f565b810181811067ffffffffffffffff821117156141f3576141f2614332565b5b80604052505050565b600061420782614102565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561423a57614239614276565b5b600182019050919050565b600061425082614102565b915061425b83614102565b92508261426b5761426a6142a5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6148e781614098565b81146148f257600080fd5b50565b6148fe816140aa565b811461490957600080fd5b50565b614915816140b6565b811461492057600080fd5b50565b61492c81614102565b811461493757600080fd5b50565b61494381614120565b811461494e57600080fd5b5056fea2646970667358221220d2ab2a3c0b33b4498610c36879d81e2126130c2a71c257fddd1b3eeccd886ae064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x6080604052600436106101b75760003560e01c806370a08231116100ec578063b88d4fde1161008a578063d7224ba011610064578063d7224ba01461060d578063dc33e68114610638578063e985e9c514610675578063f2fde38b146106b2576101b7565b8063b88d4fde1461058b578063c76df80e146105b4578063c87b56dd146105d0576101b7565b80639231ab2a116100c65780639231ab2a146104e357806395d89b4114610520578063a22cb4651461054b578063ac44600214610574576101b7565b806370a0823114610464578063715018a6146104a15780638da5cb5b146104b8576101b7565b80632f745c591161015957806342966c681161013357806342966c68146103985780634f6ccce7146103c157806355f804b3146103fe5780636352211e14610427576101b7565b80632f745c591461030957806337beafe01461034657806342842e0e1461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a5780631c53f256146102b557806323b872dd146102e0576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613515565b6106db565b6040516101f09190613b83565b60405180910390f35b34801561020557600080fd5b5061020e610825565b60405161021b9190613b9e565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906135bc565b6108b7565b6040516102589190613b1c565b60405180910390f35b34801561026d57600080fd5b50610288600480360381019061028391906134d5565b61093c565b005b34801561029657600080fd5b5061029f610a55565b6040516102ac9190613e7b565b60405180910390f35b3480156102c157600080fd5b506102ca610a6c565b6040516102d79190613e7b565b60405180910390f35b3480156102ec57600080fd5b50610307600480360381019061030291906133bf565b610a90565b005b34801561031557600080fd5b50610330600480360381019061032b91906134d5565b610aa0565b60405161033d9190613e7b565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613352565b610cd9565b005b34801561037b57600080fd5b50610396600480360381019061039191906133bf565b610d99565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906135bc565b610db9565b005b3480156103cd57600080fd5b506103e860048036038101906103e391906135bc565b6111e0565b6040516103f59190613e7b565b60405180910390f35b34801561040a57600080fd5b506104256004803603810190610420919061356f565b61122e565b005b34801561043357600080fd5b5061044e600480360381019061044991906135bc565b6112c0565b60405161045b9190613b1c565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190613352565b6112d6565b6040516104989190613e7b565b60405180910390f35b3480156104ad57600080fd5b506104b66113bf565b005b3480156104c457600080fd5b506104cd611447565b6040516104da9190613b1c565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906135bc565b611470565b6040516105179190613e60565b60405180910390f35b34801561052c57600080fd5b50610535611488565b6040516105429190613b9e565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190613495565b61151a565b005b34801561058057600080fd5b5061058961169b565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613412565b61181c565b005b6105ce60048036038101906105c991906135e9565b611878565b005b3480156105dc57600080fd5b506105f760048036038101906105f291906135bc565b611a3c565b6040516106049190613b9e565b60405180910390f35b34801561061957600080fd5b50610622611b2a565b60405161062f9190613e7b565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190613352565b611b30565b60405161066c9190613e7b565b60405180910390f35b34801561068157600080fd5b5061069c6004803603810190610697919061337f565b611b42565b6040516106a99190613b83565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613352565b611bd6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107a657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061080e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081e575061081d82611cce565b5b9050919050565b60606003805461083490614199565b80601f016020809104026020016040519081016040528092919081815260200182805461086090614199565b80156108ad5780601f10610882576101008083540402835291602001916108ad565b820191906000526020600020905b81548152906001019060200180831161089057829003601f168201915b5050505050905090565b60006108c282611d38565b610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890613e40565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610947826112c0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af90613d40565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d7611d86565b73ffffffffffffffffffffffffffffffffffffffff161480610a065750610a0581610a00611d86565b611b42565b5b610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c90613c80565b60405180910390fd5b610a50838383611d8e565b505050565b6000610a5f611e40565b6002546001540303905090565b7f000000000000000000000000000000000000000000000000000000000000000a81565b610a9b838383611e49565b505050565b6000610aab836112d6565b821115610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490613bc0565b60405180910390fd5b600060018054610afd9190614030565b9050600060019050600080600190505b838111610c97576000600660008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905060001515816040015115151415610c8357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c2a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c825786841415610c73578195505050505050610cd3565b8380610c7e906141fc565b9450505b5b508080610c8f906141fc565b915050610b0d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90613de0565b60405180910390fd5b92915050565b610ce1611d86565b73ffffffffffffffffffffffffffffffffffffffff16610cff611447565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613ce0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610db48383836040518060200160405280600081525061181c565b505050565b6000610dc48261232f565b905060008160000151905060008173ffffffffffffffffffffffffffffffffffffffff16610df0611d86565b73ffffffffffffffffffffffffffffffffffffffff161480610e1f5750610e1e82610e19611d86565b611b42565b5b80610e645750610e2d611d86565b73ffffffffffffffffffffffffffffffffffffffff16610e4c856108b7565b73ffffffffffffffffffffffffffffffffffffffff16145b80610e735750610e7261254d565b5b905080610eac576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eba8260008660016125ac565b610ec660008584611d8e565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060018160010160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600660008781526020019081526020016000209050838160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600660008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561115a57600154821461115957858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46111c88260008660016125b2565b60026000815480929190600101919050555050505050565b60006001548210611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613c20565b60405180910390fd5b819050919050565b611236611d86565b73ffffffffffffffffffffffffffffffffffffffff16611254611447565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613ce0565b60405180910390fd5b8181601091906112bb929190613128565b505050565b60006112cb8261232f565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90613ca0565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113c7611d86565b73ffffffffffffffffffffffffffffffffffffffff166113e5611447565b73ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290613ce0565b60405180910390fd5b61144560006125b8565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114786131ae565b6114818261232f565b9050919050565b60606004805461149790614199565b80601f01602080910402602001604051908101604052809291908181526020018280546114c390614199565b80156115105780601f106114e557610100808354040283529160200191611510565b820191906000526020600020905b8154815290600101906020018083116114f357829003601f168201915b5050505050905090565b611522611d86565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613d20565b60405180910390fd5b806009600061159d611d86565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164a611d86565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168f9190613b83565b60405180910390a35050565b6116a3611d86565b73ffffffffffffffffffffffffffffffffffffffff166116c1611447565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613ce0565b60405180910390fd5b6002600d54141561175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490613e00565b60405180910390fd5b6002600d8190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178b90613b07565b60006040518083038185875af1925050503d80600081146117c8576040519150601f19603f3d011682016040523d82523d6000602084013e6117cd565b606091505b5050905080611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180890613d60565b60405180910390fd5b506001600d81905550565b611827848484611e49565b6118338484848461267c565b611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613d80565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90613c60565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000027108160ff16611913610a55565b61191d9190613f4f565b111561195e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195590613cc0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8160ff1661198c33611b30565b6119969190613f4f565b11156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90613dc0565b60405180910390fd5b600060016119e433611b30565b1015611a0e57600f546001836119fa9190614064565b60ff16611a079190613fd6565b9050611a22565b600f548260ff16611a1f9190613fd6565b90505b611a2f338360ff16612813565b611a3881612831565b5050565b6060611a4782611d38565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613d00565b60405180910390fd5b6000821415611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190613d00565b60405180910390fd5b6000611ad46128d2565b90506000815111611af45760405180602001604052806000815250611b22565b80611afe84612964565b6005604051602001611b1293929190613ad6565b6040516020818303038152906040525b915050919050565b600c5481565b6000611b3b82612ac5565b9050919050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611bde611d86565b73ffffffffffffffffffffffffffffffffffffffff16611bfc611447565b73ffffffffffffffffffffffffffffffffffffffff1614611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990613ce0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990613be0565b60405180910390fd5b611ccb816125b8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611d43611e40565b11158015611d52575060015482105b8015611d7f575060066000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611e548261232f565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611ee0611d86565b73ffffffffffffffffffffffffffffffffffffffff161480611f0f5750611f0e85611f09611d86565b611b42565b5b80611f545750611f1d611d86565b73ffffffffffffffffffffffffffffffffffffffff16611f3c846108b7565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611f8d576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ff4576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61200185858560016125ac565b61200d60008487611d8e565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600660008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600660008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122bd5760015482146122bc57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461232885858560016125b2565b5050505050565b6123376131ae565b61234082611d38565b61237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690613c00565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106123e35760017f000000000000000000000000000000000000000000000000000000000000000a846123d69190614030565b6123e09190613f4f565b90505b60008390505b81811061250c576000600660008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124f857809350505050612548565b5080806125049061416f565b9150506123e9565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f90613e20565b60405180910390fd5b919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612590611d86565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b50505050565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061269d8473ffffffffffffffffffffffffffffffffffffffff16612bae565b15612806578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126c6611d86565b8786866040518563ffffffff1660e01b81526004016126e89493929190613b37565b602060405180830381600087803b15801561270257600080fd5b505af192505050801561273357506040513d601f19601f820116820180604052508101906127309190613542565b60015b6127b6573d8060008114612763576040519150601f19603f3d011682016040523d82523d6000602084013e612768565b606091505b506000815114156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590613d80565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061280b565b600190505b949350505050565b61282d828260405180602001604052806000815250612bc1565b5050565b80341015612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90613da0565b60405180910390fd5b803411156128cf573373ffffffffffffffffffffffffffffffffffffffff166108fc82346128a29190614030565b9081150290604051600060405180830381858888f193505050501580156128cd573d6000803e3d6000fd5b505b50565b6060601080546128e190614199565b80601f016020809104026020016040519081016040528092919081815260200182805461290d90614199565b801561295a5780601f1061292f5761010080835404028352916020019161295a565b820191906000526020600020905b81548152906001019060200180831161293d57829003601f168201915b5050505050905090565b606060008214156129ac576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ac0565b600082905060005b600082146129de5780806129c7906141fc565b915050600a826129d79190613fa5565b91506129b4565b60008167ffffffffffffffff8111156129fa576129f9614332565b5b6040519080825280601f01601f191660200182016040528015612a2c5781602001600182028036833780820191505090505b5090505b60008514612ab957600182612a459190614030565b9150600a85612a549190614245565b6030612a609190613f4f565b60f81b818381518110612a7657612a75614303565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ab29190613fa5565b9450612a30565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d90613c40565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b600080823b905060008111915050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c2f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612c6a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c7760008583866125ac565b8267ffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508267ffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836006600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426006600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612e7c8673ffffffffffffffffffffffffffffffffffffffff16612bae565b15612f41575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ef16000878480600101955087612fc8565b612f27576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612e82578260015414612f3c57600080fd5b612fac565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612f42575b816001819055505050612fc260008583866125b2565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fee611d86565b8786866040518563ffffffff1660e01b81526004016130109493929190613b37565b602060405180830381600087803b15801561302a57600080fd5b505af192505050801561305b57506040513d601f19601f820116820180604052508101906130589190613542565b60015b6130d5573d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b506000815114156130cd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b82805461313490614199565b90600052602060002090601f016020900481019282613156576000855561319d565b82601f1061316f57803560ff191683800117855561319d565b8280016001018555821561319d579182015b8281111561319c578235825591602001919060010190613181565b5b5090506131aa91906131f1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561320a5760008160009055506001016131f2565b5090565b600061322161321c84613ebb565b613e96565b90508281526020810184848401111561323d5761323c614370565b5b61324884828561412d565b509392505050565b60008135905061325f816148de565b92915050565b600081359050613274816148f5565b92915050565b6000813590506132898161490c565b92915050565b60008151905061329e8161490c565b92915050565b600082601f8301126132b9576132b8614366565b5b81356132c984826020860161320e565b91505092915050565b60008083601f8401126132e8576132e7614366565b5b8235905067ffffffffffffffff81111561330557613304614361565b5b6020830191508360018202830111156133215761332061436b565b5b9250929050565b60008135905061333781614923565b92915050565b60008135905061334c8161493a565b92915050565b6000602082840312156133685761336761437a565b5b600061337684828501613250565b91505092915050565b600080604083850312156133965761339561437a565b5b60006133a485828601613250565b92505060206133b585828601613250565b9150509250929050565b6000806000606084860312156133d8576133d761437a565b5b60006133e686828701613250565b93505060206133f786828701613250565b925050604061340886828701613328565b9150509250925092565b6000806000806080858703121561342c5761342b61437a565b5b600061343a87828801613250565b945050602061344b87828801613250565b935050604061345c87828801613328565b925050606085013567ffffffffffffffff81111561347d5761347c614375565b5b613489878288016132a4565b91505092959194509250565b600080604083850312156134ac576134ab61437a565b5b60006134ba85828601613250565b92505060206134cb85828601613265565b9150509250929050565b600080604083850312156134ec576134eb61437a565b5b60006134fa85828601613250565b925050602061350b85828601613328565b9150509250929050565b60006020828403121561352b5761352a61437a565b5b60006135398482850161327a565b91505092915050565b6000602082840312156135585761355761437a565b5b60006135668482850161328f565b91505092915050565b600080602083850312156135865761358561437a565b5b600083013567ffffffffffffffff8111156135a4576135a3614375565b5b6135b0858286016132d2565b92509250509250929050565b6000602082840312156135d2576135d161437a565b5b60006135e084828501613328565b91505092915050565b6000602082840312156135ff576135fe61437a565b5b600061360d8482850161333d565b91505092915050565b61361f81614098565b82525050565b61362e81614098565b82525050565b61363d816140aa565b82525050565b61364c816140aa565b82525050565b600061365d82613f01565b6136678185613f17565b935061367781856020860161413c565b6136808161437f565b840191505092915050565b600061369682613f0c565b6136a08185613f33565b93506136b081856020860161413c565b6136b98161437f565b840191505092915050565b60006136cf82613f0c565b6136d98185613f44565b93506136e981856020860161413c565b80840191505092915050565b6000815461370281614199565b61370c8186613f44565b9450600182166000811461372757600181146137385761376b565b60ff1983168652818601935061376b565b61374185613eec565b60005b8381101561376357815481890152600182019150602081019050613744565b838801955050505b50505092915050565b6000613781602283613f33565b915061378c82614390565b604082019050919050565b60006137a4602683613f33565b91506137af826143df565b604082019050919050565b60006137c7602a83613f33565b91506137d28261442e565b604082019050919050565b60006137ea602383613f33565b91506137f58261447d565b604082019050919050565b600061380d603183613f33565b9150613818826144cc565b604082019050919050565b6000613830601e83613f33565b915061383b8261451b565b602082019050919050565b6000613853603983613f33565b915061385e82614544565b604082019050919050565b6000613876602b83613f33565b915061388182614593565b604082019050919050565b6000613899601283613f33565b91506138a4826145e2565b602082019050919050565b60006138bc602083613f33565b91506138c78261460b565b602082019050919050565b60006138df602f83613f33565b91506138ea82614634565b604082019050919050565b6000613902601a83613f33565b915061390d82614683565b602082019050919050565b6000613925602283613f33565b9150613930826146ac565b604082019050919050565b6000613948600083613f28565b9150613953826146fb565b600082019050919050565b600061396b601083613f33565b9150613976826146fe565b602082019050919050565b600061398e603383613f33565b915061399982614727565b604082019050919050565b60006139b1601683613f33565b91506139bc82614776565b602082019050919050565b60006139d4601683613f33565b91506139df8261479f565b602082019050919050565b60006139f7602e83613f33565b9150613a02826147c8565b604082019050919050565b6000613a1a601f83613f33565b9150613a2582614817565b602082019050919050565b6000613a3d602f83613f33565b9150613a4882614840565b604082019050919050565b6000613a60602d83613f33565b9150613a6b8261488f565b604082019050919050565b606082016000820151613a8c6000850182613616565b506020820151613a9f6020850182613ac7565b506040820151613ab26040850182613634565b50505050565b613ac181614102565b82525050565b613ad08161410c565b82525050565b6000613ae282866136c4565b9150613aee82856136c4565b9150613afa82846136f5565b9150819050949350505050565b6000613b128261393b565b9150819050919050565b6000602082019050613b316000830184613625565b92915050565b6000608082019050613b4c6000830187613625565b613b596020830186613625565b613b666040830185613ab8565b8181036060830152613b788184613652565b905095945050505050565b6000602082019050613b986000830184613643565b92915050565b60006020820190508181036000830152613bb8818461368b565b905092915050565b60006020820190508181036000830152613bd981613774565b9050919050565b60006020820190508181036000830152613bf981613797565b9050919050565b60006020820190508181036000830152613c19816137ba565b9050919050565b60006020820190508181036000830152613c39816137dd565b9050919050565b60006020820190508181036000830152613c5981613800565b9050919050565b60006020820190508181036000830152613c7981613823565b9050919050565b60006020820190508181036000830152613c9981613846565b9050919050565b60006020820190508181036000830152613cb981613869565b9050919050565b60006020820190508181036000830152613cd98161388c565b9050919050565b60006020820190508181036000830152613cf9816138af565b9050919050565b60006020820190508181036000830152613d19816138d2565b9050919050565b60006020820190508181036000830152613d39816138f5565b9050919050565b60006020820190508181036000830152613d5981613918565b9050919050565b60006020820190508181036000830152613d798161395e565b9050919050565b60006020820190508181036000830152613d9981613981565b9050919050565b60006020820190508181036000830152613db9816139a4565b9050919050565b60006020820190508181036000830152613dd9816139c7565b9050919050565b60006020820190508181036000830152613df9816139ea565b9050919050565b60006020820190508181036000830152613e1981613a0d565b9050919050565b60006020820190508181036000830152613e3981613a30565b9050919050565b60006020820190508181036000830152613e5981613a53565b9050919050565b6000606082019050613e756000830184613a76565b92915050565b6000602082019050613e906000830184613ab8565b92915050565b6000613ea0613eb1565b9050613eac82826141cb565b919050565b6000604051905090565b600067ffffffffffffffff821115613ed657613ed5614332565b5b613edf8261437f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f5a82614102565b9150613f6583614102565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9a57613f99614276565b5b828201905092915050565b6000613fb082614102565b9150613fbb83614102565b925082613fcb57613fca6142a5565b5b828204905092915050565b6000613fe182614102565b9150613fec83614102565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402557614024614276565b5b828202905092915050565b600061403b82614102565b915061404683614102565b92508282101561405957614058614276565b5b828203905092915050565b600061406f82614120565b915061407a83614120565b92508282101561408d5761408c614276565b5b828203905092915050565b60006140a3826140e2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561415a57808201518184015260208101905061413f565b83811115614169576000848401525b50505050565b600061417a82614102565b9150600082141561418e5761418d614276565b5b600182039050919050565b600060028204905060018216806141b157607f821691505b602082108114156141c5576141c46142d4565b5b50919050565b6141d48261437f565b810181811067ffffffffffffffff821117156141f3576141f2614332565b5b80604052505050565b600061420782614102565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561423a57614239614276565b5b600182019050919050565b600061425082614102565b915061425b83614102565b92508261426b5761426a6142a5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6148e781614098565b81146148f257600080fd5b50565b6148fe816140aa565b811461490957600080fd5b50565b614915816140b6565b811461492057600080fd5b50565b61492c81614102565b811461493757600080fd5b50565b61494381614120565b811461494e57600080fd5b5056fea2646970667358221220d2ab2a3c0b33b4498610c36879d81e2126130c2a71c257fddd1b3eeccd886ae064736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : collectionSize_ (uint256): 10000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710


Deployed Bytecode Sourcemap

511:1924:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5824:422:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7785:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9847:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9368:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3316:311;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;574:31:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10874:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4758:994;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3923:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11107:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14558:2349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4223:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1875:100:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7594:124:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6310:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:10;;;;;;;;;;;;;:::i;:::-;;999:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2285:147:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7954:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10211:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1981:181:9;;;;;;;;;;;;;:::i;:::-;;11355:355:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;975:517:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8129:835:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20288:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2172:107:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10593:214:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5824:422:3;5971:4;6028:25;6013:40;;;:11;:40;;;;:105;;;;6085:33;6070:48;;;:11;:48;;;;6013:105;:172;;;;6150:35;6135:50;;;:11;:50;;;;6013:172;:225;;;;6202:36;6226:11;6202:23;:36::i;:::-;6013:225;5993:245;;5824:422;;;:::o;7785:100::-;7839:13;7872:5;7865:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7785:100;:::o;9847:292::-;9951:7;9998:16;10006:7;9998;:16::i;:::-;9976:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;10107:15;:24;10123:7;10107:24;;;;;;;;;;;;;;;;;;;;;10100:31;;9847:292;;;:::o;9368:413::-;9441:13;9457:24;9473:7;9457:15;:24::i;:::-;9441:40;;9506:5;9500:11;;:2;:11;;;;9492:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9601:5;9585:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;9610:37;9627:5;9634:12;:10;:12::i;:::-;9610:16;:37::i;:::-;9585:62;9563:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;9745:28;9754:2;9758:7;9767:5;9745:8;:28::i;:::-;9430:351;9368:413;;:::o;3316:311::-;3369:7;3593:15;:13;:15::i;:::-;3578:12;;3563;;:27;:45;3556:52;;3316:311;:::o;574:31:9:-;;;:::o;10874:162:3:-;11000:28;11010:4;11016:2;11020:7;11000:9;:28::i;:::-;10874:162;;;:::o;4758:994::-;4883:7;4939:16;4949:5;4939:9;:16::i;:::-;4930:5;:25;;4908:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;5028:22;5068:1;5053:12;;:16;;;;:::i;:::-;5028:41;;5080:19;5102:1;5080:23;;5114:25;5168:9;5180:1;5168:13;;5163:515;5188:14;5183:1;:19;5163:515;;5222:31;5256:11;:14;5268:1;5256:14;;;;;;;;;;;5222:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5306:5;5286:25;;:9;:16;;;:25;;;5283:370;;;5357:1;5331:28;;:9;:14;;;:28;;;5327:114;;5411:9;:14;;;5391:34;;5327:114;5480:5;5459:26;;:17;:26;;;5455:185;;;5539:5;5524:11;:20;5520:75;;;5574:1;5567:8;;;;;;;;;5520:75;5611:13;;;;;:::i;:::-;;;;5455:185;5283:370;5209:469;5204:3;;;;;:::i;:::-;;;;5163:515;;;;5688:56;;;;;;;;;;:::i;:::-;;;;;;;;4758:994;;;;;:::o;3923:111::-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4013:13:3::1;3998:12;;:28;;;;;;;;;;;;;;;;;;3923:111:::0;:::o;11107:177::-;11237:39;11254:4;11260:2;11264:7;11237:39;;;;;;;;;;;;:16;:39::i;:::-;11107:177;;;:::o;14558:2349::-;14617:35;14655:20;14667:7;14655:11;:20::i;:::-;14617:58;;14688:12;14703:13;:18;;;14688:33;;14736:22;14778:4;14762:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;14799:36;14816:4;14822:12;:10;:12::i;:::-;14799:16;:36::i;:::-;14762:73;:126;;;;14876:12;:10;:12::i;:::-;14852:36;;:20;14864:7;14852:11;:20::i;:::-;:36;;;14762:126;:146;;;;14892:16;:14;:16::i;:::-;14762:146;14736:173;;14926:17;14921:66;;14952:35;;;;;;;;;;;;;;14921:66;15000:51;15022:4;15036:1;15040:7;15049:1;15000:21;:51::i;:::-;15116:35;15133:1;15137:7;15146:4;15116:8;:35::i;:::-;15447:31;15481:12;:18;15494:4;15481:18;;;;;;;;;;;;;;;15447:52;;15537:1;15514:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15581:1;15553:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15681:31;15715:11;:20;15727:7;15715:20;;;;;;;;;;;15681:54;;15766:4;15750:8;:13;;;:20;;;;;;;;;;;;;;;;;;15818:15;15785:8;:23;;;:49;;;;;;;;;;;;;;;;;;15867:4;15849:8;:15;;;:22;;;;;;;;;;;;;;;;;;16119:19;16151:1;16141:7;:11;16119:33;;16167:31;16201:11;:24;16213:11;16201:24;;;;;;;;;;;16167:58;;16269:1;16244:27;;:8;:13;;;;;;;;;;;;:27;;;16240:383;;;16454:12;;16439:11;:27;16435:173;;16507:4;16491:8;:13;;;:20;;;;;;;;;;;;;;;;;;16560:13;:28;;;16534:8;:23;;;:54;;;;;;;;;;;;;;;;;;16435:173;16240:383;15422:1212;;;;16678:7;16674:1;16651:35;;16660:4;16651:35;;;;;;;;;;;;16697:50;16718:4;16732:1;16736:7;16745:1;16697:20;:50::i;:::-;16874:12;;:14;;;;;;;;;;;;;14606:2301;;;14558:2349;:::o;4223:228::-;4326:7;4367:12;;4359:5;:20;4351:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4438:5;4431:12;;4223:228;;;:::o;1875:100:9:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1962:7:9::1;;1946:13;:23;;;;;;;:::i;:::-;;1875:100:::0;;:::o;7594:124:3:-;7658:7;7685:20;7697:7;7685:11;:20::i;:::-;:25;;;7678:32;;7594:124;;;:::o;6310:258::-;6374:7;6433:1;6416:19;;:5;:19;;;;6394:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;6532:12;:19;6545:5;6532:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;6524:36;;6517:43;;6310:258;;;:::o;1650:94:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;999:87::-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;2285:147:9:-;2366:21;;:::i;:::-;2406:20;2418:7;2406:11;:20::i;:::-;2399:27;;2285:147;;;:::o;7954:104:3:-;8010:13;8043:7;8036:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7954:104;:::o;10211:311::-;10341:12;:10;:12::i;:::-;10329:24;;:8;:24;;;;10321:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;10442:8;10397:18;:32;10416:12;:10;:12::i;:::-;10397:32;;;;;;;;;;;;;;;:42;10430:8;10397:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;10495:8;10466:48;;10481:12;:10;:12::i;:::-;10466:48;;;10505:8;10466:48;;;;;;:::i;:::-;;;;;;;;10211:311;;:::o;1981:181:9:-;1230:12:10;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:11::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;2046:12:9::2;2064:10;:15;;2087:21;2064:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2045:68;;;2128:7;2120:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;2038:124;1669:1:11::1;2621:7;:22;;;;1981:181:9:o:0;11355:355:3:-;11514:28;11524:4;11530:2;11534:7;11514:9;:28::i;:::-;11575:48;11598:4;11604:2;11608:7;11617:5;11575:22;:48::i;:::-;11553:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;11355:355;;;;:::o;975:517:9:-;873:10;860:23;;:9;:23;;;852:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1108:14:::1;1096:8;1080:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;1072:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1207:6;1195:8;1168:35;;:24;1181:10;1168:12;:24::i;:::-;:35;;;;:::i;:::-;:45;;1152:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;1260:18;1313:1;1288:24;1301:10;1288:12;:24::i;:::-;:26;1285:133;;;1354:5;;1349:1;1338:8;:12;;;;:::i;:::-;1337:22;;;;;;:::i;:::-;1324:35;;1285:133;;;1405:5;;1393:8;:17;;;;;;:::i;:::-;1380:30;;1285:133;1424:31;1434:10;1446:8;1424:31;;:9;:31::i;:::-;1462:24;1475:10;1462:12;:24::i;:::-;1063:429;975:517:::0;:::o;8129:835:3:-;8247:13;8318:16;8326:7;8318;:16::i;:::-;8292:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;8469:1;8458:7;:12;;8432:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;8568:21;8592:10;:8;:10::i;:::-;8568:34;;8665:1;8647:7;8641:21;:25;:305;;;;;;;;;;;;;;;;;8770:7;8808:18;:7;:16;:18::i;:::-;8857:13;8723:174;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8641:305;8617:329;;;8129:835;;;:::o;20288:43::-;;;;:::o;2172:107:9:-;2230:7;2253:20;2267:5;2253:13;:20::i;:::-;2246:27;;2172:107;;;:::o;10593:214:3:-;10735:4;10764:18;:25;10783:5;10764:25;;;;;;;;;;;;;;;:35;10790:8;10764:35;;;;;;;;;;;;;;;;;;;;;;;;;10757:42;;10593:214;;;;:::o;1899:192:10:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;787:157:2:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;11965:173:3:-;12022:4;12065:7;12046:15;:13;:15::i;:::-;:26;;:52;;;;;12086:12;;12076:7;:22;12046:52;:84;;;;;12103:11;:20;12115:7;12103:20;;;;;;;;;;;:27;;;;;;;;;;;;12102:28;12046:84;12039:91;;11965:173;;;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;20084:196:3:-;20226:2;20199:15;:24;20215:7;20199:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;20264:7;20260:2;20244:28;;20253:5;20244:28;;;;;;;;;;;;20084:196;;;:::o;3150:92::-;3206:7;3233:1;3226:8;;3150:92;:::o;17838:2128::-;17953:35;17991:20;18003:7;17991:11;:20::i;:::-;17953:58;;18050:4;18028:26;;:13;:18;;;:26;;;18024:67;;18063:28;;;;;;;;;;;;;;18024:67;18104:22;18146:4;18130:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;18167:36;18184:4;18190:12;:10;:12::i;:::-;18167:16;:36::i;:::-;18130:73;:126;;;;18244:12;:10;:12::i;:::-;18220:36;;:20;18232:7;18220:11;:20::i;:::-;:36;;;18130:126;18104:153;;18275:17;18270:66;;18301:35;;;;;;;;;;;;;;18270:66;18365:1;18351:16;;:2;:16;;;18347:52;;;18376:23;;;;;;;;;;;;;;18347:52;18412:43;18434:4;18440:2;18444:7;18453:1;18412:21;:43::i;:::-;18520:35;18537:1;18541:7;18550:4;18520:8;:35::i;:::-;18881:1;18851:12;:18;18864:4;18851:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18925:1;18897:12;:16;18910:2;18897:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18943:31;18977:11;:20;18989:7;18977:20;;;;;;;;;;;18943:54;;19028:2;19012:8;:13;;;:18;;;;;;;;;;;;;;;;;;19078:15;19045:8;:23;;;:49;;;;;;;;;;;;;;;;;;19346:19;19378:1;19368:7;:11;19346:33;;19394:31;19428:11;:24;19440:11;19428:24;;;;;;;;;;;19394:58;;19496:1;19471:27;;:8;:13;;;;;;;;;;;;:27;;;19467:383;;;19681:12;;19666:11;:27;19662:173;;19734:4;19718:8;:13;;;:20;;;;;;;;;;;;;;;;;;19787:13;:28;;;19761:8;:23;;;:54;;;;;;;;;;;;;;;;;;19662:173;19467:383;18826:1035;;;19897:7;19893:2;19878:27;;19887:4;19878:27;;;;;;;;;;;;19916:42;19937:4;19943:2;19947:7;19956:1;19916:20;:42::i;:::-;17942:2024;;17838:2128;;;:::o;6850:682::-;6938:21;;:::i;:::-;6985:16;6993:7;6985;:16::i;:::-;6977:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7061:26;7113:12;7102:7;:23;7098:103;;7188:1;7173:12;7163:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;7142:47;;7098:103;7218:12;7233:7;7218:22;;7213:242;7250:18;7242:4;:26;7213:242;;7293:31;7327:11;:17;7339:4;7327:17;;;;;;;;;;;7293:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7389:1;7363:28;;:9;:14;;;:28;;;7359:85;;7419:9;7412:16;;;;;;;7359:85;7278:177;7270:6;;;;;:::i;:::-;;;;7213:242;;;;7467:57;;;;;;;;;;:::i;:::-;;;;;;;;6850:682;;;;:::o;4041:107::-;4089:4;4128:12;;;;;;;;;;;4112:28;;:12;:10;:12::i;:::-;:28;;;4105:35;;4041:107;:::o;22478:159::-;;;;;:::o;23049:158::-;;;;;:::o;2099:173:10:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;21005:985:3:-;21160:4;21181:15;:2;:13;;;:15::i;:::-;21177:806;;;21250:2;21234:36;;;21293:12;:10;:12::i;:::-;21328:4;21355:7;21385:5;21234:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21213:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21613:1;21596:6;:13;:18;21592:321;;;21639:109;;;;;;;;;;:::i;:::-;;;;;;;;21592:321;21863:6;21857:13;21848:6;21844:2;21840:15;21833:38;21213:715;21483:45;;;21473:55;;;:6;:55;;;;21466:62;;;;;21177:806;21967:4;21960:11;;21005:985;;;;;;;:::o;12146:104::-;12215:27;12225:2;12229:8;12215:27;;;;;;;;;;;;:9;:27::i;:::-;12146:104;;:::o;1498:198:9:-;1570:4;1557:9;:17;;1549:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1624:4;1612:9;:16;1608:83;;;1647:10;1639:28;;:46;1680:4;1668:9;:16;;;;:::i;:::-;1639:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1608:83;1498:198;:::o;1760:108::-;1820:13;1849;1842:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:108;:::o;288:723:12:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;6576:266:3:-;6637:7;6696:1;6679:19;;:5;:19;;;;6657:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;6801:12;:19;6814:5;6801:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;6793:41;;6786:48;;6576:266;;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;12613:1937:3:-;12736:20;12759:12;;12736:35;;12800:1;12786:16;;:2;:16;;;12782:48;;;12811:19;;;;;;;;;;;;;;12782:48;12857:1;12845:8;:13;12841:44;;;12867:18;;;;;;;;;;;;;;12841:44;12898:61;12928:1;12932:2;12936:12;12950:8;12898:21;:61::i;:::-;13271:8;13236:44;;:12;:16;13249:2;13236:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13335:8;13295:49;;:12;:16;13308:2;13295:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13394:2;13361:11;:25;13373:12;13361:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;13461:15;13411:11;:25;13423:12;13411:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;13494:20;13517:12;13494:35;;13544:11;13573:8;13558:12;:23;13544:37;;13602:15;:2;:13;;;:15::i;:::-;13598:821;;;13638:504;13694:12;13690:2;13669:38;;13686:1;13669:38;;;;;;;;;;;;13761:212;13830:1;13863:2;13896:14;;;;;;13941:5;13761:30;:212::i;:::-;13730:365;;14031:40;;;;;;;;;;;;;;13730:365;14137:3;14122:12;:18;13638:504;;14222:12;14206;;:28;14202:42;;14236:8;;;14202:42;13598:821;;;14285:119;14341:14;;;;;;14337:2;14316:40;;14333:1;14316:40;;;;;;;;;;;;14399:3;14384:12;:18;14285:119;;13598:821;14448:12;14433;:27;;;;13211:1261;;14482:60;14511:1;14515:2;14519:12;14533:8;14482:20;:60::i;:::-;12725:1825;12613:1937;;;:::o;16917:667::-;17080:4;17117:2;17101:36;;;17138:12;:10;:12::i;:::-;17152:4;17158:7;17167:5;17101:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17097:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17352:1;17335:6;:13;:18;17331:235;;;17381:40;;;;;;;;;;;;;;17331:235;17524:6;17518:13;17509:6;17505:2;17501:15;17494:38;17097:480;17230:45;;;17220:55;;;:6;:55;;;;17213:62;;;16917:667;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:135::-;2116:5;2154:6;2141:20;2132:29;;2170:31;2195:5;2170:31;:::i;:::-;2072:135;;;;:::o;2213:329::-;2272:6;2321:2;2309:9;2300:7;2296:23;2292:32;2289:119;;;2327:79;;:::i;:::-;2289:119;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2213:329;;;;:::o;2548:474::-;2616:6;2624;2673:2;2661:9;2652:7;2648:23;2644:32;2641:119;;;2679:79;;:::i;:::-;2641:119;2799:1;2824:53;2869:7;2860:6;2849:9;2845:22;2824:53;:::i;:::-;2814:63;;2770:117;2926:2;2952:53;2997:7;2988:6;2977:9;2973:22;2952:53;:::i;:::-;2942:63;;2897:118;2548:474;;;;;:::o;3028:619::-;3105:6;3113;3121;3170:2;3158:9;3149:7;3145:23;3141:32;3138:119;;;3176:79;;:::i;:::-;3138:119;3296:1;3321:53;3366:7;3357:6;3346:9;3342:22;3321:53;:::i;:::-;3311:63;;3267:117;3423:2;3449:53;3494:7;3485:6;3474:9;3470:22;3449:53;:::i;:::-;3439:63;;3394:118;3551:2;3577:53;3622:7;3613:6;3602:9;3598:22;3577:53;:::i;:::-;3567:63;;3522:118;3028:619;;;;;:::o;3653:943::-;3748:6;3756;3764;3772;3821:3;3809:9;3800:7;3796:23;3792:33;3789:120;;;3828:79;;:::i;:::-;3789:120;3948:1;3973:53;4018:7;4009:6;3998:9;3994:22;3973:53;:::i;:::-;3963:63;;3919:117;4075:2;4101:53;4146:7;4137:6;4126:9;4122:22;4101:53;:::i;:::-;4091:63;;4046:118;4203:2;4229:53;4274:7;4265:6;4254:9;4250:22;4229:53;:::i;:::-;4219:63;;4174:118;4359:2;4348:9;4344:18;4331:32;4390:18;4382:6;4379:30;4376:117;;;4412:79;;:::i;:::-;4376:117;4517:62;4571:7;4562:6;4551:9;4547:22;4517:62;:::i;:::-;4507:72;;4302:287;3653:943;;;;;;;:::o;4602:468::-;4667:6;4675;4724:2;4712:9;4703:7;4699:23;4695:32;4692:119;;;4730:79;;:::i;:::-;4692:119;4850:1;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4821:117;4977:2;5003:50;5045:7;5036:6;5025:9;5021:22;5003:50;:::i;:::-;4993:60;;4948:115;4602:468;;;;;:::o;5076:474::-;5144:6;5152;5201:2;5189:9;5180:7;5176:23;5172:32;5169:119;;;5207:79;;:::i;:::-;5169:119;5327:1;5352:53;5397:7;5388:6;5377:9;5373:22;5352:53;:::i;:::-;5342:63;;5298:117;5454:2;5480:53;5525:7;5516:6;5505:9;5501:22;5480:53;:::i;:::-;5470:63;;5425:118;5076:474;;;;;:::o;5556:327::-;5614:6;5663:2;5651:9;5642:7;5638:23;5634:32;5631:119;;;5669:79;;:::i;:::-;5631:119;5789:1;5814:52;5858:7;5849:6;5838:9;5834:22;5814:52;:::i;:::-;5804:62;;5760:116;5556:327;;;;:::o;5889:349::-;5958:6;6007:2;5995:9;5986:7;5982:23;5978:32;5975:119;;;6013:79;;:::i;:::-;5975:119;6133:1;6158:63;6213:7;6204:6;6193:9;6189:22;6158:63;:::i;:::-;6148:73;;6104:127;5889:349;;;;:::o;6244:529::-;6315:6;6323;6372:2;6360:9;6351:7;6347:23;6343:32;6340:119;;;6378:79;;:::i;:::-;6340:119;6526:1;6515:9;6511:17;6498:31;6556:18;6548:6;6545:30;6542:117;;;6578:79;;:::i;:::-;6542:117;6691:65;6748:7;6739:6;6728:9;6724:22;6691:65;:::i;:::-;6673:83;;;;6469:297;6244:529;;;;;:::o;6779:329::-;6838:6;6887:2;6875:9;6866:7;6862:23;6858:32;6855:119;;;6893:79;;:::i;:::-;6855:119;7013:1;7038:53;7083:7;7074:6;7063:9;7059:22;7038:53;:::i;:::-;7028:63;;6984:117;6779:329;;;;:::o;7114:325::-;7171:6;7220:2;7208:9;7199:7;7195:23;7191:32;7188:119;;;7226:79;;:::i;:::-;7188:119;7346:1;7371:51;7414:7;7405:6;7394:9;7390:22;7371:51;:::i;:::-;7361:61;;7317:115;7114:325;;;;:::o;7445:108::-;7522:24;7540:5;7522:24;:::i;:::-;7517:3;7510:37;7445:108;;:::o;7559:118::-;7646:24;7664:5;7646:24;:::i;:::-;7641:3;7634:37;7559:118;;:::o;7683:99::-;7754:21;7769:5;7754:21;:::i;:::-;7749:3;7742:34;7683:99;;:::o;7788:109::-;7869:21;7884:5;7869:21;:::i;:::-;7864:3;7857:34;7788:109;;:::o;7903:360::-;7989:3;8017:38;8049:5;8017:38;:::i;:::-;8071:70;8134:6;8129:3;8071:70;:::i;:::-;8064:77;;8150:52;8195:6;8190:3;8183:4;8176:5;8172:16;8150:52;:::i;:::-;8227:29;8249:6;8227:29;:::i;:::-;8222:3;8218:39;8211:46;;7993:270;7903:360;;;;:::o;8269:364::-;8357:3;8385:39;8418:5;8385:39;:::i;:::-;8440:71;8504:6;8499:3;8440:71;:::i;:::-;8433:78;;8520:52;8565:6;8560:3;8553:4;8546:5;8542:16;8520:52;:::i;:::-;8597:29;8619:6;8597:29;:::i;:::-;8592:3;8588:39;8581:46;;8361:272;8269:364;;;;:::o;8639:377::-;8745:3;8773:39;8806:5;8773:39;:::i;:::-;8828:89;8910:6;8905:3;8828:89;:::i;:::-;8821:96;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:6;8998:3;8994:16;8987:23;;8749:267;8639:377;;;;:::o;9046:845::-;9149:3;9186:5;9180:12;9215:36;9241:9;9215:36;:::i;:::-;9267:89;9349:6;9344:3;9267:89;:::i;:::-;9260:96;;9387:1;9376:9;9372:17;9403:1;9398:137;;;;9549:1;9544:341;;;;9365:520;;9398:137;9482:4;9478:9;9467;9463:25;9458:3;9451:38;9518:6;9513:3;9509:16;9502:23;;9398:137;;9544:341;9611:38;9643:5;9611:38;:::i;:::-;9671:1;9685:154;9699:6;9696:1;9693:13;9685:154;;;9773:7;9767:14;9763:1;9758:3;9754:11;9747:35;9823:1;9814:7;9810:15;9799:26;;9721:4;9718:1;9714:12;9709:17;;9685:154;;;9868:6;9863:3;9859:16;9852:23;;9551:334;;9365:520;;9153:738;;9046:845;;;;:::o;9897:366::-;10039:3;10060:67;10124:2;10119:3;10060:67;:::i;:::-;10053:74;;10136:93;10225:3;10136:93;:::i;:::-;10254:2;10249:3;10245:12;10238:19;;9897:366;;;:::o;10269:::-;10411:3;10432:67;10496:2;10491:3;10432:67;:::i;:::-;10425:74;;10508:93;10597:3;10508:93;:::i;:::-;10626:2;10621:3;10617:12;10610:19;;10269:366;;;:::o;10641:::-;10783:3;10804:67;10868:2;10863:3;10804:67;:::i;:::-;10797:74;;10880:93;10969:3;10880:93;:::i;:::-;10998:2;10993:3;10989:12;10982:19;;10641:366;;;:::o;11013:::-;11155:3;11176:67;11240:2;11235:3;11176:67;:::i;:::-;11169:74;;11252:93;11341:3;11252:93;:::i;:::-;11370:2;11365:3;11361:12;11354:19;;11013:366;;;:::o;11385:::-;11527:3;11548:67;11612:2;11607:3;11548:67;:::i;:::-;11541:74;;11624:93;11713:3;11624:93;:::i;:::-;11742:2;11737:3;11733:12;11726:19;;11385:366;;;:::o;11757:::-;11899:3;11920:67;11984:2;11979:3;11920:67;:::i;:::-;11913:74;;11996:93;12085:3;11996:93;:::i;:::-;12114:2;12109:3;12105:12;12098:19;;11757:366;;;:::o;12129:::-;12271:3;12292:67;12356:2;12351:3;12292:67;:::i;:::-;12285:74;;12368:93;12457:3;12368:93;:::i;:::-;12486:2;12481:3;12477:12;12470:19;;12129:366;;;:::o;12501:::-;12643:3;12664:67;12728:2;12723:3;12664:67;:::i;:::-;12657:74;;12740:93;12829:3;12740:93;:::i;:::-;12858:2;12853:3;12849:12;12842:19;;12501:366;;;:::o;12873:::-;13015:3;13036:67;13100:2;13095:3;13036:67;:::i;:::-;13029:74;;13112:93;13201:3;13112:93;:::i;:::-;13230:2;13225:3;13221:12;13214:19;;12873:366;;;:::o;13245:::-;13387:3;13408:67;13472:2;13467:3;13408:67;:::i;:::-;13401:74;;13484:93;13573:3;13484:93;:::i;:::-;13602:2;13597:3;13593:12;13586:19;;13245:366;;;:::o;13617:::-;13759:3;13780:67;13844:2;13839:3;13780:67;:::i;:::-;13773:74;;13856:93;13945:3;13856:93;:::i;:::-;13974:2;13969:3;13965:12;13958:19;;13617:366;;;:::o;13989:::-;14131:3;14152:67;14216:2;14211:3;14152:67;:::i;:::-;14145:74;;14228:93;14317:3;14228:93;:::i;:::-;14346:2;14341:3;14337:12;14330:19;;13989:366;;;:::o;14361:::-;14503:3;14524:67;14588:2;14583:3;14524:67;:::i;:::-;14517:74;;14600:93;14689:3;14600:93;:::i;:::-;14718:2;14713:3;14709:12;14702:19;;14361:366;;;:::o;14733:398::-;14892:3;14913:83;14994:1;14989:3;14913:83;:::i;:::-;14906:90;;15005:93;15094:3;15005:93;:::i;:::-;15123:1;15118:3;15114:11;15107:18;;14733:398;;;:::o;15137:366::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:::-;16023:3;16044:67;16108:2;16103:3;16044:67;:::i;:::-;16037:74;;16120:93;16209:3;16120:93;:::i;:::-;16238:2;16233:3;16229:12;16222:19;;15881:366;;;:::o;16253:::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:::-;17511:3;17532:67;17596:2;17591:3;17532:67;:::i;:::-;17525:74;;17608:93;17697:3;17608:93;:::i;:::-;17726:2;17721:3;17717:12;17710:19;;17369:366;;;:::o;17741:::-;17883:3;17904:67;17968:2;17963:3;17904:67;:::i;:::-;17897:74;;17980:93;18069:3;17980:93;:::i;:::-;18098:2;18093:3;18089:12;18082:19;;17741:366;;;:::o;18183:697::-;18342:4;18337:3;18333:14;18429:4;18422:5;18418:16;18412:23;18448:63;18505:4;18500:3;18496:14;18482:12;18448:63;:::i;:::-;18357:164;18613:4;18606:5;18602:16;18596:23;18632:61;18687:4;18682:3;18678:14;18664:12;18632:61;:::i;:::-;18531:172;18787:4;18780:5;18776:16;18770:23;18806:57;18857:4;18852:3;18848:14;18834:12;18806:57;:::i;:::-;18713:160;18311:569;18183:697;;:::o;18886:118::-;18973:24;18991:5;18973:24;:::i;:::-;18968:3;18961:37;18886:118;;:::o;19010:105::-;19085:23;19102:5;19085:23;:::i;:::-;19080:3;19073:36;19010:105;;:::o;19121:589::-;19346:3;19368:95;19459:3;19450:6;19368:95;:::i;:::-;19361:102;;19480:95;19571:3;19562:6;19480:95;:::i;:::-;19473:102;;19592:92;19680:3;19671:6;19592:92;:::i;:::-;19585:99;;19701:3;19694:10;;19121:589;;;;;;:::o;19716:379::-;19900:3;19922:147;20065:3;19922:147;:::i;:::-;19915:154;;20086:3;20079:10;;19716:379;;;:::o;20101:222::-;20194:4;20232:2;20221:9;20217:18;20209:26;;20245:71;20313:1;20302:9;20298:17;20289:6;20245:71;:::i;:::-;20101:222;;;;:::o;20329:640::-;20524:4;20562:3;20551:9;20547:19;20539:27;;20576:71;20644:1;20633:9;20629:17;20620:6;20576:71;:::i;:::-;20657:72;20725:2;20714:9;20710:18;20701:6;20657:72;:::i;:::-;20739;20807:2;20796:9;20792:18;20783:6;20739:72;:::i;:::-;20858:9;20852:4;20848:20;20843:2;20832:9;20828:18;20821:48;20886:76;20957:4;20948:6;20886:76;:::i;:::-;20878:84;;20329:640;;;;;;;:::o;20975:210::-;21062:4;21100:2;21089:9;21085:18;21077:26;;21113:65;21175:1;21164:9;21160:17;21151:6;21113:65;:::i;:::-;20975:210;;;;:::o;21191:313::-;21304:4;21342:2;21331:9;21327:18;21319:26;;21391:9;21385:4;21381:20;21377:1;21366:9;21362:17;21355:47;21419:78;21492:4;21483:6;21419:78;:::i;:::-;21411:86;;21191:313;;;;:::o;21510:419::-;21676:4;21714:2;21703:9;21699:18;21691:26;;21763:9;21757:4;21753:20;21749:1;21738:9;21734:17;21727:47;21791:131;21917:4;21791:131;:::i;:::-;21783:139;;21510:419;;;:::o;21935:::-;22101:4;22139:2;22128:9;22124:18;22116:26;;22188:9;22182:4;22178:20;22174:1;22163:9;22159:17;22152:47;22216:131;22342:4;22216:131;:::i;:::-;22208:139;;21935:419;;;:::o;22360:::-;22526:4;22564:2;22553:9;22549:18;22541:26;;22613:9;22607:4;22603:20;22599:1;22588:9;22584:17;22577:47;22641:131;22767:4;22641:131;:::i;:::-;22633:139;;22360:419;;;:::o;22785:::-;22951:4;22989:2;22978:9;22974:18;22966:26;;23038:9;23032:4;23028:20;23024:1;23013:9;23009:17;23002:47;23066:131;23192:4;23066:131;:::i;:::-;23058:139;;22785:419;;;:::o;23210:::-;23376:4;23414:2;23403:9;23399:18;23391:26;;23463:9;23457:4;23453:20;23449:1;23438:9;23434:17;23427:47;23491:131;23617:4;23491:131;:::i;:::-;23483:139;;23210:419;;;:::o;23635:::-;23801:4;23839:2;23828:9;23824:18;23816:26;;23888:9;23882:4;23878:20;23874:1;23863:9;23859:17;23852:47;23916:131;24042:4;23916:131;:::i;:::-;23908:139;;23635:419;;;:::o;24060:::-;24226:4;24264:2;24253:9;24249:18;24241:26;;24313:9;24307:4;24303:20;24299:1;24288:9;24284:17;24277:47;24341:131;24467:4;24341:131;:::i;:::-;24333:139;;24060:419;;;:::o;24485:::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:::-;25076:4;25114:2;25103:9;25099:18;25091:26;;25163:9;25157:4;25153:20;25149:1;25138:9;25134:17;25127:47;25191:131;25317:4;25191:131;:::i;:::-;25183:139;;24910:419;;;:::o;25335:::-;25501:4;25539:2;25528:9;25524:18;25516:26;;25588:9;25582:4;25578:20;25574:1;25563:9;25559:17;25552:47;25616:131;25742:4;25616:131;:::i;:::-;25608:139;;25335:419;;;:::o;25760:::-;25926:4;25964:2;25953:9;25949:18;25941:26;;26013:9;26007:4;26003:20;25999:1;25988:9;25984:17;25977:47;26041:131;26167:4;26041:131;:::i;:::-;26033:139;;25760:419;;;:::o;26185:::-;26351:4;26389:2;26378:9;26374:18;26366:26;;26438:9;26432:4;26428:20;26424:1;26413:9;26409:17;26402:47;26466:131;26592:4;26466:131;:::i;:::-;26458:139;;26185:419;;;:::o;26610:::-;26776:4;26814:2;26803:9;26799:18;26791:26;;26863:9;26857:4;26853:20;26849:1;26838:9;26834:17;26827:47;26891:131;27017:4;26891:131;:::i;:::-;26883:139;;26610:419;;;:::o;27035:::-;27201:4;27239:2;27228:9;27224:18;27216:26;;27288:9;27282:4;27278:20;27274:1;27263:9;27259:17;27252:47;27316:131;27442:4;27316:131;:::i;:::-;27308:139;;27035:419;;;:::o;27460:::-;27626:4;27664:2;27653:9;27649:18;27641:26;;27713:9;27707:4;27703:20;27699:1;27688:9;27684:17;27677:47;27741:131;27867:4;27741:131;:::i;:::-;27733:139;;27460:419;;;:::o;27885:::-;28051:4;28089:2;28078:9;28074:18;28066:26;;28138:9;28132:4;28128:20;28124:1;28113:9;28109:17;28102:47;28166:131;28292:4;28166:131;:::i;:::-;28158:139;;27885:419;;;:::o;28310:::-;28476:4;28514:2;28503:9;28499:18;28491:26;;28563:9;28557:4;28553:20;28549:1;28538:9;28534:17;28527:47;28591:131;28717:4;28591:131;:::i;:::-;28583:139;;28310:419;;;:::o;28735:::-;28901:4;28939:2;28928:9;28924:18;28916:26;;28988:9;28982:4;28978:20;28974:1;28963:9;28959:17;28952:47;29016:131;29142:4;29016:131;:::i;:::-;29008:139;;28735:419;;;:::o;29160:::-;29326:4;29364:2;29353:9;29349:18;29341:26;;29413:9;29407:4;29403:20;29399:1;29388:9;29384:17;29377:47;29441:131;29567:4;29441:131;:::i;:::-;29433:139;;29160:419;;;:::o;29585:::-;29751:4;29789:2;29778:9;29774:18;29766:26;;29838:9;29832:4;29828:20;29824:1;29813:9;29809:17;29802:47;29866:131;29992:4;29866:131;:::i;:::-;29858:139;;29585:419;;;:::o;30010:::-;30176:4;30214:2;30203:9;30199:18;30191:26;;30263:9;30257:4;30253:20;30249:1;30238:9;30234:17;30227:47;30291:131;30417:4;30291:131;:::i;:::-;30283:139;;30010:419;;;:::o;30435:346::-;30590:4;30628:2;30617:9;30613:18;30605:26;;30641:133;30771:1;30760:9;30756:17;30747:6;30641:133;:::i;:::-;30435:346;;;;:::o;30787:222::-;30880:4;30918:2;30907:9;30903:18;30895:26;;30931:71;30999:1;30988:9;30984:17;30975:6;30931:71;:::i;:::-;30787:222;;;;:::o;31015:129::-;31049:6;31076:20;;:::i;:::-;31066:30;;31105:33;31133:4;31125:6;31105:33;:::i;:::-;31015:129;;;:::o;31150:75::-;31183:6;31216:2;31210:9;31200:19;;31150:75;:::o;31231:307::-;31292:4;31382:18;31374:6;31371:30;31368:56;;;31404:18;;:::i;:::-;31368:56;31442:29;31464:6;31442:29;:::i;:::-;31434:37;;31526:4;31520;31516:15;31508:23;;31231:307;;;:::o;31544:141::-;31593:4;31616:3;31608:11;;31639:3;31636:1;31629:14;31673:4;31670:1;31660:18;31652:26;;31544:141;;;:::o;31691:98::-;31742:6;31776:5;31770:12;31760:22;;31691:98;;;:::o;31795:99::-;31847:6;31881:5;31875:12;31865:22;;31795:99;;;:::o;31900:168::-;31983:11;32017:6;32012:3;32005:19;32057:4;32052:3;32048:14;32033:29;;31900:168;;;;:::o;32074:147::-;32175:11;32212:3;32197:18;;32074:147;;;;:::o;32227:169::-;32311:11;32345:6;32340:3;32333:19;32385:4;32380:3;32376:14;32361:29;;32227:169;;;;:::o;32402:148::-;32504:11;32541:3;32526:18;;32402:148;;;;:::o;32556:305::-;32596:3;32615:20;32633:1;32615:20;:::i;:::-;32610:25;;32649:20;32667:1;32649:20;:::i;:::-;32644:25;;32803:1;32735:66;32731:74;32728:1;32725:81;32722:107;;;32809:18;;:::i;:::-;32722:107;32853:1;32850;32846:9;32839:16;;32556:305;;;;:::o;32867:185::-;32907:1;32924:20;32942:1;32924:20;:::i;:::-;32919:25;;32958:20;32976:1;32958:20;:::i;:::-;32953:25;;32997:1;32987:35;;33002:18;;:::i;:::-;32987:35;33044:1;33041;33037:9;33032:14;;32867:185;;;;:::o;33058:348::-;33098:7;33121:20;33139:1;33121:20;:::i;:::-;33116:25;;33155:20;33173:1;33155:20;:::i;:::-;33150:25;;33343:1;33275:66;33271:74;33268:1;33265:81;33260:1;33253:9;33246:17;33242:105;33239:131;;;33350:18;;:::i;:::-;33239:131;33398:1;33395;33391:9;33380:20;;33058:348;;;;:::o;33412:191::-;33452:4;33472:20;33490:1;33472:20;:::i;:::-;33467:25;;33506:20;33524:1;33506:20;:::i;:::-;33501:25;;33545:1;33542;33539:8;33536:34;;;33550:18;;:::i;:::-;33536:34;33595:1;33592;33588:9;33580:17;;33412:191;;;;:::o;33609:185::-;33647:4;33667:18;33683:1;33667:18;:::i;:::-;33662:23;;33699:18;33715:1;33699:18;:::i;:::-;33694:23;;33736:1;33733;33730:8;33727:34;;;33741:18;;:::i;:::-;33727:34;33786:1;33783;33779:9;33771:17;;33609:185;;;;:::o;33800:96::-;33837:7;33866:24;33884:5;33866:24;:::i;:::-;33855:35;;33800:96;;;:::o;33902:90::-;33936:7;33979:5;33972:13;33965:21;33954:32;;33902:90;;;:::o;33998:149::-;34034:7;34074:66;34067:5;34063:78;34052:89;;33998:149;;;:::o;34153:126::-;34190:7;34230:42;34223:5;34219:54;34208:65;;34153:126;;;:::o;34285:77::-;34322:7;34351:5;34340:16;;34285:77;;;:::o;34368:101::-;34404:7;34444:18;34437:5;34433:30;34422:41;;34368:101;;;:::o;34475:86::-;34510:7;34550:4;34543:5;34539:16;34528:27;;34475:86;;;:::o;34567:154::-;34651:6;34646:3;34641;34628:30;34713:1;34704:6;34699:3;34695:16;34688:27;34567:154;;;:::o;34727:307::-;34795:1;34805:113;34819:6;34816:1;34813:13;34805:113;;;34904:1;34899:3;34895:11;34889:18;34885:1;34880:3;34876:11;34869:39;34841:2;34838:1;34834:10;34829:15;;34805:113;;;34936:6;34933:1;34930:13;34927:101;;;35016:1;35007:6;35002:3;34998:16;34991:27;34927:101;34776:258;34727:307;;;:::o;35040:171::-;35079:3;35102:24;35120:5;35102:24;:::i;:::-;35093:33;;35148:4;35141:5;35138:15;35135:41;;;35156:18;;:::i;:::-;35135:41;35203:1;35196:5;35192:13;35185:20;;35040:171;;;:::o;35217:320::-;35261:6;35298:1;35292:4;35288:12;35278:22;;35345:1;35339:4;35335:12;35366:18;35356:81;;35422:4;35414:6;35410:17;35400:27;;35356:81;35484:2;35476:6;35473:14;35453:18;35450:38;35447:84;;;35503:18;;:::i;:::-;35447:84;35268:269;35217:320;;;:::o;35543:281::-;35626:27;35648:4;35626:27;:::i;:::-;35618:6;35614:40;35756:6;35744:10;35741:22;35720:18;35708:10;35705:34;35702:62;35699:88;;;35767:18;;:::i;:::-;35699:88;35807:10;35803:2;35796:22;35586:238;35543:281;;:::o;35830:233::-;35869:3;35892:24;35910:5;35892:24;:::i;:::-;35883:33;;35938:66;35931:5;35928:77;35925:103;;;36008:18;;:::i;:::-;35925:103;36055:1;36048:5;36044:13;36037:20;;35830:233;;;:::o;36069:176::-;36101:1;36118:20;36136:1;36118:20;:::i;:::-;36113:25;;36152:20;36170:1;36152:20;:::i;:::-;36147:25;;36191:1;36181:35;;36196:18;;:::i;:::-;36181:35;36237:1;36234;36230:9;36225:14;;36069:176;;;;:::o;36251:180::-;36299:77;36296:1;36289:88;36396:4;36393:1;36386:15;36420:4;36417:1;36410:15;36437:180;36485:77;36482:1;36475:88;36582:4;36579:1;36572:15;36606:4;36603:1;36596:15;36623:180;36671:77;36668:1;36661:88;36768:4;36765:1;36758:15;36792:4;36789:1;36782:15;36809:180;36857:77;36854:1;36847:88;36954:4;36951:1;36944:15;36978:4;36975:1;36968:15;36995:180;37043:77;37040:1;37033:88;37140:4;37137:1;37130:15;37164:4;37161:1;37154:15;37181:117;37290:1;37287;37280:12;37304:117;37413:1;37410;37403:12;37427:117;37536:1;37533;37526:12;37550:117;37659:1;37656;37649:12;37673:117;37782:1;37779;37772:12;37796:117;37905:1;37902;37895:12;37919:102;37960:6;38011:2;38007:7;38002:2;37995:5;37991:14;37987:28;37977:38;;37919:102;;;:::o;38027:221::-;38167:34;38163:1;38155:6;38151:14;38144:58;38236:4;38231:2;38223:6;38219:15;38212:29;38027:221;:::o;38254:225::-;38394:34;38390:1;38382:6;38378:14;38371:58;38463:8;38458:2;38450:6;38446:15;38439:33;38254:225;:::o;38485:229::-;38625:34;38621:1;38613:6;38609:14;38602:58;38694:12;38689:2;38681:6;38677:15;38670:37;38485:229;:::o;38720:222::-;38860:34;38856:1;38848:6;38844:14;38837:58;38929:5;38924:2;38916:6;38912:15;38905:30;38720:222;:::o;38948:236::-;39088:34;39084:1;39076:6;39072:14;39065:58;39157:19;39152:2;39144:6;39140:15;39133:44;38948:236;:::o;39190:180::-;39330:32;39326:1;39318:6;39314:14;39307:56;39190:180;:::o;39376:244::-;39516:34;39512:1;39504:6;39500:14;39493:58;39585:27;39580:2;39572:6;39568:15;39561:52;39376:244;:::o;39626:230::-;39766:34;39762:1;39754:6;39750:14;39743:58;39835:13;39830:2;39822:6;39818:15;39811:38;39626:230;:::o;39862:168::-;40002:20;39998:1;39990:6;39986:14;39979:44;39862:168;:::o;40036:182::-;40176:34;40172:1;40164:6;40160:14;40153:58;40036:182;:::o;40224:234::-;40364:34;40360:1;40352:6;40348:14;40341:58;40433:17;40428:2;40420:6;40416:15;40409:42;40224:234;:::o;40464:176::-;40604:28;40600:1;40592:6;40588:14;40581:52;40464:176;:::o;40646:221::-;40786:34;40782:1;40774:6;40770:14;40763:58;40855:4;40850:2;40842:6;40838:15;40831:29;40646:221;:::o;40873:114::-;;:::o;40993:166::-;41133:18;41129:1;41121:6;41117:14;41110:42;40993:166;:::o;41165:238::-;41305:34;41301:1;41293:6;41289:14;41282:58;41374:21;41369:2;41361:6;41357:15;41350:46;41165:238;:::o;41409:172::-;41549:24;41545:1;41537:6;41533:14;41526:48;41409:172;:::o;41587:::-;41727:24;41723:1;41715:6;41711:14;41704:48;41587:172;:::o;41765:233::-;41905:34;41901:1;41893:6;41889:14;41882:58;41974:16;41969:2;41961:6;41957:15;41950:41;41765:233;:::o;42004:181::-;42144:33;42140:1;42132:6;42128:14;42121:57;42004:181;:::o;42191:234::-;42331:34;42327:1;42319:6;42315:14;42308:58;42400:17;42395:2;42387:6;42383:15;42376:42;42191:234;:::o;42431:232::-;42571:34;42567:1;42559:6;42555:14;42548:58;42640:15;42635:2;42627:6;42623:15;42616:40;42431:232;:::o;42669:122::-;42742:24;42760:5;42742:24;:::i;:::-;42735:5;42732:35;42722:63;;42781:1;42778;42771:12;42722:63;42669:122;:::o;42797:116::-;42867:21;42882:5;42867:21;:::i;:::-;42860:5;42857:32;42847:60;;42903:1;42900;42893:12;42847:60;42797:116;:::o;42919:120::-;42991:23;43008:5;42991:23;:::i;:::-;42984:5;42981:34;42971:62;;43029:1;43026;43019:12;42971:62;42919:120;:::o;43045:122::-;43118:24;43136:5;43118:24;:::i;:::-;43111:5;43108:35;43098:63;;43157:1;43154;43147:12;43098:63;43045:122;:::o;43173:118::-;43244:22;43260:5;43244:22;:::i;:::-;43237:5;43234:33;43224:61;;43281:1;43278;43271:12;43224:61;43173:118;:::o

Swarm Source

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