ETH Price: $3,301.96 (-3.44%)
Gas: 14 Gwei

Token

Distopians Manga (DMANGA)
 

Overview

Max Total Supply

0 DMANGA

Holders

156

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 DMANGA
0xb0266ee121dfdcd712657068497257f2b3523865
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:
DistopiansManga

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 13: DistopiansManga.sol
pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./ERC721Enumerable.sol";
import "./Ownable.sol";

abstract contract FLS {
  function ownerOf(uint256 tokenId) public virtual view returns (address);
  function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256);
  function balanceOf(address owner) external virtual view returns (uint256 balance);
}

abstract contract CATS {
  function ownerOf(uint256 tokenId) public virtual view returns (address);
  function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256);
  function balanceOf(address owner) external virtual view returns (uint256 balance);
}

contract DistopiansManga is ERC721Enumerable, Ownable {

  FLS private fls;
  CATS private cats;
  uint256 public saleIsActive;
  uint256 public preSaleIsActive;
  uint256 public maxCopies;
  uint256 public totalCopies;
  string private baseURI;
  uint256 public reservedCounter;
  uint256 public maxReserved;
  uint256 public price;
  uint256 public preSaleCounter;
  uint256 public prePreSaleCounter;
  uint256 public totalCounter;
  address public flsAddress;
  address public catsAddress;

  constructor() ERC721("Distopians Manga", "DMANGA") { 
    maxCopies = 20;
    totalCopies = 3500;
    saleIsActive = 0;
    preSaleIsActive = 0;
    reservedCounter = 0;
    maxReserved = 50;
    totalCounter = 0;
    price = 35000000000000000;
    baseURI = "";
    flsAddress = 0xf11B3a52e636dD04aa740cC97C5813CAAb0b75d0;
    catsAddress = 0x568a1f8554Edcea5CB5F94E463ac69A9C49c0A2d;
    fls = FLS(flsAddress);
    cats = CATS(catsAddress);
  }

  function isMinted(uint256 tokenId) external view returns (bool) {
    require(tokenId <= totalCopies, "tokenId outside collection bounds");

    return _exists(tokenId);
  }

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

  function setBaseURI(string memory uri) public onlyOwner {
    baseURI = uri;
  }

  function mintReservedCopy(uint256 numberOfTokens) public onlyOwner {
    require(numberOfTokens <= maxReserved, "Can only mint 50 copies at a time");
    require((reservedCounter + numberOfTokens) <= maxReserved, "Purchase would exceed max supply of Reserved copies");

    for(uint i = 0; i < numberOfTokens; i++) {
      _safeMint(msg.sender, (reservedCounter+1));
      
      reservedCounter = reservedCounter + 1;
      totalCounter = totalCounter + 1;
    }
  }

  function mintCopy(uint256 numberOfTokens) public payable {
    require(numberOfTokens <= maxCopies, "Can only mint 20 copies at a time");
    require(saleIsActive == 1, "Sale must be active to mint a copies");
    require((totalCounter + numberOfTokens) <= totalCopies, "Purchase would exceed max supply of copies");
    require((price * numberOfTokens) <= msg.value, "Too little ETH send");

    for(uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, (i+100)))) % (totalCopies- maxReserved);
            mintIndex = mintIndex + maxReserved + 1;
            if (totalCounter < totalCopies) {
                while(_exists((mintIndex))) {
                    mintIndex = mintIndex + 1;
                    if (mintIndex > (totalCopies)) {
                      mintIndex = maxReserved + 1;
                    }
                }
                _safeMint(msg.sender, mintIndex);
                totalCounter = totalCounter + 1;
            }
        }
  }

    function mintFreeCopy(uint256 numberOfTokens) public payable {
    require(numberOfTokens <= maxCopies, "Can only mint 20 copies at a time");
    require(preSaleIsActive == 1, "Sale must be active to mint a copies");
    require((totalCounter + numberOfTokens) <= totalCopies, "Purchase would exceed max supply of copies");

    for(uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, (i+100)))) % (totalCopies- maxReserved);
            mintIndex = mintIndex + maxReserved + 1;
            if (totalCounter < totalCopies) {
                while(_exists((mintIndex))) {
                    mintIndex = mintIndex + 1;
                    if (mintIndex > (totalCopies)) {
                      mintIndex = maxReserved + 1;
                    }
                }
                _safeMint(msg.sender, mintIndex);
                totalCounter = totalCounter + 1;
            }
        }
  }

  function mintCopyPreSale(uint256 numberOfTokens) public payable {
    require(balanceOf(msg.sender)+numberOfTokens <= 5, "Can only mint 5 copies at a time");
    require(preSaleIsActive == 1, "Sale must be active to mint a copies");
    require((totalSupply() + numberOfTokens) <= totalCopies, "Purchase would exceed max supply of copies");
    require((price * numberOfTokens) <= msg.value, "Too little ETH send");

    for(uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, (i+100)))) % (totalCopies- maxReserved);
            mintIndex = mintIndex + maxReserved + 1;
            if (totalCounter < totalCopies) {
                while(_exists((mintIndex))) {
                    mintIndex = mintIndex + 1;
                    if (mintIndex > (totalCopies)) {
                      mintIndex = maxReserved + 1;
                    }
                }
                _safeMint(msg.sender, mintIndex);
                totalCounter = totalCounter + 1;
            }
        }
  }

  function mintPresaleFls(uint256 numberOfTokens, uint256 flsTokenId) public payable{
    require(balanceOf(msg.sender)+numberOfTokens <= 5, "Can only mint 5 copies at a time");
    require(preSaleIsActive == 1, "Sale must be active to mint a copies");
    require((totalSupply() + numberOfTokens) <= totalCopies, "Purchase would exceed max supply of copies");
    require((price * numberOfTokens) <= msg.value, "Too little ETH send");
    require(fls.ownerOf(flsTokenId) == msg.sender, "not an FLS holder");

    for(uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, (i+100)))) % (totalCopies- maxReserved);
            mintIndex = mintIndex + maxReserved + 1;
            if (totalCounter < totalCopies) {
                while(_exists((mintIndex))) {
                    mintIndex = mintIndex + 1;
                    if (mintIndex > (totalCopies)) {
                      mintIndex = maxReserved + 1;
                    }
                }
                _safeMint(msg.sender, mintIndex);
                totalCounter = totalCounter + 1;
            }
        }
  }

  function mintPresaleCats(uint256 numberOfTokens, uint256 catsTokenId) public payable {
    require(balanceOf(msg.sender)+numberOfTokens <= 5, "Can only mint 20 copies at a time");
    require(preSaleIsActive == 1, "Sale must be active to mint a copies");
    require((totalSupply() + numberOfTokens) <= totalCopies, "Purchase would exceed max supply of copies");
    require((price * numberOfTokens) <= msg.value, "Too little ETH send");
    require(cats.ownerOf(catsTokenId) == msg.sender, "not an ACA holder");

    for(uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, (i+100)))) % (totalCopies- maxReserved);
            mintIndex = mintIndex + maxReserved + 1;
            if (totalCounter < totalCopies) {
                while(_exists((mintIndex))) {
                    mintIndex = mintIndex + 1;
                    if (mintIndex > (totalCopies)) {
                      mintIndex = maxReserved + 1;
                    }
                }
                _safeMint(msg.sender, mintIndex);
                totalCounter = totalCounter + 1;
            }
        }
  }

    function flipSale(uint256 _saleState) public onlyOwner {
      saleIsActive = _saleState;
  }
    function flipPreSale(uint256 _saleState) public onlyOwner {
      preSaleIsActive = _saleState;
  }

    function withdraw() public payable onlyOwner{
        uint256 balance = address(this).balance;
        uint256 studio = balance / 100 * 20; 
        uint256 acc1 = balance / 100 * 5;
        uint256 acc2 = balance / 100 * 5;
        uint256 acc3 = balance / 100 * 40;
        uint256 acc4 = balance / 100 * 30;

        payable(0x388CcBf8c1A37F444DcFF6eDE0014DfA85BeDC1B).transfer(studio);
        payable(0x72B3639810ECfE3573B11c56AD4d52BC6A02B5B0).transfer(acc1);
        payable(0xa2F072e33e4d8f9e9231d8359725A4C059Ff596E).transfer(acc2);
        payable(0x73cd135Bea6B6071AE533b497193BE9299448579).transfer(acc3);
        payable(0x909957dcc1B114Fe262F4779e6aeD4d034D96B0f).transfer(acc4);
    }
    function setPrice(uint256 _newprice) public onlyOwner{
        require(_newprice >= 10000000000000000, "The price cannot be lower then 0.01 eth");
        price = _newprice;
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 13: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 13: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

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 5 of 13: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

File 6 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

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

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

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

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

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

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

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

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

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

File 7 of 13: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 8 of 13: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

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 9 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)

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 10 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

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 11 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"catsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_saleState","type":"uint256"}],"name":"flipPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_saleState","type":"uint256"}],"name":"flipSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCopies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintCopy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintCopyPreSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintFreeCopy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"catsTokenId","type":"uint256"}],"name":"mintPresaleCats","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"flsTokenId","type":"uint256"}],"name":"mintPresaleFls","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintReservedCopy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prePreSaleCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleIsActive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedCounter","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":"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":[],"name":"saleIsActive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newprice","type":"uint256"}],"name":"setPrice","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":"totalCopies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280601081526020017f446973746f7069616e73204d616e6761000000000000000000000000000000008152506040518060400160405280600681526020017f444d414e4741000000000000000000000000000000000000000000000000000081525081600090805190602001906200009692919062000385565b508060019080519060200190620000af92919062000385565b505050620000d2620000c6620002b760201b60201c565b620002bf60201b60201c565b6014600f81905550610dac6010819055506000600d819055506000600e81905550600060128190555060326013819055506000601781905550667c58508723800060148190555060405180602001604052806000815250601190805190602001906200014092919062000385565b5073f11b3a52e636dd04aa740cc97c5813caab0b75d0601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073568a1f8554edcea5cb5f94e463ac69a9c49c0a2d601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003939062000464565b90600052602060002090601f016020900481019282620003b7576000855562000403565b82601f10620003d257805160ff191683800117855562000403565b8280016001018555821562000403579182015b8281111562000402578251825591602001919060010190620003e5565b5b50905062000412919062000416565b5090565b5b808211156200043157600081600090555060010162000417565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200047d57607f821691505b6020821081141562000494576200049362000435565b5b50919050565b6151c780620004aa6000396000f3fe60806040526004361061025c5760003560e01c806370a0823111610144578063a9898fd9116100b6578063c87b56dd1161007a578063c87b56dd14610882578063d039e487146108bf578063e985e9c5146108ea578063eb8d244414610927578063f2fde38b14610952578063f6a31c661461097b5761025c565b8063a9898fd9146107bc578063add8462e146107e7578063b88d4fde14610803578063bb9a08321461082c578063c21f95cb146108575761025c565b806395d89b411161010857806395d89b41146106cd57806396596532146106f857806397feba9d146107215780639e2b5ebf1461074c578063a035b1fe14610768578063a22cb465146107935761025c565b806370a08231146105fc578063715018a6146106395780637815f360146106505780638da5cb5b1461067957806391b7f5ed146106a45761025c565b80632933e88b116101dd57806342842e0e116101a157806342842e0e146104e95780634f6ccce71461051257806355f804b31461054f5780636352211e146105785780636c902f17146105b55780636fd6aae7146105e05761025c565b80632933e88b1461041e5780632f745c591461044957806333c41a90146104865780633c9e8433146104c35780633ccfd60b146104df5761025c565b8063095ea7b311610224578063095ea7b31461035a5780630c970b1d1461038357806318160ddd1461039f5780631f0234d8146103ca57806323b872dd146103f55761025c565b806301ffc9a71461026157806304285a0c1461029e578063049f21e3146102c957806306fdde03146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061370e565b6109a6565b6040516102959190613756565b60405180910390f35b3480156102aa57600080fd5b506102b3610a20565b6040516102c0919061378a565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906137d1565b610a26565b005b3480156102fe57600080fd5b50610307610aac565b6040516103149190613897565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906137d1565b610b3e565b60405161035191906138fa565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613941565b610bc3565b005b61039d60048036038101906103989190613981565b610cdb565b005b3480156103ab57600080fd5b506103b461102a565b6040516103c1919061378a565b60405180910390f35b3480156103d657600080fd5b506103df611037565b6040516103ec919061378a565b60405180910390f35b34801561040157600080fd5b5061041c600480360381019061041791906139c1565b61103d565b005b34801561042a57600080fd5b5061043361109d565b604051610440919061378a565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613941565b6110a3565b60405161047d919061378a565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906137d1565b611148565b6040516104ba9190613756565b60405180910390f35b6104dd60048036038101906104d89190613981565b61119f565b005b6104e76114ee565b005b3480156104f557600080fd5b50610510600480360381019061050b91906139c1565b6117cf565b005b34801561051e57600080fd5b50610539600480360381019061053491906137d1565b6117ef565b604051610546919061378a565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613b49565b611860565b005b34801561058457600080fd5b5061059f600480360381019061059a91906137d1565b6118f6565b6040516105ac91906138fa565b60405180910390f35b3480156105c157600080fd5b506105ca6119a8565b6040516105d7919061378a565b60405180910390f35b6105fa60048036038101906105f591906137d1565b6119ae565b005b34801561060857600080fd5b50610623600480360381019061061e9190613b92565b611b8c565b604051610630919061378a565b60405180910390f35b34801561064557600080fd5b5061064e611c44565b005b34801561065c57600080fd5b50610677600480360381019061067291906137d1565b611ccc565b005b34801561068557600080fd5b5061068e611e43565b60405161069b91906138fa565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c691906137d1565b611e6d565b005b3480156106d957600080fd5b506106e2611f3d565b6040516106ef9190613897565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906137d1565b611fcf565b005b34801561072d57600080fd5b50610736612055565b604051610743919061378a565b60405180910390f35b610766600480360381019061076191906137d1565b61205b565b005b34801561077457600080fd5b5061077d6122a0565b60405161078a919061378a565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613beb565b6122a6565b005b3480156107c857600080fd5b506107d16122bc565b6040516107de919061378a565b60405180910390f35b61080160048036038101906107fc91906137d1565b6122c2565b005b34801561080f57600080fd5b5061082a60048036038101906108259190613ccc565b6124f0565b005b34801561083857600080fd5b50610841612552565b60405161084e91906138fa565b60405180910390f35b34801561086357600080fd5b5061086c612578565b60405161087991906138fa565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a491906137d1565b61259e565b6040516108b69190613897565b60405180910390f35b3480156108cb57600080fd5b506108d4612645565b6040516108e1919061378a565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c9190613d4f565b61264b565b60405161091e9190613756565b60405180910390f35b34801561093357600080fd5b5061093c6126df565b604051610949919061378a565b60405180910390f35b34801561095e57600080fd5b5061097960048036038101906109749190613b92565b6126e5565b005b34801561098757600080fd5b506109906127dd565b60405161099d919061378a565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a195750610a18826127e3565b5b9050919050565b60125481565b610a2e6128c5565b73ffffffffffffffffffffffffffffffffffffffff16610a4c611e43565b73ffffffffffffffffffffffffffffffffffffffff1614610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9990613ddb565b60405180910390fd5b80600e8190555050565b606060008054610abb90613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790613e2a565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b5050505050905090565b6000610b49826128cd565b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90613ece565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bce826118f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690613f60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5e6128c5565b73ffffffffffffffffffffffffffffffffffffffff161480610c8d5750610c8c81610c876128c5565b61264b565b5b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc390613ff2565b60405180910390fd5b610cd68383612939565b505050565b600582610ce733611b8c565b610cf19190614041565b1115610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990614109565b60405180910390fd5b6001600e5414610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e9061419b565b60405180910390fd5b60105482610d8361102a565b610d8d9190614041565b1115610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc59061422d565b60405180910390fd5b3482601454610ddd919061424d565b1115610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906142f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e90919061378a565b602060405180830381865afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190614328565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906143a1565b60405180910390fd5b60005b82811015611025576000601354601054610f4491906143c1565b4233606485610f539190614041565b604051602001610f659392919061445e565b6040516020818303038152906040528051906020012060001c610f8891906144ca565b9050600160135482610f9a9190614041565b610fa49190614041565b90506010546017541015611011575b610fbc816128cd565b15610ff157600181610fce9190614041565b9050601054811115610fec576001601354610fe99190614041565b90505b610fb3565b610ffb33826129f2565b600160175461100a9190614041565b6017819055505b50808061101d906144fb565b915050610f2a565b505050565b6000600880549050905090565b600e5481565b61104e6110486128c5565b82612a10565b61108d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611084906145b6565b60405180910390fd5b611098838383612aee565b505050565b60105481565b60006110ae83611b8c565b82106110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614648565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060105482111561118f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611186906146da565b60405180910390fd5b611198826128cd565b9050919050565b6005826111ab33611b8c565b6111b59190614041565b11156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614746565b60405180910390fd5b6001600e541461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061419b565b60405180910390fd5b6010548261124761102a565b6112519190614041565b1115611292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112899061422d565b60405180910390fd5b34826014546112a1919061424d565b11156112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d9906142f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611354919061378a565b602060405180830381865afa158015611371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113959190614328565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906147b2565b60405180910390fd5b60005b828110156114e957600060135460105461140891906143c1565b42336064856114179190614041565b6040516020016114299392919061445e565b6040516020818303038152906040528051906020012060001c61144c91906144ca565b905060016013548261145e9190614041565b6114689190614041565b905060105460175410156114d5575b611480816128cd565b156114b5576001816114929190614041565b90506010548111156114b05760016013546114ad9190614041565b90505b611477565b6114bf33826129f2565b60016017546114ce9190614041565b6017819055505b5080806114e1906144fb565b9150506113ee565b505050565b6114f66128c5565b73ffffffffffffffffffffffffffffffffffffffff16611514611e43565b73ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190613ddb565b60405180910390fd5b60004790506000601460648361158091906147d2565b61158a919061424d565b90506000600560648461159d91906147d2565b6115a7919061424d565b9050600060056064856115ba91906147d2565b6115c4919061424d565b9050600060286064866115d791906147d2565b6115e1919061424d565b90506000601e6064876115f491906147d2565b6115fe919061424d565b905073388ccbf8c1a37f444dcff6ede0014dfa85bedc1b73ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505015801561165a573d6000803e3d6000fd5b507372b3639810ecfe3573b11c56ad4d52bc6a02b5b073ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156116b5573d6000803e3d6000fd5b5073a2f072e33e4d8f9e9231d8359725a4c059ff596e73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611710573d6000803e3d6000fd5b507373cd135bea6b6071ae533b497193be929944857973ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561176b573d6000803e3d6000fd5b5073909957dcc1b114fe262f4779e6aed4d034d96b0f73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156117c6573d6000803e3d6000fd5b50505050505050565b6117ea838383604051806020016040528060008152506124f0565b505050565b60006117f961102a565b821061183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190614875565b60405180910390fd5b6008828154811061184e5761184d614895565b5b90600052602060002001549050919050565b6118686128c5565b73ffffffffffffffffffffffffffffffffffffffff16611886611e43565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613ddb565b60405180910390fd5b80601190805190602001906118f29291906135ff565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690614936565b60405180910390fd5b80915050919050565b60155481565b600f548111156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90614109565b60405180910390fd5b6001600e5414611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f9061419b565b60405180910390fd5b60105481601754611a499190614041565b1115611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a819061422d565b60405180910390fd5b60005b81811015611b88576000601354601054611aa791906143c1565b4233606485611ab69190614041565b604051602001611ac89392919061445e565b6040516020818303038152906040528051906020012060001c611aeb91906144ca565b9050600160135482611afd9190614041565b611b079190614041565b90506010546017541015611b74575b611b1f816128cd565b15611b5457600181611b319190614041565b9050601054811115611b4f576001601354611b4c9190614041565b90505b611b16565b611b5e33826129f2565b6001601754611b6d9190614041565b6017819055505b508080611b80906144fb565b915050611a8d565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906149c8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c4c6128c5565b73ffffffffffffffffffffffffffffffffffffffff16611c6a611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790613ddb565b60405180910390fd5b611cca6000612d4a565b565b611cd46128c5565b73ffffffffffffffffffffffffffffffffffffffff16611cf2611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613ddb565b60405180910390fd5b601354811115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490614a5a565b60405180910390fd5b60135481601254611d9e9190614041565b1115611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690614aec565b60405180910390fd5b60005b81811015611e3f57611e02336001601254611dfd9190614041565b6129f2565b6001601254611e119190614041565b6012819055506001601754611e269190614041565b6017819055508080611e37906144fb565b915050611de2565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e756128c5565b73ffffffffffffffffffffffffffffffffffffffff16611e93611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613ddb565b60405180910390fd5b662386f26fc10000811015611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90614b7e565b60405180910390fd5b8060148190555050565b606060018054611f4c90613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7890613e2a565b8015611fc55780601f10611f9a57610100808354040283529160200191611fc5565b820191906000526020600020905b815481529060010190602001808311611fa857829003601f168201915b5050505050905090565b611fd76128c5565b73ffffffffffffffffffffffffffffffffffffffff16611ff5611e43565b73ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290613ddb565b60405180910390fd5b80600d8190555050565b60175481565b60058161206733611b8c565b6120719190614041565b11156120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990614746565b60405180910390fd5b6001600e54146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061419b565b60405180910390fd5b6010548161210361102a565b61210d9190614041565b111561214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061422d565b60405180910390fd5b348160145461215d919061424d565b111561219e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612195906142f3565b60405180910390fd5b60005b8181101561229c5760006013546010546121bb91906143c1565b42336064856121ca9190614041565b6040516020016121dc9392919061445e565b6040516020818303038152906040528051906020012060001c6121ff91906144ca565b90506001601354826122119190614041565b61221b9190614041565b90506010546017541015612288575b612233816128cd565b15612268576001816122459190614041565b90506010548111156122635760016013546122609190614041565b90505b61222a565b61227233826129f2565b60016017546122819190614041565b6017819055505b508080612294906144fb565b9150506121a1565b5050565b60145481565b6122b86122b16128c5565b8383612e10565b5050565b60135481565b600f54811115612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90614109565b60405180910390fd5b6001600d541461234c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123439061419b565b60405180910390fd5b6010548160175461235d9190614041565b111561239e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959061422d565b60405180910390fd5b34816014546123ad919061424d565b11156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906142f3565b60405180910390fd5b60005b818110156124ec57600060135460105461240b91906143c1565b423360648561241a9190614041565b60405160200161242c9392919061445e565b6040516020818303038152906040528051906020012060001c61244f91906144ca565b90506001601354826124619190614041565b61246b9190614041565b905060105460175410156124d8575b612483816128cd565b156124b8576001816124959190614041565b90506010548111156124b35760016013546124b09190614041565b90505b61247a565b6124c233826129f2565b60016017546124d19190614041565b6017819055505b5080806124e4906144fb565b9150506123f1565b5050565b6125016124fb6128c5565b83612a10565b612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612537906145b6565b60405180910390fd5b61254c84848484612f7d565b50505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606125a9826128cd565b6125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90614c10565b60405180910390fd5b60006125f2612fd9565b90506000815111612612576040518060200160405280600081525061263d565b8061261c8461306b565b60405160200161262d929190614c6c565b6040516020818303038152906040525b915050919050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b6126ed6128c5565b73ffffffffffffffffffffffffffffffffffffffff1661270b611e43565b73ffffffffffffffffffffffffffffffffffffffff1614612761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275890613ddb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c890614d02565b60405180910390fd5b6127da81612d4a565b50565b60165481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128be57506128bd826131cc565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ac836118f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612a0c828260405180602001604052806000815250613236565b5050565b6000612a1b826128cd565b612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5190614d94565b60405180910390fd5b6000612a65836118f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ad457508373ffffffffffffffffffffffffffffffffffffffff16612abc84610b3e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ae55750612ae4818561264b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b0e826118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90614e26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcb90614eb8565b60405180910390fd5b612bdf838383613291565b612bea600082612939565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3a91906143c1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c919190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7690614f24565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f709190613756565b60405180910390a3505050565b612f88848484612aee565b612f9484848484613296565b612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614fb6565b60405180910390fd5b50505050565b606060118054612fe890613e2a565b80601f016020809104026020016040519081016040528092919081815260200182805461301490613e2a565b80156130615780601f1061303657610100808354040283529160200191613061565b820191906000526020600020905b81548152906001019060200180831161304457829003601f168201915b5050505050905090565b606060008214156130b3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131c7565b600082905060005b600082146130e55780806130ce906144fb565b915050600a826130de91906147d2565b91506130bb565b60008167ffffffffffffffff81111561310157613100613a1e565b5b6040519080825280601f01601f1916602001820160405280156131335781602001600182028036833780820191505090505b5090505b600085146131c05760018261314c91906143c1565b9150600a8561315b91906144ca565b60306131679190614041565b60f81b81838151811061317d5761317c614895565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131b991906147d2565b9450613137565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613240838361341e565b61324d6000848484613296565b61328c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328390614fb6565b60405180910390fd5b505050565b505050565b60006132b78473ffffffffffffffffffffffffffffffffffffffff166135ec565b15613411578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132e06128c5565b8786866040518563ffffffff1660e01b8152600401613302949392919061502b565b6020604051808303816000875af192505050801561333e57506040513d601f19601f8201168201806040525081019061333b919061508c565b60015b6133c1573d806000811461336e576040519150601f19603f3d011682016040523d82523d6000602084013e613373565b606091505b506000815114156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090614fb6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613416565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561348e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348590615105565b60405180910390fd5b613497816128cd565b156134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615171565b60405180910390fd5b6134e360008383613291565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135339190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461360b90613e2a565b90600052602060002090601f01602090048101928261362d5760008555613674565b82601f1061364657805160ff1916838001178555613674565b82800160010185558215613674579182015b82811115613673578251825591602001919060010190613658565b5b5090506136819190613685565b5090565b5b8082111561369e576000816000905550600101613686565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136eb816136b6565b81146136f657600080fd5b50565b600081359050613708816136e2565b92915050565b600060208284031215613724576137236136ac565b5b6000613732848285016136f9565b91505092915050565b60008115159050919050565b6137508161373b565b82525050565b600060208201905061376b6000830184613747565b92915050565b6000819050919050565b61378481613771565b82525050565b600060208201905061379f600083018461377b565b92915050565b6137ae81613771565b81146137b957600080fd5b50565b6000813590506137cb816137a5565b92915050565b6000602082840312156137e7576137e66136ac565b5b60006137f5848285016137bc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561383857808201518184015260208101905061381d565b83811115613847576000848401525b50505050565b6000601f19601f8301169050919050565b6000613869826137fe565b6138738185613809565b935061388381856020860161381a565b61388c8161384d565b840191505092915050565b600060208201905081810360008301526138b1818461385e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138e4826138b9565b9050919050565b6138f4816138d9565b82525050565b600060208201905061390f60008301846138eb565b92915050565b61391e816138d9565b811461392957600080fd5b50565b60008135905061393b81613915565b92915050565b60008060408385031215613958576139576136ac565b5b60006139668582860161392c565b9250506020613977858286016137bc565b9150509250929050565b60008060408385031215613998576139976136ac565b5b60006139a6858286016137bc565b92505060206139b7858286016137bc565b9150509250929050565b6000806000606084860312156139da576139d96136ac565b5b60006139e88682870161392c565b93505060206139f98682870161392c565b9250506040613a0a868287016137bc565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a568261384d565b810181811067ffffffffffffffff82111715613a7557613a74613a1e565b5b80604052505050565b6000613a886136a2565b9050613a948282613a4d565b919050565b600067ffffffffffffffff821115613ab457613ab3613a1e565b5b613abd8261384d565b9050602081019050919050565b82818337600083830152505050565b6000613aec613ae784613a99565b613a7e565b905082815260208101848484011115613b0857613b07613a19565b5b613b13848285613aca565b509392505050565b600082601f830112613b3057613b2f613a14565b5b8135613b40848260208601613ad9565b91505092915050565b600060208284031215613b5f57613b5e6136ac565b5b600082013567ffffffffffffffff811115613b7d57613b7c6136b1565b5b613b8984828501613b1b565b91505092915050565b600060208284031215613ba857613ba76136ac565b5b6000613bb68482850161392c565b91505092915050565b613bc88161373b565b8114613bd357600080fd5b50565b600081359050613be581613bbf565b92915050565b60008060408385031215613c0257613c016136ac565b5b6000613c108582860161392c565b9250506020613c2185828601613bd6565b9150509250929050565b600067ffffffffffffffff821115613c4657613c45613a1e565b5b613c4f8261384d565b9050602081019050919050565b6000613c6f613c6a84613c2b565b613a7e565b905082815260208101848484011115613c8b57613c8a613a19565b5b613c96848285613aca565b509392505050565b600082601f830112613cb357613cb2613a14565b5b8135613cc3848260208601613c5c565b91505092915050565b60008060008060808587031215613ce657613ce56136ac565b5b6000613cf48782880161392c565b9450506020613d058782880161392c565b9350506040613d16878288016137bc565b925050606085013567ffffffffffffffff811115613d3757613d366136b1565b5b613d4387828801613c9e565b91505092959194509250565b60008060408385031215613d6657613d656136ac565b5b6000613d748582860161392c565b9250506020613d858582860161392c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc5602083613809565b9150613dd082613d8f565b602082019050919050565b60006020820190508181036000830152613df481613db8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e4257607f821691505b60208210811415613e5657613e55613dfb565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613eb8602c83613809565b9150613ec382613e5c565b604082019050919050565b60006020820190508181036000830152613ee781613eab565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4a602183613809565b9150613f5582613eee565b604082019050919050565b60006020820190508181036000830152613f7981613f3d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613fdc603883613809565b9150613fe782613f80565b604082019050919050565b6000602082019050818103600083015261400b81613fcf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404c82613771565b915061405783613771565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561408c5761408b614012565b5b828201905092915050565b7f43616e206f6e6c79206d696e7420323020636f7069657320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006140f3602183613809565b91506140fe82614097565b604082019050919050565b60006020820190508181036000830152614122816140e6565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74206120636f60008201527f7069657300000000000000000000000000000000000000000000000000000000602082015250565b6000614185602483613809565b915061419082614129565b604082019050919050565b600060208201905081810360008301526141b481614178565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620636f7069657300000000000000000000000000000000000000000000602082015250565b6000614217602a83613809565b9150614222826141bb565b604082019050919050565b600060208201905081810360008301526142468161420a565b9050919050565b600061425882613771565b915061426383613771565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561429c5761429b614012565b5b828202905092915050565b7f546f6f206c6974746c65204554482073656e6400000000000000000000000000600082015250565b60006142dd601383613809565b91506142e8826142a7565b602082019050919050565b6000602082019050818103600083015261430c816142d0565b9050919050565b60008151905061432281613915565b92915050565b60006020828403121561433e5761433d6136ac565b5b600061434c84828501614313565b91505092915050565b7f6e6f7420616e2041434120686f6c646572000000000000000000000000000000600082015250565b600061438b601183613809565b915061439682614355565b602082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b60006143cc82613771565b91506143d783613771565b9250828210156143ea576143e9614012565b5b828203905092915050565b6000819050919050565b61441061440b82613771565b6143f5565b82525050565b60008160601b9050919050565b600061442e82614416565b9050919050565b600061444082614423565b9050919050565b614458614453826138d9565b614435565b82525050565b600061446a82866143ff565b60208201915061447a8285614447565b60148201915061448a82846143ff565b602082019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144d582613771565b91506144e083613771565b9250826144f0576144ef61449b565b5b828206905092915050565b600061450682613771565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561453957614538614012565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006145a0603183613809565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614632602b83613809565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f746f6b656e4964206f75747369646520636f6c6c656374696f6e20626f756e6460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c4602183613809565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f43616e206f6e6c79206d696e74203520636f7069657320617420612074696d65600082015250565b6000614730602083613809565b915061473b826146fa565b602082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f6e6f7420616e20464c5320686f6c646572000000000000000000000000000000600082015250565b600061479c601183613809565b91506147a782614766565b602082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b60006147dd82613771565b91506147e883613771565b9250826147f8576147f761449b565b5b828204905092915050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061485f602c83613809565b915061486a82614803565b604082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614920602983613809565b915061492b826148c4565b604082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006149b2602a83613809565b91506149bd82614956565b604082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f43616e206f6e6c79206d696e7420353020636f7069657320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a44602183613809565b9150614a4f826149e8565b604082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620526573657276656420636f7069657300000000000000000000000000602082015250565b6000614ad6603383613809565b9150614ae182614a7a565b604082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b7f5468652070726963652063616e6e6f74206265206c6f776572207468656e203060008201527f2e30312065746800000000000000000000000000000000000000000000000000602082015250565b6000614b68602783613809565b9150614b7382614b0c565b604082019050919050565b60006020820190508181036000830152614b9781614b5b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614bfa602f83613809565b9150614c0582614b9e565b604082019050919050565b60006020820190508181036000830152614c2981614bed565b9050919050565b600081905092915050565b6000614c46826137fe565b614c508185614c30565b9350614c6081856020860161381a565b80840191505092915050565b6000614c788285614c3b565b9150614c848284614c3b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cec602683613809565b9150614cf782614c90565b604082019050919050565b60006020820190508181036000830152614d1b81614cdf565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614d7e602c83613809565b9150614d8982614d22565b604082019050919050565b60006020820190508181036000830152614dad81614d71565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e10602983613809565b9150614e1b82614db4565b604082019050919050565b60006020820190508181036000830152614e3f81614e03565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ea2602483613809565b9150614ead82614e46565b604082019050919050565b60006020820190508181036000830152614ed181614e95565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614f0e601983613809565b9150614f1982614ed8565b602082019050919050565b60006020820190508181036000830152614f3d81614f01565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614fa0603283613809565b9150614fab82614f44565b604082019050919050565b60006020820190508181036000830152614fcf81614f93565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ffd82614fd6565b6150078185614fe1565b935061501781856020860161381a565b6150208161384d565b840191505092915050565b600060808201905061504060008301876138eb565b61504d60208301866138eb565b61505a604083018561377b565b818103606083015261506c8184614ff2565b905095945050505050565b600081519050615086816136e2565b92915050565b6000602082840312156150a2576150a16136ac565b5b60006150b084828501615077565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006150ef602083613809565b91506150fa826150b9565b602082019050919050565b6000602082019050818103600083015261511e816150e2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061515b601c83613809565b915061516682615125565b602082019050919050565b6000602082019050818103600083015261518a8161514e565b905091905056fea2646970667358221220262e9720696d49f7d8f6a7ae8010bd7219f694369b204095b3f880e30182a73664736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061025c5760003560e01c806370a0823111610144578063a9898fd9116100b6578063c87b56dd1161007a578063c87b56dd14610882578063d039e487146108bf578063e985e9c5146108ea578063eb8d244414610927578063f2fde38b14610952578063f6a31c661461097b5761025c565b8063a9898fd9146107bc578063add8462e146107e7578063b88d4fde14610803578063bb9a08321461082c578063c21f95cb146108575761025c565b806395d89b411161010857806395d89b41146106cd57806396596532146106f857806397feba9d146107215780639e2b5ebf1461074c578063a035b1fe14610768578063a22cb465146107935761025c565b806370a08231146105fc578063715018a6146106395780637815f360146106505780638da5cb5b1461067957806391b7f5ed146106a45761025c565b80632933e88b116101dd57806342842e0e116101a157806342842e0e146104e95780634f6ccce71461051257806355f804b31461054f5780636352211e146105785780636c902f17146105b55780636fd6aae7146105e05761025c565b80632933e88b1461041e5780632f745c591461044957806333c41a90146104865780633c9e8433146104c35780633ccfd60b146104df5761025c565b8063095ea7b311610224578063095ea7b31461035a5780630c970b1d1461038357806318160ddd1461039f5780631f0234d8146103ca57806323b872dd146103f55761025c565b806301ffc9a71461026157806304285a0c1461029e578063049f21e3146102c957806306fdde03146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061370e565b6109a6565b6040516102959190613756565b60405180910390f35b3480156102aa57600080fd5b506102b3610a20565b6040516102c0919061378a565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906137d1565b610a26565b005b3480156102fe57600080fd5b50610307610aac565b6040516103149190613897565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f91906137d1565b610b3e565b60405161035191906138fa565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613941565b610bc3565b005b61039d60048036038101906103989190613981565b610cdb565b005b3480156103ab57600080fd5b506103b461102a565b6040516103c1919061378a565b60405180910390f35b3480156103d657600080fd5b506103df611037565b6040516103ec919061378a565b60405180910390f35b34801561040157600080fd5b5061041c600480360381019061041791906139c1565b61103d565b005b34801561042a57600080fd5b5061043361109d565b604051610440919061378a565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613941565b6110a3565b60405161047d919061378a565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906137d1565b611148565b6040516104ba9190613756565b60405180910390f35b6104dd60048036038101906104d89190613981565b61119f565b005b6104e76114ee565b005b3480156104f557600080fd5b50610510600480360381019061050b91906139c1565b6117cf565b005b34801561051e57600080fd5b50610539600480360381019061053491906137d1565b6117ef565b604051610546919061378a565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613b49565b611860565b005b34801561058457600080fd5b5061059f600480360381019061059a91906137d1565b6118f6565b6040516105ac91906138fa565b60405180910390f35b3480156105c157600080fd5b506105ca6119a8565b6040516105d7919061378a565b60405180910390f35b6105fa60048036038101906105f591906137d1565b6119ae565b005b34801561060857600080fd5b50610623600480360381019061061e9190613b92565b611b8c565b604051610630919061378a565b60405180910390f35b34801561064557600080fd5b5061064e611c44565b005b34801561065c57600080fd5b50610677600480360381019061067291906137d1565b611ccc565b005b34801561068557600080fd5b5061068e611e43565b60405161069b91906138fa565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c691906137d1565b611e6d565b005b3480156106d957600080fd5b506106e2611f3d565b6040516106ef9190613897565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906137d1565b611fcf565b005b34801561072d57600080fd5b50610736612055565b604051610743919061378a565b60405180910390f35b610766600480360381019061076191906137d1565b61205b565b005b34801561077457600080fd5b5061077d6122a0565b60405161078a919061378a565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613beb565b6122a6565b005b3480156107c857600080fd5b506107d16122bc565b6040516107de919061378a565b60405180910390f35b61080160048036038101906107fc91906137d1565b6122c2565b005b34801561080f57600080fd5b5061082a60048036038101906108259190613ccc565b6124f0565b005b34801561083857600080fd5b50610841612552565b60405161084e91906138fa565b60405180910390f35b34801561086357600080fd5b5061086c612578565b60405161087991906138fa565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a491906137d1565b61259e565b6040516108b69190613897565b60405180910390f35b3480156108cb57600080fd5b506108d4612645565b6040516108e1919061378a565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c9190613d4f565b61264b565b60405161091e9190613756565b60405180910390f35b34801561093357600080fd5b5061093c6126df565b604051610949919061378a565b60405180910390f35b34801561095e57600080fd5b5061097960048036038101906109749190613b92565b6126e5565b005b34801561098757600080fd5b506109906127dd565b60405161099d919061378a565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a195750610a18826127e3565b5b9050919050565b60125481565b610a2e6128c5565b73ffffffffffffffffffffffffffffffffffffffff16610a4c611e43565b73ffffffffffffffffffffffffffffffffffffffff1614610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9990613ddb565b60405180910390fd5b80600e8190555050565b606060008054610abb90613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae790613e2a565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b5050505050905090565b6000610b49826128cd565b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90613ece565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bce826118f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690613f60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5e6128c5565b73ffffffffffffffffffffffffffffffffffffffff161480610c8d5750610c8c81610c876128c5565b61264b565b5b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc390613ff2565b60405180910390fd5b610cd68383612939565b505050565b600582610ce733611b8c565b610cf19190614041565b1115610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990614109565b60405180910390fd5b6001600e5414610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e9061419b565b60405180910390fd5b60105482610d8361102a565b610d8d9190614041565b1115610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc59061422d565b60405180910390fd5b3482601454610ddd919061424d565b1115610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e15906142f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610e90919061378a565b602060405180830381865afa158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190614328565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906143a1565b60405180910390fd5b60005b82811015611025576000601354601054610f4491906143c1565b4233606485610f539190614041565b604051602001610f659392919061445e565b6040516020818303038152906040528051906020012060001c610f8891906144ca565b9050600160135482610f9a9190614041565b610fa49190614041565b90506010546017541015611011575b610fbc816128cd565b15610ff157600181610fce9190614041565b9050601054811115610fec576001601354610fe99190614041565b90505b610fb3565b610ffb33826129f2565b600160175461100a9190614041565b6017819055505b50808061101d906144fb565b915050610f2a565b505050565b6000600880549050905090565b600e5481565b61104e6110486128c5565b82612a10565b61108d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611084906145b6565b60405180910390fd5b611098838383612aee565b505050565b60105481565b60006110ae83611b8c565b82106110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614648565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060105482111561118f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611186906146da565b60405180910390fd5b611198826128cd565b9050919050565b6005826111ab33611b8c565b6111b59190614041565b11156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90614746565b60405180910390fd5b6001600e541461123b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112329061419b565b60405180910390fd5b6010548261124761102a565b6112519190614041565b1115611292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112899061422d565b60405180910390fd5b34826014546112a1919061424d565b11156112e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d9906142f3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611354919061378a565b602060405180830381865afa158015611371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113959190614328565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906147b2565b60405180910390fd5b60005b828110156114e957600060135460105461140891906143c1565b42336064856114179190614041565b6040516020016114299392919061445e565b6040516020818303038152906040528051906020012060001c61144c91906144ca565b905060016013548261145e9190614041565b6114689190614041565b905060105460175410156114d5575b611480816128cd565b156114b5576001816114929190614041565b90506010548111156114b05760016013546114ad9190614041565b90505b611477565b6114bf33826129f2565b60016017546114ce9190614041565b6017819055505b5080806114e1906144fb565b9150506113ee565b505050565b6114f66128c5565b73ffffffffffffffffffffffffffffffffffffffff16611514611e43565b73ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190613ddb565b60405180910390fd5b60004790506000601460648361158091906147d2565b61158a919061424d565b90506000600560648461159d91906147d2565b6115a7919061424d565b9050600060056064856115ba91906147d2565b6115c4919061424d565b9050600060286064866115d791906147d2565b6115e1919061424d565b90506000601e6064876115f491906147d2565b6115fe919061424d565b905073388ccbf8c1a37f444dcff6ede0014dfa85bedc1b73ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f1935050505015801561165a573d6000803e3d6000fd5b507372b3639810ecfe3573b11c56ad4d52bc6a02b5b073ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156116b5573d6000803e3d6000fd5b5073a2f072e33e4d8f9e9231d8359725a4c059ff596e73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611710573d6000803e3d6000fd5b507373cd135bea6b6071ae533b497193be929944857973ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561176b573d6000803e3d6000fd5b5073909957dcc1b114fe262f4779e6aed4d034d96b0f73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156117c6573d6000803e3d6000fd5b50505050505050565b6117ea838383604051806020016040528060008152506124f0565b505050565b60006117f961102a565b821061183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190614875565b60405180910390fd5b6008828154811061184e5761184d614895565b5b90600052602060002001549050919050565b6118686128c5565b73ffffffffffffffffffffffffffffffffffffffff16611886611e43565b73ffffffffffffffffffffffffffffffffffffffff16146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613ddb565b60405180910390fd5b80601190805190602001906118f29291906135ff565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690614936565b60405180910390fd5b80915050919050565b60155481565b600f548111156119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90614109565b60405180910390fd5b6001600e5414611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f9061419b565b60405180910390fd5b60105481601754611a499190614041565b1115611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a819061422d565b60405180910390fd5b60005b81811015611b88576000601354601054611aa791906143c1565b4233606485611ab69190614041565b604051602001611ac89392919061445e565b6040516020818303038152906040528051906020012060001c611aeb91906144ca565b9050600160135482611afd9190614041565b611b079190614041565b90506010546017541015611b74575b611b1f816128cd565b15611b5457600181611b319190614041565b9050601054811115611b4f576001601354611b4c9190614041565b90505b611b16565b611b5e33826129f2565b6001601754611b6d9190614041565b6017819055505b508080611b80906144fb565b915050611a8d565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906149c8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c4c6128c5565b73ffffffffffffffffffffffffffffffffffffffff16611c6a611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790613ddb565b60405180910390fd5b611cca6000612d4a565b565b611cd46128c5565b73ffffffffffffffffffffffffffffffffffffffff16611cf2611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613ddb565b60405180910390fd5b601354811115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490614a5a565b60405180910390fd5b60135481601254611d9e9190614041565b1115611ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd690614aec565b60405180910390fd5b60005b81811015611e3f57611e02336001601254611dfd9190614041565b6129f2565b6001601254611e119190614041565b6012819055506001601754611e269190614041565b6017819055508080611e37906144fb565b915050611de2565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e756128c5565b73ffffffffffffffffffffffffffffffffffffffff16611e93611e43565b73ffffffffffffffffffffffffffffffffffffffff1614611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee090613ddb565b60405180910390fd5b662386f26fc10000811015611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90614b7e565b60405180910390fd5b8060148190555050565b606060018054611f4c90613e2a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7890613e2a565b8015611fc55780601f10611f9a57610100808354040283529160200191611fc5565b820191906000526020600020905b815481529060010190602001808311611fa857829003601f168201915b5050505050905090565b611fd76128c5565b73ffffffffffffffffffffffffffffffffffffffff16611ff5611e43565b73ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290613ddb565b60405180910390fd5b80600d8190555050565b60175481565b60058161206733611b8c565b6120719190614041565b11156120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990614746565b60405180910390fd5b6001600e54146120f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ee9061419b565b60405180910390fd5b6010548161210361102a565b61210d9190614041565b111561214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061422d565b60405180910390fd5b348160145461215d919061424d565b111561219e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612195906142f3565b60405180910390fd5b60005b8181101561229c5760006013546010546121bb91906143c1565b42336064856121ca9190614041565b6040516020016121dc9392919061445e565b6040516020818303038152906040528051906020012060001c6121ff91906144ca565b90506001601354826122119190614041565b61221b9190614041565b90506010546017541015612288575b612233816128cd565b15612268576001816122459190614041565b90506010548111156122635760016013546122609190614041565b90505b61222a565b61227233826129f2565b60016017546122819190614041565b6017819055505b508080612294906144fb565b9150506121a1565b5050565b60145481565b6122b86122b16128c5565b8383612e10565b5050565b60135481565b600f54811115612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90614109565b60405180910390fd5b6001600d541461234c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123439061419b565b60405180910390fd5b6010548160175461235d9190614041565b111561239e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123959061422d565b60405180910390fd5b34816014546123ad919061424d565b11156123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906142f3565b60405180910390fd5b60005b818110156124ec57600060135460105461240b91906143c1565b423360648561241a9190614041565b60405160200161242c9392919061445e565b6040516020818303038152906040528051906020012060001c61244f91906144ca565b90506001601354826124619190614041565b61246b9190614041565b905060105460175410156124d8575b612483816128cd565b156124b8576001816124959190614041565b90506010548111156124b35760016013546124b09190614041565b90505b61247a565b6124c233826129f2565b60016017546124d19190614041565b6017819055505b5080806124e4906144fb565b9150506123f1565b5050565b6125016124fb6128c5565b83612a10565b612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612537906145b6565b60405180910390fd5b61254c84848484612f7d565b50505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606125a9826128cd565b6125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90614c10565b60405180910390fd5b60006125f2612fd9565b90506000815111612612576040518060200160405280600081525061263d565b8061261c8461306b565b60405160200161262d929190614c6c565b6040516020818303038152906040525b915050919050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b6126ed6128c5565b73ffffffffffffffffffffffffffffffffffffffff1661270b611e43565b73ffffffffffffffffffffffffffffffffffffffff1614612761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275890613ddb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c890614d02565b60405180910390fd5b6127da81612d4a565b50565b60165481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806128be57506128bd826131cc565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129ac836118f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612a0c828260405180602001604052806000815250613236565b5050565b6000612a1b826128cd565b612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5190614d94565b60405180910390fd5b6000612a65836118f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ad457508373ffffffffffffffffffffffffffffffffffffffff16612abc84610b3e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ae55750612ae4818561264b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b0e826118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b90614e26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcb90614eb8565b60405180910390fd5b612bdf838383613291565b612bea600082612939565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3a91906143c1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c919190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7690614f24565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f709190613756565b60405180910390a3505050565b612f88848484612aee565b612f9484848484613296565b612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614fb6565b60405180910390fd5b50505050565b606060118054612fe890613e2a565b80601f016020809104026020016040519081016040528092919081815260200182805461301490613e2a565b80156130615780601f1061303657610100808354040283529160200191613061565b820191906000526020600020905b81548152906001019060200180831161304457829003601f168201915b5050505050905090565b606060008214156130b3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131c7565b600082905060005b600082146130e55780806130ce906144fb565b915050600a826130de91906147d2565b91506130bb565b60008167ffffffffffffffff81111561310157613100613a1e565b5b6040519080825280601f01601f1916602001820160405280156131335781602001600182028036833780820191505090505b5090505b600085146131c05760018261314c91906143c1565b9150600a8561315b91906144ca565b60306131679190614041565b60f81b81838151811061317d5761317c614895565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131b991906147d2565b9450613137565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613240838361341e565b61324d6000848484613296565b61328c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328390614fb6565b60405180910390fd5b505050565b505050565b60006132b78473ffffffffffffffffffffffffffffffffffffffff166135ec565b15613411578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132e06128c5565b8786866040518563ffffffff1660e01b8152600401613302949392919061502b565b6020604051808303816000875af192505050801561333e57506040513d601f19601f8201168201806040525081019061333b919061508c565b60015b6133c1573d806000811461336e576040519150601f19603f3d011682016040523d82523d6000602084013e613373565b606091505b506000815114156133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b090614fb6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613416565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561348e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348590615105565b60405180910390fd5b613497816128cd565b156134d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ce90615171565b60405180910390fd5b6134e360008383613291565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135339190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461360b90613e2a565b90600052602060002090601f01602090048101928261362d5760008555613674565b82601f1061364657805160ff1916838001178555613674565b82800160010185558215613674579182015b82811115613673578251825591602001919060010190613658565b5b5090506136819190613685565b5090565b5b8082111561369e576000816000905550600101613686565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136eb816136b6565b81146136f657600080fd5b50565b600081359050613708816136e2565b92915050565b600060208284031215613724576137236136ac565b5b6000613732848285016136f9565b91505092915050565b60008115159050919050565b6137508161373b565b82525050565b600060208201905061376b6000830184613747565b92915050565b6000819050919050565b61378481613771565b82525050565b600060208201905061379f600083018461377b565b92915050565b6137ae81613771565b81146137b957600080fd5b50565b6000813590506137cb816137a5565b92915050565b6000602082840312156137e7576137e66136ac565b5b60006137f5848285016137bc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561383857808201518184015260208101905061381d565b83811115613847576000848401525b50505050565b6000601f19601f8301169050919050565b6000613869826137fe565b6138738185613809565b935061388381856020860161381a565b61388c8161384d565b840191505092915050565b600060208201905081810360008301526138b1818461385e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138e4826138b9565b9050919050565b6138f4816138d9565b82525050565b600060208201905061390f60008301846138eb565b92915050565b61391e816138d9565b811461392957600080fd5b50565b60008135905061393b81613915565b92915050565b60008060408385031215613958576139576136ac565b5b60006139668582860161392c565b9250506020613977858286016137bc565b9150509250929050565b60008060408385031215613998576139976136ac565b5b60006139a6858286016137bc565b92505060206139b7858286016137bc565b9150509250929050565b6000806000606084860312156139da576139d96136ac565b5b60006139e88682870161392c565b93505060206139f98682870161392c565b9250506040613a0a868287016137bc565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a568261384d565b810181811067ffffffffffffffff82111715613a7557613a74613a1e565b5b80604052505050565b6000613a886136a2565b9050613a948282613a4d565b919050565b600067ffffffffffffffff821115613ab457613ab3613a1e565b5b613abd8261384d565b9050602081019050919050565b82818337600083830152505050565b6000613aec613ae784613a99565b613a7e565b905082815260208101848484011115613b0857613b07613a19565b5b613b13848285613aca565b509392505050565b600082601f830112613b3057613b2f613a14565b5b8135613b40848260208601613ad9565b91505092915050565b600060208284031215613b5f57613b5e6136ac565b5b600082013567ffffffffffffffff811115613b7d57613b7c6136b1565b5b613b8984828501613b1b565b91505092915050565b600060208284031215613ba857613ba76136ac565b5b6000613bb68482850161392c565b91505092915050565b613bc88161373b565b8114613bd357600080fd5b50565b600081359050613be581613bbf565b92915050565b60008060408385031215613c0257613c016136ac565b5b6000613c108582860161392c565b9250506020613c2185828601613bd6565b9150509250929050565b600067ffffffffffffffff821115613c4657613c45613a1e565b5b613c4f8261384d565b9050602081019050919050565b6000613c6f613c6a84613c2b565b613a7e565b905082815260208101848484011115613c8b57613c8a613a19565b5b613c96848285613aca565b509392505050565b600082601f830112613cb357613cb2613a14565b5b8135613cc3848260208601613c5c565b91505092915050565b60008060008060808587031215613ce657613ce56136ac565b5b6000613cf48782880161392c565b9450506020613d058782880161392c565b9350506040613d16878288016137bc565b925050606085013567ffffffffffffffff811115613d3757613d366136b1565b5b613d4387828801613c9e565b91505092959194509250565b60008060408385031215613d6657613d656136ac565b5b6000613d748582860161392c565b9250506020613d858582860161392c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc5602083613809565b9150613dd082613d8f565b602082019050919050565b60006020820190508181036000830152613df481613db8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e4257607f821691505b60208210811415613e5657613e55613dfb565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613eb8602c83613809565b9150613ec382613e5c565b604082019050919050565b60006020820190508181036000830152613ee781613eab565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4a602183613809565b9150613f5582613eee565b604082019050919050565b60006020820190508181036000830152613f7981613f3d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613fdc603883613809565b9150613fe782613f80565b604082019050919050565b6000602082019050818103600083015261400b81613fcf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404c82613771565b915061405783613771565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561408c5761408b614012565b5b828201905092915050565b7f43616e206f6e6c79206d696e7420323020636f7069657320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006140f3602183613809565b91506140fe82614097565b604082019050919050565b60006020820190508181036000830152614122816140e6565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74206120636f60008201527f7069657300000000000000000000000000000000000000000000000000000000602082015250565b6000614185602483613809565b915061419082614129565b604082019050919050565b600060208201905081810360008301526141b481614178565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620636f7069657300000000000000000000000000000000000000000000602082015250565b6000614217602a83613809565b9150614222826141bb565b604082019050919050565b600060208201905081810360008301526142468161420a565b9050919050565b600061425882613771565b915061426383613771565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561429c5761429b614012565b5b828202905092915050565b7f546f6f206c6974746c65204554482073656e6400000000000000000000000000600082015250565b60006142dd601383613809565b91506142e8826142a7565b602082019050919050565b6000602082019050818103600083015261430c816142d0565b9050919050565b60008151905061432281613915565b92915050565b60006020828403121561433e5761433d6136ac565b5b600061434c84828501614313565b91505092915050565b7f6e6f7420616e2041434120686f6c646572000000000000000000000000000000600082015250565b600061438b601183613809565b915061439682614355565b602082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b60006143cc82613771565b91506143d783613771565b9250828210156143ea576143e9614012565b5b828203905092915050565b6000819050919050565b61441061440b82613771565b6143f5565b82525050565b60008160601b9050919050565b600061442e82614416565b9050919050565b600061444082614423565b9050919050565b614458614453826138d9565b614435565b82525050565b600061446a82866143ff565b60208201915061447a8285614447565b60148201915061448a82846143ff565b602082019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144d582613771565b91506144e083613771565b9250826144f0576144ef61449b565b5b828206905092915050565b600061450682613771565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561453957614538614012565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006145a0603183613809565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614632602b83613809565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f746f6b656e4964206f75747369646520636f6c6c656374696f6e20626f756e6460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c4602183613809565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f43616e206f6e6c79206d696e74203520636f7069657320617420612074696d65600082015250565b6000614730602083613809565b915061473b826146fa565b602082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f6e6f7420616e20464c5320686f6c646572000000000000000000000000000000600082015250565b600061479c601183613809565b91506147a782614766565b602082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b60006147dd82613771565b91506147e883613771565b9250826147f8576147f761449b565b5b828204905092915050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061485f602c83613809565b915061486a82614803565b604082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614920602983613809565b915061492b826148c4565b604082019050919050565b6000602082019050818103600083015261494f81614913565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006149b2602a83613809565b91506149bd82614956565b604082019050919050565b600060208201905081810360008301526149e1816149a5565b9050919050565b7f43616e206f6e6c79206d696e7420353020636f7069657320617420612074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a44602183613809565b9150614a4f826149e8565b604082019050919050565b60006020820190508181036000830152614a7381614a37565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620526573657276656420636f7069657300000000000000000000000000602082015250565b6000614ad6603383613809565b9150614ae182614a7a565b604082019050919050565b60006020820190508181036000830152614b0581614ac9565b9050919050565b7f5468652070726963652063616e6e6f74206265206c6f776572207468656e203060008201527f2e30312065746800000000000000000000000000000000000000000000000000602082015250565b6000614b68602783613809565b9150614b7382614b0c565b604082019050919050565b60006020820190508181036000830152614b9781614b5b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614bfa602f83613809565b9150614c0582614b9e565b604082019050919050565b60006020820190508181036000830152614c2981614bed565b9050919050565b600081905092915050565b6000614c46826137fe565b614c508185614c30565b9350614c6081856020860161381a565b80840191505092915050565b6000614c788285614c3b565b9150614c848284614c3b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cec602683613809565b9150614cf782614c90565b604082019050919050565b60006020820190508181036000830152614d1b81614cdf565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614d7e602c83613809565b9150614d8982614d22565b604082019050919050565b60006020820190508181036000830152614dad81614d71565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e10602983613809565b9150614e1b82614db4565b604082019050919050565b60006020820190508181036000830152614e3f81614e03565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ea2602483613809565b9150614ead82614e46565b604082019050919050565b60006020820190508181036000830152614ed181614e95565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614f0e601983613809565b9150614f1982614ed8565b602082019050919050565b60006020820190508181036000830152614f3d81614f01565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614fa0603283613809565b9150614fab82614f44565b604082019050919050565b60006020820190508181036000830152614fcf81614f93565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ffd82614fd6565b6150078185614fe1565b935061501781856020860161381a565b6150208161384d565b840191505092915050565b600060808201905061504060008301876138eb565b61504d60208301866138eb565b61505a604083018561377b565b818103606083015261506c8184614ff2565b905095945050505050565b600081519050615086816136e2565b92915050565b6000602082840312156150a2576150a16136ac565b5b60006150b084828501615077565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006150ef602083613809565b91506150fa826150b9565b602082019050919050565b6000602082019050818103600083015261511e816150e2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061515b601c83613809565b915061516682615125565b602082019050919050565b6000602082019050818103600083015261518a8161514e565b905091905056fea2646970667358221220262e9720696d49f7d8f6a7ae8010bd7219f694369b204095b3f880e30182a73664736f6c634300080b0033

