ETH Price: $3,334.00 (-1.29%)

Token

Lil Dudes Club - LDC (LDC)
 

Overview

Max Total Supply

500 LDC

Holders

309

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
3 LDC
0xbe57408fface2a1a058072beaad7ffb24f2059b1
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:
LdcNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

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

pragma solidity ^0.8.7;

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

contract LdcNFT is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string public baseURI;
  string public baseExtension = ".json";
  bool public preSaleOn = false;
	bool public publicSaleOn = false;
  bool public santaAlgorithmOn = false;
  bool public revealed = false;
  string public notRevealedURI;
  uint256 public maxSupply = 2500;
  uint256 public reserved = 100; // For airdrops, ruffles, etc.
  uint256 public preSaleCost = 55000000000000000; // 0.055 eth
  uint256 public publicSaleCost = 65000000000000000; // 0.065 eth
  uint256 public preSaleMaxMintAmount = 3;
  uint256 public publicSaleMaxMintAmount = 6;
  uint256 public prizeAmount = 6000000000000000000; // 6 eth
  uint256 public prize1ETH = 1000000000000000000; // 1 eth
  uint256 public prize05ETH = 500000000000000000; // 0.5 eth
  uint256 public prize01ETH = 100000000000000000; // 0.1 eth

  mapping (address => uint256) public minted; // To check how many tokens an address has minted
  mapping (address => bool) public whiteListedWallets;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedURI
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedURI);
  }

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

  function mint(address _to, uint256 _mintAmount) public payable {
    bool saleOn = (preSaleOn || publicSaleOn);
    require(saleOn, "Sale must be ON");
     
    uint256 supply = totalSupply();

    if (msg.sender != owner()) {
     if (preSaleOn) {
      require(preSaleOn, "Presale must be ON");
      require(_mintAmount > 0, "Mint abmount must be more than 0");
      require(whiteListedWallets[msg.sender] == true, "You aren't whitelisted!");
      require(supply + _mintAmount <= maxSupply, "Purchase would exceed max supply of NFTs");
      require(minted[msg.sender] + _mintAmount <= preSaleMaxMintAmount, "Purchase would exceed max tokens for presale");
      require(msg.value >= preSaleCost * _mintAmount, "Ether value sent is not correct");

     } else if (publicSaleOn) {
      require(publicSaleOn, "Publicsale must be ON");
      require(_mintAmount > 0, "Mint abmount must be more than 0");
      require(supply + _mintAmount <= maxSupply - reserved, "Purchase would exceed max supply of NFTs");
      require(minted[msg.sender] + _mintAmount <= publicSaleMaxMintAmount, "Purchase would exceed max tokens for sale");
      require(msg.value >= publicSaleCost * _mintAmount, "Ether value sent is not correct");
      
      }
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
          _safeMint(_to, supply + i);
    } 

    minted[msg.sender] += _mintAmount;  

      // Santa algorithm
    if (santaAlgorithmOn && prizeAmount > 0 && msg.sender != owner()) {
      
        uint rnd = random();        
      if (rnd < 1 && address(this).balance > prize1ETH) {
        payable(_to).transfer(prize1ETH);
        prizeAmount -= prize1ETH;
      } else if (rnd < 4 && address(this).balance > prize05ETH) {
        payable(_to).transfer(prize05ETH);
        prizeAmount -= prize05ETH;
      } else if (rnd < 80 && address(this).balance > prize01ETH) {
        payable(_to).transfer(prize01ETH);
        prizeAmount -= prize01ETH;
      }
    }
   }

  function random() internal returns (uint) {
    uint randomnumber = uint(keccak256(abi.encodePacked(block.timestamp, block.difficulty ,msg.sender))) % 999;
    return randomnumber;
  }

  function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
  {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
  }

  function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
          return notRevealedURI;
        }

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

  //only owner
  function addWhiteList(address[] memory whiteListedAddresses) public onlyOwner
  {
        for(uint256 i=0; i<whiteListedAddresses.length;i++)
        {
            whiteListedWallets[whiteListedAddresses[i]] = true;
        }
  }

  function setPrizeAmount(uint256 _prizeAmount) public onlyOwner {
    prizeAmount = _prizeAmount;
  }

  function setPreSaleCost(uint256 _preSaleCost) public onlyOwner {
    preSaleCost = _preSaleCost;
  }

  function setPublicSaleCost(uint256 _publicSaleCost) public onlyOwner {
    publicSaleCost = _publicSaleCost;
  }

  function setPreSaleMaxMintAmount(uint256 _preSaleMaxMintAmount) public onlyOwner {
    preSaleMaxMintAmount = _preSaleMaxMintAmount;
  }

   function setmaxPublicSaleMintAmount(uint256 _publicSaleMaxMintAmount) public onlyOwner {
    publicSaleMaxMintAmount = _publicSaleMaxMintAmount;
  }

  function setMaxSupply(uint256 _maxSupply) public onlyOwner {
    maxSupply = _maxSupply;
  }

   function setReserved(uint256 _reserved) public onlyOwner {
    reserved = _reserved;
  }

  function flipPreSaleOn() public onlyOwner {
    preSaleOn = !preSaleOn;
  }
    
  function flipPublicSaleOn() public onlyOwner {
    publicSaleOn = !publicSaleOn;
  }

  function flipRevealed() public onlyOwner {
    revealed = !revealed;
  }

  function flipSantaAlgorithmOn() public onlyOwner {
    santaAlgorithmOn = !santaAlgorithmOn;
  }

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

  function setNotRevealedURI(string memory _newNotRevealedURI) public onlyOwner {
    notRevealedURI = _newNotRevealedURI;
  }
  
  function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner {
        baseExtension = _newBaseExtension;
  }

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

  function withdrawSome(uint _eth) external onlyOwner {
        payable(msg.sender).transfer(_eth);
  }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //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 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 5 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

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].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
        private
    {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedURI","type":"string"}],"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":"whiteListedAddresses","type":"address[]"}],"name":"addWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPreSaleOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPublicSaleOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSantaAlgorithmOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","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":"preSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prize01ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prize05ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prize1ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prizeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"santaAlgorithmOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newNotRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleCost","type":"uint256"}],"name":"setPreSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleMaxMintAmount","type":"uint256"}],"name":"setPreSaleMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_prizeAmount","type":"uint256"}],"name":"setPrizeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleCost","type":"uint256"}],"name":"setPublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserved","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleMaxMintAmount","type":"uint256"}],"name":"setmaxPublicSaleMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListedWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eth","type":"uint256"}],"name":"withdrawSome","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200041c565b506000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506000600d60036101000a81548160ff0219169083151502179055506109c4600f55606460105566c3663566a5800060115566e6ed27d6668000601255600360135560066014556753444835ec580000601555670de0b6b3a76400006016556706f05b59d3b2000060175567016345785d8a00006018553480156200012657600080fd5b50604051620064403803806200644083398181016040528101906200014c91906200054a565b83838160009080519060200190620001669291906200041c565b5080600190805190602001906200017f9291906200041c565b505050620001a262000196620001ce60201b60201c565b620001d660201b60201c565b620001b3826200029c60201b60201c565b620001c4816200034760201b60201c565b505050506200083f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ac620001ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d2620003f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000322906200065f565b60405180910390fd5b80600b9080519060200190620003439291906200041c565b5050565b62000357620001ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200037d620003f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003cd906200065f565b60405180910390fd5b80600e9080519060200190620003ee9291906200041c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200042a9062000727565b90600052602060002090601f0160209004810192826200044e57600085556200049a565b82601f106200046957805160ff19168380011785556200049a565b828001600101855582156200049a579182015b82811115620004995782518255916020019190600101906200047c565b5b509050620004a99190620004ad565b5090565b5b80821115620004c8576000816000905550600101620004ae565b5090565b6000620004e3620004dd84620006aa565b62000681565b905082815260208101848484011115620005025762000501620007f6565b5b6200050f848285620006f1565b509392505050565b600082601f8301126200052f576200052e620007f1565b5b815162000541848260208601620004cc565b91505092915050565b6000806000806080858703121562000567576200056662000800565b5b600085015167ffffffffffffffff811115620005885762000587620007fb565b5b620005968782880162000517565b945050602085015167ffffffffffffffff811115620005ba57620005b9620007fb565b5b620005c88782880162000517565b935050604085015167ffffffffffffffff811115620005ec57620005eb620007fb565b5b620005fa8782880162000517565b925050606085015167ffffffffffffffff8111156200061e576200061d620007fb565b5b6200062c8782880162000517565b91505092959194509250565b600062000647602083620006e0565b9150620006548262000816565b602082019050919050565b600060208201905081810360008301526200067a8162000638565b9050919050565b60006200068d620006a0565b90506200069b82826200075d565b919050565b6000604051905090565b600067ffffffffffffffff821115620006c857620006c7620007c2565b5b620006d38262000805565b9050602081019050919050565b600082825260208201905092915050565b60005b8381101562000711578082015181840152602081019050620006f4565b8381111562000721576000848401525b50505050565b600060028204905060018216806200074057607f821691505b6020821081141562000757576200075662000793565b5b50919050565b620007688262000805565b810181811067ffffffffffffffff821117156200078a5762000789620007c2565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615bf1806200084f6000396000f3fe6080604052600436106103765760003560e01c80636f8b44b0116101d1578063ae9b051c11610102578063d5abeb01116100a0578063f2c4ce1e1161006f578063f2c4ce1e14610c81578063f2fde38b14610caa578063f53280f714610cd3578063fe60d12c14610cfe57610376565b8063d5abeb0114610bd9578063da3ef23f14610c04578063e985e9c514610c2d578063ed19d26514610c6a57610376565b8063c87b56dd116100dc578063c87b56dd14610b1b578063c99bc1c714610b58578063cc9ff9c614610b83578063cd56117914610bae57610376565b8063ae9b051c14610a9e578063b88d4fde14610ac7578063c668286214610af057610376565b80638da5cb5b1161016f578063a16b638411610149578063a16b638414610a0a578063a1f92b3714610a33578063a22cb46514610a4a578063a2be7c2914610a7357610376565b80638da5cb5b1461098b5780638dbb7c06146109b657806395d89b41146109df57610376565b806372250380116101ab57806372250380146108f3578063785fa6271461091e5780637cd9591214610949578063853828b61461097457610376565b80636f8b44b01461087657806370a082311461089f578063715018a6146108dc57610376565b80633b2c3fb6116102ab57806351830227116102495780635c624220116102235780635c624220146107a85780635e1045ec146107e55780636352211e1461080e5780636c0360eb1461084b57610376565b8063518302271461073d57806354a2383b1461076857806355f804b31461077f57610376565b8063438b630011610285578063438b63001461066f578063453afb0f146106ac5780634f6ccce7146106d7578063513865321461071457610376565b80633b2c3fb61461061357806340c10f191461062a57806342842e0e1461064657610376565b80631e7269c51161031857806323b872dd116102f257806323b872dd146105595780632ad0a197146105825780632d6e71b6146105ad5780632f745c59146105d657610376565b80631e7269c5146104ca57806321c95bdf14610507578063231b07161461053057610376565b8063095ea7b311610354578063095ea7b3146104205780630b377e981461044957806318160ddd146104745780631dffa7cd1461049f57610376565b806301ffc9a71461037b57806306fdde03146103b8578063081812fc146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d91906143e9565b610d29565b6040516103af9190614b63565b60405180910390f35b3480156103c457600080fd5b506103cd610da3565b6040516103da9190614b7e565b60405180910390f35b3480156103ef57600080fd5b5061040a6004803603810190610405919061448c565b610e35565b6040516104179190614ada565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190614360565b610eba565b005b34801561045557600080fd5b5061045e610fd2565b60405161046b9190614b63565b60405180910390f35b34801561048057600080fd5b50610489610fe5565b6040516104969190614f00565b60405180910390f35b3480156104ab57600080fd5b506104b4610ff2565b6040516104c19190614f00565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec91906141dd565b610ff8565b6040516104fe9190614f00565b60405180910390f35b34801561051357600080fd5b5061052e6004803603810190610529919061448c565b611010565b005b34801561053c57600080fd5b506105576004803603810190610552919061448c565b611096565b005b34801561056557600080fd5b50610580600480360381019061057b919061424a565b61111c565b005b34801561058e57600080fd5b5061059761117c565b6040516105a49190614f00565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061448c565b611182565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614360565b611208565b60405161060a9190614f00565b60405180910390f35b34801561061f57600080fd5b506106286112ad565b005b610644600480360381019061063f9190614360565b611355565b005b34801561065257600080fd5b5061066d6004803603810190610668919061424a565b611ad8565b005b34801561067b57600080fd5b50610696600480360381019061069191906141dd565b611af8565b6040516106a39190614b41565b60405180910390f35b3480156106b857600080fd5b506106c1611ba6565b6040516106ce9190614f00565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f9919061448c565b611bac565b60405161070b9190614f00565b60405180910390f35b34801561072057600080fd5b5061073b6004803603810190610736919061448c565b611c1d565b005b34801561074957600080fd5b50610752611ca3565b60405161075f9190614b63565b60405180910390f35b34801561077457600080fd5b5061077d611cb6565b005b34801561078b57600080fd5b506107a660048036038101906107a19190614443565b611d5e565b005b3480156107b457600080fd5b506107cf60048036038101906107ca91906141dd565b611df4565b6040516107dc9190614b63565b60405180910390f35b3480156107f157600080fd5b5061080c600480360381019061080791906143a0565b611e14565b005b34801561081a57600080fd5b506108356004803603810190610830919061448c565b611f25565b6040516108429190614ada565b60405180910390f35b34801561085757600080fd5b50610860611fd7565b60405161086d9190614b7e565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061448c565b612065565b005b3480156108ab57600080fd5b506108c660048036038101906108c191906141dd565b6120eb565b6040516108d39190614f00565b60405180910390f35b3480156108e857600080fd5b506108f16121a3565b005b3480156108ff57600080fd5b5061090861222b565b6040516109159190614b7e565b60405180910390f35b34801561092a57600080fd5b506109336122b9565b6040516109409190614f00565b60405180910390f35b34801561095557600080fd5b5061095e6122bf565b60405161096b9190614b63565b60405180910390f35b34801561098057600080fd5b506109896122d2565b005b34801561099757600080fd5b506109a061239d565b6040516109ad9190614ada565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d8919061448c565b6123c7565b005b3480156109eb57600080fd5b506109f461244d565b604051610a019190614b7e565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c919061448c565b6124df565b005b348015610a3f57600080fd5b50610a48612565565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190614320565b61260d565b005b348015610a7f57600080fd5b50610a8861278e565b604051610a959190614b63565b60405180910390f35b348015610aaa57600080fd5b50610ac56004803603810190610ac0919061448c565b6127a1565b005b348015610ad357600080fd5b50610aee6004803603810190610ae9919061429d565b612867565b005b348015610afc57600080fd5b50610b056128c9565b604051610b129190614b7e565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d919061448c565b612957565b604051610b4f9190614b7e565b60405180910390f35b348015610b6457600080fd5b50610b6d612ab0565b604051610b7a9190614f00565b60405180910390f35b348015610b8f57600080fd5b50610b98612ab6565b604051610ba59190614f00565b60405180910390f35b348015610bba57600080fd5b50610bc3612abc565b604051610bd09190614f00565b60405180910390f35b348015610be557600080fd5b50610bee612ac2565b604051610bfb9190614f00565b60405180910390f35b348015610c1057600080fd5b50610c2b6004803603810190610c269190614443565b612ac8565b005b348015610c3957600080fd5b50610c546004803603810190610c4f919061420a565b612b5e565b604051610c619190614b63565b60405180910390f35b348015610c7657600080fd5b50610c7f612bf2565b005b348015610c8d57600080fd5b50610ca86004803603810190610ca39190614443565b612c9a565b005b348015610cb657600080fd5b50610cd16004803603810190610ccc91906141dd565b612d30565b005b348015610cdf57600080fd5b50610ce8612e28565b604051610cf59190614f00565b60405180910390f35b348015610d0a57600080fd5b50610d13612e2e565b604051610d209190614f00565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d9c5750610d9b82612e34565b5b9050919050565b606060008054610db29061522a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dde9061522a565b8015610e2b5780601f10610e0057610100808354040283529160200191610e2b565b820191906000526020600020905b815481529060010190602001808311610e0e57829003601f168201915b5050505050905090565b6000610e4082612f16565b610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690614dc0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ec582611f25565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90614e40565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f55612f82565b73ffffffffffffffffffffffffffffffffffffffff161480610f845750610f8381610f7e612f82565b612b5e565b5b610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90614ce0565b60405180910390fd5b610fcd8383612f8a565b505050565b600d60029054906101000a900460ff1681565b6000600880549050905090565b60165481565b60196020528060005260406000206000915090505481565b611018612f82565b73ffffffffffffffffffffffffffffffffffffffff1661103661239d565b73ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390614de0565b60405180910390fd5b8060138190555050565b61109e612f82565b73ffffffffffffffffffffffffffffffffffffffff166110bc61239d565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614de0565b60405180910390fd5b8060118190555050565b61112d611127612f82565b82613043565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614e60565b60405180910390fd5b611177838383613121565b505050565b60145481565b61118a612f82565b73ffffffffffffffffffffffffffffffffffffffff166111a861239d565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590614de0565b60405180910390fd5b8060108190555050565b6000611213836120eb565b8210611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90614ba0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6112b5612f82565b73ffffffffffffffffffffffffffffffffffffffff166112d361239d565b73ffffffffffffffffffffffffffffffffffffffff1614611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090614de0565b60405180910390fd5b600d60039054906101000a900460ff1615600d60036101000a81548160ff021916908315150217905550565b6000600d60009054906101000a900460ff168061137e5750600d60019054906101000a900460ff165b9050806113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614da0565b60405180910390fd5b60006113ca610fe5565b90506113d461239d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185a57600d60009054906101000a900460ff161561167457600d60009054906101000a900460ff1661146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614d00565b60405180910390fd5b600083116114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490614ec0565b60405180910390fd5b60011515601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790614e80565b60405180910390fd5b600f54838261154f919061505f565b1115611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790614be0565b60405180910390fd5b60135483601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115de919061505f565b111561161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614d60565b60405180910390fd5b8260115461162d91906150e6565b34101561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614c80565b60405180910390fd5b611859565b600d60019054906101000a900460ff161561185857600d60019054906101000a900460ff166116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614cc0565b60405180910390fd5b6000831161171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614ec0565b60405180910390fd5b601054600f5461172b9190615140565b8382611737919061505f565b1115611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90614be0565b60405180910390fd5b60145483601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c6919061505f565b1115611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90614ee0565b60405180910390fd5b8260125461181591906150e6565b341015611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90614c80565b60405180910390fd5b5b5b5b6000600190505b8381116118905761187d858284611878919061505f565b61337d565b80806118889061528d565b915050611861565b5082601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e0919061505f565b92505081905550600d60029054906101000a900460ff16801561190557506000601554115b8015611944575061191461239d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611ad257600061195361339b565b9050600181108015611966575060165447115b156119d4578473ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f193505050501580156119b3573d6000803e3d6000fd5b50601654601560008282546119c89190615140565b92505081905550611ad0565b6004811080156119e5575060175447115b15611a53578473ffffffffffffffffffffffffffffffffffffffff166108fc6017549081150290604051600060405180830381858888f19350505050158015611a32573d6000803e3d6000fd5b5060175460156000828254611a479190615140565b92505081905550611acf565b605081108015611a64575060185447115b15611ace578473ffffffffffffffffffffffffffffffffffffffff166108fc6018549081150290604051600060405180830381858888f19350505050158015611ab1573d6000803e3d6000fd5b5060185460156000828254611ac69190615140565b925050819055505b5b5b505b50505050565b611af383838360405180602001604052806000815250612867565b505050565b60606000611b05836120eb565b905060008167ffffffffffffffff811115611b2357611b22615420565b5b604051908082528060200260200182016040528015611b515781602001602082028036833780820191505090505b50905060005b82811015611b9b57611b698582611208565b828281518110611b7c57611b7b6153f1565b5b6020026020010181815250508080611b939061528d565b915050611b57565b508092505050919050565b60125481565b6000611bb6610fe5565b8210611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614ea0565b60405180910390fd5b60088281548110611c0b57611c0a6153f1565b5b90600052602060002001549050919050565b611c25612f82565b73ffffffffffffffffffffffffffffffffffffffff16611c4361239d565b73ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090614de0565b60405180910390fd5b8060158190555050565b600d60039054906101000a900460ff1681565b611cbe612f82565b73ffffffffffffffffffffffffffffffffffffffff16611cdc61239d565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990614de0565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b611d66612f82565b73ffffffffffffffffffffffffffffffffffffffff16611d8461239d565b73ffffffffffffffffffffffffffffffffffffffff1614611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd190614de0565b60405180910390fd5b80600b9080519060200190611df0929190613f53565b5050565b601a6020528060005260406000206000915054906101000a900460ff1681565b611e1c612f82565b73ffffffffffffffffffffffffffffffffffffffff16611e3a61239d565b73ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614de0565b60405180910390fd5b60005b8151811015611f21576001601a6000848481518110611eb557611eb46153f1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f199061528d565b915050611e93565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc590614d40565b60405180910390fd5b80915050919050565b600b8054611fe49061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546120109061522a565b801561205d5780601f106120325761010080835404028352916020019161205d565b820191906000526020600020905b81548152906001019060200180831161204057829003601f168201915b505050505081565b61206d612f82565b73ffffffffffffffffffffffffffffffffffffffff1661208b61239d565b73ffffffffffffffffffffffffffffffffffffffff16146120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890614de0565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614d20565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121ab612f82565b73ffffffffffffffffffffffffffffffffffffffff166121c961239d565b73ffffffffffffffffffffffffffffffffffffffff161461221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614de0565b60405180910390fd5b61222960006133e2565b565b600e80546122389061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546122649061522a565b80156122b15780601f10612286576101008083540402835291602001916122b1565b820191906000526020600020905b81548152906001019060200180831161229457829003601f168201915b505050505081565b60155481565b600d60019054906101000a900460ff1681565b6122da612f82565b73ffffffffffffffffffffffffffffffffffffffff166122f861239d565b73ffffffffffffffffffffffffffffffffffffffff161461234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590614de0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612399573d6000803e3d6000fd5b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6123cf612f82565b73ffffffffffffffffffffffffffffffffffffffff166123ed61239d565b73ffffffffffffffffffffffffffffffffffffffff1614612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614de0565b60405180910390fd5b8060128190555050565b60606001805461245c9061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546124889061522a565b80156124d55780601f106124aa576101008083540402835291602001916124d5565b820191906000526020600020905b8154815290600101906020018083116124b857829003601f168201915b5050505050905090565b6124e7612f82565b73ffffffffffffffffffffffffffffffffffffffff1661250561239d565b73ffffffffffffffffffffffffffffffffffffffff161461255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614de0565b60405180910390fd5b8060148190555050565b61256d612f82565b73ffffffffffffffffffffffffffffffffffffffff1661258b61239d565b73ffffffffffffffffffffffffffffffffffffffff16146125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d890614de0565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b612615612f82565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90614c60565b60405180910390fd5b8060056000612690612f82565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661273d612f82565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127829190614b63565b60405180910390a35050565b600d60009054906101000a900460ff1681565b6127a9612f82565b73ffffffffffffffffffffffffffffffffffffffff166127c761239d565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614de0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612863573d6000803e3d6000fd5b5050565b612878612872612f82565b83613043565b6128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614e60565b60405180910390fd5b6128c3848484846134a8565b50505050565b600c80546128d69061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546129029061522a565b801561294f5780601f106129245761010080835404028352916020019161294f565b820191906000526020600020905b81548152906001019060200180831161293257829003601f168201915b505050505081565b606061296282612f16565b6129a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299890614e20565b60405180910390fd5b60001515600d60039054906101000a900460ff1615151415612a4f57600e80546129ca9061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546129f69061522a565b8015612a435780601f10612a1857610100808354040283529160200191612a43565b820191906000526020600020905b815481529060010190602001808311612a2657829003601f168201915b50505050509050612aab565b6000612a59613504565b90506000815111612a795760405180602001604052806000815250612aa7565b80612a8384613596565b600c604051602001612a9793929190614a6c565b6040516020818303038152906040525b9150505b919050565b60135481565b60115481565b60185481565b600f5481565b612ad0612f82565b73ffffffffffffffffffffffffffffffffffffffff16612aee61239d565b73ffffffffffffffffffffffffffffffffffffffff1614612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90614de0565b60405180910390fd5b80600c9080519060200190612b5a929190613f53565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612bfa612f82565b73ffffffffffffffffffffffffffffffffffffffff16612c1861239d565b73ffffffffffffffffffffffffffffffffffffffff1614612c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6590614de0565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b612ca2612f82565b73ffffffffffffffffffffffffffffffffffffffff16612cc061239d565b73ffffffffffffffffffffffffffffffffffffffff1614612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614de0565b60405180910390fd5b80600e9080519060200190612d2c929190613f53565b5050565b612d38612f82565b73ffffffffffffffffffffffffffffffffffffffff16612d5661239d565b73ffffffffffffffffffffffffffffffffffffffff1614612dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da390614de0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1390614c00565b60405180910390fd5b612e25816133e2565b50565b60175481565b60105481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612eff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f0f5750612f0e826136f7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612ffd83611f25565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061304e82612f16565b61308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308490614ca0565b60405180910390fd5b600061309883611f25565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061310757508373ffffffffffffffffffffffffffffffffffffffff166130ef84610e35565b73ffffffffffffffffffffffffffffffffffffffff16145b8061311857506131178185612b5e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661314182611f25565b73ffffffffffffffffffffffffffffffffffffffff1614613197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318e90614e00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fe90614c40565b60405180910390fd5b613212838383613761565b61321d600082612f8a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461326d9190615140565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132c4919061505f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b613397828260405180602001604052806000815250613875565b5050565b6000806103e74244336040516020016133b693929190614a9d565b6040516020818303038152906040528051906020012060001c6133d99190615304565b90508091505090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134b3848484613121565b6134bf848484846138d0565b6134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f590614bc0565b60405180910390fd5b50505050565b6060600b80546135139061522a565b80601f016020809104026020016040519081016040528092919081815260200182805461353f9061522a565b801561358c5780601f106135615761010080835404028352916020019161358c565b820191906000526020600020905b81548152906001019060200180831161356f57829003601f168201915b5050505050905090565b606060008214156135de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506136f2565b600082905060005b600082146136105780806135f99061528d565b915050600a8261360991906150b5565b91506135e6565b60008167ffffffffffffffff81111561362c5761362b615420565b5b6040519080825280601f01601f19166020018201604052801561365e5781602001600182028036833780820191505090505b5090505b600085146136eb576001826136779190615140565b9150600a856136869190615304565b6030613692919061505f565b60f81b8183815181106136a8576136a76153f1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856136e491906150b5565b9450613662565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61376c838383613a67565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137af576137aa81613a6c565b6137ee565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146137ed576137ec8382613ab5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138315761382c81613c22565b613870565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461386f5761386e8282613cf3565b5b5b505050565b61387f8383613d72565b61388c60008484846138d0565b6138cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c290614bc0565b60405180910390fd5b505050565b60006138f18473ffffffffffffffffffffffffffffffffffffffff16613f40565b15613a5a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261391a612f82565b8786866040518563ffffffff1660e01b815260040161393c9493929190614af5565b602060405180830381600087803b15801561395657600080fd5b505af192505050801561398757506040513d601f19601f820116820180604052508101906139849190614416565b60015b613a0a573d80600081146139b7576040519150601f19603f3d011682016040523d82523d6000602084013e6139bc565b606091505b50600081511415613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f990614bc0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a5f565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ac2846120eb565b613acc9190615140565b9050600060076000848152602001908152602001600020549050818114613bb1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613c369190615140565b9050600060096000848152602001908152602001600020549050600060088381548110613c6657613c656153f1565b5b906000526020600020015490508060088381548110613c8857613c876153f1565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613cd757613cd66153c2565b5b6001900381819060005260206000200160009055905550505050565b6000613cfe836120eb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd990614d80565b60405180910390fd5b613deb81612f16565b15613e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2290614c20565b60405180910390fd5b613e3760008383613761565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e87919061505f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613f5f9061522a565b90600052602060002090601f016020900481019282613f815760008555613fc8565b82601f10613f9a57805160ff1916838001178555613fc8565b82800160010185558215613fc8579182015b82811115613fc7578251825591602001919060010190613fac565b5b509050613fd59190613fd9565b5090565b5b80821115613ff2576000816000905550600101613fda565b5090565b600061400961400484614f40565b614f1b565b9050808382526020820190508285602086028201111561402c5761402b615454565b5b60005b8581101561405c578161404288826140ea565b84526020840193506020830192505060018101905061402f565b5050509392505050565b600061407961407484614f6c565b614f1b565b90508281526020810184848401111561409557614094615459565b5b6140a08482856151e8565b509392505050565b60006140bb6140b684614f9d565b614f1b565b9050828152602081018484840111156140d7576140d6615459565b5b6140e28482856151e8565b509392505050565b6000813590506140f981615b5f565b92915050565b600082601f8301126141145761411361544f565b5b8135614124848260208601613ff6565b91505092915050565b60008135905061413c81615b76565b92915050565b60008135905061415181615b8d565b92915050565b60008151905061416681615b8d565b92915050565b600082601f8301126141815761418061544f565b5b8135614191848260208601614066565b91505092915050565b600082601f8301126141af576141ae61544f565b5b81356141bf8482602086016140a8565b91505092915050565b6000813590506141d781615ba4565b92915050565b6000602082840312156141f3576141f2615463565b5b6000614201848285016140ea565b91505092915050565b6000806040838503121561422157614220615463565b5b600061422f858286016140ea565b9250506020614240858286016140ea565b9150509250929050565b60008060006060848603121561426357614262615463565b5b6000614271868287016140ea565b9350506020614282868287016140ea565b9250506040614293868287016141c8565b9150509250925092565b600080600080608085870312156142b7576142b6615463565b5b60006142c5878288016140ea565b94505060206142d6878288016140ea565b93505060406142e7878288016141c8565b925050606085013567ffffffffffffffff8111156143085761430761545e565b5b6143148782880161416c565b91505092959194509250565b6000806040838503121561433757614336615463565b5b6000614345858286016140ea565b92505060206143568582860161412d565b9150509250929050565b6000806040838503121561437757614376615463565b5b6000614385858286016140ea565b9250506020614396858286016141c8565b9150509250929050565b6000602082840312156143b6576143b5615463565b5b600082013567ffffffffffffffff8111156143d4576143d361545e565b5b6143e0848285016140ff565b91505092915050565b6000602082840312156143ff576143fe615463565b5b600061440d84828501614142565b91505092915050565b60006020828403121561442c5761442b615463565b5b600061443a84828501614157565b91505092915050565b60006020828403121561445957614458615463565b5b600082013567ffffffffffffffff8111156144775761447661545e565b5b6144838482850161419a565b91505092915050565b6000602082840312156144a2576144a1615463565b5b60006144b0848285016141c8565b91505092915050565b60006144c58383614a37565b60208301905092915050565b6144da81615174565b82525050565b6144f16144ec82615174565b6152d6565b82525050565b600061450282614ff3565b61450c8185615021565b935061451783614fce565b8060005b8381101561454857815161452f88826144b9565b975061453a83615014565b92505060018101905061451b565b5085935050505092915050565b61455e81615186565b82525050565b600061456f82614ffe565b6145798185615032565b93506145898185602086016151f7565b61459281615468565b840191505092915050565b60006145a882615009565b6145b28185615043565b93506145c28185602086016151f7565b6145cb81615468565b840191505092915050565b60006145e182615009565b6145eb8185615054565b93506145fb8185602086016151f7565b80840191505092915050565b600081546146148161522a565b61461e8186615054565b94506001821660008114614639576001811461464a5761467d565b60ff1983168652818601935061467d565b61465385614fde565b60005b8381101561467557815481890152600182019150602081019050614656565b838801955050505b50505092915050565b6000614693602b83615043565b915061469e82615486565b604082019050919050565b60006146b6603283615043565b91506146c1826154d5565b604082019050919050565b60006146d9602883615043565b91506146e482615524565b604082019050919050565b60006146fc602683615043565b915061470782615573565b604082019050919050565b600061471f601c83615043565b915061472a826155c2565b602082019050919050565b6000614742602483615043565b915061474d826155eb565b604082019050919050565b6000614765601983615043565b91506147708261563a565b602082019050919050565b6000614788601f83615043565b915061479382615663565b602082019050919050565b60006147ab602c83615043565b91506147b68261568c565b604082019050919050565b60006147ce601583615043565b91506147d9826156db565b602082019050919050565b60006147f1603883615043565b91506147fc82615704565b604082019050919050565b6000614814601283615043565b915061481f82615753565b602082019050919050565b6000614837602a83615043565b91506148428261577c565b604082019050919050565b600061485a602983615043565b9150614865826157cb565b604082019050919050565b600061487d602c83615043565b91506148888261581a565b604082019050919050565b60006148a0602083615043565b91506148ab82615869565b602082019050919050565b60006148c3600f83615043565b91506148ce82615892565b602082019050919050565b60006148e6602c83615043565b91506148f1826158bb565b604082019050919050565b6000614909602083615043565b91506149148261590a565b602082019050919050565b600061492c602983615043565b915061493782615933565b604082019050919050565b600061494f602f83615043565b915061495a82615982565b604082019050919050565b6000614972602183615043565b915061497d826159d1565b604082019050919050565b6000614995603183615043565b91506149a082615a20565b604082019050919050565b60006149b8601783615043565b91506149c382615a6f565b602082019050919050565b60006149db602c83615043565b91506149e682615a98565b604082019050919050565b60006149fe602083615043565b9150614a0982615ae7565b602082019050919050565b6000614a21602983615043565b9150614a2c82615b10565b604082019050919050565b614a40816151de565b82525050565b614a4f816151de565b82525050565b614a66614a61826151de565b6152fa565b82525050565b6000614a7882866145d6565b9150614a8482856145d6565b9150614a908284614607565b9150819050949350505050565b6000614aa98286614a55565b602082019150614ab98285614a55565b602082019150614ac982846144e0565b601482019150819050949350505050565b6000602082019050614aef60008301846144d1565b92915050565b6000608082019050614b0a60008301876144d1565b614b1760208301866144d1565b614b246040830185614a46565b8181036060830152614b368184614564565b905095945050505050565b60006020820190508181036000830152614b5b81846144f7565b905092915050565b6000602082019050614b786000830184614555565b92915050565b60006020820190508181036000830152614b98818461459d565b905092915050565b60006020820190508181036000830152614bb981614686565b9050919050565b60006020820190508181036000830152614bd9816146a9565b9050919050565b60006020820190508181036000830152614bf9816146cc565b9050919050565b60006020820190508181036000830152614c19816146ef565b9050919050565b60006020820190508181036000830152614c3981614712565b9050919050565b60006020820190508181036000830152614c5981614735565b9050919050565b60006020820190508181036000830152614c7981614758565b9050919050565b60006020820190508181036000830152614c998161477b565b9050919050565b60006020820190508181036000830152614cb98161479e565b9050919050565b60006020820190508181036000830152614cd9816147c1565b9050919050565b60006020820190508181036000830152614cf9816147e4565b9050919050565b60006020820190508181036000830152614d1981614807565b9050919050565b60006020820190508181036000830152614d398161482a565b9050919050565b60006020820190508181036000830152614d598161484d565b9050919050565b60006020820190508181036000830152614d7981614870565b9050919050565b60006020820190508181036000830152614d9981614893565b9050919050565b60006020820190508181036000830152614db9816148b6565b9050919050565b60006020820190508181036000830152614dd9816148d9565b9050919050565b60006020820190508181036000830152614df9816148fc565b9050919050565b60006020820190508181036000830152614e198161491f565b9050919050565b60006020820190508181036000830152614e3981614942565b9050919050565b60006020820190508181036000830152614e5981614965565b9050919050565b60006020820190508181036000830152614e7981614988565b9050919050565b60006020820190508181036000830152614e99816149ab565b9050919050565b60006020820190508181036000830152614eb9816149ce565b9050919050565b60006020820190508181036000830152614ed9816149f1565b9050919050565b60006020820190508181036000830152614ef981614a14565b9050919050565b6000602082019050614f156000830184614a46565b92915050565b6000614f25614f36565b9050614f31828261525c565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5b57614f5a615420565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f8757614f86615420565b5b614f9082615468565b9050602081019050919050565b600067ffffffffffffffff821115614fb857614fb7615420565b5b614fc182615468565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061506a826151de565b9150615075836151de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150aa576150a9615335565b5b828201905092915050565b60006150c0826151de565b91506150cb836151de565b9250826150db576150da615364565b5b828204905092915050565b60006150f1826151de565b91506150fc836151de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561513557615134615335565b5b828202905092915050565b600061514b826151de565b9150615156836151de565b92508282101561516957615168615335565b5b828203905092915050565b600061517f826151be565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156152155780820151818401526020810190506151fa565b83811115615224576000848401525b50505050565b6000600282049050600182168061524257607f821691505b6020821081141561525657615255615393565b5b50919050565b61526582615468565b810181811067ffffffffffffffff8211171561528457615283615420565b5b80604052505050565b6000615298826151de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152cb576152ca615335565b5b600182019050919050565b60006152e1826152e8565b9050919050565b60006152f382615479565b9050919050565b6000819050919050565b600061530f826151de565b915061531a836151de565b92508261532a57615329615364565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204e465473000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5075626c696373616c65206d757374206265204f4e0000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f50726573616c65206d757374206265204f4e0000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e7360008201527f20666f722070726573616c650000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c65206d757374206265204f4e0000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f75206172656e27742077686974656c697374656421000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d696e742061626d6f756e74206d757374206265206d6f7265207468616e2030600082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e7360008201527f20666f722073616c650000000000000000000000000000000000000000000000602082015250565b615b6881615174565b8114615b7357600080fd5b50565b615b7f81615186565b8114615b8a57600080fd5b50565b615b9681615192565b8114615ba157600080fd5b50565b615bad816151de565b8114615bb857600080fd5b5056fea264697066735822122088340e4fb95673cc0f343bc32f62ef7877292cb9fedecf337e6c7b0f6269e88064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000144c696c20447564657320436c7562202d204c444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d614b5058314c6b464e445864375557716845704d4a656d69343974377846464b7061776843726a41726b76462f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d614b5058314c6b464e445864375557716845704d4a656d69343974377846464b7061776843726a41726b76462f00000000000000000000

Deployed Bytecode

0x6080604052600436106103765760003560e01c80636f8b44b0116101d1578063ae9b051c11610102578063d5abeb01116100a0578063f2c4ce1e1161006f578063f2c4ce1e14610c81578063f2fde38b14610caa578063f53280f714610cd3578063fe60d12c14610cfe57610376565b8063d5abeb0114610bd9578063da3ef23f14610c04578063e985e9c514610c2d578063ed19d26514610c6a57610376565b8063c87b56dd116100dc578063c87b56dd14610b1b578063c99bc1c714610b58578063cc9ff9c614610b83578063cd56117914610bae57610376565b8063ae9b051c14610a9e578063b88d4fde14610ac7578063c668286214610af057610376565b80638da5cb5b1161016f578063a16b638411610149578063a16b638414610a0a578063a1f92b3714610a33578063a22cb46514610a4a578063a2be7c2914610a7357610376565b80638da5cb5b1461098b5780638dbb7c06146109b657806395d89b41146109df57610376565b806372250380116101ab57806372250380146108f3578063785fa6271461091e5780637cd9591214610949578063853828b61461097457610376565b80636f8b44b01461087657806370a082311461089f578063715018a6146108dc57610376565b80633b2c3fb6116102ab57806351830227116102495780635c624220116102235780635c624220146107a85780635e1045ec146107e55780636352211e1461080e5780636c0360eb1461084b57610376565b8063518302271461073d57806354a2383b1461076857806355f804b31461077f57610376565b8063438b630011610285578063438b63001461066f578063453afb0f146106ac5780634f6ccce7146106d7578063513865321461071457610376565b80633b2c3fb61461061357806340c10f191461062a57806342842e0e1461064657610376565b80631e7269c51161031857806323b872dd116102f257806323b872dd146105595780632ad0a197146105825780632d6e71b6146105ad5780632f745c59146105d657610376565b80631e7269c5146104ca57806321c95bdf14610507578063231b07161461053057610376565b8063095ea7b311610354578063095ea7b3146104205780630b377e981461044957806318160ddd146104745780631dffa7cd1461049f57610376565b806301ffc9a71461037b57806306fdde03146103b8578063081812fc146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d91906143e9565b610d29565b6040516103af9190614b63565b60405180910390f35b3480156103c457600080fd5b506103cd610da3565b6040516103da9190614b7e565b60405180910390f35b3480156103ef57600080fd5b5061040a6004803603810190610405919061448c565b610e35565b6040516104179190614ada565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190614360565b610eba565b005b34801561045557600080fd5b5061045e610fd2565b60405161046b9190614b63565b60405180910390f35b34801561048057600080fd5b50610489610fe5565b6040516104969190614f00565b60405180910390f35b3480156104ab57600080fd5b506104b4610ff2565b6040516104c19190614f00565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec91906141dd565b610ff8565b6040516104fe9190614f00565b60405180910390f35b34801561051357600080fd5b5061052e6004803603810190610529919061448c565b611010565b005b34801561053c57600080fd5b506105576004803603810190610552919061448c565b611096565b005b34801561056557600080fd5b50610580600480360381019061057b919061424a565b61111c565b005b34801561058e57600080fd5b5061059761117c565b6040516105a49190614f00565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061448c565b611182565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614360565b611208565b60405161060a9190614f00565b60405180910390f35b34801561061f57600080fd5b506106286112ad565b005b610644600480360381019061063f9190614360565b611355565b005b34801561065257600080fd5b5061066d6004803603810190610668919061424a565b611ad8565b005b34801561067b57600080fd5b50610696600480360381019061069191906141dd565b611af8565b6040516106a39190614b41565b60405180910390f35b3480156106b857600080fd5b506106c1611ba6565b6040516106ce9190614f00565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f9919061448c565b611bac565b60405161070b9190614f00565b60405180910390f35b34801561072057600080fd5b5061073b6004803603810190610736919061448c565b611c1d565b005b34801561074957600080fd5b50610752611ca3565b60405161075f9190614b63565b60405180910390f35b34801561077457600080fd5b5061077d611cb6565b005b34801561078b57600080fd5b506107a660048036038101906107a19190614443565b611d5e565b005b3480156107b457600080fd5b506107cf60048036038101906107ca91906141dd565b611df4565b6040516107dc9190614b63565b60405180910390f35b3480156107f157600080fd5b5061080c600480360381019061080791906143a0565b611e14565b005b34801561081a57600080fd5b506108356004803603810190610830919061448c565b611f25565b6040516108429190614ada565b60405180910390f35b34801561085757600080fd5b50610860611fd7565b60405161086d9190614b7e565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061448c565b612065565b005b3480156108ab57600080fd5b506108c660048036038101906108c191906141dd565b6120eb565b6040516108d39190614f00565b60405180910390f35b3480156108e857600080fd5b506108f16121a3565b005b3480156108ff57600080fd5b5061090861222b565b6040516109159190614b7e565b60405180910390f35b34801561092a57600080fd5b506109336122b9565b6040516109409190614f00565b60405180910390f35b34801561095557600080fd5b5061095e6122bf565b60405161096b9190614b63565b60405180910390f35b34801561098057600080fd5b506109896122d2565b005b34801561099757600080fd5b506109a061239d565b6040516109ad9190614ada565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d8919061448c565b6123c7565b005b3480156109eb57600080fd5b506109f461244d565b604051610a019190614b7e565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c919061448c565b6124df565b005b348015610a3f57600080fd5b50610a48612565565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190614320565b61260d565b005b348015610a7f57600080fd5b50610a8861278e565b604051610a959190614b63565b60405180910390f35b348015610aaa57600080fd5b50610ac56004803603810190610ac0919061448c565b6127a1565b005b348015610ad357600080fd5b50610aee6004803603810190610ae9919061429d565b612867565b005b348015610afc57600080fd5b50610b056128c9565b604051610b129190614b7e565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d919061448c565b612957565b604051610b4f9190614b7e565b60405180910390f35b348015610b6457600080fd5b50610b6d612ab0565b604051610b7a9190614f00565b60405180910390f35b348015610b8f57600080fd5b50610b98612ab6565b604051610ba59190614f00565b60405180910390f35b348015610bba57600080fd5b50610bc3612abc565b604051610bd09190614f00565b60405180910390f35b348015610be557600080fd5b50610bee612ac2565b604051610bfb9190614f00565b60405180910390f35b348015610c1057600080fd5b50610c2b6004803603810190610c269190614443565b612ac8565b005b348015610c3957600080fd5b50610c546004803603810190610c4f919061420a565b612b5e565b604051610c619190614b63565b60405180910390f35b348015610c7657600080fd5b50610c7f612bf2565b005b348015610c8d57600080fd5b50610ca86004803603810190610ca39190614443565b612c9a565b005b348015610cb657600080fd5b50610cd16004803603810190610ccc91906141dd565b612d30565b005b348015610cdf57600080fd5b50610ce8612e28565b604051610cf59190614f00565b60405180910390f35b348015610d0a57600080fd5b50610d13612e2e565b604051610d209190614f00565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d9c5750610d9b82612e34565b5b9050919050565b606060008054610db29061522a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dde9061522a565b8015610e2b5780601f10610e0057610100808354040283529160200191610e2b565b820191906000526020600020905b815481529060010190602001808311610e0e57829003601f168201915b5050505050905090565b6000610e4082612f16565b610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690614dc0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ec582611f25565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90614e40565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f55612f82565b73ffffffffffffffffffffffffffffffffffffffff161480610f845750610f8381610f7e612f82565b612b5e565b5b610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90614ce0565b60405180910390fd5b610fcd8383612f8a565b505050565b600d60029054906101000a900460ff1681565b6000600880549050905090565b60165481565b60196020528060005260406000206000915090505481565b611018612f82565b73ffffffffffffffffffffffffffffffffffffffff1661103661239d565b73ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390614de0565b60405180910390fd5b8060138190555050565b61109e612f82565b73ffffffffffffffffffffffffffffffffffffffff166110bc61239d565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614de0565b60405180910390fd5b8060118190555050565b61112d611127612f82565b82613043565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390614e60565b60405180910390fd5b611177838383613121565b505050565b60145481565b61118a612f82565b73ffffffffffffffffffffffffffffffffffffffff166111a861239d565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590614de0565b60405180910390fd5b8060108190555050565b6000611213836120eb565b8210611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90614ba0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6112b5612f82565b73ffffffffffffffffffffffffffffffffffffffff166112d361239d565b73ffffffffffffffffffffffffffffffffffffffff1614611329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132090614de0565b60405180910390fd5b600d60039054906101000a900460ff1615600d60036101000a81548160ff021916908315150217905550565b6000600d60009054906101000a900460ff168061137e5750600d60019054906101000a900460ff165b9050806113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614da0565b60405180910390fd5b60006113ca610fe5565b90506113d461239d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185a57600d60009054906101000a900460ff161561167457600d60009054906101000a900460ff1661146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614d00565b60405180910390fd5b600083116114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490614ec0565b60405180910390fd5b60011515601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790614e80565b60405180910390fd5b600f54838261154f919061505f565b1115611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790614be0565b60405180910390fd5b60135483601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115de919061505f565b111561161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614d60565b60405180910390fd5b8260115461162d91906150e6565b34101561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614c80565b60405180910390fd5b611859565b600d60019054906101000a900460ff161561185857600d60019054906101000a900460ff166116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90614cc0565b60405180910390fd5b6000831161171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614ec0565b60405180910390fd5b601054600f5461172b9190615140565b8382611737919061505f565b1115611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90614be0565b60405180910390fd5b60145483601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117c6919061505f565b1115611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe90614ee0565b60405180910390fd5b8260125461181591906150e6565b341015611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90614c80565b60405180910390fd5b5b5b5b6000600190505b8381116118905761187d858284611878919061505f565b61337d565b80806118889061528d565b915050611861565b5082601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e0919061505f565b92505081905550600d60029054906101000a900460ff16801561190557506000601554115b8015611944575061191461239d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611ad257600061195361339b565b9050600181108015611966575060165447115b156119d4578473ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f193505050501580156119b3573d6000803e3d6000fd5b50601654601560008282546119c89190615140565b92505081905550611ad0565b6004811080156119e5575060175447115b15611a53578473ffffffffffffffffffffffffffffffffffffffff166108fc6017549081150290604051600060405180830381858888f19350505050158015611a32573d6000803e3d6000fd5b5060175460156000828254611a479190615140565b92505081905550611acf565b605081108015611a64575060185447115b15611ace578473ffffffffffffffffffffffffffffffffffffffff166108fc6018549081150290604051600060405180830381858888f19350505050158015611ab1573d6000803e3d6000fd5b5060185460156000828254611ac69190615140565b925050819055505b5b5b505b50505050565b611af383838360405180602001604052806000815250612867565b505050565b60606000611b05836120eb565b905060008167ffffffffffffffff811115611b2357611b22615420565b5b604051908082528060200260200182016040528015611b515781602001602082028036833780820191505090505b50905060005b82811015611b9b57611b698582611208565b828281518110611b7c57611b7b6153f1565b5b6020026020010181815250508080611b939061528d565b915050611b57565b508092505050919050565b60125481565b6000611bb6610fe5565b8210611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614ea0565b60405180910390fd5b60088281548110611c0b57611c0a6153f1565b5b90600052602060002001549050919050565b611c25612f82565b73ffffffffffffffffffffffffffffffffffffffff16611c4361239d565b73ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090614de0565b60405180910390fd5b8060158190555050565b600d60039054906101000a900460ff1681565b611cbe612f82565b73ffffffffffffffffffffffffffffffffffffffff16611cdc61239d565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990614de0565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b611d66612f82565b73ffffffffffffffffffffffffffffffffffffffff16611d8461239d565b73ffffffffffffffffffffffffffffffffffffffff1614611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd190614de0565b60405180910390fd5b80600b9080519060200190611df0929190613f53565b5050565b601a6020528060005260406000206000915054906101000a900460ff1681565b611e1c612f82565b73ffffffffffffffffffffffffffffffffffffffff16611e3a61239d565b73ffffffffffffffffffffffffffffffffffffffff1614611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790614de0565b60405180910390fd5b60005b8151811015611f21576001601a6000848481518110611eb557611eb46153f1565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f199061528d565b915050611e93565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc590614d40565b60405180910390fd5b80915050919050565b600b8054611fe49061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546120109061522a565b801561205d5780601f106120325761010080835404028352916020019161205d565b820191906000526020600020905b81548152906001019060200180831161204057829003601f168201915b505050505081565b61206d612f82565b73ffffffffffffffffffffffffffffffffffffffff1661208b61239d565b73ffffffffffffffffffffffffffffffffffffffff16146120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890614de0565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561215c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215390614d20565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121ab612f82565b73ffffffffffffffffffffffffffffffffffffffff166121c961239d565b73ffffffffffffffffffffffffffffffffffffffff161461221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614de0565b60405180910390fd5b61222960006133e2565b565b600e80546122389061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546122649061522a565b80156122b15780601f10612286576101008083540402835291602001916122b1565b820191906000526020600020905b81548152906001019060200180831161229457829003601f168201915b505050505081565b60155481565b600d60019054906101000a900460ff1681565b6122da612f82565b73ffffffffffffffffffffffffffffffffffffffff166122f861239d565b73ffffffffffffffffffffffffffffffffffffffff161461234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590614de0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612399573d6000803e3d6000fd5b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6123cf612f82565b73ffffffffffffffffffffffffffffffffffffffff166123ed61239d565b73ffffffffffffffffffffffffffffffffffffffff1614612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614de0565b60405180910390fd5b8060128190555050565b60606001805461245c9061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546124889061522a565b80156124d55780601f106124aa576101008083540402835291602001916124d5565b820191906000526020600020905b8154815290600101906020018083116124b857829003601f168201915b5050505050905090565b6124e7612f82565b73ffffffffffffffffffffffffffffffffffffffff1661250561239d565b73ffffffffffffffffffffffffffffffffffffffff161461255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614de0565b60405180910390fd5b8060148190555050565b61256d612f82565b73ffffffffffffffffffffffffffffffffffffffff1661258b61239d565b73ffffffffffffffffffffffffffffffffffffffff16146125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d890614de0565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b612615612f82565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90614c60565b60405180910390fd5b8060056000612690612f82565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661273d612f82565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127829190614b63565b60405180910390a35050565b600d60009054906101000a900460ff1681565b6127a9612f82565b73ffffffffffffffffffffffffffffffffffffffff166127c761239d565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614de0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612863573d6000803e3d6000fd5b5050565b612878612872612f82565b83613043565b6128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614e60565b60405180910390fd5b6128c3848484846134a8565b50505050565b600c80546128d69061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546129029061522a565b801561294f5780601f106129245761010080835404028352916020019161294f565b820191906000526020600020905b81548152906001019060200180831161293257829003601f168201915b505050505081565b606061296282612f16565b6129a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299890614e20565b60405180910390fd5b60001515600d60039054906101000a900460ff1615151415612a4f57600e80546129ca9061522a565b80601f01602080910402602001604051908101604052809291908181526020018280546129f69061522a565b8015612a435780601f10612a1857610100808354040283529160200191612a43565b820191906000526020600020905b815481529060010190602001808311612a2657829003601f168201915b50505050509050612aab565b6000612a59613504565b90506000815111612a795760405180602001604052806000815250612aa7565b80612a8384613596565b600c604051602001612a9793929190614a6c565b6040516020818303038152906040525b9150505b919050565b60135481565b60115481565b60185481565b600f5481565b612ad0612f82565b73ffffffffffffffffffffffffffffffffffffffff16612aee61239d565b73ffffffffffffffffffffffffffffffffffffffff1614612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90614de0565b60405180910390fd5b80600c9080519060200190612b5a929190613f53565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612bfa612f82565b73ffffffffffffffffffffffffffffffffffffffff16612c1861239d565b73ffffffffffffffffffffffffffffffffffffffff1614612c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6590614de0565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b612ca2612f82565b73ffffffffffffffffffffffffffffffffffffffff16612cc061239d565b73ffffffffffffffffffffffffffffffffffffffff1614612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614de0565b60405180910390fd5b80600e9080519060200190612d2c929190613f53565b5050565b612d38612f82565b73ffffffffffffffffffffffffffffffffffffffff16612d5661239d565b73ffffffffffffffffffffffffffffffffffffffff1614612dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da390614de0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1390614c00565b60405180910390fd5b612e25816133e2565b50565b60175481565b60105481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612eff57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612f0f5750612f0e826136f7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612ffd83611f25565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061304e82612f16565b61308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308490614ca0565b60405180910390fd5b600061309883611f25565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061310757508373ffffffffffffffffffffffffffffffffffffffff166130ef84610e35565b73ffffffffffffffffffffffffffffffffffffffff16145b8061311857506131178185612b5e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661314182611f25565b73ffffffffffffffffffffffffffffffffffffffff1614613197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318e90614e00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fe90614c40565b60405180910390fd5b613212838383613761565b61321d600082612f8a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461326d9190615140565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132c4919061505f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b613397828260405180602001604052806000815250613875565b5050565b6000806103e74244336040516020016133b693929190614a9d565b6040516020818303038152906040528051906020012060001c6133d99190615304565b90508091505090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134b3848484613121565b6134bf848484846138d0565b6134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f590614bc0565b60405180910390fd5b50505050565b6060600b80546135139061522a565b80601f016020809104026020016040519081016040528092919081815260200182805461353f9061522a565b801561358c5780601f106135615761010080835404028352916020019161358c565b820191906000526020600020905b81548152906001019060200180831161356f57829003601f168201915b5050505050905090565b606060008214156135de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506136f2565b600082905060005b600082146136105780806135f99061528d565b915050600a8261360991906150b5565b91506135e6565b60008167ffffffffffffffff81111561362c5761362b615420565b5b6040519080825280601f01601f19166020018201604052801561365e5781602001600182028036833780820191505090505b5090505b600085146136eb576001826136779190615140565b9150600a856136869190615304565b6030613692919061505f565b60f81b8183815181106136a8576136a76153f1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856136e491906150b5565b9450613662565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61376c838383613a67565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137af576137aa81613a6c565b6137ee565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146137ed576137ec8382613ab5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138315761382c81613c22565b613870565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461386f5761386e8282613cf3565b5b5b505050565b61387f8383613d72565b61388c60008484846138d0565b6138cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c290614bc0565b60405180910390fd5b505050565b60006138f18473ffffffffffffffffffffffffffffffffffffffff16613f40565b15613a5a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261391a612f82565b8786866040518563ffffffff1660e01b815260040161393c9493929190614af5565b602060405180830381600087803b15801561395657600080fd5b505af192505050801561398757506040513d601f19601f820116820180604052508101906139849190614416565b60015b613a0a573d80600081146139b7576040519150601f19603f3d011682016040523d82523d6000602084013e6139bc565b606091505b50600081511415613a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f990614bc0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a5f565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613ac2846120eb565b613acc9190615140565b9050600060076000848152602001908152602001600020549050818114613bb1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613c369190615140565b9050600060096000848152602001908152602001600020549050600060088381548110613c6657613c656153f1565b5b906000526020600020015490508060088381548110613c8857613c876153f1565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613cd757613cd66153c2565b5b6001900381819060005260206000200160009055905550505050565b6000613cfe836120eb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd990614d80565b60405180910390fd5b613deb81612f16565b15613e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2290614c20565b60405180910390fd5b613e3760008383613761565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e87919061505f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613f5f9061522a565b90600052602060002090601f016020900481019282613f815760008555613fc8565b82601f10613f9a57805160ff1916838001178555613fc8565b82800160010185558215613fc8579182015b82811115613fc7578251825591602001919060010190613fac565b5b509050613fd59190613fd9565b5090565b5b80821115613ff2576000816000905550600101613fda565b5090565b600061400961400484614f40565b614f1b565b9050808382526020820190508285602086028201111561402c5761402b615454565b5b60005b8581101561405c578161404288826140ea565b84526020840193506020830192505060018101905061402f565b5050509392505050565b600061407961407484614f6c565b614f1b565b90508281526020810184848401111561409557614094615459565b5b6140a08482856151e8565b509392505050565b60006140bb6140b684614f9d565b614f1b565b9050828152602081018484840111156140d7576140d6615459565b5b6140e28482856151e8565b509392505050565b6000813590506140f981615b5f565b92915050565b600082601f8301126141145761411361544f565b5b8135614124848260208601613ff6565b91505092915050565b60008135905061413c81615b76565b92915050565b60008135905061415181615b8d565b92915050565b60008151905061416681615b8d565b92915050565b600082601f8301126141815761418061544f565b5b8135614191848260208601614066565b91505092915050565b600082601f8301126141af576141ae61544f565b5b81356141bf8482602086016140a8565b91505092915050565b6000813590506141d781615ba4565b92915050565b6000602082840312156141f3576141f2615463565b5b6000614201848285016140ea565b91505092915050565b6000806040838503121561422157614220615463565b5b600061422f858286016140ea565b9250506020614240858286016140ea565b9150509250929050565b60008060006060848603121561426357614262615463565b5b6000614271868287016140ea565b9350506020614282868287016140ea565b9250506040614293868287016141c8565b9150509250925092565b600080600080608085870312156142b7576142b6615463565b5b60006142c5878288016140ea565b94505060206142d6878288016140ea565b93505060406142e7878288016141c8565b925050606085013567ffffffffffffffff8111156143085761430761545e565b5b6143148782880161416c565b91505092959194509250565b6000806040838503121561433757614336615463565b5b6000614345858286016140ea565b92505060206143568582860161412d565b9150509250929050565b6000806040838503121561437757614376615463565b5b6000614385858286016140ea565b9250506020614396858286016141c8565b9150509250929050565b6000602082840312156143b6576143b5615463565b5b600082013567ffffffffffffffff8111156143d4576143d361545e565b5b6143e0848285016140ff565b91505092915050565b6000602082840312156143ff576143fe615463565b5b600061440d84828501614142565b91505092915050565b60006020828403121561442c5761442b615463565b5b600061443a84828501614157565b91505092915050565b60006020828403121561445957614458615463565b5b600082013567ffffffffffffffff8111156144775761447661545e565b5b6144838482850161419a565b91505092915050565b6000602082840312156144a2576144a1615463565b5b60006144b0848285016141c8565b91505092915050565b60006144c58383614a37565b60208301905092915050565b6144da81615174565b82525050565b6144f16144ec82615174565b6152d6565b82525050565b600061450282614ff3565b61450c8185615021565b935061451783614fce565b8060005b8381101561454857815161452f88826144b9565b975061453a83615014565b92505060018101905061451b565b5085935050505092915050565b61455e81615186565b82525050565b600061456f82614ffe565b6145798185615032565b93506145898185602086016151f7565b61459281615468565b840191505092915050565b60006145a882615009565b6145b28185615043565b93506145c28185602086016151f7565b6145cb81615468565b840191505092915050565b60006145e182615009565b6145eb8185615054565b93506145fb8185602086016151f7565b80840191505092915050565b600081546146148161522a565b61461e8186615054565b94506001821660008114614639576001811461464a5761467d565b60ff1983168652818601935061467d565b61465385614fde565b60005b8381101561467557815481890152600182019150602081019050614656565b838801955050505b50505092915050565b6000614693602b83615043565b915061469e82615486565b604082019050919050565b60006146b6603283615043565b91506146c1826154d5565b604082019050919050565b60006146d9602883615043565b91506146e482615524565b604082019050919050565b60006146fc602683615043565b915061470782615573565b604082019050919050565b600061471f601c83615043565b915061472a826155c2565b602082019050919050565b6000614742602483615043565b915061474d826155eb565b604082019050919050565b6000614765601983615043565b91506147708261563a565b602082019050919050565b6000614788601f83615043565b915061479382615663565b602082019050919050565b60006147ab602c83615043565b91506147b68261568c565b604082019050919050565b60006147ce601583615043565b91506147d9826156db565b602082019050919050565b60006147f1603883615043565b91506147fc82615704565b604082019050919050565b6000614814601283615043565b915061481f82615753565b602082019050919050565b6000614837602a83615043565b91506148428261577c565b604082019050919050565b600061485a602983615043565b9150614865826157cb565b604082019050919050565b600061487d602c83615043565b91506148888261581a565b604082019050919050565b60006148a0602083615043565b91506148ab82615869565b602082019050919050565b60006148c3600f83615043565b91506148ce82615892565b602082019050919050565b60006148e6602c83615043565b91506148f1826158bb565b604082019050919050565b6000614909602083615043565b91506149148261590a565b602082019050919050565b600061492c602983615043565b915061493782615933565b604082019050919050565b600061494f602f83615043565b915061495a82615982565b604082019050919050565b6000614972602183615043565b915061497d826159d1565b604082019050919050565b6000614995603183615043565b91506149a082615a20565b604082019050919050565b60006149b8601783615043565b91506149c382615a6f565b602082019050919050565b60006149db602c83615043565b91506149e682615a98565b604082019050919050565b60006149fe602083615043565b9150614a0982615ae7565b602082019050919050565b6000614a21602983615043565b9150614a2c82615b10565b604082019050919050565b614a40816151de565b82525050565b614a4f816151de565b82525050565b614a66614a61826151de565b6152fa565b82525050565b6000614a7882866145d6565b9150614a8482856145d6565b9150614a908284614607565b9150819050949350505050565b6000614aa98286614a55565b602082019150614ab98285614a55565b602082019150614ac982846144e0565b601482019150819050949350505050565b6000602082019050614aef60008301846144d1565b92915050565b6000608082019050614b0a60008301876144d1565b614b1760208301866144d1565b614b246040830185614a46565b8181036060830152614b368184614564565b905095945050505050565b60006020820190508181036000830152614b5b81846144f7565b905092915050565b6000602082019050614b786000830184614555565b92915050565b60006020820190508181036000830152614b98818461459d565b905092915050565b60006020820190508181036000830152614bb981614686565b9050919050565b60006020820190508181036000830152614bd9816146a9565b9050919050565b60006020820190508181036000830152614bf9816146cc565b9050919050565b60006020820190508181036000830152614c19816146ef565b9050919050565b60006020820190508181036000830152614c3981614712565b9050919050565b60006020820190508181036000830152614c5981614735565b9050919050565b60006020820190508181036000830152614c7981614758565b9050919050565b60006020820190508181036000830152614c998161477b565b9050919050565b60006020820190508181036000830152614cb98161479e565b9050919050565b60006020820190508181036000830152614cd9816147c1565b9050919050565b60006020820190508181036000830152614cf9816147e4565b9050919050565b60006020820190508181036000830152614d1981614807565b9050919050565b60006020820190508181036000830152614d398161482a565b9050919050565b60006020820190508181036000830152614d598161484d565b9050919050565b60006020820190508181036000830152614d7981614870565b9050919050565b60006020820190508181036000830152614d9981614893565b9050919050565b60006020820190508181036000830152614db9816148b6565b9050919050565b60006020820190508181036000830152614dd9816148d9565b9050919050565b60006020820190508181036000830152614df9816148fc565b9050919050565b60006020820190508181036000830152614e198161491f565b9050919050565b60006020820190508181036000830152614e3981614942565b9050919050565b60006020820190508181036000830152614e5981614965565b9050919050565b60006020820190508181036000830152614e7981614988565b9050919050565b60006020820190508181036000830152614e99816149ab565b9050919050565b60006020820190508181036000830152614eb9816149ce565b9050919050565b60006020820190508181036000830152614ed9816149f1565b9050919050565b60006020820190508181036000830152614ef981614a14565b9050919050565b6000602082019050614f156000830184614a46565b92915050565b6000614f25614f36565b9050614f31828261525c565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5b57614f5a615420565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f8757614f86615420565b5b614f9082615468565b9050602081019050919050565b600067ffffffffffffffff821115614fb857614fb7615420565b5b614fc182615468565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061506a826151de565b9150615075836151de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150aa576150a9615335565b5b828201905092915050565b60006150c0826151de565b91506150cb836151de565b9250826150db576150da615364565b5b828204905092915050565b60006150f1826151de565b91506150fc836151de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561513557615134615335565b5b828202905092915050565b600061514b826151de565b9150615156836151de565b92508282101561516957615168615335565b5b828203905092915050565b600061517f826151be565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156152155780820151818401526020810190506151fa565b83811115615224576000848401525b50505050565b6000600282049050600182168061524257607f821691505b6020821081141561525657615255615393565b5b50919050565b61526582615468565b810181811067ffffffffffffffff8211171561528457615283615420565b5b80604052505050565b6000615298826151de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152cb576152ca615335565b5b600182019050919050565b60006152e1826152e8565b9050919050565b60006152f382615479565b9050919050565b6000819050919050565b600061530f826151de565b915061531a836151de565b92508261532a57615329615364565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204e465473000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5075626c696373616c65206d757374206265204f4e0000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f50726573616c65206d757374206265204f4e0000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e7360008201527f20666f722070726573616c650000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c65206d757374206265204f4e0000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f75206172656e27742077686974656c697374656421000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d696e742061626d6f756e74206d757374206265206d6f7265207468616e2030600082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e7360008201527f20666f722073616c650000000000000000000000000000000000000000000000602082015250565b615b6881615174565b8114615b7357600080fd5b50565b615b7f81615186565b8114615b8a57600080fd5b50565b615b9681615192565b8114615ba157600080fd5b50565b615bad816151de565b8114615bb857600080fd5b5056fea264697066735822122088340e4fb95673cc0f343bc32f62ef7877292cb9fedecf337e6c7b0f6269e88064736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000144c696c20447564657320436c7562202d204c444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d614b5058314c6b464e445864375557716845704d4a656d69343974377846464b7061776843726a41726b76462f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d614b5058314c6b464e445864375557716845704d4a656d69343974377846464b7061776843726a41726b76462f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Lil Dudes Club - LDC
Arg [1] : _symbol (string): LDC
Arg [2] : _initBaseURI (string): ipfs://QmaKPX1LkFNDXd7UWqhEpMJemi49t7xFFKpawhCrjArkvF/
Arg [3] : _initNotRevealedURI (string): ipfs://QmaKPX1LkFNDXd7UWqhEpMJemi49t7xFFKpawhCrjArkvF/

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [5] : 4c696c20447564657320436c7562202d204c4443000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4c44430000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d614b5058314c6b464e445864375557716845704d4a656d
Arg [10] : 69343974377846464b7061776843726a41726b76462f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [12] : 697066733a2f2f516d614b5058314c6b464e445864375557716845704d4a656d
Arg [13] : 69343974377846464b7061776843726a41726b76462f00000000000000000000