Deployed Bytecode Sourcemap

681:8243:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;989:222:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;929:30:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7934:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2408:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3919:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3457:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6676:1154:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1614:111:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;811:30:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4646:330:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;873:26:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1290:253:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1627:173:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5524:1148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8039:699;;;:::i;:::-;;5042:179:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1797:230:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1900:80:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2111:235:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1017:29:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3494:965;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1849:205:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:11;;;;;;;;;;;;;:::i;:::-;;1984:467:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8743:179:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2570:102:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7836:93:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1086:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4463:1057;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;993:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4203:153:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;963:26:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2455:1033;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5287:320:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1117:25:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1146:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2738:329:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;845:24:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4422:162:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;780:27:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1050:32:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;989:222:5;1091:4;1129:35;1114:50;;;:11;:50;;;;:90;;;;1168:36;1192:11;1168:23;:36::i;:::-;1114:90;1107:97;;989:222;;;:::o;929:30:2:-;;;;:::o;7934:99::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8018:10:2::1;8000:15;:28;;;;7934:99:::0;:::o;2408:98:4:-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;4022:16;4030:7;4022;:16::i;:::-;4014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:15;:24;4121:7;4105:24;;;;;;;;;;;;;;;;;;;;;4098:31;;3919:217;;;:::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;3594:11;;:2;:11;;;;3586:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:5;3675:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3700:37;3717:5;3724:12;:10;:12::i;:::-;3700:16;:37::i;:::-;3675:62;3654:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;6676:1154:2:-;6815:1;6797:14;6775:21;6785:10;6775:9;:21::i;:::-;:36;;;;:::i;:::-;:41;;6767:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;6887:1;6868:15;;:20;6860:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;6979:11;;6960:14;6944:13;:11;:13::i;:::-;:30;;;;:::i;:::-;6943:47;;6935:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;7079:9;7060:14;7052:5;;:22;;;;:::i;:::-;7051:37;;7043:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7155:10;7126:39;;:4;;;;;;;;;;;:12;;;7139:11;7126:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;7118:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7198:6;7194:632;7214:14;7210:1;:18;7194:632;;;7249:14;7354:11;;7341;;:24;;;;:::i;:::-;7298:15;7315:10;7330:3;7328:1;:5;;;;:::i;:::-;7281:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7271:65;;;;;;7266:71;;:100;;;;:::i;:::-;7249:117;;7418:1;7404:11;;7392:9;:23;;;;:::i;:::-;:27;;;;:::i;:::-;7380:39;;7452:11;;7437:12;;:26;7433:383;;;7483:220;7489:20;7498:9;7489:7;:20::i;:::-;7483:220;;;7557:1;7545:9;:13;;;;:::i;:::-;7533:25;;7597:11;;7584:9;:25;7580:105;;;7661:1;7647:11;;:15;;;;:::i;:::-;7635:27;;7580:105;7483:220;;;7720:32;7730:10;7742:9;7720;:32::i;:::-;7800:1;7785:12;;:16;;;;:::i;:::-;7770:12;:31;;;;7433:383;7235:591;7230:3;;;;;:::i;:::-;;;;7194:632;;;;6676:1154;;:::o;1614:111:5:-;1675:7;1701:10;:17;;;;1694:24;;1614:111;:::o;811:30:2:-;;;;:::o;4646:330:4:-;4835:41;4854:12;:10;:12::i;:::-;4868:7;4835:18;:41::i;:::-;4827:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;:::-;4646:330;;;:::o;873:26:2:-;;;;:::o;1290:253:5:-;1387:7;1422:23;1439:5;1422:16;:23::i;:::-;1414:5;:31;1406:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1510:12;:19;1523:5;1510:19;;;;;;;;;;;;;;;:26;1530:5;1510:26;;;;;;;;;;;;1503:33;;1290:253;;;;:::o;1627:173:2:-;1685:4;1716:11;;1705:7;:22;;1697:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:16;1787:7;1779;:16::i;:::-;1772:23;;1627:173;;;:::o;5524:1148::-;5660:1;5642:14;5620:21;5630:10;5620:9;:21::i;:::-;:36;;;;:::i;:::-;:41;;5612:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;5731:1;5712:15;;:20;5704:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5823:11;;5804:14;5788:13;:11;:13::i;:::-;:30;;;;:::i;:::-;5787:47;;5779:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5923:9;5904:14;5896:5;;:22;;;;:::i;:::-;5895:37;;5887:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5997:10;5970:37;;:3;;;;;;;;;;;:11;;;5982:10;5970:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;;5962:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6040:6;6036:632;6056:14;6052:1;:18;6036:632;;;6091:14;6196:11;;6183;;:24;;;;:::i;:::-;6140:15;6157:10;6172:3;6170:1;:5;;;;:::i;:::-;6123:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6113:65;;;;;;6108:71;;:100;;;;:::i;:::-;6091:117;;6260:1;6246:11;;6234:9;:23;;;;:::i;:::-;:27;;;;:::i;:::-;6222:39;;6294:11;;6279:12;;:26;6275:383;;;6325:220;6331:20;6340:9;6331:7;:20::i;:::-;6325:220;;;6399:1;6387:9;:13;;;;:::i;:::-;6375:25;;6439:11;;6426:9;:25;6422:105;;;6503:1;6489:11;;:15;;;;:::i;:::-;6477:27;;6422:105;6325:220;;;6562:32;6572:10;6584:9;6562;:32::i;:::-;6642:1;6627:12;;:16;;;;:::i;:::-;6612:12;:31;;;;6275:383;6077:591;6072:3;;;;;:::i;:::-;;;;6036:632;;;;5524:1148;;:::o;8039:699::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8093:15:2::1;8111:21;8093:39;;8142:14;8175:2;8169:3;8159:7;:13;;;;:::i;:::-;:18;;;;:::i;:::-;8142:35;;8188:12;8219:1;8213:3;8203:7;:13;;;;:::i;:::-;:17;;;;:::i;:::-;8188:32;;8230:12;8261:1;8255:3;8245:7;:13;;;;:::i;:::-;:17;;;;:::i;:::-;8230:32;;8272:12;8303:2;8297:3;8287:7;:13;;;;:::i;:::-;:18;;;;:::i;:::-;8272:33;;8315:12;8346:2;8340:3;8330:7;:13;;;;:::i;:::-;:18;;;;:::i;:::-;8315:33;;8367:42;8359:60;;:68;8420:6;8359:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8445:42;8437:60;;:66;8498:4;8437:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8521:42;8513:60;;:66;8574:4;8513:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8597:42;8589:60;;:66;8650:4;8589:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8673:42;8665:60;;:66;8726:4;8665:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8083:655;;;;;;8039:699::o:0;5042:179:4:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;:::-;5042:179;;;:::o;1797:230:5:-;1872:7;1907:30;:28;:30::i;:::-;1899:5;:38;1891:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2003:10;2014:5;2003:17;;;;;;;;:::i;:::-;;;;;;;;;;1996:24;;1797:230;;;:::o;1900:80:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:3:2::1;1962:7;:13;;;;;;;;;;;;:::i;:::-;;1900:80:::0;:::o;2111:235:4:-;2183:7;2202:13;2218:7;:16;2226:7;2218:16;;;;;;;;;;;;;;;;;;;;;2202:32;;2269:1;2252:19;;:5;:19;;;;2244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2334:5;2327:12;;;2111:235;;;:::o;1017:29:2:-;;;;:::o;3494:965::-;3587:9;;3569:14;:27;;3561:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3667:1;3648:15;;:20;3640:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;3758:11;;3739:14;3724:12;;:29;;;;:::i;:::-;3723:46;;3715:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;3827:6;3823:632;3843:14;3839:1;:18;3823:632;;;3878:14;3983:11;;3970;;:24;;;;:::i;:::-;3927:15;3944:10;3959:3;3957:1;:5;;;;:::i;:::-;3910:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3900:65;;;;;;3895:71;;:100;;;;:::i;:::-;3878:117;;4047:1;4033:11;;4021:9;:23;;;;:::i;:::-;:27;;;;:::i;:::-;4009:39;;4081:11;;4066:12;;:26;4062:383;;;4112:220;4118:20;4127:9;4118:7;:20::i;:::-;4112:220;;;4186:1;4174:9;:13;;;;:::i;:::-;4162:25;;4226:11;;4213:9;:25;4209:105;;;4290:1;4276:11;;:15;;;;:::i;:::-;4264:27;;4209:105;4112:220;;;4349:32;4359:10;4371:9;4349;:32::i;:::-;4429:1;4414:12;;:16;;;;:::i;:::-;4399:12;:31;;;;4062:383;3864:591;3859:3;;;;;:::i;:::-;;;;3823:632;;;;3494:965;:::o;1849:205:4:-;1921:7;1965:1;1948:19;;:5;:19;;;;1940:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2031:9;:16;2041:5;2031:16;;;;;;;;;;;;;;;;2024:23;;1849:205;;;:::o;1661:101:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1984:467:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2083:11:2::1;;2065:14;:29;;2057:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;2184:11;;2165:14;2147:15;;:32;;;;:::i;:::-;2146:49;;2138:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;2262:6;2258:189;2278:14;2274:1;:18;2258:189;;;2307:42;2317:10;2346:1;2330:15;;:17;;;;:::i;:::-;2307:9;:42::i;:::-;2400:1;2382:15;;:19;;;;:::i;:::-;2364:15;:37;;;;2439:1;2424:12;;:16;;;;:::i;:::-;2409:12;:31;;;;2294:3;;;;;:::i;:::-;;;;2258:189;;;;1984:467:::0;:::o;1029:85:11:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;8743:179:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8827:17:2::1;8814:9;:30;;8806:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;8906:9;8898:5;:17;;;;8743:179:::0;:::o;2570:102:4:-;2626:13;2658:7;2651:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:102;:::o;7836:93:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7914:10:2::1;7899:12;:25;;;;7836:93:::0;:::o;1086:27::-;;;;:::o;4463:1057::-;4581:1;4563:14;4541:21;4551:10;4541:9;:21::i;:::-;:36;;;;:::i;:::-;:41;;4533:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;4652:1;4633:15;;:20;4625:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4744:11;;4725:14;4709:13;:11;:13::i;:::-;:30;;;;:::i;:::-;4708:47;;4700:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;4844:9;4825:14;4817:5;;:22;;;;:::i;:::-;4816:37;;4808:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4888:6;4884:632;4904:14;4900:1;:18;4884:632;;;4939:14;5044:11;;5031;;:24;;;;:::i;:::-;4988:15;5005:10;5020:3;5018:1;:5;;;;:::i;:::-;4971:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4961:65;;;;;;4956:71;;:100;;;;:::i;:::-;4939:117;;5108:1;5094:11;;5082:9;:23;;;;:::i;:::-;:27;;;;:::i;:::-;5070:39;;5142:11;;5127:12;;:26;5123:383;;;5173:220;5179:20;5188:9;5179:7;:20::i;:::-;5173:220;;;5247:1;5235:9;:13;;;;:::i;:::-;5223:25;;5287:11;;5274:9;:25;5270:105;;;5351:1;5337:11;;:15;;;;:::i;:::-;5325:27;;5270:105;5173:220;;;5410:32;5420:10;5432:9;5410;:32::i;:::-;5490:1;5475:12;;:16;;;;:::i;:::-;5460:12;:31;;;;5123:383;4925:591;4920:3;;;;;:::i;:::-;;;;4884:632;;;;4463:1057;:::o;993:20::-;;;;:::o;4203:153:4:-;4297:52;4316:12;:10;:12::i;:::-;4330:8;4340;4297:18;:52::i;:::-;4203:153;;:::o;963:26:2:-;;;;:::o;2455:1033::-;2544:9;;2526:14;:27;;2518:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2621:1;2605:12;;:17;2597:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2712:11;;2693:14;2678:12;;:29;;;;:::i;:::-;2677:46;;2669:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;2812:9;2793:14;2785:5;;:22;;;;:::i;:::-;2784:37;;2776:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2856:6;2852:632;2872:14;2868:1;:18;2852:632;;;2907:14;3012:11;;2999;;:24;;;;:::i;:::-;2956:15;2973:10;2988:3;2986:1;:5;;;;:::i;:::-;2939:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2929:65;;;;;;2924:71;;:100;;;;:::i;:::-;2907:117;;3076:1;3062:11;;3050:9;:23;;;;:::i;:::-;:27;;;;:::i;:::-;3038:39;;3110:11;;3095:12;;:26;3091:383;;;3141:220;3147:20;3156:9;3147:7;:20::i;:::-;3141:220;;;3215:1;3203:9;:13;;;;:::i;:::-;3191:25;;3255:11;;3242:9;:25;3238:105;;;3319:1;3305:11;;:15;;;;:::i;:::-;3293:27;;3238:105;3141:220;;;3378:32;3388:10;3400:9;3378;:32::i;:::-;3458:1;3443:12;;:16;;;;:::i;:::-;3428:12;:31;;;;3091:383;2893:591;2888:3;;;;;:::i;:::-;;;;2852:632;;;;2455:1033;:::o;5287:320:4:-;5456:41;5475:12;:10;:12::i;:::-;5489:7;5456:18;:41::i;:::-;5448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;1117:25:2:-;;;;;;;;;;;;;:::o;1146:26::-;;;;;;;;;;;;;:::o;2738:329:4:-;2811:13;2844:16;2852:7;2844;:16::i;:::-;2836:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2923:21;2947:10;:8;:10::i;:::-;2923:34;;2998:1;2980:7;2974:21;:25;:86;;;;;;;;;;;;;;;;;3026:7;3035:18;:7;:16;:18::i;:::-;3009:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2974:86;2967:93;;;2738:329;;;:::o;845:24:2:-;;;;:::o;4422:162:4:-;4519:4;4542:18;:25;4561:5;4542:25;;;;;;;;;;;;;;;:35;4568:8;4542:35;;;;;;;;;;;;;;;;;;;;;;;;;4535:42;;4422:162;;;;:::o;780:27:2:-;;;;:::o;1911:198:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;1050:32:2:-;;;;:::o;1490:300:4:-;1592:4;1642:25;1627:40;;;:11;:40;;;;:104;;;;1698:33;1683:48;;;:11;:48;;;;1627:104;:156;;;;1747:36;1771:11;1747:23;:36::i;:::-;1627:156;1608:175;;1490:300;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;7079:125:4:-;7144:4;7195:1;7167:30;;:7;:16;7175:7;7167:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7160:37;;7079:125;;;:::o;10930:171::-;11031:2;11004:15;:24;11020:7;11004:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11086:7;11082:2;11048:46;;11057:23;11072:7;11057:14;:23::i;:::-;11048:46;;;;;;;;;;;;10930:171;;:::o;8036:108::-;8111:26;8121:2;8125:7;8111:26;;;;;;;;;;;;:9;:26::i;:::-;8036:108;;:::o;7362:344::-;7455:4;7479:16;7487:7;7479;:16::i;:::-;7471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;7611:16;;:7;:16;;;:51;;;;7655:7;7631:31;;:20;7643:7;7631:11;:20::i;:::-;:31;;;7611:51;:87;;;;7666:32;7683:5;7690:7;7666:16;:32::i;:::-;7611:87;7603:96;;;7362:344;;;;:::o;10259:560::-;10413:4;10386:31;;:23;10401:7;10386:14;:23::i;:::-;:31;;;10378:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10495:1;10481:16;;:2;:16;;;;10473:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;10709:1;10690:9;:15;10700:4;10690:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10737:1;10720:9;:13;10730:2;10720:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10767:2;10748:7;:16;10756:7;10748:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10804:7;10800:2;10785:27;;10794:4;10785:27;;;;;;;;;;;;10259:560;;;:::o;2263:187:11:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;11236:307:4:-;11386:8;11377:17;;:5;:17;;;;11369:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11472:8;11434:18;:25;11453:5;11434:25;;;;;;;;;;;;;;;:35;11460:8;11434:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11517:8;11495:41;;11510:5;11495:41;;;11527:8;11495:41;;;;;;:::i;:::-;;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:307;;;;:::o;1804:92:2:-;1856:13;1884:7;1877:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1804:92;:::o;328:703:12:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;829:155:3:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;8365:311:4:-;8490:18;8496:2;8500:7;8490:5;:18::i;:::-;8539:54;8570:1;8574:2;8578:7;8587:5;8539:22;:54::i;:::-;8518:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8365:311;;;:::o;13430:122::-;;;;:::o;12096:778::-;12246:4;12266:15;:2;:13;;;:15::i;:::-;12262:606;;;12317:2;12301:36;;;12338:12;:10;:12::i;:::-;12352:4;12358:7;12367:5;12301:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12557:1;12540:6;:13;:18;12536:266;;;12582:60;;;;;;;;;;:::i;:::-;;;;;;;;12536:266;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12433:41;;;12423:51;;;:6;:51;;;;12416:58;;;;;12262:606;12853:4;12846:11;;12096:778;;;;;;;:::o;8998:372::-;9091:1;9077:16;;:2;:16;;;;9069:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9149:16;9157:7;9149;:16::i;:::-;9148:17;9140:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;9282:1;9265:9;:13;9275:2;9265:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9312:2;9293:7;:16;9301:7;9293:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9355:7;9351:2;9330:33;;9347:1;9330:33;;;;;;;;;;;;8998:372;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:13:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:122::-;2026:24;2044:5;2026:24;:::i;:::-;2019:5;2016:35;2006:63;;2065:1;2062;2055:12;2006:63;1953:122;:::o;2081:139::-;2127:5;2165:6;2152:20;2143:29;;2181:33;2208:5;2181:33;:::i;:::-;2081:139;;;;:::o;2226:329::-;2285:6;2334:2;2322:9;2313:7;2309:23;2305:32;2302:119;;;2340:79;;:::i;:::-;2302:119;2460:1;2485:53;2530:7;2521:6;2510:9;2506:22;2485:53;:::i;:::-;2475:63;;2431:117;2226:329;;;;:::o;2561:99::-;2613:6;2647:5;2641:12;2631:22;;2561:99;;;:::o;2666:169::-;2750:11;2784:6;2779:3;2772:19;2824:4;2819:3;2815:14;2800:29;;2666:169;;;;:::o;2841:307::-;2909:1;2919:113;2933:6;2930:1;2927:13;2919:113;;;3018:1;3013:3;3009:11;3003:18;2999:1;2994:3;2990:11;2983:39;2955:2;2952:1;2948:10;2943:15;;2919:113;;;3050:6;3047:1;3044:13;3041:101;;;3130:1;3121:6;3116:3;3112:16;3105:27;3041:101;2890:258;2841:307;;;:::o;3154:102::-;3195:6;3246:2;3242:7;3237:2;3230:5;3226:14;3222:28;3212:38;;3154:102;;;:::o;3262:364::-;3350:3;3378:39;3411:5;3378:39;:::i;:::-;3433:71;3497:6;3492:3;3433:71;:::i;:::-;3426:78;;3513:52;3558:6;3553:3;3546:4;3539:5;3535:16;3513:52;:::i;:::-;3590:29;3612:6;3590:29;:::i;:::-;3585:3;3581:39;3574:46;;3354:272;3262:364;;;;:::o;3632:313::-;3745:4;3783:2;3772:9;3768:18;3760:26;;3832:9;3826:4;3822:20;3818:1;3807:9;3803:17;3796:47;3860:78;3933:4;3924:6;3860:78;:::i;:::-;3852:86;;3632:313;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:::-;5358:6;5366;5415:2;5403:9;5394:7;5390:23;5386:32;5383:119;;;5421:79;;:::i;:::-;5383:119;5541:1;5566:53;5611:7;5602:6;5591:9;5587:22;5566:53;:::i;:::-;5556:63;;5512:117;5668:2;5694:53;5739:7;5730:6;5719:9;5715:22;5694:53;:::i;:::-;5684:63;;5639:118;5290:474;;;;;:::o;5770:619::-;5847:6;5855;5863;5912:2;5900:9;5891:7;5887:23;5883:32;5880:119;;;5918:79;;:::i;:::-;5880:119;6038:1;6063:53;6108:7;6099:6;6088:9;6084:22;6063:53;:::i;:::-;6053:63;;6009:117;6165:2;6191:53;6236:7;6227:6;6216:9;6212:22;6191:53;:::i;:::-;6181:63;;6136:118;6293:2;6319:53;6364:7;6355:6;6344:9;6340:22;6319:53;:::i;:::-;6309:63;;6264:118;5770:619;;;;;:::o;6395:117::-;6504:1;6501;6494:12;6518:117;6627:1;6624;6617:12;6641:180;6689:77;6686:1;6679:88;6786:4;6783:1;6776:15;6810:4;6807:1;6800:15;6827:281;6910:27;6932:4;6910:27;:::i;:::-;6902:6;6898:40;7040:6;7028:10;7025:22;7004:18;6992:10;6989:34;6986:62;6983:88;;;7051:18;;:::i;:::-;6983:88;7091:10;7087:2;7080:22;6870:238;6827:281;;:::o;7114:129::-;7148:6;7175:20;;:::i;:::-;7165:30;;7204:33;7232:4;7224:6;7204:33;:::i;:::-;7114:129;;;:::o;7249:308::-;7311:4;7401:18;7393:6;7390:30;7387:56;;;7423:18;;:::i;:::-;7387:56;7461:29;7483:6;7461:29;:::i;:::-;7453:37;;7545:4;7539;7535:15;7527:23;;7249:308;;;:::o;7563:154::-;7647:6;7642:3;7637;7624:30;7709:1;7700:6;7695:3;7691:16;7684:27;7563:154;;;:::o;7723:412::-;7801:5;7826:66;7842:49;7884:6;7842:49;:::i;:::-;7826:66;:::i;:::-;7817:75;;7915:6;7908:5;7901:21;7953:4;7946:5;7942:16;7991:3;7982:6;7977:3;7973:16;7970:25;7967:112;;;7998:79;;:::i;:::-;7967:112;8088:41;8122:6;8117:3;8112;8088:41;:::i;:::-;7807:328;7723:412;;;;;:::o;8155:340::-;8211:5;8260:3;8253:4;8245:6;8241:17;8237:27;8227:122;;8268:79;;:::i;:::-;8227:122;8385:6;8372:20;8410:79;8485:3;8477:6;8470:4;8462:6;8458:17;8410:79;:::i;:::-;8401:88;;8217:278;8155:340;;;;:::o;8501:509::-;8570:6;8619:2;8607:9;8598:7;8594:23;8590:32;8587:119;;;8625:79;;:::i;:::-;8587:119;8773:1;8762:9;8758:17;8745:31;8803:18;8795:6;8792:30;8789:117;;;8825:79;;:::i;:::-;8789:117;8930:63;8985:7;8976:6;8965:9;8961:22;8930:63;:::i;:::-;8920:73;;8716:287;8501:509;;;;:::o;9016:329::-;9075:6;9124:2;9112:9;9103:7;9099:23;9095:32;9092:119;;;9130:79;;:::i;:::-;9092:119;9250:1;9275:53;9320:7;9311:6;9300:9;9296:22;9275:53;:::i;:::-;9265:63;;9221:117;9016:329;;;;:::o;9351:116::-;9421:21;9436:5;9421:21;:::i;:::-;9414:5;9411:32;9401:60;;9457:1;9454;9447:12;9401:60;9351:116;:::o;9473:133::-;9516:5;9554:6;9541:20;9532:29;;9570:30;9594:5;9570:30;:::i;:::-;9473:133;;;;:::o;9612:468::-;9677:6;9685;9734:2;9722:9;9713:7;9709:23;9705:32;9702:119;;;9740:79;;:::i;:::-;9702:119;9860:1;9885:53;9930:7;9921:6;9910:9;9906:22;9885:53;:::i;:::-;9875:63;;9831:117;9987:2;10013:50;10055:7;10046:6;10035:9;10031:22;10013:50;:::i;:::-;10003:60;;9958:115;9612:468;;;;;:::o;10086:307::-;10147:4;10237:18;10229:6;10226:30;10223:56;;;10259:18;;:::i;:::-;10223:56;10297:29;10319:6;10297:29;:::i;:::-;10289:37;;10381:4;10375;10371:15;10363:23;;10086:307;;;:::o;10399:410::-;10476:5;10501:65;10517:48;10558:6;10517:48;:::i;:::-;10501:65;:::i;:::-;10492:74;;10589:6;10582:5;10575:21;10627:4;10620:5;10616:16;10665:3;10656:6;10651:3;10647:16;10644:25;10641:112;;;10672:79;;:::i;:::-;10641:112;10762:41;10796:6;10791:3;10786;10762:41;:::i;:::-;10482:327;10399:410;;;;;:::o;10828:338::-;10883:5;10932:3;10925:4;10917:6;10913:17;10909:27;10899:122;;10940:79;;:::i;:::-;10899:122;11057:6;11044:20;11082:78;11156:3;11148:6;11141:4;11133:6;11129:17;11082:78;:::i;:::-;11073:87;;10889:277;10828:338;;;;:::o;11172:943::-;11267:6;11275;11283;11291;11340:3;11328:9;11319:7;11315:23;11311:33;11308:120;;;11347:79;;:::i;:::-;11308:120;11467:1;11492:53;11537:7;11528:6;11517:9;11513:22;11492:53;:::i;:::-;11482:63;;11438:117;11594:2;11620:53;11665:7;11656:6;11645:9;11641:22;11620:53;:::i;:::-;11610:63;;11565:118;11722:2;11748:53;11793:7;11784:6;11773:9;11769:22;11748:53;:::i;:::-;11738:63;;11693:118;11878:2;11867:9;11863:18;11850:32;11909:18;11901:6;11898:30;11895:117;;;11931:79;;:::i;:::-;11895:117;12036:62;12090:7;12081:6;12070:9;12066:22;12036:62;:::i;:::-;12026:72;;11821:287;11172:943;;;;;;;:::o;12121:474::-;12189:6;12197;12246:2;12234:9;12225:7;12221:23;12217:32;12214:119;;;12252:79;;:::i;:::-;12214:119;12372:1;12397:53;12442:7;12433:6;12422:9;12418:22;12397:53;:::i;:::-;12387:63;;12343:117;12499:2;12525:53;12570:7;12561:6;12550:9;12546:22;12525:53;:::i;:::-;12515:63;;12470:118;12121:474;;;;;:::o;12601:182::-;12741:34;12737:1;12729:6;12725:14;12718:58;12601:182;:::o;12789:366::-;12931:3;12952:67;13016:2;13011:3;12952:67;:::i;:::-;12945:74;;13028:93;13117:3;13028:93;:::i;:::-;13146:2;13141:3;13137:12;13130:19;;12789:366;;;:::o;13161:419::-;13327:4;13365:2;13354:9;13350:18;13342:26;;13414:9;13408:4;13404:20;13400:1;13389:9;13385:17;13378:47;13442:131;13568:4;13442:131;:::i;:::-;13434:139;;13161:419;;;:::o;13586:180::-;13634:77;13631:1;13624:88;13731:4;13728:1;13721:15;13755:4;13752:1;13745:15;13772:320;13816:6;13853:1;13847:4;13843:12;13833:22;;13900:1;13894:4;13890:12;13921:18;13911:81;;13977:4;13969:6;13965:17;13955:27;;13911:81;14039:2;14031:6;14028:14;14008:18;14005:38;14002:84;;;14058:18;;:::i;:::-;14002:84;13823:269;13772:320;;;:::o;14098:231::-;14238:34;14234:1;14226:6;14222:14;14215:58;14307:14;14302:2;14294:6;14290:15;14283:39;14098:231;:::o;14335:366::-;14477:3;14498:67;14562:2;14557:3;14498:67;:::i;:::-;14491:74;;14574:93;14663:3;14574:93;:::i;:::-;14692:2;14687:3;14683:12;14676:19;;14335:366;;;:::o;14707:419::-;14873:4;14911:2;14900:9;14896:18;14888:26;;14960:9;14954:4;14950:20;14946:1;14935:9;14931:17;14924:47;14988:131;15114:4;14988:131;:::i;:::-;14980:139;;14707:419;;;:::o;15132:220::-;15272:34;15268:1;15260:6;15256:14;15249:58;15341:3;15336:2;15328:6;15324:15;15317:28;15132:220;:::o;15358:366::-;15500:3;15521:67;15585:2;15580:3;15521:67;:::i;:::-;15514:74;;15597:93;15686:3;15597:93;:::i;:::-;15715:2;15710:3;15706:12;15699:19;;15358:366;;;:::o;15730:419::-;15896:4;15934:2;15923:9;15919:18;15911:26;;15983:9;15977:4;15973:20;15969:1;15958:9;15954:17;15947:47;16011:131;16137:4;16011:131;:::i;:::-;16003:139;;15730:419;;;:::o;16155:243::-;16295:34;16291:1;16283:6;16279:14;16272:58;16364:26;16359:2;16351:6;16347:15;16340:51;16155:243;:::o;16404:366::-;16546:3;16567:67;16631:2;16626:3;16567:67;:::i;:::-;16560:74;;16643:93;16732:3;16643:93;:::i;:::-;16761:2;16756:3;16752:12;16745:19;;16404:366;;;:::o;16776:419::-;16942:4;16980:2;16969:9;16965:18;16957:26;;17029:9;17023:4;17019:20;17015:1;17004:9;17000:17;16993:47;17057:131;17183:4;17057:131;:::i;:::-;17049:139;;16776:419;;;:::o;17201:180::-;17249:77;17246:1;17239:88;17346:4;17343:1;17336:15;17370:4;17367:1;17360:15;17387:305;17427:3;17446:20;17464:1;17446:20;:::i;:::-;17441:25;;17480:20;17498:1;17480:20;:::i;:::-;17475:25;;17634:1;17566:66;17562:74;17559:1;17556:81;17553:107;;;17640:18;;:::i;:::-;17553:107;17684:1;17681;17677:9;17670:16;;17387:305;;;;:::o;17698:220::-;17838:34;17834:1;17826:6;17822:14;17815:58;17907:3;17902:2;17894:6;17890:15;17883:28;17698:220;:::o;17924:366::-;18066:3;18087:67;18151:2;18146:3;18087:67;:::i;:::-;18080:74;;18163:93;18252:3;18163:93;:::i;:::-;18281:2;18276:3;18272:12;18265:19;;17924:366;;;:::o;18296:419::-;18462:4;18500:2;18489:9;18485:18;18477:26;;18549:9;18543:4;18539:20;18535:1;18524:9;18520:17;18513:47;18577:131;18703:4;18577:131;:::i;:::-;18569:139;;18296:419;;;:::o;18721:223::-;18861:34;18857:1;18849:6;18845:14;18838:58;18930:6;18925:2;18917:6;18913:15;18906:31;18721:223;:::o;18950:366::-;19092:3;19113:67;19177:2;19172:3;19113:67;:::i;:::-;19106:74;;19189:93;19278:3;19189:93;:::i;:::-;19307:2;19302:3;19298:12;19291:19;;18950:366;;;:::o;19322:419::-;19488:4;19526:2;19515:9;19511:18;19503:26;;19575:9;19569:4;19565:20;19561:1;19550:9;19546:17;19539:47;19603:131;19729:4;19603:131;:::i;:::-;19595:139;;19322:419;;;:::o;19747:229::-;19887:34;19883:1;19875:6;19871:14;19864:58;19956:12;19951:2;19943:6;19939:15;19932:37;19747:229;:::o;19982:366::-;20124:3;20145:67;20209:2;20204:3;20145:67;:::i;:::-;20138:74;;20221:93;20310:3;20221:93;:::i;:::-;20339:2;20334:3;20330:12;20323:19;;19982:366;;;:::o;20354:419::-;20520:4;20558:2;20547:9;20543:18;20535:26;;20607:9;20601:4;20597:20;20593:1;20582:9;20578:17;20571:47;20635:131;20761:4;20635:131;:::i;:::-;20627:139;;20354:419;;;:::o;20779:348::-;20819:7;20842:20;20860:1;20842:20;:::i;:::-;20837:25;;20876:20;20894:1;20876:20;:::i;:::-;20871:25;;21064:1;20996:66;20992:74;20989:1;20986:81;20981:1;20974:9;20967:17;20963:105;20960:131;;;21071:18;;:::i;:::-;20960:131;21119:1;21116;21112:9;21101:20;;20779:348;;;;:::o;21133:169::-;21273:21;21269:1;21261:6;21257:14;21250:45;21133:169;:::o;21308:366::-;21450:3;21471:67;21535:2;21530:3;21471:67;:::i;:::-;21464:74;;21547:93;21636:3;21547:93;:::i;:::-;21665:2;21660:3;21656:12;21649:19;;21308:366;;;:::o;21680:419::-;21846:4;21884:2;21873:9;21869:18;21861:26;;21933:9;21927:4;21923:20;21919:1;21908:9;21904:17;21897:47;21961:131;22087:4;21961:131;:::i;:::-;21953:139;;21680:419;;;:::o;22105:143::-;22162:5;22193:6;22187:13;22178:22;;22209:33;22236:5;22209:33;:::i;:::-;22105:143;;;;:::o;22254:351::-;22324:6;22373:2;22361:9;22352:7;22348:23;22344:32;22341:119;;;22379:79;;:::i;:::-;22341:119;22499:1;22524:64;22580:7;22571:6;22560:9;22556:22;22524:64;:::i;:::-;22514:74;;22470:128;22254:351;;;;:::o;22611:167::-;22751:19;22747:1;22739:6;22735:14;22728:43;22611:167;:::o;22784:366::-;22926:3;22947:67;23011:2;23006:3;22947:67;:::i;:::-;22940:74;;23023:93;23112:3;23023:93;:::i;:::-;23141:2;23136:3;23132:12;23125:19;;22784:366;;;:::o;23156:419::-;23322:4;23360:2;23349:9;23345:18;23337:26;;23409:9;23403:4;23399:20;23395:1;23384:9;23380:17;23373:47;23437:131;23563:4;23437:131;:::i;:::-;23429:139;;23156:419;;;:::o;23581:191::-;23621:4;23641:20;23659:1;23641:20;:::i;:::-;23636:25;;23675:20;23693:1;23675:20;:::i;:::-;23670:25;;23714:1;23711;23708:8;23705:34;;;23719:18;;:::i;:::-;23705:34;23764:1;23761;23757:9;23749:17;;23581:191;;;;:::o;23778:79::-;23817:7;23846:5;23835:16;;23778:79;;;:::o;23863:157::-;23968:45;23988:24;24006:5;23988:24;:::i;:::-;23968:45;:::i;:::-;23963:3;23956:58;23863:157;;:::o;24026:94::-;24059:8;24107:5;24103:2;24099:14;24078:35;;24026:94;;;:::o;24126:::-;24165:7;24194:20;24208:5;24194:20;:::i;:::-;24183:31;;24126:94;;;:::o;24226:100::-;24265:7;24294:26;24314:5;24294:26;:::i;:::-;24283:37;;24226:100;;;:::o;24332:157::-;24437:45;24457:24;24475:5;24457:24;:::i;:::-;24437:45;:::i;:::-;24432:3;24425:58;24332:157;;:::o;24495:538::-;24663:3;24678:75;24749:3;24740:6;24678:75;:::i;:::-;24778:2;24773:3;24769:12;24762:19;;24791:75;24862:3;24853:6;24791:75;:::i;:::-;24891:2;24886:3;24882:12;24875:19;;24904:75;24975:3;24966:6;24904:75;:::i;:::-;25004:2;24999:3;24995:12;24988:19;;25024:3;25017:10;;24495:538;;;;;;:::o;25039:180::-;25087:77;25084:1;25077:88;25184:4;25181:1;25174:15;25208:4;25205:1;25198:15;25225:176;25257:1;25274:20;25292:1;25274:20;:::i;:::-;25269:25;;25308:20;25326:1;25308:20;:::i;:::-;25303:25;;25347:1;25337:35;;25352:18;;:::i;:::-;25337:35;25393:1;25390;25386:9;25381:14;;25225:176;;;;:::o;25407:233::-;25446:3;25469:24;25487:5;25469:24;:::i;:::-;25460:33;;25515:66;25508:5;25505:77;25502:103;;;25585:18;;:::i;:::-;25502:103;25632:1;25625:5;25621:13;25614:20;;25407:233;;;:::o;25646:236::-;25786:34;25782:1;25774:6;25770:14;25763:58;25855:19;25850:2;25842:6;25838:15;25831:44;25646:236;:::o;25888:366::-;26030:3;26051:67;26115:2;26110:3;26051:67;:::i;:::-;26044:74;;26127:93;26216:3;26127:93;:::i;:::-;26245:2;26240:3;26236:12;26229:19;;25888:366;;;:::o;26260:419::-;26426:4;26464:2;26453:9;26449:18;26441:26;;26513:9;26507:4;26503:20;26499:1;26488:9;26484:17;26477:47;26541:131;26667:4;26541:131;:::i;:::-;26533:139;;26260:419;;;:::o;26685:230::-;26825:34;26821:1;26813:6;26809:14;26802:58;26894:13;26889:2;26881:6;26877:15;26870:38;26685:230;:::o;26921:366::-;27063:3;27084:67;27148:2;27143:3;27084:67;:::i;:::-;27077:74;;27160:93;27249:3;27160:93;:::i;:::-;27278:2;27273:3;27269:12;27262:19;;26921:366;;;:::o;27293:419::-;27459:4;27497:2;27486:9;27482:18;27474:26;;27546:9;27540:4;27536:20;27532:1;27521:9;27517:17;27510:47;27574:131;27700:4;27574:131;:::i;:::-;27566:139;;27293:419;;;:::o;27718:220::-;27858:34;27854:1;27846:6;27842:14;27835:58;27927:3;27922:2;27914:6;27910:15;27903:28;27718:220;:::o;27944:366::-;28086:3;28107:67;28171:2;28166:3;28107:67;:::i;:::-;28100:74;;28183:93;28272:3;28183:93;:::i;:::-;28301:2;28296:3;28292:12;28285:19;;27944:366;;;:::o;28316:419::-;28482:4;28520:2;28509:9;28505:18;28497:26;;28569:9;28563:4;28559:20;28555:1;28544:9;28540:17;28533:47;28597:131;28723:4;28597:131;:::i;:::-;28589:139;;28316:419;;;:::o;28741:182::-;28881:34;28877:1;28869:6;28865:14;28858:58;28741:182;:::o;28929:366::-;29071:3;29092:67;29156:2;29151:3;29092:67;:::i;:::-;29085:74;;29168:93;29257:3;29168:93;:::i;:::-;29286:2;29281:3;29277:12;29270:19;;28929:366;;;:::o;29301:419::-;29467:4;29505:2;29494:9;29490:18;29482:26;;29554:9;29548:4;29544:20;29540:1;29529:9;29525:17;29518:47;29582:131;29708:4;29582:131;:::i;:::-;29574:139;;29301:419;;;:::o;29726:167::-;29866:19;29862:1;29854:6;29850:14;29843:43;29726:167;:::o;29899:366::-;30041:3;30062:67;30126:2;30121:3;30062:67;:::i;:::-;30055:74;;30138:93;30227:3;30138:93;:::i;:::-;30256:2;30251:3;30247:12;30240:19;;29899:366;;;:::o;30271:419::-;30437:4;30475:2;30464:9;30460:18;30452:26;;30524:9;30518:4;30514:20;30510:1;30499:9;30495:17;30488:47;30552:131;30678:4;30552:131;:::i;:::-;30544:139;;30271:419;;;:::o;30696:185::-;30736:1;30753:20;30771:1;30753:20;:::i;:::-;30748:25;;30787:20;30805:1;30787:20;:::i;:::-;30782:25;;30826:1;30816:35;;30831:18;;:::i;:::-;30816:35;30873:1;30870;30866:9;30861:14;;30696:185;;;;:::o;30887:231::-;31027:34;31023:1;31015:6;31011:14;31004:58;31096:14;31091:2;31083:6;31079:15;31072:39;30887:231;:::o;31124:366::-;31266:3;31287:67;31351:2;31346:3;31287:67;:::i;:::-;31280:74;;31363:93;31452:3;31363:93;:::i;:::-;31481:2;31476:3;31472:12;31465:19;;31124:366;;;:::o;31496:419::-;31662:4;31700:2;31689:9;31685:18;31677:26;;31749:9;31743:4;31739:20;31735:1;31724:9;31720:17;31713:47;31777:131;31903:4;31777:131;:::i;:::-;31769:139;;31496:419;;;:::o;31921:180::-;31969:77;31966:1;31959:88;32066:4;32063:1;32056:15;32090:4;32087:1;32080:15;32107:228;32247:34;32243:1;32235:6;32231:14;32224:58;32316:11;32311:2;32303:6;32299:15;32292:36;32107:228;:::o;32341:366::-;32483:3;32504:67;32568:2;32563:3;32504:67;:::i;:::-;32497:74;;32580:93;32669:3;32580:93;:::i;:::-;32698:2;32693:3;32689:12;32682:19;;32341:366;;;:::o;32713:419::-;32879:4;32917:2;32906:9;32902:18;32894:26;;32966:9;32960:4;32956:20;32952:1;32941:9;32937:17;32930:47;32994:131;33120:4;32994:131;:::i;:::-;32986:139;;32713:419;;;:::o;33138:229::-;33278:34;33274:1;33266:6;33262:14;33255:58;33347:12;33342:2;33334:6;33330:15;33323:37;33138:229;:::o;33373:366::-;33515:3;33536:67;33600:2;33595:3;33536:67;:::i;:::-;33529:74;;33612:93;33701:3;33612:93;:::i;:::-;33730:2;33725:3;33721:12;33714:19;;33373:366;;;:::o;33745:419::-;33911:4;33949:2;33938:9;33934:18;33926:26;;33998:9;33992:4;33988:20;33984:1;33973:9;33969:17;33962:47;34026:131;34152:4;34026:131;:::i;:::-;34018:139;;33745:419;;;:::o;34170:220::-;34310:34;34306:1;34298:6;34294:14;34287:58;34379:3;34374:2;34366:6;34362:15;34355:28;34170:220;:::o;34396:366::-;34538:3;34559:67;34623:2;34618:3;34559:67;:::i;:::-;34552:74;;34635:93;34724:3;34635:93;:::i;:::-;34753:2;34748:3;34744:12;34737:19;;34396:366;;;:::o;34768:419::-;34934:4;34972:2;34961:9;34957:18;34949:26;;35021:9;35015:4;35011:20;35007:1;34996:9;34992:17;34985:47;35049:131;35175:4;35049:131;:::i;:::-;35041:139;;34768:419;;;:::o;35193:238::-;35333:34;35329:1;35321:6;35317:14;35310:58;35402:21;35397:2;35389:6;35385:15;35378:46;35193:238;:::o;35437:366::-;35579:3;35600:67;35664:2;35659:3;35600:67;:::i;:::-;35593:74;;35676:93;35765:3;35676:93;:::i;:::-;35794:2;35789:3;35785:12;35778:19;;35437:366;;;:::o;35809:419::-;35975:4;36013:2;36002:9;35998:18;35990:26;;36062:9;36056:4;36052:20;36048:1;36037:9;36033:17;36026:47;36090:131;36216:4;36090:131;:::i;:::-;36082:139;;35809:419;;;:::o;36234:226::-;36374:34;36370:1;36362:6;36358:14;36351:58;36443:9;36438:2;36430:6;36426:15;36419:34;36234:226;:::o;36466:366::-;36608:3;36629:67;36693:2;36688:3;36629:67;:::i;:::-;36622:74;;36705:93;36794:3;36705:93;:::i;:::-;36823:2;36818:3;36814:12;36807:19;;36466:366;;;:::o;36838:419::-;37004:4;37042:2;37031:9;37027:18;37019:26;;37091:9;37085:4;37081:20;37077:1;37066:9;37062:17;37055:47;37119:131;37245:4;37119:131;:::i;:::-;37111:139;;36838:419;;;:::o;37263:234::-;37403:34;37399:1;37391:6;37387:14;37380:58;37472:17;37467:2;37459:6;37455:15;37448:42;37263:234;:::o;37503:366::-;37645:3;37666:67;37730:2;37725:3;37666:67;:::i;:::-;37659:74;;37742:93;37831:3;37742:93;:::i;:::-;37860:2;37855:3;37851:12;37844:19;;37503:366;;;:::o;37875:419::-;38041:4;38079:2;38068:9;38064:18;38056:26;;38128:9;38122:4;38118:20;38114:1;38103:9;38099:17;38092:47;38156:131;38282:4;38156:131;:::i;:::-;38148:139;;37875:419;;;:::o;38300:148::-;38402:11;38439:3;38424:18;;38300:148;;;;:::o;38454:377::-;38560:3;38588:39;38621:5;38588:39;:::i;:::-;38643:89;38725:6;38720:3;38643:89;:::i;:::-;38636:96;;38741:52;38786:6;38781:3;38774:4;38767:5;38763:16;38741:52;:::i;:::-;38818:6;38813:3;38809:16;38802:23;;38564:267;38454:377;;;;:::o;38837:435::-;39017:3;39039:95;39130:3;39121:6;39039:95;:::i;:::-;39032:102;;39151:95;39242:3;39233:6;39151:95;:::i;:::-;39144:102;;39263:3;39256:10;;38837:435;;;;;:::o;39278:225::-;39418:34;39414:1;39406:6;39402:14;39395:58;39487:8;39482:2;39474:6;39470:15;39463:33;39278:225;:::o;39509:366::-;39651:3;39672:67;39736:2;39731:3;39672:67;:::i;:::-;39665:74;;39748:93;39837:3;39748:93;:::i;:::-;39866:2;39861:3;39857:12;39850:19;;39509:366;;;:::o;39881:419::-;40047:4;40085:2;40074:9;40070:18;40062:26;;40134:9;40128:4;40124:20;40120:1;40109:9;40105:17;40098:47;40162:131;40288:4;40162:131;:::i;:::-;40154:139;;39881:419;;;:::o;40306:231::-;40446:34;40442:1;40434:6;40430:14;40423:58;40515:14;40510:2;40502:6;40498:15;40491:39;40306:231;:::o;40543:366::-;40685:3;40706:67;40770:2;40765:3;40706:67;:::i;:::-;40699:74;;40782:93;40871:3;40782:93;:::i;:::-;40900:2;40895:3;40891:12;40884:19;;40543:366;;;:::o;40915:419::-;41081:4;41119:2;41108:9;41104:18;41096:26;;41168:9;41162:4;41158:20;41154:1;41143:9;41139:17;41132:47;41196:131;41322:4;41196:131;:::i;:::-;41188:139;;40915:419;;;:::o;41340:228::-;41480:34;41476:1;41468:6;41464:14;41457:58;41549:11;41544:2;41536:6;41532:15;41525:36;41340:228;:::o;41574:366::-;41716:3;41737:67;41801:2;41796:3;41737:67;:::i;:::-;41730:74;;41813:93;41902:3;41813:93;:::i;:::-;41931:2;41926:3;41922:12;41915:19;;41574:366;;;:::o;41946:419::-;42112:4;42150:2;42139:9;42135:18;42127:26;;42199:9;42193:4;42189:20;42185:1;42174:9;42170:17;42163:47;42227:131;42353:4;42227:131;:::i;:::-;42219:139;;41946:419;;;:::o;42371:223::-;42511:34;42507:1;42499:6;42495:14;42488:58;42580:6;42575:2;42567:6;42563:15;42556:31;42371:223;:::o;42600:366::-;42742:3;42763:67;42827:2;42822:3;42763:67;:::i;:::-;42756:74;;42839:93;42928:3;42839:93;:::i;:::-;42957:2;42952:3;42948:12;42941:19;;42600:366;;;:::o;42972:419::-;43138:4;43176:2;43165:9;43161:18;43153:26;;43225:9;43219:4;43215:20;43211:1;43200:9;43196:17;43189:47;43253:131;43379:4;43253:131;:::i;:::-;43245:139;;42972:419;;;:::o;43397:175::-;43537:27;43533:1;43525:6;43521:14;43514:51;43397:175;:::o;43578:366::-;43720:3;43741:67;43805:2;43800:3;43741:67;:::i;:::-;43734:74;;43817:93;43906:3;43817:93;:::i;:::-;43935:2;43930:3;43926:12;43919:19;;43578:366;;;:::o;43950:419::-;44116:4;44154:2;44143:9;44139:18;44131:26;;44203:9;44197:4;44193:20;44189:1;44178:9;44174:17;44167:47;44231:131;44357:4;44231:131;:::i;:::-;44223:139;;43950:419;;;:::o;44375:237::-;44515:34;44511:1;44503:6;44499:14;44492:58;44584:20;44579:2;44571:6;44567:15;44560:45;44375:237;:::o;44618:366::-;44760:3;44781:67;44845:2;44840:3;44781:67;:::i;:::-;44774:74;;44857:93;44946:3;44857:93;:::i;:::-;44975:2;44970:3;44966:12;44959:19;;44618:366;;;:::o;44990:419::-;45156:4;45194:2;45183:9;45179:18;45171:26;;45243:9;45237:4;45233:20;45229:1;45218:9;45214:17;45207:47;45271:131;45397:4;45271:131;:::i;:::-;45263:139;;44990:419;;;:::o;45415:98::-;45466:6;45500:5;45494:12;45484:22;;45415:98;;;:::o;45519:168::-;45602:11;45636:6;45631:3;45624:19;45676:4;45671:3;45667:14;45652:29;;45519:168;;;;:::o;45693:360::-;45779:3;45807:38;45839:5;45807:38;:::i;:::-;45861:70;45924:6;45919:3;45861:70;:::i;:::-;45854:77;;45940:52;45985:6;45980:3;45973:4;45966:5;45962:16;45940:52;:::i;:::-;46017:29;46039:6;46017:29;:::i;:::-;46012:3;46008:39;46001:46;;45783:270;45693:360;;;;:::o;46059:640::-;46254:4;46292:3;46281:9;46277:19;46269:27;;46306:71;46374:1;46363:9;46359:17;46350:6;46306:71;:::i;:::-;46387:72;46455:2;46444:9;46440:18;46431:6;46387:72;:::i;:::-;46469;46537:2;46526:9;46522:18;46513:6;46469:72;:::i;:::-;46588:9;46582:4;46578:20;46573:2;46562:9;46558:18;46551:48;46616:76;46687:4;46678:6;46616:76;:::i;:::-;46608:84;;46059:640;;;;;;;:::o;46705:141::-;46761:5;46792:6;46786:13;46777:22;;46808:32;46834:5;46808:32;:::i;:::-;46705:141;;;;:::o;46852:349::-;46921:6;46970:2;46958:9;46949:7;46945:23;46941:32;46938:119;;;46976:79;;:::i;:::-;46938:119;47096:1;47121:63;47176:7;47167:6;47156:9;47152:22;47121:63;:::i;:::-;47111:73;;47067:127;46852:349;;;;:::o;47207:182::-;47347:34;47343:1;47335:6;47331:14;47324:58;47207:182;:::o;47395:366::-;47537:3;47558:67;47622:2;47617:3;47558:67;:::i;:::-;47551:74;;47634:93;47723:3;47634:93;:::i;:::-;47752:2;47747:3;47743:12;47736:19;;47395:366;;;:::o;47767:419::-;47933:4;47971:2;47960:9;47956:18;47948:26;;48020:9;48014:4;48010:20;48006:1;47995:9;47991:17;47984:47;48048:131;48174:4;48048:131;:::i;:::-;48040:139;;47767:419;;;:::o;48192:178::-;48332:30;48328:1;48320:6;48316:14;48309:54;48192:178;:::o;48376:366::-;48518:3;48539:67;48603:2;48598:3;48539:67;:::i;:::-;48532:74;;48615:93;48704:3;48615:93;:::i;:::-;48733:2;48728:3;48724:12;48717:19;;48376:366;;;:::o;48748:419::-;48914:4;48952:2;48941:9;48937:18;48929:26;;49001:9;48995:4;48991:20;48987:1;48976:9;48972:17;48965:47;49029:131;49155:4;49029:131;:::i;:::-;49021:139;;48748:419;;;:::o

Swarm Source

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