Deployed Bytecode Sourcemap

115:6651:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:290:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2549:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4182:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3720:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;328:36:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1680:111:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;810:46:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;992:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5316:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5096:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5196:364:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;703:42:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5706:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1278:331:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5969:72:10;;;;;;;;;;;;;:::i;:::-;;1507:1968;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5626:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3667:375:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;594:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1863:308:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4992:100:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;368:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5798:75;;;;;;;;;;;;;:::i;:::-;;6145:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1088:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4759:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2174:313:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;194:21:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5609:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1834:283:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1620:92:11;;;;;;;;;;;;;:::i;:::-;;400:28:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;749:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;292:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6519:140;;;;;;;;;;;;;:::i;:::-;;988:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5200:112:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2711:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5457:148:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6045:96;;;;;;;;;;;;;:::i;:::-;;4544:318:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;260:29:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6663:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5871:354:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;219:37:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4046:694;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;660:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;531:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;930;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;432:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6375:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4928:206:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5881:84:10;;;;;;;;;;;;;:::i;:::-;;6245:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1861:223:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;869:46:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;467:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;909:290:4;1051:4;1105:35;1090:50;;;:11;:50;;;;:102;;;;1156:36;1180:11;1156:23;:36::i;:::-;1090:102;1071:121;;909:290;;;:::o;2549:98:3:-;2603:13;2635:5;2628:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2549:98;:::o;4182:295::-;4298:7;4342:16;4350:7;4342;:16::i;:::-;4321:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;4446:15;:24;4462:7;4446:24;;;;;;;;;;;;;;;;;;;;;4439:31;;4182:295;;;:::o;3720:401::-;3800:13;3816:23;3831:7;3816:14;:23::i;:::-;3800:39;;3863:5;3857:11;;:2;:11;;;;3849:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3954:5;3938:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3963:37;3980:5;3987:12;:10;:12::i;:::-;3963:16;:37::i;:::-;3938:62;3917:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;4093:21;4102:2;4106:7;4093:8;:21::i;:::-;3790:331;3720:401;;:::o;328:36:10:-;;;;;;;;;;;;;:::o;1680:111:4:-;1741:7;1767:10;:17;;;;1760:24;;1680:111;:::o;810:46:10:-;;;;:::o;992:42::-;;;;;;;;;;;;;;;;;:::o;5316:136::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5426:21:10::1;5403:20;:44;;;;5316:136:::0;:::o;5096:100::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5179:12:10::1;5165:11;:26;;;;5096:100:::0;:::o;5196:364:3:-;5398:41;5417:12;:10;:12::i;:::-;5431:7;5398:18;:41::i;:::-;5377:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;5525:28;5535:4;5541:2;5545:7;5525:9;:28::i;:::-;5196:364;;;:::o;703:42:10:-;;;;:::o;5706:88::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5780:9:10::1;5769:8;:20;;;;5706:88:::0;:::o;1278:331:4:-;1415:7;1467:23;1484:5;1467:16;:23::i;:::-;1459:5;:31;1438:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;1576:12;:19;1589:5;1576:19;;;;;;;;;;;;;;;:26;1596:5;1576:26;;;;;;;;;;;;1569:33;;1278:331;;;;:::o;5969:72:10:-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6028:8:10::1;;;;;;;;;;;6027:9;6016:8;;:20;;;;;;;;;;;;;;;;;;5969:72::o:0;1507:1968::-;1576:11;1591:9;;;;;;;;;;;:25;;;;1604:12;;;;;;;;;;;1591:25;1576:41;;1631:6;1623:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1669:14;1686:13;:11;:13::i;:::-;1669:30;;1724:7;:5;:7::i;:::-;1710:21;;:10;:21;;;1706:1048;;1744:9;;;;;;;;;;;1740:1008;;;1771:9;;;;;;;;;;;1763:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;1833:1;1819:11;:15;1811:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1921:4;1887:38;;:18;:30;1906:10;1887:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;1879:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1993:9;;1978:11;1969:6;:20;;;;:::i;:::-;:33;;1961:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;2099:20;;2084:11;2063:6;:18;2070:10;2063:18;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:56;;2055:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;2211:11;2197;;:25;;;;:::i;:::-;2184:9;:38;;2176:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;1740:1008;;;2277:12;;;;;;;;;;;2273:475;;;2307:12;;;;;;;;;;;2299:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2375:1;2361:11;:15;2353:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2465:8;;2453:9;;:20;;;;:::i;:::-;2438:11;2429:6;:20;;;;:::i;:::-;:44;;2421:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;2570:23;;2555:11;2534:6;:18;2541:10;2534:18;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:59;;2526:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;2685:11;2668:14;;:28;;;;:::i;:::-;2655:9;:41;;2647:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2273:475;1740:1008;1706:1048;2765:9;2777:1;2765:13;;2760:88;2785:11;2780:1;:16;2760:88;;2815:26;2825:3;2839:1;2830:6;:10;;;;:::i;:::-;2815:9;:26::i;:::-;2798:3;;;;;:::i;:::-;;;;2760:88;;;;2877:11;2855:6;:18;2862:10;2855:18;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;2926:16;;;;;;;;;;;:35;;;;;2960:1;2946:11;;:15;2926:35;:60;;;;;2979:7;:5;:7::i;:::-;2965:21;;:10;:21;;;;2926:60;2922:548;;;3005:8;3016;:6;:8::i;:::-;3005:19;;3050:1;3044:3;:7;:44;;;;;3079:9;;3055:21;:33;3044:44;3040:424;;;3108:3;3100:21;;:32;3122:9;;3100:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3157:9;;3142:11;;:24;;;;;;;:::i;:::-;;;;;;;;3040:424;;;3191:1;3185:3;:7;:45;;;;;3220:10;;3196:21;:34;3185:45;3181:283;;;3250:3;3242:21;;:33;3264:10;;3242:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3300:10;;3285:11;;:25;;;;;;;:::i;:::-;;;;;;;;3181:283;;;3335:2;3329:3;:8;:46;;;;;3365:10;;3341:21;:34;3329:46;3325:139;;;3395:3;3387:21;;:33;3409:10;;3387:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3445:10;;3430:11;;:25;;;;;;;:::i;:::-;;;;;;;;3325:139;3181:283;3040:424;2988:482;2922:548;1570:1905;;1507:1968;;:::o;5626:179:3:-;5759:39;5776:4;5782:2;5786:7;5759:39;;;;;;;;;;;;:16;:39::i;:::-;5626:179;;;:::o;3667:375:10:-;3751:16;3781:23;3807:17;3817:6;3807:9;:17::i;:::-;3781:43;;3834:25;3876:15;3862:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3834:58;;3907:9;3902:111;3922:15;3918:1;:19;3902:111;;;3972:30;3992:6;4000:1;3972:19;:30::i;:::-;3958:8;3967:1;3958:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;3939:3;;;;;:::i;:::-;;;;3902:111;;;;4029:8;4022:15;;;;3667:375;;;:::o;594:49::-;;;;:::o;1863:308:4:-;1978:7;2030:30;:28;:30::i;:::-;2022:5;:38;2001:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;2147:10;2158:5;2147:17;;;;;;;;:::i;:::-;;;;;;;;;;2140:24;;1863:308;;;:::o;4992:100:10:-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5075:12:10::1;5061:11;:26;;;;4992:100:::0;:::o;368:28::-;;;;;;;;;;;;;:::o;5798:75::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5859:9:10::1;;;;;;;;;;;5858:10;5846:9;;:22;;;;;;;;;;;;;;;;;;5798:75::o:0;6145:96::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6225:11:10::1;6215:7;:21;;;;;;;;;;;;:::i;:::-;;6145:96:::0;:::o;1088:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;4759:229::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4853:9:10::1;4849:135;4868:20;:27;4866:1;:29;4849:135;;;4969:4;4923:18;:43;4942:20;4963:1;4942:23;;;;;;;;:::i;:::-;;;;;;;;4923:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;4896:3;;;;;:::i;:::-;;;;4849:135;;;;4759:229:::0;:::o;2174:313:3:-;2286:7;2309:13;2325:7;:16;2333:7;2325:16;;;;;;;;;;;;;;;;;;;;;2309:32;;2389:1;2372:19;;:5;:19;;;;2351:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2475:5;2468:12;;;2174:313;;;:::o;194:21:10:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5609:92::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5686:10:10::1;5674:9;:22;;;;5609:92:::0;:::o;1834:283:3:-;1946:7;2007:1;1990:19;;:5;:19;;;;1969:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;2094:9;:16;2104:5;2094:16;;;;;;;;;;;;;;;;2087:23;;1834:283;;;:::o;1620:92:11:-;1211:12;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1684:21:::1;1702:1;1684:9;:21::i;:::-;1620:92::o:0;400:28:10:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;749:48::-;;;;:::o;292:32::-;;;;;;;;;;;;;:::o;6519:140::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6571:12:10::1;6586:21;6571:36;;6625:10;6617:28;;:37;6646:7;6617:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6561:98;6519:140::o:0;988:85:11:-;1034:7;1060:6;;;;;;;;;;;1053:13;;988:85;:::o;5200:112:10:-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5292:15:10::1;5275:14;:32;;;;5200:112:::0;:::o;2711:102:3:-;2767:13;2799:7;2792:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2711:102;:::o;5457:148:10:-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5576:24:10::1;5550:23;:50;;;;5457:148:::0;:::o;6045:96::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6120:16:10::1;;;;;;;;;;;6119:17;6100:16;;:36;;;;;;;;;;;;;;;;;;6045:96::o:0;4544:318:3:-;4686:12;:10;:12::i;:::-;4674:24;;:8;:24;;;;4666:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4784:8;4739:18;:32;4758:12;:10;:12::i;:::-;4739:32;;;;;;;;;;;;;;;:42;4772:8;4739:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4836:8;4807:48;;4822:12;:10;:12::i;:::-;4807:48;;;4846:8;4807:48;;;;;;:::i;:::-;;;;;;;;4544:318;;:::o;260:29:10:-;;;;;;;;;;;;;:::o;6663:101::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6733:10:10::1;6725:28;;:34;6754:4;6725:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6663:101:::0;:::o;5871:354:3:-;6053:41;6072:12;:10;:12::i;:::-;6086:7;6053:18;:41::i;:::-;6032:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;6179:39;6193:4;6199:2;6203:7;6212:5;6179:13;:39::i;:::-;5871:354;;;;:::o;219:37:10:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4046:694::-;4159:13;4209:16;4217:7;4209;:16::i;:::-;4188:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;4325:5;4313:17;;:8;;;;;;;;;;;:17;;;4309:67;;;4351:14;4344:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4309:67;4386:28;4417:10;:8;:10::i;:::-;4386:41;;4487:1;4462:14;4456:28;:32;:279;;;;;;;;;;;;;;;;;4577:14;4617:18;:7;:16;:18::i;:::-;4661:13;4535:161;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4456:279;4437:298;;;4046:694;;;;:::o;660:39::-;;;;:::o;531:46::-;;;;:::o;930:::-;;;;:::o;432:31::-;;;;:::o;6375:140::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6493:17:10::1;6477:13;:33;;;;;;;;;;;;:::i;:::-;;6375:140:::0;:::o;4928:206:3:-;5065:4;5092:18;:25;5111:5;5092:25;;;;;;;;;;;;;;;:35;5118:8;5092:35;;;;;;;;;;;;;;;;;;;;;;;;;5085:42;;4928:206;;;;:::o;5881:84:10:-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5948:12:10::1;;;;;;;;;;;5947:13;5932:12;;:28;;;;;;;;;;;;;;;;;;5881:84::o:0;6245:124::-;1211:12:11;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6346:18:10::1;6329:14;:35;;;;;;;;;;;;:::i;:::-;;6245:124:::0;:::o;1861:223:11:-;1211:12;:10;:12::i;:::-;1200:23;;:7;:5;:7::i;:::-;:23;;;1192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1982:1:::1;1962:22;;:8;:22;;;;1941:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2058:19;2068:8;2058:9;:19::i;:::-;1861:223:::0;:::o;869:46:10:-;;;;:::o;467:29::-;;;;:::o;1431:344:3:-;1573:4;1627:25;1612:40;;;:11;:40;;;;:104;;;;1683:33;1668:48;;;:11;:48;;;;1612:104;:156;;;;1732:36;1756:11;1732:23;:36::i;:::-;1612:156;1593:175;;1431:344;;;:::o;7731:125::-;7796:4;7847:1;7819:30;;:7;:16;7827:7;7819:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7812:37;;7731:125;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;11710:171:3:-;11811:2;11784:15;:24;11800:7;11784:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11866:7;11862:2;11828:46;;11837:23;11852:7;11837:14;:23::i;:::-;11828:46;;;;;;;;;;;;11710:171;;:::o;8014:438::-;8139:4;8180:16;8188:7;8180;:16::i;:::-;8159:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;8276:13;8292:23;8307:7;8292:14;:23::i;:::-;8276:39;;8344:5;8333:16;;:7;:16;;;:63;;;;8389:7;8365:31;;:20;8377:7;8365:11;:20::i;:::-;:31;;;8333:63;:111;;;;8412:32;8429:5;8436:7;8412:16;:32::i;:::-;8333:111;8325:120;;;8014:438;;;;:::o;11005:594::-;11172:4;11145:31;;:23;11160:7;11145:14;:23::i;:::-;:31;;;11124:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;11275:1;11261:16;;:2;:16;;;;11253:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11329:39;11350:4;11356:2;11360:7;11329:20;:39::i;:::-;11430:29;11447:1;11451:7;11430:8;:29::i;:::-;11489:1;11470:9;:15;11480:4;11470:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11517:1;11500:9;:13;11510:2;11500:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11547:2;11528:7;:16;11536:7;11528:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11584:7;11580:2;11565:27;;11574:4;11565:27;;;;;;;;;;;;11005:594;;;:::o;8782:108::-;8857:26;8867:2;8871:7;8857:26;;;;;;;;;;;;:9;:26::i;:::-;8782:108;;:::o;3479:184:10:-;3515:4;3527:17;3630:3;3579:15;3596:16;3614:10;3562:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3552:74;;;;;;3547:80;;:86;;;;:::i;:::-;3527:106;;3646:12;3639:19;;;3479:184;:::o;2090:169:11:-;2145:16;2164:6;;;;;;;;;;;2145:25;;2189:8;2180:6;;:17;;;;;;;;;;;;;;;;;;2243:8;2212:40;;2233:8;2212:40;;;;;;;;;;;;2135:124;2090:169;:::o;7087:341:3:-;7238:28;7248:4;7254:2;7258:7;7238:9;:28::i;:::-;7297:48;7320:4;7326:2;7330:7;7339:5;7297:22;:48::i;:::-;7276:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;7087:341;;;;:::o;1403:100:10:-;1463:13;1491:7;1484:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1403:100;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;763:199:2:-;888:4;930:25;915:40;;;:11;:40;;;;908:47;;763:199;;;:::o;2767:572:4:-;2906:45;2933:4;2939:2;2943:7;2906:26;:45::i;:::-;2982:1;2966:18;;:4;:18;;;2962:183;;;3000:40;3032:7;3000:31;:40::i;:::-;2962:183;;;3069:2;3061:10;;:4;:10;;;3057:88;;3087:47;3120:4;3126:7;3087:32;:47::i;:::-;3057:88;2962:183;3172:1;3158:16;;:2;:16;;;3154:179;;;3190:45;3227:7;3190:36;:45::i;:::-;3154:179;;;3262:4;3256:10;;:2;:10;;;3252:81;;3282:40;3310:2;3314:7;3282:27;:40::i;:::-;3252:81;3154:179;2767:572;;;:::o;9111:311:3:-;9236:18;9242:2;9246:7;9236:5;:18::i;:::-;9285:54;9316:1;9320:2;9324:7;9333:5;9285:22;:54::i;:::-;9264:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;9111:311;;;:::o;12434:950::-;12584:4;12604:15;:2;:13;;;:15::i;:::-;12600:778;;;12671:2;12655:36;;;12713:12;:10;:12::i;:::-;12747:4;12773:7;12802:5;12655:170;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12635:691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13021:1;13004:6;:13;:18;13000:312;;;13046:106;;;;;;;;;;:::i;:::-;;;;;;;;13000:312;13264:6;13258:13;13249:6;13245:2;13241:15;13234:38;12635:691;12897:41;;;12887:51;;;:6;:51;;;;12880:58;;;;;12600:778;13363:4;13356:11;;12434:950;;;;;;;:::o;13940:122::-;;;;:::o;4045:161:4:-;4148:10;:17;;;;4121:15;:24;4137:7;4121:24;;;;;;;;;;;:44;;;;4175:10;4191:7;4175:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4045:161;:::o;4823:982::-;5097:22;5147:1;5122:22;5139:4;5122:16;:22::i;:::-;:26;;;;:::i;:::-;5097:51;;5158:18;5179:17;:26;5197:7;5179:26;;;;;;;;;;;;5158:47;;5323:14;5309:10;:28;5305:323;;5353:19;5375:12;:18;5388:4;5375:18;;;;;;;;;;;;;;;:34;5394:14;5375:34;;;;;;;;;;;;5353:56;;5457:11;5424:12;:18;5437:4;5424:18;;;;;;;;;;;;;;;:30;5443:10;5424:30;;;;;;;;;;;:44;;;;5573:10;5540:17;:30;5558:11;5540:30;;;;;;;;;;;:43;;;;5339:289;5305:323;5721:17;:26;5739:7;5721:26;;;;;;;;;;;5714:33;;;5764:12;:18;5777:4;5764:18;;;;;;;;;;;;;;;:34;5783:14;5764:34;;;;;;;;;;;5757:41;;;4916:889;;4823:982;;:::o;6093:1061::-;6342:22;6387:1;6367:10;:17;;;;:21;;;;:::i;:::-;6342:46;;6398:18;6419:15;:24;6435:7;6419:24;;;;;;;;;;;;6398:45;;6765:19;6787:10;6798:14;6787:26;;;;;;;;:::i;:::-;;;;;;;;;;6765:48;;6849:11;6824:10;6835;6824:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6959:10;6928:15;:28;6944:11;6928:28;;;;;;;;;;;:41;;;;7097:15;:24;7113:7;7097:24;;;;;;;;;;;7090:31;;;7131:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6164:990;;;6093:1061;:::o;3633:217::-;3717:14;3734:20;3751:2;3734:16;:20::i;:::-;3717:37;;3791:7;3764:12;:16;3777:2;3764:16;;;;;;;;;;;;;;;:24;3781:6;3764:24;;;;;;;;;;;:34;;;;3837:6;3808:17;:26;3826:7;3808:26;;;;;;;;;;;:35;;;;3707:143;3633:217;;:::o;9744:372:3:-;9837:1;9823:16;;:2;:16;;;;9815:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9895:16;9903:7;9895;:16::i;:::-;9894:17;9886:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9955:45;9984:1;9988:2;9992:7;9955:20;:45::i;:::-;10028:1;10011:9;:13;10021:2;10011:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10058:2;10039:7;:16;10047:7;10039:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10101:7;10097:2;10076:33;;10093:1;10076:33;;;;;;;;;;;;9744:372;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:179::-;8910:10;8931:46;8973:3;8965:6;8931:46;:::i;:::-;9009:4;9004:3;9000:14;8986:28;;8841:179;;;;:::o;9026:118::-;9113:24;9131:5;9113:24;:::i;:::-;9108:3;9101:37;9026:118;;:::o;9150:157::-;9255:45;9275:24;9293:5;9275:24;:::i;:::-;9255:45;:::i;:::-;9250:3;9243:58;9150:157;;:::o;9343:732::-;9462:3;9491:54;9539:5;9491:54;:::i;:::-;9561:86;9640:6;9635:3;9561:86;:::i;:::-;9554:93;;9671:56;9721:5;9671:56;:::i;:::-;9750:7;9781:1;9766:284;9791:6;9788:1;9785:13;9766:284;;;9867:6;9861:13;9894:63;9953:3;9938:13;9894:63;:::i;:::-;9887:70;;9980:60;10033:6;9980:60;:::i;:::-;9970:70;;9826:224;9813:1;9810;9806:9;9801:14;;9766:284;;;9770:14;10066:3;10059:10;;9467:608;;;9343:732;;;;:::o;10081:109::-;10162:21;10177:5;10162:21;:::i;:::-;10157:3;10150:34;10081:109;;:::o;10196:360::-;10282:3;10310:38;10342:5;10310:38;:::i;:::-;10364:70;10427:6;10422:3;10364:70;:::i;:::-;10357:77;;10443:52;10488:6;10483:3;10476:4;10469:5;10465:16;10443:52;:::i;:::-;10520:29;10542:6;10520:29;:::i;:::-;10515:3;10511:39;10504:46;;10286:270;10196:360;;;;:::o;10562:364::-;10650:3;10678:39;10711:5;10678:39;:::i;:::-;10733:71;10797:6;10792:3;10733:71;:::i;:::-;10726:78;;10813:52;10858:6;10853:3;10846:4;10839:5;10835:16;10813:52;:::i;:::-;10890:29;10912:6;10890:29;:::i;:::-;10885:3;10881:39;10874:46;;10654:272;10562:364;;;;:::o;10932:377::-;11038:3;11066:39;11099:5;11066:39;:::i;:::-;11121:89;11203:6;11198:3;11121:89;:::i;:::-;11114:96;;11219:52;11264:6;11259:3;11252:4;11245:5;11241:16;11219:52;:::i;:::-;11296:6;11291:3;11287:16;11280:23;;11042:267;10932:377;;;;:::o;11339:845::-;11442:3;11479:5;11473:12;11508:36;11534:9;11508:36;:::i;:::-;11560:89;11642:6;11637:3;11560:89;:::i;:::-;11553:96;;11680:1;11669:9;11665:17;11696:1;11691:137;;;;11842:1;11837:341;;;;11658:520;;11691:137;11775:4;11771:9;11760;11756:25;11751:3;11744:38;11811:6;11806:3;11802:16;11795:23;;11691:137;;11837:341;11904:38;11936:5;11904:38;:::i;:::-;11964:1;11978:154;11992:6;11989:1;11986:13;11978:154;;;12066:7;12060:14;12056:1;12051:3;12047:11;12040:35;12116:1;12107:7;12103:15;12092:26;;12014:4;12011:1;12007:12;12002:17;;11978:154;;;12161:6;12156:3;12152:16;12145:23;;11844:334;;11658:520;;11446:738;;11339:845;;;;:::o;12190:366::-;12332:3;12353:67;12417:2;12412:3;12353:67;:::i;:::-;12346:74;;12429:93;12518:3;12429:93;:::i;:::-;12547:2;12542:3;12538:12;12531:19;;12190:366;;;:::o;12562:::-;12704:3;12725:67;12789:2;12784:3;12725:67;:::i;:::-;12718:74;;12801:93;12890:3;12801:93;:::i;:::-;12919:2;12914:3;12910:12;12903:19;;12562:366;;;:::o;12934:::-;13076:3;13097:67;13161:2;13156:3;13097:67;:::i;:::-;13090:74;;13173:93;13262:3;13173:93;:::i;:::-;13291:2;13286:3;13282:12;13275:19;;12934:366;;;:::o;13306:::-;13448:3;13469:67;13533:2;13528:3;13469:67;:::i;:::-;13462:74;;13545:93;13634:3;13545:93;:::i;:::-;13663:2;13658:3;13654:12;13647:19;;13306:366;;;:::o;13678:::-;13820:3;13841:67;13905:2;13900:3;13841:67;:::i;:::-;13834:74;;13917:93;14006:3;13917:93;:::i;:::-;14035:2;14030:3;14026:12;14019:19;;13678:366;;;:::o;14050:::-;14192:3;14213:67;14277:2;14272:3;14213:67;:::i;:::-;14206:74;;14289:93;14378:3;14289:93;:::i;:::-;14407:2;14402:3;14398:12;14391:19;;14050:366;;;:::o;14422:::-;14564:3;14585:67;14649:2;14644:3;14585:67;:::i;:::-;14578:74;;14661:93;14750:3;14661:93;:::i;:::-;14779:2;14774:3;14770:12;14763:19;;14422:366;;;:::o;14794:::-;14936:3;14957:67;15021:2;15016:3;14957:67;:::i;:::-;14950:74;;15033:93;15122:3;15033:93;:::i;:::-;15151:2;15146:3;15142:12;15135:19;;14794:366;;;:::o;15166:::-;15308:3;15329:67;15393:2;15388:3;15329:67;:::i;:::-;15322:74;;15405:93;15494:3;15405:93;:::i;:::-;15523:2;15518:3;15514:12;15507:19;;15166:366;;;:::o;15538:::-;15680:3;15701:67;15765:2;15760:3;15701:67;:::i;:::-;15694:74;;15777:93;15866:3;15777:93;:::i;:::-;15895:2;15890:3;15886:12;15879:19;;15538:366;;;:::o;15910:::-;16052:3;16073:67;16137:2;16132:3;16073:67;:::i;:::-;16066:74;;16149:93;16238:3;16149:93;:::i;:::-;16267:2;16262:3;16258:12;16251:19;;15910:366;;;:::o;16282:::-;16424:3;16445:67;16509:2;16504:3;16445:67;:::i;:::-;16438:74;;16521:93;16610:3;16521:93;:::i;:::-;16639:2;16634:3;16630:12;16623:19;;16282:366;;;:::o;16654:::-;16796:3;16817:67;16881:2;16876:3;16817:67;:::i;:::-;16810:74;;16893:93;16982:3;16893:93;:::i;:::-;17011:2;17006:3;17002:12;16995:19;;16654:366;;;:::o;17026:::-;17168:3;17189:67;17253:2;17248:3;17189:67;:::i;:::-;17182:74;;17265:93;17354:3;17265:93;:::i;:::-;17383:2;17378:3;17374:12;17367:19;;17026:366;;;:::o;17398:::-;17540:3;17561:67;17625:2;17620:3;17561:67;:::i;:::-;17554:74;;17637:93;17726:3;17637:93;:::i;:::-;17755:2;17750:3;17746:12;17739:19;;17398:366;;;:::o;17770:::-;17912:3;17933:67;17997:2;17992:3;17933:67;:::i;:::-;17926:74;;18009:93;18098:3;18009:93;:::i;:::-;18127:2;18122:3;18118:12;18111:19;;17770:366;;;:::o;18142:::-;18284:3;18305:67;18369:2;18364:3;18305:67;:::i;:::-;18298:74;;18381:93;18470:3;18381:93;:::i;:::-;18499:2;18494:3;18490:12;18483:19;;18142:366;;;:::o;18514:::-;18656:3;18677:67;18741:2;18736:3;18677:67;:::i;:::-;18670:74;;18753:93;18842:3;18753:93;:::i;:::-;18871:2;18866:3;18862:12;18855:19;;18514:366;;;:::o;18886:::-;19028:3;19049:67;19113:2;19108:3;19049:67;:::i;:::-;19042:74;;19125:93;19214:3;19125:93;:::i;:::-;19243:2;19238:3;19234:12;19227:19;;18886:366;;;:::o;19258:::-;19400:3;19421:67;19485:2;19480:3;19421:67;:::i;:::-;19414:74;;19497:93;19586:3;19497:93;:::i;:::-;19615:2;19610:3;19606:12;19599:19;;19258:366;;;:::o;19630:::-;19772:3;19793:67;19857:2;19852:3;19793:67;:::i;:::-;19786:74;;19869:93;19958:3;19869:93;:::i;:::-;19987:2;19982:3;19978:12;19971:19;;19630:366;;;:::o;20002:::-;20144:3;20165:67;20229:2;20224:3;20165:67;:::i;:::-;20158:74;;20241:93;20330:3;20241:93;:::i;:::-;20359:2;20354:3;20350:12;20343:19;;20002:366;;;:::o;20374:::-;20516:3;20537:67;20601:2;20596:3;20537:67;:::i;:::-;20530:74;;20613:93;20702:3;20613:93;:::i;:::-;20731:2;20726:3;20722:12;20715:19;;20374:366;;;:::o;20746:::-;20888:3;20909:67;20973:2;20968:3;20909:67;:::i;:::-;20902:74;;20985:93;21074:3;20985:93;:::i;:::-;21103:2;21098:3;21094:12;21087:19;;20746:366;;;:::o;21118:::-;21260:3;21281:67;21345:2;21340:3;21281:67;:::i;:::-;21274:74;;21357:93;21446:3;21357:93;:::i;:::-;21475:2;21470:3;21466:12;21459:19;;21118:366;;;:::o;21490:::-;21632:3;21653:67;21717:2;21712:3;21653:67;:::i;:::-;21646:74;;21729:93;21818:3;21729:93;:::i;:::-;21847:2;21842:3;21838:12;21831:19;;21490:366;;;:::o;21862:::-;22004:3;22025:67;22089:2;22084:3;22025:67;:::i;:::-;22018:74;;22101:93;22190:3;22101:93;:::i;:::-;22219:2;22214:3;22210:12;22203:19;;21862:366;;;:::o;22234:108::-;22311:24;22329:5;22311:24;:::i;:::-;22306:3;22299:37;22234:108;;:::o;22348:118::-;22435:24;22453:5;22435:24;:::i;:::-;22430:3;22423:37;22348:118;;:::o;22472:157::-;22577:45;22597:24;22615:5;22597:24;:::i;:::-;22577:45;:::i;:::-;22572:3;22565:58;22472:157;;:::o;22635:589::-;22860:3;22882:95;22973:3;22964:6;22882:95;:::i;:::-;22875:102;;22994:95;23085:3;23076:6;22994:95;:::i;:::-;22987:102;;23106:92;23194:3;23185:6;23106:92;:::i;:::-;23099:99;;23215:3;23208:10;;22635:589;;;;;;:::o;23230:538::-;23398:3;23413:75;23484:3;23475:6;23413:75;:::i;:::-;23513:2;23508:3;23504:12;23497:19;;23526:75;23597:3;23588:6;23526:75;:::i;:::-;23626:2;23621:3;23617:12;23610:19;;23639:75;23710:3;23701:6;23639:75;:::i;:::-;23739:2;23734:3;23730:12;23723:19;;23759:3;23752:10;;23230:538;;;;;;:::o;23774:222::-;23867:4;23905:2;23894:9;23890:18;23882:26;;23918:71;23986:1;23975:9;23971:17;23962:6;23918:71;:::i;:::-;23774:222;;;;:::o;24002:640::-;24197:4;24235:3;24224:9;24220:19;24212:27;;24249:71;24317:1;24306:9;24302:17;24293:6;24249:71;:::i;:::-;24330:72;24398:2;24387:9;24383:18;24374:6;24330:72;:::i;:::-;24412;24480:2;24469:9;24465:18;24456:6;24412:72;:::i;:::-;24531:9;24525:4;24521:20;24516:2;24505:9;24501:18;24494:48;24559:76;24630:4;24621:6;24559:76;:::i;:::-;24551:84;;24002:640;;;;;;;:::o;24648:373::-;24791:4;24829:2;24818:9;24814:18;24806:26;;24878:9;24872:4;24868:20;24864:1;24853:9;24849:17;24842:47;24906:108;25009:4;25000:6;24906:108;:::i;:::-;24898:116;;24648:373;;;;:::o;25027:210::-;25114:4;25152:2;25141:9;25137:18;25129:26;;25165:65;25227:1;25216:9;25212:17;25203:6;25165:65;:::i;:::-;25027:210;;;;:::o;25243:313::-;25356:4;25394:2;25383:9;25379:18;25371:26;;25443:9;25437:4;25433:20;25429:1;25418:9;25414:17;25407:47;25471:78;25544:4;25535:6;25471:78;:::i;:::-;25463:86;;25243:313;;;;:::o;25562:419::-;25728:4;25766:2;25755:9;25751:18;25743:26;;25815:9;25809:4;25805:20;25801:1;25790:9;25786:17;25779:47;25843:131;25969:4;25843:131;:::i;:::-;25835:139;;25562:419;;;:::o;25987:::-;26153:4;26191:2;26180:9;26176:18;26168:26;;26240:9;26234:4;26230:20;26226:1;26215:9;26211:17;26204:47;26268:131;26394:4;26268:131;:::i;:::-;26260:139;;25987:419;;;:::o;26412:::-;26578:4;26616:2;26605:9;26601:18;26593:26;;26665:9;26659:4;26655:20;26651:1;26640:9;26636:17;26629:47;26693:131;26819:4;26693:131;:::i;:::-;26685:139;;26412:419;;;:::o;26837:::-;27003:4;27041:2;27030:9;27026:18;27018:26;;27090:9;27084:4;27080:20;27076:1;27065:9;27061:17;27054:47;27118:131;27244:4;27118:131;:::i;:::-;27110:139;;26837:419;;;:::o;27262:::-;27428:4;27466:2;27455:9;27451:18;27443:26;;27515:9;27509:4;27505:20;27501:1;27490:9;27486:17;27479:47;27543:131;27669:4;27543:131;:::i;:::-;27535:139;;27262:419;;;:::o;27687:::-;27853:4;27891:2;27880:9;27876:18;27868:26;;27940:9;27934:4;27930:20;27926:1;27915:9;27911:17;27904:47;27968:131;28094:4;27968:131;:::i;:::-;27960:139;;27687:419;;;:::o;28112:::-;28278:4;28316:2;28305:9;28301:18;28293:26;;28365:9;28359:4;28355:20;28351:1;28340:9;28336:17;28329:47;28393:131;28519:4;28393:131;:::i;:::-;28385:139;;28112:419;;;:::o;28537:::-;28703:4;28741:2;28730:9;28726:18;28718:26;;28790:9;28784:4;28780:20;28776:1;28765:9;28761:17;28754:47;28818:131;28944:4;28818:131;:::i;:::-;28810:139;;28537:419;;;:::o;28962:::-;29128:4;29166:2;29155:9;29151:18;29143:26;;29215:9;29209:4;29205:20;29201:1;29190:9;29186:17;29179:47;29243:131;29369:4;29243:131;:::i;:::-;29235:139;;28962:419;;;:::o;29387:::-;29553:4;29591:2;29580:9;29576:18;29568:26;;29640:9;29634:4;29630:20;29626:1;29615:9;29611:17;29604:47;29668:131;29794:4;29668:131;:::i;:::-;29660:139;;29387:419;;;:::o;29812:::-;29978:4;30016:2;30005:9;30001:18;29993:26;;30065:9;30059:4;30055:20;30051:1;30040:9;30036:17;30029:47;30093:131;30219:4;30093:131;:::i;:::-;30085:139;;29812:419;;;:::o;30237:::-;30403:4;30441:2;30430:9;30426:18;30418:26;;30490:9;30484:4;30480:20;30476:1;30465:9;30461:17;30454:47;30518:131;30644:4;30518:131;:::i;:::-;30510:139;;30237:419;;;:::o;30662:::-;30828:4;30866:2;30855:9;30851:18;30843:26;;30915:9;30909:4;30905:20;30901:1;30890:9;30886:17;30879:47;30943:131;31069:4;30943:131;:::i;:::-;30935:139;;30662:419;;;:::o;31087:::-;31253:4;31291:2;31280:9;31276:18;31268:26;;31340:9;31334:4;31330:20;31326:1;31315:9;31311:17;31304:47;31368:131;31494:4;31368:131;:::i;:::-;31360:139;;31087:419;;;:::o;31512:::-;31678:4;31716:2;31705:9;31701:18;31693:26;;31765:9;31759:4;31755:20;31751:1;31740:9;31736:17;31729:47;31793:131;31919:4;31793:131;:::i;:::-;31785:139;;31512:419;;;:::o;31937:::-;32103:4;32141:2;32130:9;32126:18;32118:26;;32190:9;32184:4;32180:20;32176:1;32165:9;32161:17;32154:47;32218:131;32344:4;32218:131;:::i;:::-;32210:139;;31937:419;;;:::o;32362:::-;32528:4;32566:2;32555:9;32551:18;32543:26;;32615:9;32609:4;32605:20;32601:1;32590:9;32586:17;32579:47;32643:131;32769:4;32643:131;:::i;:::-;32635:139;;32362:419;;;:::o;32787:::-;32953:4;32991:2;32980:9;32976:18;32968:26;;33040:9;33034:4;33030:20;33026:1;33015:9;33011:17;33004:47;33068:131;33194:4;33068:131;:::i;:::-;33060:139;;32787:419;;;:::o;33212:::-;33378:4;33416:2;33405:9;33401:18;33393:26;;33465:9;33459:4;33455:20;33451:1;33440:9;33436:17;33429:47;33493:131;33619:4;33493:131;:::i;:::-;33485:139;;33212:419;;;:::o;33637:::-;33803:4;33841:2;33830:9;33826:18;33818:26;;33890:9;33884:4;33880:20;33876:1;33865:9;33861:17;33854:47;33918:131;34044:4;33918:131;:::i;:::-;33910:139;;33637:419;;;:::o;34062:::-;34228:4;34266:2;34255:9;34251:18;34243:26;;34315:9;34309:4;34305:20;34301:1;34290:9;34286:17;34279:47;34343:131;34469:4;34343:131;:::i;:::-;34335:139;;34062:419;;;:::o;34487:::-;34653:4;34691:2;34680:9;34676:18;34668:26;;34740:9;34734:4;34730:20;34726:1;34715:9;34711:17;34704:47;34768:131;34894:4;34768:131;:::i;:::-;34760:139;;34487:419;;;:::o;34912:::-;35078:4;35116:2;35105:9;35101:18;35093:26;;35165:9;35159:4;35155:20;35151:1;35140:9;35136:17;35129:47;35193:131;35319:4;35193:131;:::i;:::-;35185:139;;34912:419;;;:::o;35337:::-;35503:4;35541:2;35530:9;35526:18;35518:26;;35590:9;35584:4;35580:20;35576:1;35565:9;35561:17;35554:47;35618:131;35744:4;35618:131;:::i;:::-;35610:139;;35337:419;;;:::o;35762:::-;35928:4;35966:2;35955:9;35951:18;35943:26;;36015:9;36009:4;36005:20;36001:1;35990:9;35986:17;35979:47;36043:131;36169:4;36043:131;:::i;:::-;36035:139;;35762:419;;;:::o;36187:::-;36353:4;36391:2;36380:9;36376:18;36368:26;;36440:9;36434:4;36430:20;36426:1;36415:9;36411:17;36404:47;36468:131;36594:4;36468:131;:::i;:::-;36460:139;;36187:419;;;:::o;36612:::-;36778:4;36816:2;36805:9;36801:18;36793:26;;36865:9;36859:4;36855:20;36851:1;36840:9;36836:17;36829:47;36893:131;37019:4;36893:131;:::i;:::-;36885:139;;36612:419;;;:::o;37037:222::-;37130:4;37168:2;37157:9;37153:18;37145:26;;37181:71;37249:1;37238:9;37234:17;37225:6;37181:71;:::i;:::-;37037:222;;;;:::o;37265:129::-;37299:6;37326:20;;:::i;:::-;37316:30;;37355:33;37383:4;37375:6;37355:33;:::i;:::-;37265:129;;;:::o;37400:75::-;37433:6;37466:2;37460:9;37450:19;;37400:75;:::o;37481:311::-;37558:4;37648:18;37640:6;37637:30;37634:56;;;37670:18;;:::i;:::-;37634:56;37720:4;37712:6;37708:17;37700:25;;37780:4;37774;37770:15;37762:23;;37481:311;;;:::o;37798:307::-;37859:4;37949:18;37941:6;37938:30;37935:56;;;37971:18;;:::i;:::-;37935:56;38009:29;38031:6;38009:29;:::i;:::-;38001:37;;38093:4;38087;38083:15;38075:23;;37798:307;;;:::o;38111:308::-;38173:4;38263:18;38255:6;38252:30;38249:56;;;38285:18;;:::i;:::-;38249:56;38323:29;38345:6;38323:29;:::i;:::-;38315:37;;38407:4;38401;38397:15;38389:23;;38111:308;;;:::o;38425:132::-;38492:4;38515:3;38507:11;;38545:4;38540:3;38536:14;38528:22;;38425:132;;;:::o;38563:141::-;38612:4;38635:3;38627:11;;38658:3;38655:1;38648:14;38692:4;38689:1;38679:18;38671:26;;38563:141;;;:::o;38710:114::-;38777:6;38811:5;38805:12;38795:22;;38710:114;;;:::o;38830:98::-;38881:6;38915:5;38909:12;38899:22;;38830:98;;;:::o;38934:99::-;38986:6;39020:5;39014:12;39004:22;;38934:99;;;:::o;39039:113::-;39109:4;39141;39136:3;39132:14;39124:22;;39039:113;;;:::o;39158:184::-;39257:11;39291:6;39286:3;39279:19;39331:4;39326:3;39322:14;39307:29;;39158:184;;;;:::o;39348:168::-;39431:11;39465:6;39460:3;39453:19;39505:4;39500:3;39496:14;39481:29;;39348:168;;;;:::o;39522:169::-;39606:11;39640:6;39635:3;39628:19;39680:4;39675:3;39671:14;39656:29;;39522:169;;;;:::o;39697:148::-;39799:11;39836:3;39821:18;;39697:148;;;;:::o;39851:305::-;39891:3;39910:20;39928:1;39910:20;:::i;:::-;39905:25;;39944:20;39962:1;39944:20;:::i;:::-;39939:25;;40098:1;40030:66;40026:74;40023:1;40020:81;40017:107;;;40104:18;;:::i;:::-;40017:107;40148:1;40145;40141:9;40134:16;;39851:305;;;;:::o;40162:185::-;40202:1;40219:20;40237:1;40219:20;:::i;:::-;40214:25;;40253:20;40271:1;40253:20;:::i;:::-;40248:25;;40292:1;40282:35;;40297:18;;:::i;:::-;40282:35;40339:1;40336;40332:9;40327:14;;40162:185;;;;:::o;40353:348::-;40393:7;40416:20;40434:1;40416:20;:::i;:::-;40411:25;;40450:20;40468:1;40450:20;:::i;:::-;40445:25;;40638:1;40570:66;40566:74;40563:1;40560:81;40555:1;40548:9;40541:17;40537:105;40534:131;;;40645:18;;:::i;:::-;40534:131;40693:1;40690;40686:9;40675:20;;40353:348;;;;:::o;40707:191::-;40747:4;40767:20;40785:1;40767:20;:::i;:::-;40762:25;;40801:20;40819:1;40801:20;:::i;:::-;40796:25;;40840:1;40837;40834:8;40831:34;;;40845:18;;:::i;:::-;40831:34;40890:1;40887;40883:9;40875:17;;40707:191;;;;:::o;40904:96::-;40941:7;40970:24;40988:5;40970:24;:::i;:::-;40959:35;;40904:96;;;:::o;41006:90::-;41040:7;41083:5;41076:13;41069:21;41058:32;;41006:90;;;:::o;41102:149::-;41138:7;41178:66;41171:5;41167:78;41156:89;;41102:149;;;:::o;41257:126::-;41294:7;41334:42;41327:5;41323:54;41312:65;;41257:126;;;:::o;41389:77::-;41426:7;41455:5;41444:16;;41389:77;;;:::o;41472:154::-;41556:6;41551:3;41546;41533:30;41618:1;41609:6;41604:3;41600:16;41593:27;41472:154;;;:::o;41632:307::-;41700:1;41710:113;41724:6;41721:1;41718:13;41710:113;;;41809:1;41804:3;41800:11;41794:18;41790:1;41785:3;41781:11;41774:39;41746:2;41743:1;41739:10;41734:15;;41710:113;;;41841:6;41838:1;41835:13;41832:101;;;41921:1;41912:6;41907:3;41903:16;41896:27;41832:101;41681:258;41632:307;;;:::o;41945:320::-;41989:6;42026:1;42020:4;42016:12;42006:22;;42073:1;42067:4;42063:12;42094:18;42084:81;;42150:4;42142:6;42138:17;42128:27;;42084:81;42212:2;42204:6;42201:14;42181:18;42178:38;42175:84;;;42231:18;;:::i;:::-;42175:84;41996:269;41945:320;;;:::o;42271:281::-;42354:27;42376:4;42354:27;:::i;:::-;42346:6;42342:40;42484:6;42472:10;42469:22;42448:18;42436:10;42433:34;42430:62;42427:88;;;42495:18;;:::i;:::-;42427:88;42535:10;42531:2;42524:22;42314:238;42271:281;;:::o;42558:233::-;42597:3;42620:24;42638:5;42620:24;:::i;:::-;42611:33;;42666:66;42659:5;42656:77;42653:103;;;42736:18;;:::i;:::-;42653:103;42783:1;42776:5;42772:13;42765:20;;42558:233;;;:::o;42797:100::-;42836:7;42865:26;42885:5;42865:26;:::i;:::-;42854:37;;42797:100;;;:::o;42903:94::-;42942:7;42971:20;42985:5;42971:20;:::i;:::-;42960:31;;42903:94;;;:::o;43003:79::-;43042:7;43071:5;43060:16;;43003:79;;;:::o;43088:176::-;43120:1;43137:20;43155:1;43137:20;:::i;:::-;43132:25;;43171:20;43189:1;43171:20;:::i;:::-;43166:25;;43210:1;43200:35;;43215:18;;:::i;:::-;43200:35;43256:1;43253;43249:9;43244:14;;43088:176;;;;:::o;43270:180::-;43318:77;43315:1;43308:88;43415:4;43412:1;43405:15;43439:4;43436:1;43429:15;43456:180;43504:77;43501:1;43494:88;43601:4;43598:1;43591:15;43625:4;43622:1;43615:15;43642:180;43690:77;43687:1;43680:88;43787:4;43784:1;43777:15;43811:4;43808:1;43801:15;43828:180;43876:77;43873:1;43866:88;43973:4;43970:1;43963:15;43997:4;43994:1;43987:15;44014:180;44062:77;44059:1;44052:88;44159:4;44156:1;44149:15;44183:4;44180:1;44173:15;44200:180;44248:77;44245:1;44238:88;44345:4;44342:1;44335:15;44369:4;44366:1;44359:15;44386:117;44495:1;44492;44485:12;44509:117;44618:1;44615;44608:12;44632:117;44741:1;44738;44731:12;44755:117;44864:1;44861;44854:12;44878:117;44987:1;44984;44977:12;45001:102;45042:6;45093:2;45089:7;45084:2;45077:5;45073:14;45069:28;45059:38;;45001:102;;;:::o;45109:94::-;45142:8;45190:5;45186:2;45182:14;45161:35;;45109:94;;;:::o;45209:230::-;45349:34;45345:1;45337:6;45333:14;45326:58;45418:13;45413:2;45405:6;45401:15;45394:38;45209:230;:::o;45445:237::-;45585:34;45581:1;45573:6;45569:14;45562:58;45654:20;45649:2;45641:6;45637:15;45630:45;45445:237;:::o;45688:227::-;45828:34;45824:1;45816:6;45812:14;45805:58;45897:10;45892:2;45884:6;45880:15;45873:35;45688:227;:::o;45921:225::-;46061:34;46057:1;46049:6;46045:14;46038:58;46130:8;46125:2;46117:6;46113:15;46106:33;45921:225;:::o;46152:178::-;46292:30;46288:1;46280:6;46276:14;46269:54;46152:178;:::o;46336:223::-;46476:34;46472:1;46464:6;46460:14;46453:58;46545:6;46540:2;46532:6;46528:15;46521:31;46336:223;:::o;46565:175::-;46705:27;46701:1;46693:6;46689:14;46682:51;46565:175;:::o;46746:181::-;46886:33;46882:1;46874:6;46870:14;46863:57;46746:181;:::o;46933:231::-;47073:34;47069:1;47061:6;47057:14;47050:58;47142:14;47137:2;47129:6;47125:15;47118:39;46933:231;:::o;47170:171::-;47310:23;47306:1;47298:6;47294:14;47287:47;47170:171;:::o;47347:243::-;47487:34;47483:1;47475:6;47471:14;47464:58;47556:26;47551:2;47543:6;47539:15;47532:51;47347:243;:::o;47596:168::-;47736:20;47732:1;47724:6;47720:14;47713:44;47596:168;:::o;47770:229::-;47910:34;47906:1;47898:6;47894:14;47887:58;47979:12;47974:2;47966:6;47962:15;47955:37;47770:229;:::o;48005:228::-;48145:34;48141:1;48133:6;48129:14;48122:58;48214:11;48209:2;48201:6;48197:15;48190:36;48005:228;:::o;48239:231::-;48379:34;48375:1;48367:6;48363:14;48356:58;48448:14;48443:2;48435:6;48431:15;48424:39;48239:231;:::o;48476:182::-;48616:34;48612:1;48604:6;48600:14;48593:58;48476:182;:::o;48664:165::-;48804:17;48800:1;48792:6;48788:14;48781:41;48664:165;:::o;48835:231::-;48975:34;48971:1;48963:6;48959:14;48952:58;49044:14;49039:2;49031:6;49027:15;49020:39;48835:231;:::o;49072:182::-;49212:34;49208:1;49200:6;49196:14;49189:58;49072:182;:::o;49260:228::-;49400:34;49396:1;49388:6;49384:14;49377:58;49469:11;49464:2;49456:6;49452:15;49445:36;49260:228;:::o;49494:234::-;49634:34;49630:1;49622:6;49618:14;49611:58;49703:17;49698:2;49690:6;49686:15;49679:42;49494:234;:::o;49734:220::-;49874:34;49870:1;49862:6;49858:14;49851:58;49943:3;49938:2;49930:6;49926:15;49919:28;49734:220;:::o;49960:236::-;50100:34;50096:1;50088:6;50084:14;50077:58;50169:19;50164:2;50156:6;50152:15;50145:44;49960:236;:::o;50202:173::-;50342:25;50338:1;50330:6;50326:14;50319:49;50202:173;:::o;50381:231::-;50521:34;50517:1;50509:6;50505:14;50498:58;50590:14;50585:2;50577:6;50573:15;50566:39;50381:231;:::o;50618:182::-;50758:34;50754:1;50746:6;50742:14;50735:58;50618:182;:::o;50806:228::-;50946:34;50942:1;50934:6;50930:14;50923:58;51015:11;51010:2;51002:6;50998:15;50991:36;50806:228;:::o;51040:122::-;51113:24;51131:5;51113:24;:::i;:::-;51106:5;51103:35;51093:63;;51152:1;51149;51142:12;51093:63;51040:122;:::o;51168:116::-;51238:21;51253:5;51238:21;:::i;:::-;51231:5;51228:32;51218:60;;51274:1;51271;51264:12;51218:60;51168:116;:::o;51290:120::-;51362:23;51379:5;51362:23;:::i;:::-;51355:5;51352:34;51342:62;;51400:1;51397;51390:12;51342:62;51290:120;:::o;51416:122::-;51489:24;51507:5;51489:24;:::i;:::-;51482:5;51479:35;51469:63;;51528:1;51525;51518:12;51469:63;51416:122;:::o

Swarm Source

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