ETH Price: $3,325.74 (-4.37%)

Token

Ethnology Series 2: Gods and Demons (Gods and Demons S2)
 

Overview

Max Total Supply

0 Gods and Demons S2

Holders

6,562

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
961010.eth
Balance
1 Gods and Demons S2
0xa98b080fB3460d59D54C62d77281e225EE4b31B9
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:
SeriesTwo

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library Strings {
  bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
  uint8 private constant _ADDRESS_LENGTH = 20;

  function toString(uint256 value) internal pure returns (string memory) {
    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);
  }

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

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

  function toHexString(address addr) internal pure returns (string memory) {
    return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
  }
}

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

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

abstract contract Ownable is Context {
  address private _owner;

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

  constructor() {
    _transferOwnership(_msgSender());
  }

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

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

  function _checkOwner() internal view virtual {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
  }

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

  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal virtual {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
}

library Counters {
  struct Counter {
    uint256 _value; // default: 0
  }

  function current(Counter storage counter) internal view returns (uint256) {
    return counter._value;
  }

  function increment(Counter storage counter) internal {
    unchecked {
      counter._value += 1;
    }
  }

  function decrement(Counter storage counter) internal {
    uint256 value = counter._value;
    require(value > 0, "Counter: decrement overflow");
    unchecked {
      counter._value = value - 1;
    }
  }

  function reset(Counter storage counter) internal {
    counter._value = 0;
  }
}

abstract contract Pausable is Context {
  event Paused(address account);
  event Unpaused(address account);
  bool private _paused;

  constructor() {
    _paused = false;
  }

  modifier whenNotPaused() {
    _requireNotPaused();
    _;
  }
  modifier whenPaused() {
    _requirePaused();
    _;
  }

  function paused() public view virtual returns (bool) {
    return _paused;
  }

  function _requireNotPaused() internal view virtual {
    require(!paused(), "Pausable: paused");
  }

  function _requirePaused() internal view virtual {
    require(paused(), "Pausable: not paused");
  }

  function _pause() internal virtual whenNotPaused {
    _paused = true;
    emit Paused(_msgSender());
  }

  function _unpause() internal virtual whenPaused {
    _paused = false;
    emit Unpaused(_msgSender());
  }
}

interface IERC165 {
  function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
  event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
  event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
  event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

  function balanceOf(address owner) external view returns (uint256 balance);

  function ownerOf(uint256 tokenId) external view returns (address owner);

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

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

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

  function approve(address to, uint256 tokenId) external;

  function setApprovalForAll(address operator, bool _approved) external;

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

  function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IERC721Receiver {
  function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes calldata data
  ) external returns (bytes4);
}

interface IERC721Metadata is IERC721 {
  function name() external view returns (string memory);

  function symbol() external view returns (string memory);

  function tokenURI(uint256 tokenId) external view returns (string memory);
}

library Address {
  function isContract(address account) internal view returns (bool) {
    return account.code.length > 0;
  }

  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

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

  function functionCall(address target, bytes memory data) internal returns (bytes memory) {
    return functionCall(target, data, "Address: low-level call failed");
  }

  function functionCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    return functionCallWithValue(target, data, 0, errorMessage);
  }

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

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

  function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
    return functionStaticCall(target, data, "Address: low-level static call failed");
  }

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

  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
    return functionDelegateCall(target, data, "Address: low-level delegate call failed");
  }

  function functionDelegateCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    require(isContract(target), "Address: delegate call to non-contract");

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

  function verifyCallResult(
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal pure returns (bytes memory) {
    if (success) {
      return returndata;
    } else {
      if (returndata.length > 0) {
        assembly {
          let returndata_size := mload(returndata)
          revert(add(32, returndata), returndata_size)
        }
      } else {
        revert(errorMessage);
      }
    }
  }
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
  using Address for address;
  using Strings for uint256;
  string private _name;
  string private _symbol;
  mapping(uint256 => address) private _owners;
  mapping(address => uint256) private _balances;
  mapping(uint256 => address) private _tokenApprovals;
  mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

  function balanceOf(address owner) public view virtual override returns (uint256) {
    require(owner != address(0), "ERC721: address zero is not a valid owner");
    return _balances[owner];
  }

  function ownerOf(uint256 tokenId) public view virtual override returns (address) {
    address owner = _owners[tokenId];
    require(owner != address(0), "ERC721: invalid token ID");
    return owner;
  }

  function name() public view virtual override returns (string memory) {
    return _name;
  }

  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  }

  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    _requireMinted(tokenId);

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

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

  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 token owner nor approved for all");

    _approve(to, tokenId);
  }

  function getApproved(uint256 tokenId) public view virtual override returns (address) {
    _requireMinted(tokenId);

    return _tokenApprovals[tokenId];
  }

  function setApprovalForAll(address operator, bool approved) public virtual override {
    _setApprovalForAll(_msgSender(), operator, approved);
  }

  function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
    return _operatorApprovals[owner][operator];
  }

  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public virtual override {
    //solhint-disable-next-line max-line-length
    require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");

    _transfer(from, to, tokenId);
  }

  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public virtual override {
    safeTransferFrom(from, to, tokenId, "");
  }

  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory data
  ) public virtual override {
    require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
    _safeTransfer(from, to, tokenId, data);
  }

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

  function _exists(uint256 tokenId) internal view virtual returns (bool) {
    return _owners[tokenId] != address(0);
  }

  function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
    address owner = ERC721.ownerOf(tokenId);
    return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
  }

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

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

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

    _afterTokenTransfer(address(0), to, tokenId);
  }

  function _burn(uint256 tokenId) internal virtual {
    address owner = ERC721.ownerOf(tokenId);
    _beforeTokenTransfer(owner, address(0), tokenId);
    _approve(address(0), tokenId);
    _balances[owner] -= 1;
    delete _owners[tokenId];
    emit Transfer(owner, address(0), tokenId);
    _afterTokenTransfer(owner, address(0), tokenId);
  }

  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual {
    require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
    require(to != address(0), "ERC721: transfer to the zero address");
    _beforeTokenTransfer(from, to, tokenId);
    _approve(address(0), tokenId);
    _balances[from] -= 1;
    _balances[to] += 1;
    _owners[tokenId] = to;

    emit Transfer(from, to, tokenId);

    _afterTokenTransfer(from, to, tokenId);
  }

  function _approve(address to, uint256 tokenId) internal virtual {
    _tokenApprovals[tokenId] = to;
    emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
  }

  function _setApprovalForAll(
    address owner,
    address operator,
    bool approved
  ) internal virtual {
    require(owner != operator, "ERC721: approve to caller");
    _operatorApprovals[owner][operator] = approved;
    emit ApprovalForAll(owner, operator, approved);
  }

  function _requireMinted(uint256 tokenId) internal view virtual {
    require(_exists(tokenId), "ERC721: invalid token ID");
  }

  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 {
          /// @solidity memory-safe-assembly
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual {}

  function _afterTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal virtual {}
}

library MerkleProof {
  function verify(
    bytes32[] memory proof,
    bytes32 root,
    bytes32 leaf
  ) internal pure returns (bool) {
    return processProof(proof, leaf) == root;
  }

  function verifyCalldata(
    bytes32[] calldata proof,
    bytes32 root,
    bytes32 leaf
  ) internal pure returns (bool) {
    return processProofCalldata(proof, leaf) == root;
  }

  function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
    bytes32 computedHash = leaf;
    for (uint256 i = 0; i < proof.length; i++) {
      computedHash = _hashPair(computedHash, proof[i]);
    }
    return computedHash;
  }

  function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
    bytes32 computedHash = leaf;
    for (uint256 i = 0; i < proof.length; i++) {
      computedHash = _hashPair(computedHash, proof[i]);
    }
    return computedHash;
  }

  function multiProofVerify(
    bytes32[] memory proof,
    bool[] memory proofFlags,
    bytes32 root,
    bytes32[] memory leaves
  ) internal pure returns (bool) {
    return processMultiProof(proof, proofFlags, leaves) == root;
  }

  function multiProofVerifyCalldata(
    bytes32[] calldata proof,
    bool[] calldata proofFlags,
    bytes32 root,
    bytes32[] memory leaves
  ) internal pure returns (bool) {
    return processMultiProofCalldata(proof, proofFlags, leaves) == root;
  }

  function processMultiProof(
    bytes32[] memory proof,
    bool[] memory proofFlags,
    bytes32[] memory leaves
  ) internal pure returns (bytes32 merkleRoot) {
    uint256 leavesLen = leaves.length;
    uint256 totalHashes = proofFlags.length;
    require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

    bytes32[] memory hashes = new bytes32[](totalHashes);
    uint256 leafPos = 0;
    uint256 hashPos = 0;
    uint256 proofPos = 0;

    for (uint256 i = 0; i < totalHashes; i++) {
      bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
      bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
      hashes[i] = _hashPair(a, b);
    }

    if (totalHashes > 0) {
      return hashes[totalHashes - 1];
    } else if (leavesLen > 0) {
      return leaves[0];
    } else {
      return proof[0];
    }
  }

  function processMultiProofCalldata(
    bytes32[] calldata proof,
    bool[] calldata proofFlags,
    bytes32[] memory leaves
  ) internal pure returns (bytes32 merkleRoot) {
    uint256 leavesLen = leaves.length;
    uint256 totalHashes = proofFlags.length;

    require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

    bytes32[] memory hashes = new bytes32[](totalHashes);
    uint256 leafPos = 0;
    uint256 hashPos = 0;
    uint256 proofPos = 0;

    for (uint256 i = 0; i < totalHashes; i++) {
      bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
      bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
      hashes[i] = _hashPair(a, b);
    }

    if (totalHashes > 0) {
      return hashes[totalHashes - 1];
    } else if (leavesLen > 0) {
      return leaves[0];
    } else {
      return proof[0];
    }
  }

  function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
    return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
  }

  function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
    assembly {
      mstore(0x00, a)
      mstore(0x20, b)
      value := keccak256(0x00, 0x40)
    }
  }
}

abstract contract ERC721URIStorage is ERC721 {
  using Strings for uint256;

  mapping(uint256 => string) private _tokenURIs;

  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    _requireMinted(tokenId);

    string memory _tokenURI = _tokenURIs[tokenId];
    string memory base = _baseURI();

    if (bytes(base).length == 0) {
      return _tokenURI;
    }
    if (bytes(_tokenURI).length > 0) {
      return string(abi.encodePacked(base, _tokenURI));
    }

    return super.tokenURI(tokenId);
  }

  function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
    require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
    _tokenURIs[tokenId] = _tokenURI;
  }

  function _burn(uint256 tokenId) internal virtual override {
    super._burn(tokenId);

    if (bytes(_tokenURIs[tokenId]).length != 0) {
      delete _tokenURIs[tokenId];
    }
  }
}

contract SeriesTwo is ERC721, ERC721URIStorage, Ownable, Pausable {
  using Counters for Counters.Counter;
  using Strings for uint256;

  string public baseURI;
  uint40 public preMintStart = 1661349600; // 2:00 PM Wednesday, Coordinated Universal Time (UTC)
  uint40 public preMintEnd = 1661436000; // 2:00 PM Thursday, Coordinated Universal Time (UTC)
  uint256 public mintLimit = 10000;
  bool public salePaused = false;
  IERC721 public seriesOne;

  bytes32 private _root;
  Counters.Counter public mintCount;
  mapping(address => uint256) private count;

  constructor() ERC721("Ethnology Series 2: Gods and Demons", "Gods and Demons S2") {
    setBaseURI("ipfs://QmSRgQkKJ8rWMJxuHDSzaq1fT6PGvBpdkKmpktFE7qJ3p4/");
    setSeriesOne(0xA8D6Ab1e26d90De9837f2828545a0357967F6251);
    setRoot(0x1dfbc8daa0d5622674cf94465236b6e03e631c0e4f9d43ceb8b582f395dad4eb);
  }

  function mintSale(uint256 amount, bytes32[] memory _proof) external {
    require(!salePaused, "Sale is paused");
    require(amount > 0, "Invalid amount");
    require(preMintStart < getCurrentTime(), "Minting Not Started Yet");
    require(mintCount.current() <= mintLimit, "Max Mint Limit Reached");
    if (preMintStart <= getCurrentTime() && preMintEnd > getCurrentTime()) {
      uint8 mintingLimit = checkLimit(msg.sender, _proof);
      require(mintingLimit > 0, "MINT NOT ALLOWED");
      require(count[msg.sender] + amount <= mintingLimit, "Limit exceeded");
      for (uint256 _iter = 0; _iter < amount; ) {
        _mintSale();
        unchecked {
          _iter++;
        }
      }
    } else {
      require(count[msg.sender] < 1, "You reached Max Minting limit");
      _mintSale();
    }
  }

  function _mintSale() private {
    mintCount.increment();
    mint(msg.sender, mintCount.current());
    count[msg.sender] += 1;
  }

  function getCurrentTime() private view returns (uint256) {
    return block.timestamp;
  }

  function seriesOneBal(address _owner) internal view returns (uint256) {
    return seriesOne.balanceOf(_owner);
  }

  // The following functions are overrides required by Solidity.

  function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
    super._burn(tokenId);
  }

  function isWhiteListed(
    bytes32[] memory _prof,
    bytes32 _rot,
    bytes32 _leaf
  ) public pure returns (bool) {
    return MerkleProof.verify(_prof, _rot, _leaf);
  }

  function switchSale() public onlyOwner {
    salePaused = !salePaused;
  }

  function setSeriesOne(address _seriesOne) public onlyOwner {
    seriesOne = IERC721(_seriesOne);
  }

  function setRoot(bytes32 root) public onlyOwner {
    _root = root;
  }

  function setMintTimeStart(uint40 _preMint, uint40 _mainMint) public onlyOwner {
    preMintStart = _preMint;
    preMintEnd = _mainMint;
  }

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

  function mint(address to, uint256 _tokenId) internal {
    _safeMint(to, _tokenId);
  }

  function tokenURI(uint256 tokenId) public view virtual override(ERC721, ERC721URIStorage) returns (string memory) {
    require(_exists(tokenId), "Querying Nonexistent token");

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

  function getMarkleLeaf(address _user) internal pure returns (bytes32) {
    return keccak256(abi.encodePacked(_user));
  }

  function checkLimit(address _user, bytes32[] memory _proof) public view returns (uint8) {
    return (seriesOneBal(_user) >= 1) ? 5 : (isWhiteListed(_proof, _root, getMarkleLeaf(_user))) ? 3 : 0;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"checkLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_prof","type":"bytes32[]"},{"internalType":"bytes32","name":"_rot","type":"bytes32"},{"internalType":"bytes32","name":"_leaf","type":"bytes32"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"mintCount","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintEnd","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintStart","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seriesOne","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"_preMint","type":"uint40"},{"internalType":"uint40","name":"_mainMint","type":"uint40"}],"name":"setMintTimeStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_seriesOne","type":"address"}],"name":"setSeriesOne","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":"switchSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

60806040526363062ee0600960006101000a81548164ffffffffff021916908364ffffffffff1602179055506363078060600960056101000a81548164ffffffffff021916908364ffffffffff160217905550612710600a556000600b60006101000a81548160ff0219169083151502179055503480156200008057600080fd5b50604051806060016040528060238152602001620042c6602391396040518060400160405280601281526020017f476f647320616e642044656d6f6e7320533200000000000000000000000000008152508160009080519060200190620000e9929190620003ec565b50806001908051906020019062000102929190620003ec565b5050506200012562000119620001c960201b60201c565b620001d160201b60201c565b6000600760146101000a81548160ff0219169083151502179055506200016a604051806060016040528060368152602001620042e9603691396200029760201b60201c565b6200018f73a8d6ab1e26d90de9837f2828545a0357967f6251620002c360201b60201c565b620001c37f1dfbc8daa0d5622674cf94465236b6e03e631c0e4f9d43ceb8b582f395dad4eb60001b6200031760201b60201c565b62000584565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a76200033160201b60201c565b8060089080519060200190620002bf929190620003ec565b5050565b620002d36200033160201b60201c565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620003276200033160201b60201c565b80600c8190555050565b62000341620001c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000367620003c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b790620004c3565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003fa90620004f6565b90600052602060002090601f0160209004810192826200041e57600085556200046a565b82601f106200043957805160ff19168380011785556200046a565b828001600101855582156200046a579182015b82811115620004695782518255916020019190600101906200044c565b5b5090506200047991906200047d565b5090565b5b80821115620004985760008160009055506001016200047e565b5090565b6000620004ab602083620004e5565b9150620004b8826200055b565b602082019050919050565b60006020820190508181036000830152620004de816200049c565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200050f57607f821691505b602082108114156200052657620005256200052c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613d3280620005946000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a921b7b1116100a2578063d3d9aeeb11610071578063d3d9aeeb14610581578063dab5f3401461059f578063e985e9c5146105bb578063f2fde38b146105eb576101f0565b8063a921b7b1146104e7578063b88d4fde14610517578063c435c7a114610533578063c87b56dd14610551576101f0565b80639659867e116100de5780639659867e14610473578063996517cf146104915780639a1a0761146104af578063a22cb465146104cb576101f0565b806370a08231146103fd578063715018a61461042d5780638da5cb5b1461043757806395d89b4114610455576101f0565b80634d7ce134116101875780635c975abb116101565780635c975abb146103735780635d08c1ae146103915780636352211e146103af5780636c0360eb146103df576101f0565b80634d7ce134146102ff5780634edd147e1461032f5780635322f9d11461034d57806355f804b314610357576101f0565b806323b872dd116101c357806323b872dd1461028f5780632f8af9df146102ab5780633ea5e4c2146102c757806342842e0e146102e3576101f0565b806301ffc9a7146101f557806306fdde0314610225578063081812fc14610243578063095ea7b314610273575b600080fd5b61020f600480360381019061020a919061292b565b610607565b60405161021c9190612f8b565b60405180910390f35b61022d6106e9565b60405161023a9190612fc1565b60405180910390f35b61025d600480360381019061025891906129ce565b61077b565b60405161026a9190612f24565b60405180910390f35b61028d6004803603810190610288919061284f565b6107c1565b005b6102a960048036038101906102a491906126dd565b6108d9565b005b6102c560048036038101906102c09190612a28565b610939565b005b6102e160048036038101906102dc9190612670565b610c6d565b005b6102fd60048036038101906102f891906126dd565b610cb9565b005b6103196004803603810190610314919061288f565b610cd9565b6040516103269190612f8b565b60405180910390f35b610337610cef565b6040516103449190612fa6565b60405180910390f35b610355610d15565b005b610371600480360381019061036c9190612985565b610d49565b005b61037b610d6b565b6040516103889190612f8b565b60405180910390f35b610399610d82565b6040516103a69190612f8b565b60405180910390f35b6103c960048036038101906103c491906129ce565b610d95565b6040516103d69190612f24565b60405180910390f35b6103e7610e47565b6040516103f49190612fc1565b60405180910390f35b61041760048036038101906104129190612670565b610ed5565b6040516104249190613283565b60405180910390f35b610435610f8d565b005b61043f610fa1565b60405161044c9190612f24565b60405180910390f35b61045d610fcb565b60405161046a9190612fc1565b60405180910390f35b61047b61105d565b6040516104889190613283565b60405180910390f35b610499611069565b6040516104a69190613283565b60405180910390f35b6104c960048036038101906104c49190612a84565b61106f565b005b6104e560048036038101906104e0919061280f565b6110c1565b005b61050160048036038101906104fc91906127b3565b6110d7565b60405161050e91906132b9565b60405180910390f35b610531600480360381019061052c9190612730565b61111d565b005b61053b61117f565b604051610548919061329e565b60405180910390f35b61056b600480360381019061056691906129ce565b611196565b6040516105789190612fc1565b60405180910390f35b6105896112c0565b604051610596919061329e565b60405180910390f35b6105b960048036038101906105b491906128fe565b6112d7565b005b6105d560048036038101906105d0919061269d565b6112e9565b6040516105e29190612f8b565b60405180910390f35b61060560048036038101906106009190612670565b61137d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e257506106e182611401565b5b9050919050565b6060600080546106f890613599565b80601f016020809104026020016040519081016040528092919081815260200182805461072490613599565b80156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b5050505050905090565b60006107868261146b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107cc82610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490613203565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661085c6114b6565b73ffffffffffffffffffffffffffffffffffffffff16148061088b575061088a816108856114b6565b6112e9565b5b6108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c190613183565b60405180910390fd5b6108d483836114be565b505050565b6108ea6108e46114b6565b82611577565b610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090613263565b60405180910390fd5b61093483838361160c565b505050565b600b60009054906101000a900460ff1615610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098090613243565b60405180910390fd5b600082116109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906130a3565b60405180910390fd5b6109d4611873565b600960009054906101000a900464ffffffffff1664ffffffffff1610610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690613003565b60405180910390fd5b600a54610a3c600d61187b565b1115610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490612fe3565b60405180910390fd5b610a85611873565b600960009054906101000a900464ffffffffff1664ffffffffff1611158015610ace5750610ab1611873565b600960059054906101000a900464ffffffffff1664ffffffffff16115b15610bde576000610adf33836110d7565b905060008160ff1611610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613143565b60405180910390fd5b8060ff1683600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7691906133ca565b1115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906130c3565b60405180910390fd5b60005b83811015610bd757610bca611889565b8080600101915050610bba565b5050610c69565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613223565b60405180910390fd5b610c68611889565b5b5050565b610c756118ff565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cd48383836040518060200160405280600081525061111d565b505050565b6000610ce684848461197d565b90509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1d6118ff565b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610d516118ff565b8060089080519060200190610d679291906123a7565b5050565b6000600760149054906101000a900460ff16905090565b600b60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e35906131e3565b60405180910390fd5b80915050919050565b60088054610e5490613599565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8090613599565b8015610ecd5780601f10610ea257610100808354040283529160200191610ecd565b820191906000526020600020905b815481529060010190602001808311610eb057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613123565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f956118ff565b610f9f6000611994565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fda90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461100690613599565b80156110535780601f1061102857610100808354040283529160200191611053565b820191906000526020600020905b81548152906001019060200180831161103657829003601f168201915b5050505050905090565b600d8060000154905081565b600a5481565b6110776118ff565b81600960006101000a81548164ffffffffff021916908364ffffffffff16021790555080600960056101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b6110d36110cc6114b6565b8383611a5a565b5050565b600060016110e484611bc7565b1015611112576110ff82600c546110fa86611c7b565b610cd9565b61110a57600061110d565b60035b611115565b60055b905092915050565b61112e6111286114b6565b83611577565b61116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613263565b60405180910390fd5b61117984848484611cab565b50505050565b600960009054906101000a900464ffffffffff1681565b60606111a182611d07565b6111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613163565b60405180910390fd5b6000600880546111ef90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461121b90613599565b80156112685780601f1061123d57610100808354040283529160200191611268565b820191906000526020600020905b81548152906001019060200180831161124b57829003601f168201915b50505050509050600081511161128d57604051806020016040528060008152506112b8565b8061129784611d73565b6040516020016112a8929190612ef5565b6040516020818303038152906040525b915050919050565b600960059054906101000a900464ffffffffff1681565b6112df6118ff565b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113856118ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90613043565b60405180910390fd5b6113fe81611994565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61147481611d07565b6114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa906131e3565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661153183610d95565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061158383610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115c557506115c481856112e9565b5b8061160357508373ffffffffffffffffffffffffffffffffffffffff166115eb8461077b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661162c82610d95565b73ffffffffffffffffffffffffffffffffffffffff1614611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613063565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906130e3565b60405180910390fd5b6116fd838383611ed4565b6117086000826114be565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117589190613451565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117af91906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461186e838383611ed9565b505050565b600042905090565b600081600001549050919050565b611893600d611ede565b6118a6336118a1600d61187b565b611ef4565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f691906133ca565b92505081905550565b6119076114b6565b73ffffffffffffffffffffffffffffffffffffffff16611925610fa1565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906131c3565b60405180910390fd5b565b60008261198a8584611f02565b1490509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613103565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bba9190612f8b565b60405180910390a3505050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611c249190612f24565b60206040518083038186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7491906129fb565b9050919050565b600081604051602001611c8e9190612eda565b604051602081830303815290604052805190602001209050919050565b611cb684848461160c565b611cc284848484611f58565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613023565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606000821415611dbb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ecf565b600082905060005b60008214611ded578080611dd6906135fc565b915050600a82611de69190613420565b9150611dc3565b60008167ffffffffffffffff811115611e0957611e08613756565b5b6040519080825280601f01601f191660200182016040528015611e3b5781602001600182028036833780820191505090505b5090505b60008514611ec857600182611e549190613451565b9150600a85611e639190613669565b6030611e6f91906133ca565b60f81b818381518110611e8557611e84613727565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ec19190613420565b9450611e3f565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b611efe82826120ef565b5050565b60008082905060005b8451811015611f4d57611f3882868381518110611f2b57611f2a613727565b5b602002602001015161210d565b91508080611f45906135fc565b915050611f0b565b508091505092915050565b6000611f798473ffffffffffffffffffffffffffffffffffffffff16612138565b156120e2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fa26114b6565b8786866040518563ffffffff1660e01b8152600401611fc49493929190612f3f565b602060405180830381600087803b158015611fde57600080fd5b505af192505050801561200f57506040513d601f19601f8201168201806040525081019061200c9190612958565b60015b612092573d806000811461203f576040519150601f19603f3d011682016040523d82523d6000602084013e612044565b606091505b5060008151141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613023565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120e7565b600190505b949350505050565b61210982826040518060200160405280600081525061215b565b5050565b60008183106121255761212082846121b6565b612130565b61212f83836121b6565b5b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61216583836121cd565b6121726000848484611f58565b6121b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a890613023565b60405180910390fd5b505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906131a3565b60405180910390fd5b61224681611d07565b15612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613083565b60405180910390fd5b61229260008383611ed4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e291906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123a360008383611ed9565b5050565b8280546123b390613599565b90600052602060002090601f0160209004810192826123d5576000855561241c565b82601f106123ee57805160ff191683800117855561241c565b8280016001018555821561241c579182015b8281111561241b578251825591602001919060010190612400565b5b509050612429919061242d565b5090565b5b8082111561244657600081600090555060010161242e565b5090565b600061245d612458846132f9565b6132d4565b905080838252602082019050828560208602820111156124805761247f61378a565b5b60005b858110156124b057816124968882612596565b845260208401935060208301925050600181019050612483565b5050509392505050565b60006124cd6124c884613325565b6132d4565b9050828152602081018484840111156124e9576124e861378f565b5b6124f4848285613557565b509392505050565b600061250f61250a84613356565b6132d4565b90508281526020810184848401111561252b5761252a61378f565b5b612536848285613557565b509392505050565b60008135905061254d81613c72565b92915050565b600082601f83011261256857612567613785565b5b813561257884826020860161244a565b91505092915050565b60008135905061259081613c89565b92915050565b6000813590506125a581613ca0565b92915050565b6000813590506125ba81613cb7565b92915050565b6000815190506125cf81613cb7565b92915050565b600082601f8301126125ea576125e9613785565b5b81356125fa8482602086016124ba565b91505092915050565b600082601f83011261261857612617613785565b5b81356126288482602086016124fc565b91505092915050565b60008135905061264081613cce565b92915050565b60008151905061265581613cce565b92915050565b60008135905061266a81613ce5565b92915050565b60006020828403121561268657612685613799565b5b60006126948482850161253e565b91505092915050565b600080604083850312156126b4576126b3613799565b5b60006126c28582860161253e565b92505060206126d38582860161253e565b9150509250929050565b6000806000606084860312156126f6576126f5613799565b5b60006127048682870161253e565b93505060206127158682870161253e565b925050604061272686828701612631565b9150509250925092565b6000806000806080858703121561274a57612749613799565b5b60006127588782880161253e565b94505060206127698782880161253e565b935050604061277a87828801612631565b925050606085013567ffffffffffffffff81111561279b5761279a613794565b5b6127a7878288016125d5565b91505092959194509250565b600080604083850312156127ca576127c9613799565b5b60006127d88582860161253e565b925050602083013567ffffffffffffffff8111156127f9576127f8613794565b5b61280585828601612553565b9150509250929050565b6000806040838503121561282657612825613799565b5b60006128348582860161253e565b925050602061284585828601612581565b9150509250929050565b6000806040838503121561286657612865613799565b5b60006128748582860161253e565b925050602061288585828601612631565b9150509250929050565b6000806000606084860312156128a8576128a7613799565b5b600084013567ffffffffffffffff8111156128c6576128c5613794565b5b6128d286828701612553565b93505060206128e386828701612596565b92505060406128f486828701612596565b9150509250925092565b60006020828403121561291457612913613799565b5b600061292284828501612596565b91505092915050565b60006020828403121561294157612940613799565b5b600061294f848285016125ab565b91505092915050565b60006020828403121561296e5761296d613799565b5b600061297c848285016125c0565b91505092915050565b60006020828403121561299b5761299a613799565b5b600082013567ffffffffffffffff8111156129b9576129b8613794565b5b6129c584828501612603565b91505092915050565b6000602082840312156129e4576129e3613799565b5b60006129f284828501612631565b91505092915050565b600060208284031215612a1157612a10613799565b5b6000612a1f84828501612646565b91505092915050565b60008060408385031215612a3f57612a3e613799565b5b6000612a4d85828601612631565b925050602083013567ffffffffffffffff811115612a6e57612a6d613794565b5b612a7a85828601612553565b9150509250929050565b60008060408385031215612a9b57612a9a613799565b5b6000612aa98582860161265b565b9250506020612aba8582860161265b565b9150509250929050565b612acd81613485565b82525050565b612ae4612adf82613485565b613645565b82525050565b612af381613497565b82525050565b6000612b0482613387565b612b0e818561339d565b9350612b1e818560208601613566565b612b278161379e565b840191505092915050565b612b3b81613521565b82525050565b6000612b4c82613392565b612b5681856133ae565b9350612b66818560208601613566565b612b6f8161379e565b840191505092915050565b6000612b8582613392565b612b8f81856133bf565b9350612b9f818560208601613566565b80840191505092915050565b6000612bb86016836133ae565b9150612bc3826137bc565b602082019050919050565b6000612bdb6017836133ae565b9150612be6826137e5565b602082019050919050565b6000612bfe6032836133ae565b9150612c098261380e565b604082019050919050565b6000612c216026836133ae565b9150612c2c8261385d565b604082019050919050565b6000612c446025836133ae565b9150612c4f826138ac565b604082019050919050565b6000612c67601c836133ae565b9150612c72826138fb565b602082019050919050565b6000612c8a600e836133ae565b9150612c9582613924565b602082019050919050565b6000612cad600e836133ae565b9150612cb88261394d565b602082019050919050565b6000612cd06024836133ae565b9150612cdb82613976565b604082019050919050565b6000612cf36019836133ae565b9150612cfe826139c5565b602082019050919050565b6000612d166029836133ae565b9150612d21826139ee565b604082019050919050565b6000612d396010836133ae565b9150612d4482613a3d565b602082019050919050565b6000612d5c601a836133ae565b9150612d6782613a66565b602082019050919050565b6000612d7f603e836133ae565b9150612d8a82613a8f565b604082019050919050565b6000612da26020836133ae565b9150612dad82613ade565b602082019050919050565b6000612dc56005836133bf565b9150612dd082613b07565b600582019050919050565b6000612de86020836133ae565b9150612df382613b30565b602082019050919050565b6000612e0b6018836133ae565b9150612e1682613b59565b602082019050919050565b6000612e2e6021836133ae565b9150612e3982613b82565b604082019050919050565b6000612e51601d836133ae565b9150612e5c82613bd1565b602082019050919050565b6000612e74600e836133ae565b9150612e7f82613bfa565b602082019050919050565b6000612e97602e836133ae565b9150612ea282613c23565b604082019050919050565b612eb6816134f9565b82525050565b612ec581613503565b82525050565b612ed481613514565b82525050565b6000612ee68284612ad3565b60148201915081905092915050565b6000612f018285612b7a565b9150612f0d8284612b7a565b9150612f1882612db8565b91508190509392505050565b6000602082019050612f396000830184612ac4565b92915050565b6000608082019050612f546000830187612ac4565b612f616020830186612ac4565b612f6e6040830185612ead565b8181036060830152612f808184612af9565b905095945050505050565b6000602082019050612fa06000830184612aea565b92915050565b6000602082019050612fbb6000830184612b32565b92915050565b60006020820190508181036000830152612fdb8184612b41565b905092915050565b60006020820190508181036000830152612ffc81612bab565b9050919050565b6000602082019050818103600083015261301c81612bce565b9050919050565b6000602082019050818103600083015261303c81612bf1565b9050919050565b6000602082019050818103600083015261305c81612c14565b9050919050565b6000602082019050818103600083015261307c81612c37565b9050919050565b6000602082019050818103600083015261309c81612c5a565b9050919050565b600060208201905081810360008301526130bc81612c7d565b9050919050565b600060208201905081810360008301526130dc81612ca0565b9050919050565b600060208201905081810360008301526130fc81612cc3565b9050919050565b6000602082019050818103600083015261311c81612ce6565b9050919050565b6000602082019050818103600083015261313c81612d09565b9050919050565b6000602082019050818103600083015261315c81612d2c565b9050919050565b6000602082019050818103600083015261317c81612d4f565b9050919050565b6000602082019050818103600083015261319c81612d72565b9050919050565b600060208201905081810360008301526131bc81612d95565b9050919050565b600060208201905081810360008301526131dc81612ddb565b9050919050565b600060208201905081810360008301526131fc81612dfe565b9050919050565b6000602082019050818103600083015261321c81612e21565b9050919050565b6000602082019050818103600083015261323c81612e44565b9050919050565b6000602082019050818103600083015261325c81612e67565b9050919050565b6000602082019050818103600083015261327c81612e8a565b9050919050565b60006020820190506132986000830184612ead565b92915050565b60006020820190506132b36000830184612ebc565b92915050565b60006020820190506132ce6000830184612ecb565b92915050565b60006132de6132ef565b90506132ea82826135cb565b919050565b6000604051905090565b600067ffffffffffffffff82111561331457613313613756565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133405761333f613756565b5b6133498261379e565b9050602081019050919050565b600067ffffffffffffffff82111561337157613370613756565b5b61337a8261379e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d5826134f9565b91506133e0836134f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134155761341461369a565b5b828201905092915050565b600061342b826134f9565b9150613436836134f9565b925082613446576134456136c9565b5b828204905092915050565b600061345c826134f9565b9150613467836134f9565b92508282101561347a5761347961369a565b5b828203905092915050565b6000613490826134d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b600060ff82169050919050565b600061352c82613533565b9050919050565b600061353e82613545565b9050919050565b6000613550826134d9565b9050919050565b82818337600083830152505050565b60005b83811015613584578082015181840152602081019050613569565b83811115613593576000848401525b50505050565b600060028204905060018216806135b157607f821691505b602082108114156135c5576135c46136f8565b5b50919050565b6135d48261379e565b810181811067ffffffffffffffff821117156135f3576135f2613756565b5b80604052505050565b6000613607826134f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363a5761363961369a565b5b600182019050919050565b600061365082613657565b9050919050565b6000613662826137af565b9050919050565b6000613674826134f9565b915061367f836134f9565b92508261368f5761368e6136c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d6178204d696e74204c696d6974205265616368656400000000000000000000600082015250565b7f4d696e74696e67204e6f74205374617274656420596574000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4c696d6974206578636565646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4d494e54204e4f5420414c4c4f57454400000000000000000000000000000000600082015250565b7f5175657279696e67204e6f6e6578697374656e7420746f6b656e000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752072656163686564204d6178204d696e74696e67206c696d6974000000600082015250565b7f53616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613c7b81613485565b8114613c8657600080fd5b50565b613c9281613497565b8114613c9d57600080fd5b50565b613ca9816134a3565b8114613cb457600080fd5b50565b613cc0816134ad565b8114613ccb57600080fd5b50565b613cd7816134f9565b8114613ce257600080fd5b50565b613cee81613503565b8114613cf957600080fd5b5056fea2646970667358221220c38a6f7f65e2fcb749438d7b584319940ba8f466782595e84cff358604d6fdf964736f6c634300080700334574686e6f6c6f67792053657269657320323a20476f647320616e642044656d6f6e73697066733a2f2f516d535267516b4b4a3872574d4a78754844537a6171316654365047764270646b4b6d706b74464537714a3370342f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a921b7b1116100a2578063d3d9aeeb11610071578063d3d9aeeb14610581578063dab5f3401461059f578063e985e9c5146105bb578063f2fde38b146105eb576101f0565b8063a921b7b1146104e7578063b88d4fde14610517578063c435c7a114610533578063c87b56dd14610551576101f0565b80639659867e116100de5780639659867e14610473578063996517cf146104915780639a1a0761146104af578063a22cb465146104cb576101f0565b806370a08231146103fd578063715018a61461042d5780638da5cb5b1461043757806395d89b4114610455576101f0565b80634d7ce134116101875780635c975abb116101565780635c975abb146103735780635d08c1ae146103915780636352211e146103af5780636c0360eb146103df576101f0565b80634d7ce134146102ff5780634edd147e1461032f5780635322f9d11461034d57806355f804b314610357576101f0565b806323b872dd116101c357806323b872dd1461028f5780632f8af9df146102ab5780633ea5e4c2146102c757806342842e0e146102e3576101f0565b806301ffc9a7146101f557806306fdde0314610225578063081812fc14610243578063095ea7b314610273575b600080fd5b61020f600480360381019061020a919061292b565b610607565b60405161021c9190612f8b565b60405180910390f35b61022d6106e9565b60405161023a9190612fc1565b60405180910390f35b61025d600480360381019061025891906129ce565b61077b565b60405161026a9190612f24565b60405180910390f35b61028d6004803603810190610288919061284f565b6107c1565b005b6102a960048036038101906102a491906126dd565b6108d9565b005b6102c560048036038101906102c09190612a28565b610939565b005b6102e160048036038101906102dc9190612670565b610c6d565b005b6102fd60048036038101906102f891906126dd565b610cb9565b005b6103196004803603810190610314919061288f565b610cd9565b6040516103269190612f8b565b60405180910390f35b610337610cef565b6040516103449190612fa6565b60405180910390f35b610355610d15565b005b610371600480360381019061036c9190612985565b610d49565b005b61037b610d6b565b6040516103889190612f8b565b60405180910390f35b610399610d82565b6040516103a69190612f8b565b60405180910390f35b6103c960048036038101906103c491906129ce565b610d95565b6040516103d69190612f24565b60405180910390f35b6103e7610e47565b6040516103f49190612fc1565b60405180910390f35b61041760048036038101906104129190612670565b610ed5565b6040516104249190613283565b60405180910390f35b610435610f8d565b005b61043f610fa1565b60405161044c9190612f24565b60405180910390f35b61045d610fcb565b60405161046a9190612fc1565b60405180910390f35b61047b61105d565b6040516104889190613283565b60405180910390f35b610499611069565b6040516104a69190613283565b60405180910390f35b6104c960048036038101906104c49190612a84565b61106f565b005b6104e560048036038101906104e0919061280f565b6110c1565b005b61050160048036038101906104fc91906127b3565b6110d7565b60405161050e91906132b9565b60405180910390f35b610531600480360381019061052c9190612730565b61111d565b005b61053b61117f565b604051610548919061329e565b60405180910390f35b61056b600480360381019061056691906129ce565b611196565b6040516105789190612fc1565b60405180910390f35b6105896112c0565b604051610596919061329e565b60405180910390f35b6105b960048036038101906105b491906128fe565b6112d7565b005b6105d560048036038101906105d0919061269d565b6112e9565b6040516105e29190612f8b565b60405180910390f35b61060560048036038101906106009190612670565b61137d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e257506106e182611401565b5b9050919050565b6060600080546106f890613599565b80601f016020809104026020016040519081016040528092919081815260200182805461072490613599565b80156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b5050505050905090565b60006107868261146b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107cc82610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490613203565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661085c6114b6565b73ffffffffffffffffffffffffffffffffffffffff16148061088b575061088a816108856114b6565b6112e9565b5b6108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c190613183565b60405180910390fd5b6108d483836114be565b505050565b6108ea6108e46114b6565b82611577565b610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090613263565b60405180910390fd5b61093483838361160c565b505050565b600b60009054906101000a900460ff1615610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098090613243565b60405180910390fd5b600082116109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c3906130a3565b60405180910390fd5b6109d4611873565b600960009054906101000a900464ffffffffff1664ffffffffff1610610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690613003565b60405180910390fd5b600a54610a3c600d61187b565b1115610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490612fe3565b60405180910390fd5b610a85611873565b600960009054906101000a900464ffffffffff1664ffffffffff1611158015610ace5750610ab1611873565b600960059054906101000a900464ffffffffff1664ffffffffff16115b15610bde576000610adf33836110d7565b905060008160ff1611610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613143565b60405180910390fd5b8060ff1683600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7691906133ca565b1115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906130c3565b60405180910390fd5b60005b83811015610bd757610bca611889565b8080600101915050610bba565b5050610c69565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613223565b60405180910390fd5b610c68611889565b5b5050565b610c756118ff565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cd48383836040518060200160405280600081525061111d565b505050565b6000610ce684848461197d565b90509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d1d6118ff565b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610d516118ff565b8060089080519060200190610d679291906123a7565b5050565b6000600760149054906101000a900460ff16905090565b600b60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e35906131e3565b60405180910390fd5b80915050919050565b60088054610e5490613599565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8090613599565b8015610ecd5780601f10610ea257610100808354040283529160200191610ecd565b820191906000526020600020905b815481529060010190602001808311610eb057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613123565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f956118ff565b610f9f6000611994565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fda90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461100690613599565b80156110535780601f1061102857610100808354040283529160200191611053565b820191906000526020600020905b81548152906001019060200180831161103657829003601f168201915b5050505050905090565b600d8060000154905081565b600a5481565b6110776118ff565b81600960006101000a81548164ffffffffff021916908364ffffffffff16021790555080600960056101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b6110d36110cc6114b6565b8383611a5a565b5050565b600060016110e484611bc7565b1015611112576110ff82600c546110fa86611c7b565b610cd9565b61110a57600061110d565b60035b611115565b60055b905092915050565b61112e6111286114b6565b83611577565b61116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613263565b60405180910390fd5b61117984848484611cab565b50505050565b600960009054906101000a900464ffffffffff1681565b60606111a182611d07565b6111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790613163565b60405180910390fd5b6000600880546111ef90613599565b80601f016020809104026020016040519081016040528092919081815260200182805461121b90613599565b80156112685780601f1061123d57610100808354040283529160200191611268565b820191906000526020600020905b81548152906001019060200180831161124b57829003601f168201915b50505050509050600081511161128d57604051806020016040528060008152506112b8565b8061129784611d73565b6040516020016112a8929190612ef5565b6040516020818303038152906040525b915050919050565b600960059054906101000a900464ffffffffff1681565b6112df6118ff565b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113856118ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90613043565b60405180910390fd5b6113fe81611994565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61147481611d07565b6114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa906131e3565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661153183610d95565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061158383610d95565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115c557506115c481856112e9565b5b8061160357508373ffffffffffffffffffffffffffffffffffffffff166115eb8461077b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661162c82610d95565b73ffffffffffffffffffffffffffffffffffffffff1614611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167990613063565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906130e3565b60405180910390fd5b6116fd838383611ed4565b6117086000826114be565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117589190613451565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117af91906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461186e838383611ed9565b505050565b600042905090565b600081600001549050919050565b611893600d611ede565b6118a6336118a1600d61187b565b611ef4565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f691906133ca565b92505081905550565b6119076114b6565b73ffffffffffffffffffffffffffffffffffffffff16611925610fa1565b73ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906131c3565b60405180910390fd5b565b60008261198a8584611f02565b1490509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613103565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bba9190612f8b565b60405180910390a3505050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611c249190612f24565b60206040518083038186803b158015611c3c57600080fd5b505afa158015611c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7491906129fb565b9050919050565b600081604051602001611c8e9190612eda565b604051602081830303815290604052805190602001209050919050565b611cb684848461160c565b611cc284848484611f58565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613023565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606000821415611dbb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ecf565b600082905060005b60008214611ded578080611dd6906135fc565b915050600a82611de69190613420565b9150611dc3565b60008167ffffffffffffffff811115611e0957611e08613756565b5b6040519080825280601f01601f191660200182016040528015611e3b5781602001600182028036833780820191505090505b5090505b60008514611ec857600182611e549190613451565b9150600a85611e639190613669565b6030611e6f91906133ca565b60f81b818381518110611e8557611e84613727565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ec19190613420565b9450611e3f565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b611efe82826120ef565b5050565b60008082905060005b8451811015611f4d57611f3882868381518110611f2b57611f2a613727565b5b602002602001015161210d565b91508080611f45906135fc565b915050611f0b565b508091505092915050565b6000611f798473ffffffffffffffffffffffffffffffffffffffff16612138565b156120e2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fa26114b6565b8786866040518563ffffffff1660e01b8152600401611fc49493929190612f3f565b602060405180830381600087803b158015611fde57600080fd5b505af192505050801561200f57506040513d601f19601f8201168201806040525081019061200c9190612958565b60015b612092573d806000811461203f576040519150601f19603f3d011682016040523d82523d6000602084013e612044565b606091505b5060008151141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613023565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120e7565b600190505b949350505050565b61210982826040518060200160405280600081525061215b565b5050565b60008183106121255761212082846121b6565b612130565b61212f83836121b6565b5b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b61216583836121cd565b6121726000848484611f58565b6121b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a890613023565b60405180910390fd5b505050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906131a3565b60405180910390fd5b61224681611d07565b15612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90613083565b60405180910390fd5b61229260008383611ed4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e291906133ca565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123a360008383611ed9565b5050565b8280546123b390613599565b90600052602060002090601f0160209004810192826123d5576000855561241c565b82601f106123ee57805160ff191683800117855561241c565b8280016001018555821561241c579182015b8281111561241b578251825591602001919060010190612400565b5b509050612429919061242d565b5090565b5b8082111561244657600081600090555060010161242e565b5090565b600061245d612458846132f9565b6132d4565b905080838252602082019050828560208602820111156124805761247f61378a565b5b60005b858110156124b057816124968882612596565b845260208401935060208301925050600181019050612483565b5050509392505050565b60006124cd6124c884613325565b6132d4565b9050828152602081018484840111156124e9576124e861378f565b5b6124f4848285613557565b509392505050565b600061250f61250a84613356565b6132d4565b90508281526020810184848401111561252b5761252a61378f565b5b612536848285613557565b509392505050565b60008135905061254d81613c72565b92915050565b600082601f83011261256857612567613785565b5b813561257884826020860161244a565b91505092915050565b60008135905061259081613c89565b92915050565b6000813590506125a581613ca0565b92915050565b6000813590506125ba81613cb7565b92915050565b6000815190506125cf81613cb7565b92915050565b600082601f8301126125ea576125e9613785565b5b81356125fa8482602086016124ba565b91505092915050565b600082601f83011261261857612617613785565b5b81356126288482602086016124fc565b91505092915050565b60008135905061264081613cce565b92915050565b60008151905061265581613cce565b92915050565b60008135905061266a81613ce5565b92915050565b60006020828403121561268657612685613799565b5b60006126948482850161253e565b91505092915050565b600080604083850312156126b4576126b3613799565b5b60006126c28582860161253e565b92505060206126d38582860161253e565b9150509250929050565b6000806000606084860312156126f6576126f5613799565b5b60006127048682870161253e565b93505060206127158682870161253e565b925050604061272686828701612631565b9150509250925092565b6000806000806080858703121561274a57612749613799565b5b60006127588782880161253e565b94505060206127698782880161253e565b935050604061277a87828801612631565b925050606085013567ffffffffffffffff81111561279b5761279a613794565b5b6127a7878288016125d5565b91505092959194509250565b600080604083850312156127ca576127c9613799565b5b60006127d88582860161253e565b925050602083013567ffffffffffffffff8111156127f9576127f8613794565b5b61280585828601612553565b9150509250929050565b6000806040838503121561282657612825613799565b5b60006128348582860161253e565b925050602061284585828601612581565b9150509250929050565b6000806040838503121561286657612865613799565b5b60006128748582860161253e565b925050602061288585828601612631565b9150509250929050565b6000806000606084860312156128a8576128a7613799565b5b600084013567ffffffffffffffff8111156128c6576128c5613794565b5b6128d286828701612553565b93505060206128e386828701612596565b92505060406128f486828701612596565b9150509250925092565b60006020828403121561291457612913613799565b5b600061292284828501612596565b91505092915050565b60006020828403121561294157612940613799565b5b600061294f848285016125ab565b91505092915050565b60006020828403121561296e5761296d613799565b5b600061297c848285016125c0565b91505092915050565b60006020828403121561299b5761299a613799565b5b600082013567ffffffffffffffff8111156129b9576129b8613794565b5b6129c584828501612603565b91505092915050565b6000602082840312156129e4576129e3613799565b5b60006129f284828501612631565b91505092915050565b600060208284031215612a1157612a10613799565b5b6000612a1f84828501612646565b91505092915050565b60008060408385031215612a3f57612a3e613799565b5b6000612a4d85828601612631565b925050602083013567ffffffffffffffff811115612a6e57612a6d613794565b5b612a7a85828601612553565b9150509250929050565b60008060408385031215612a9b57612a9a613799565b5b6000612aa98582860161265b565b9250506020612aba8582860161265b565b9150509250929050565b612acd81613485565b82525050565b612ae4612adf82613485565b613645565b82525050565b612af381613497565b82525050565b6000612b0482613387565b612b0e818561339d565b9350612b1e818560208601613566565b612b278161379e565b840191505092915050565b612b3b81613521565b82525050565b6000612b4c82613392565b612b5681856133ae565b9350612b66818560208601613566565b612b6f8161379e565b840191505092915050565b6000612b8582613392565b612b8f81856133bf565b9350612b9f818560208601613566565b80840191505092915050565b6000612bb86016836133ae565b9150612bc3826137bc565b602082019050919050565b6000612bdb6017836133ae565b9150612be6826137e5565b602082019050919050565b6000612bfe6032836133ae565b9150612c098261380e565b604082019050919050565b6000612c216026836133ae565b9150612c2c8261385d565b604082019050919050565b6000612c446025836133ae565b9150612c4f826138ac565b604082019050919050565b6000612c67601c836133ae565b9150612c72826138fb565b602082019050919050565b6000612c8a600e836133ae565b9150612c9582613924565b602082019050919050565b6000612cad600e836133ae565b9150612cb88261394d565b602082019050919050565b6000612cd06024836133ae565b9150612cdb82613976565b604082019050919050565b6000612cf36019836133ae565b9150612cfe826139c5565b602082019050919050565b6000612d166029836133ae565b9150612d21826139ee565b604082019050919050565b6000612d396010836133ae565b9150612d4482613a3d565b602082019050919050565b6000612d5c601a836133ae565b9150612d6782613a66565b602082019050919050565b6000612d7f603e836133ae565b9150612d8a82613a8f565b604082019050919050565b6000612da26020836133ae565b9150612dad82613ade565b602082019050919050565b6000612dc56005836133bf565b9150612dd082613b07565b600582019050919050565b6000612de86020836133ae565b9150612df382613b30565b602082019050919050565b6000612e0b6018836133ae565b9150612e1682613b59565b602082019050919050565b6000612e2e6021836133ae565b9150612e3982613b82565b604082019050919050565b6000612e51601d836133ae565b9150612e5c82613bd1565b602082019050919050565b6000612e74600e836133ae565b9150612e7f82613bfa565b602082019050919050565b6000612e97602e836133ae565b9150612ea282613c23565b604082019050919050565b612eb6816134f9565b82525050565b612ec581613503565b82525050565b612ed481613514565b82525050565b6000612ee68284612ad3565b60148201915081905092915050565b6000612f018285612b7a565b9150612f0d8284612b7a565b9150612f1882612db8565b91508190509392505050565b6000602082019050612f396000830184612ac4565b92915050565b6000608082019050612f546000830187612ac4565b612f616020830186612ac4565b612f6e6040830185612ead565b8181036060830152612f808184612af9565b905095945050505050565b6000602082019050612fa06000830184612aea565b92915050565b6000602082019050612fbb6000830184612b32565b92915050565b60006020820190508181036000830152612fdb8184612b41565b905092915050565b60006020820190508181036000830152612ffc81612bab565b9050919050565b6000602082019050818103600083015261301c81612bce565b9050919050565b6000602082019050818103600083015261303c81612bf1565b9050919050565b6000602082019050818103600083015261305c81612c14565b9050919050565b6000602082019050818103600083015261307c81612c37565b9050919050565b6000602082019050818103600083015261309c81612c5a565b9050919050565b600060208201905081810360008301526130bc81612c7d565b9050919050565b600060208201905081810360008301526130dc81612ca0565b9050919050565b600060208201905081810360008301526130fc81612cc3565b9050919050565b6000602082019050818103600083015261311c81612ce6565b9050919050565b6000602082019050818103600083015261313c81612d09565b9050919050565b6000602082019050818103600083015261315c81612d2c565b9050919050565b6000602082019050818103600083015261317c81612d4f565b9050919050565b6000602082019050818103600083015261319c81612d72565b9050919050565b600060208201905081810360008301526131bc81612d95565b9050919050565b600060208201905081810360008301526131dc81612ddb565b9050919050565b600060208201905081810360008301526131fc81612dfe565b9050919050565b6000602082019050818103600083015261321c81612e21565b9050919050565b6000602082019050818103600083015261323c81612e44565b9050919050565b6000602082019050818103600083015261325c81612e67565b9050919050565b6000602082019050818103600083015261327c81612e8a565b9050919050565b60006020820190506132986000830184612ead565b92915050565b60006020820190506132b36000830184612ebc565b92915050565b60006020820190506132ce6000830184612ecb565b92915050565b60006132de6132ef565b90506132ea82826135cb565b919050565b6000604051905090565b600067ffffffffffffffff82111561331457613313613756565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133405761333f613756565b5b6133498261379e565b9050602081019050919050565b600067ffffffffffffffff82111561337157613370613756565b5b61337a8261379e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d5826134f9565b91506133e0836134f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134155761341461369a565b5b828201905092915050565b600061342b826134f9565b9150613436836134f9565b925082613446576134456136c9565b5b828204905092915050565b600061345c826134f9565b9150613467836134f9565b92508282101561347a5761347961369a565b5b828203905092915050565b6000613490826134d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b600060ff82169050919050565b600061352c82613533565b9050919050565b600061353e82613545565b9050919050565b6000613550826134d9565b9050919050565b82818337600083830152505050565b60005b83811015613584578082015181840152602081019050613569565b83811115613593576000848401525b50505050565b600060028204905060018216806135b157607f821691505b602082108114156135c5576135c46136f8565b5b50919050565b6135d48261379e565b810181811067ffffffffffffffff821117156135f3576135f2613756565b5b80604052505050565b6000613607826134f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363a5761363961369a565b5b600182019050919050565b600061365082613657565b9050919050565b6000613662826137af565b9050919050565b6000613674826134f9565b915061367f836134f9565b92508261368f5761368e6136c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d6178204d696e74204c696d6974205265616368656400000000000000000000600082015250565b7f4d696e74696e67204e6f74205374617274656420596574000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4c696d6974206578636565646564000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4d494e54204e4f5420414c4c4f57454400000000000000000000000000000000600082015250565b7f5175657279696e67204e6f6e6578697374656e7420746f6b656e000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752072656163686564204d6178204d696e74696e67206c696d6974000000600082015250565b7f53616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613c7b81613485565b8114613c8657600080fd5b50565b613c9281613497565b8114613c9d57600080fd5b50565b613ca9816134a3565b8114613cb457600080fd5b50565b613cc0816134ad565b8114613ccb57600080fd5b50565b613cd7816134f9565b8114613ce257600080fd5b50565b613cee81613503565b8114613cf957600080fd5b5056fea2646970667358221220c38a6f7f65e2fcb749438d7b584319940ba8f466782595e84cff358604d6fdf964736f6c63430008070033

Deployed Bytecode Sourcemap

21476:3770:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9949:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10632:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11571:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11203:362;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12057:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22369:828;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24018:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12371:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23749:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21912:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23936:76;;;:::i;:::-;;24355:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3823:80;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21877:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10418:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21619:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10215:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2398:97;;;:::i;:::-;;2179:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10732:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21969:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21840:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24206:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11738:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25042:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12542:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21645:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24554:352;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21744:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24127:73;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11893:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2501:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9949:260;10051:4;10086:25;10071:40;;;:11;:40;;;;:92;;;;10130:33;10115:48;;;:11;:48;;;;10071:92;:132;;;;10167:36;10191:11;10167:23;:36::i;:::-;10071:132;10064:139;;9949:260;;;:::o;10632:94::-;10686:13;10715:5;10708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10632:94;:::o;11571:161::-;11647:7;11663:23;11678:7;11663:14;:23::i;:::-;11702:15;:24;11718:7;11702:24;;;;;;;;;;;;;;;;;;;;;11695:31;;11571:161;;;:::o;11203:362::-;11280:13;11296:23;11311:7;11296:14;:23::i;:::-;11280:39;;11340:5;11334:11;;:2;:11;;;;11326:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11416:5;11400:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;11425:37;11442:5;11449:12;:10;:12::i;:::-;11425:16;:37::i;:::-;11400:62;11392:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;11538:21;11547:2;11551:7;11538:8;:21::i;:::-;11273:292;11203:362;;:::o;12057:308::-;12230:41;12249:12;:10;:12::i;:::-;12263:7;12230:18;:41::i;:::-;12222:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;12331:28;12341:4;12347:2;12351:7;12331:9;:28::i;:::-;12057:308;;;:::o;22369:828::-;22453:10;;;;;;;;;;;22452:11;22444:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22506:1;22497:6;:10;22489:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;22556:16;:14;:16::i;:::-;22541:12;;;;;;;;;;;:31;;;22533:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22638:9;;22615:19;:9;:17;:19::i;:::-;:32;;22607:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22701:16;:14;:16::i;:::-;22685:12;;;;;;;;;;;:32;;;;:65;;;;;22734:16;:14;:16::i;:::-;22721:10;;;;;;;;;;;:29;;;22685:65;22681:511;;;22761:18;22782:30;22793:10;22805:6;22782:10;:30::i;:::-;22761:51;;22844:1;22829:12;:16;;;22821:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22913:12;22883:42;;22903:6;22883:5;:17;22889:10;22883:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;:42;;22875:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22958:13;22953:126;22985:6;22977:5;:14;22953:126;;;23006:11;:9;:11::i;:::-;23051:7;;;;;;;22953:126;;;;22752:334;22681:511;;;23129:1;23109:5;:17;23115:10;23109:17;;;;;;;;;;;;;;;;:21;23101:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23173:11;:9;:11::i;:::-;22681:511;22369:828;;:::o;24018:103::-;2146:13;:11;:13::i;:::-;24104:10:::1;24084:9;;:31;;;;;;;;;;;;;;;;;;24018:103:::0;:::o;12371:165::-;12491:39;12508:4;12514:2;12518:7;12491:39;;;;;;;;;;;;:16;:39::i;:::-;12371:165;;;:::o;23749:181::-;23866:4;23886:38;23905:5;23912:4;23918:5;23886:18;:38::i;:::-;23879:45;;23749:181;;;;;:::o;21912:24::-;;;;;;;;;;;;;:::o;23936:76::-;2146:13;:11;:13::i;:::-;23996:10:::1;;;;;;;;;;;23995:11;23982:10;;:24;;;;;;;;;;;;;;;;;;23936:76::o:0;24355:98::-;2146:13;:11;:13::i;:::-;24436:11:::1;24426:7;:21;;;;;;;;;;;;:::i;:::-;;24355:98:::0;:::o;3823:80::-;3870:4;3890:7;;;;;;;;;;;3883:14;;3823:80;:::o;21877:30::-;;;;;;;;;;;;;:::o;10418:208::-;10490:7;10506:13;10522:7;:16;10530:7;10522:16;;;;;;;;;;;;;;;;;;;;;10506:32;;10570:1;10553:19;;:5;:19;;;;10545:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10615:5;10608:12;;;10418:208;;;:::o;21619:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10215:197::-;10287:7;10328:1;10311:19;;:5;:19;;;;10303:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10390:9;:16;10400:5;10390:16;;;;;;;;;;;;;;;;10383:23;;10215:197;;;:::o;2398:97::-;2146:13;:11;:13::i;:::-;2459:30:::1;2486:1;2459:18;:30::i;:::-;2398:97::o:0;2179:81::-;2225:7;2248:6;;;;;;;;;;;2241:13;;2179:81;:::o;10732:98::-;10788:13;10817:7;10810:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10732:98;:::o;21969:33::-;;;;;;;;;:::o;21840:32::-;;;;:::o;24206:143::-;2146:13;:11;:13::i;:::-;24306:8:::1;24291:12;;:23;;;;;;;;;;;;;;;;;;24334:9;24321:10;;:22;;;;;;;;;;;;;;;;;;24206:143:::0;;:::o;11738:149::-;11829:52;11848:12;:10;:12::i;:::-;11862:8;11872;11829:18;:52::i;:::-;11738:149;;:::o;25042:201::-;25123:5;25168:1;25145:19;25158:5;25145:12;:19::i;:::-;:24;;25144:93;;25178:50;25192:6;25200:5;;25207:20;25221:5;25207:13;:20::i;:::-;25178:13;:50::i;:::-;25177:60;;25236:1;25177:60;;;25232:1;25177:60;25144:93;;;25173:1;25144:93;25137:100;;25042:201;;;;:::o;12542:295::-;12694:41;12713:12;:10;:12::i;:::-;12727:7;12694:18;:41::i;:::-;12686:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;12793:38;12807:4;12813:2;12817:7;12826:4;12793:13;:38::i;:::-;12542:295;;;;:::o;21645:39::-;;;;;;;;;;;;;:::o;24554:352::-;24653:13;24683:16;24691:7;24683;:16::i;:::-;24675:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24739:28;24770:7;24739:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24822:1;24797:14;24791:28;:32;:109;;;;;;;;;;;;;;;;;24850:14;24866:18;:7;:16;:18::i;:::-;24833:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24791:109;24784:116;;;24554:352;;;:::o;21744:37::-;;;;;;;;;;;;;:::o;24127:73::-;2146:13;:11;:13::i;:::-;24190:4:::1;24182:5;:12;;;;24127:73:::0;:::o;11893:158::-;11990:4;12010:18;:25;12029:5;12010:25;;;;;;;;;;;;;;;:35;12036:8;12010:35;;;;;;;;;;;;;;;;;;;;;;;;;12003:42;;11893:158;;;;:::o;2501:191::-;2146:13;:11;:13::i;:::-;2606:1:::1;2586:22;;:8;:22;;;;2578:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2658:28;2677:8;2658:18;:28::i;:::-;2501:191:::0;:::o;9269:151::-;9354:4;9389:25;9374:40;;;:11;:40;;;;9367:47;;9269:151;;;:::o;15652:129::-;15730:16;15738:7;15730;:16::i;:::-;15722:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;15652:129;:::o;1692:92::-;1745:7;1768:10;1761:17;;1692:92;:::o;15189:164::-;15287:2;15260:15;:24;15276:7;15260:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;15339:7;15335:2;15301:46;;15310:23;15325:7;15310:14;:23::i;:::-;15301:46;;;;;;;;;;;;15189:164;;:::o;13261:254::-;13354:4;13367:13;13383:23;13398:7;13383:14;:23::i;:::-;13367:39;;13432:5;13421:16;;:7;:16;;;:52;;;;13441:32;13458:5;13465:7;13441:16;:32::i;:::-;13421:52;:87;;;;13501:7;13477:31;;:20;13489:7;13477:11;:20::i;:::-;:31;;;13421:87;13413:96;;;13261:254;;;;:::o;14668:515::-;14809:4;14782:31;;:23;14797:7;14782:14;:23::i;:::-;:31;;;14774:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;14884:1;14870:16;;:2;:16;;;;14862:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14934:39;14955:4;14961:2;14965:7;14934:20;:39::i;:::-;14980:29;14997:1;15001:7;14980:8;:29::i;:::-;15035:1;15016:9;:15;15026:4;15016:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;15060:1;15043:9;:13;15053:2;15043:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;15087:2;15068:7;:16;15076:7;15068:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;15122:7;15118:2;15103:27;;15112:4;15103:27;;;;;;;;;;;;15139:38;15159:4;15165:2;15169:7;15139:19;:38::i;:::-;14668:515;;;:::o;23345:92::-;23393:7;23416:15;23409:22;;23345:92;:::o;2966:108::-;3031:7;3054;:14;;;3047:21;;2966:108;;;:::o;23203:136::-;23239:21;:9;:19;:21::i;:::-;23267:37;23272:10;23284:19;:9;:17;:19::i;:::-;23267:4;:37::i;:::-;23332:1;23311:5;:17;23317:10;23311:17;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;23203:136::o;2266:126::-;2337:12;:10;:12::i;:::-;2326:23;;:7;:5;:7::i;:::-;:23;;;2318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2266:126::o;16767:170::-;16878:4;16927;16898:25;16911:5;16918:4;16898:12;:25::i;:::-;:33;16891:40;;16767:170;;;;;:::o;2698:177::-;2768:16;2787:6;;;;;;;;;;;2768:25;;2809:8;2800:6;;:17;;;;;;;;;;;;;;;;;;2860:8;2829:40;;2850:8;2829:40;;;;;;;;;;;;2761:114;2698:177;:::o;15359:287::-;15496:8;15487:17;;:5;:17;;;;15479:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;15579:8;15541:18;:25;15560:5;15541:25;;;;;;;;;;;;;;;:35;15567:8;15541:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;15621:8;15599:41;;15614:5;15599:41;;;15631:8;15599:41;;;;;;:::i;:::-;;;;;;;;15359:287;;;:::o;23443:117::-;23504:7;23527:9;;;;;;;;;;;:19;;;23547:6;23527:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23520:34;;23443:117;;;:::o;24912:124::-;24973:7;25023:5;25006:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;24996:34;;;;;;24989:41;;24912:124;;;:::o;12843:285::-;12977:28;12987:4;12993:2;12997:7;12977:9;:28::i;:::-;13020:47;13043:4;13049:2;13053:7;13062:4;13020:22;:47::i;:::-;13012:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;12843:285;;;;:::o;13134:121::-;13199:4;13247:1;13219:30;;:7;:16;13227:7;13219:16;;;;;;;;;;;;;;;;;;;;;:30;;;;13212:37;;13134:121;;;:::o;336:454::-;392:13;427:1;418:5;:10;414:43;;;439:10;;;;;;;;;;;;;;;;;;;;;414:43;463:12;478:5;463:20;;490:14;511:62;526:1;518:4;:9;511:62;;538:8;;;;;:::i;:::-;;;;563:2;555:10;;;;;:::i;:::-;;;511:62;;;579:19;611:6;601:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;579:39;;625:132;641:1;632:5;:10;625:132;;663:1;653:11;;;;;:::i;:::-;;;724:2;716:5;:10;;;;:::i;:::-;703:2;:24;;;;:::i;:::-;690:39;;673:6;680;673:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;747:2;738:11;;;;;:::i;:::-;;;625:132;;;777:6;763:21;;;;;336:454;;;;:::o;16506:112::-;;;;:::o;16624:111::-;;;;:::o;3080:::-;3177:1;3159:7;:14;;;:19;;;;;;;;;;;3080:111;:::o;24459:89::-;24519:23;24529:2;24533:8;24519:9;:23::i;:::-;24459:89;;:::o;17137:272::-;17220:7;17236:20;17259:4;17236:27;;17275:9;17270:108;17294:5;:12;17290:1;:16;17270:108;;;17337:33;17347:12;17361:5;17367:1;17361:8;;;;;;;;:::i;:::-;;;;;;;;17337:9;:33::i;:::-;17322:48;;17308:3;;;;;:::i;:::-;;;;17270:108;;;;17391:12;17384:19;;;17137:272;;;;:::o;15787:713::-;15923:4;15940:15;:2;:13;;;:15::i;:::-;15936:559;;;15986:2;15970:36;;;16007:12;:10;:12::i;:::-;16021:4;16027:7;16036:4;15970:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15966:488;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16206:1;16189:6;:13;:18;16185:260;;;16222:60;;;;;;;;;;:::i;:::-;;;;;;;;16185:260;16413:6;16407:13;16398:6;16394:2;16390:15;16383:38;15966:488;16094:41;;;16084:51;;;:6;:51;;;;16077:58;;;;;15936:559;16483:4;16476:11;;15787:713;;;;;;;:::o;13521:104::-;13593:26;13603:2;13607:7;13593:26;;;;;;;;;;;;:9;:26::i;:::-;13521:104;;:::o;20149:143::-;20212:7;20239:1;20235;:5;:51;;20266:20;20281:1;20284;20266:14;:20::i;:::-;20235:51;;;20243:20;20258:1;20261;20243:14;:20::i;:::-;20235:51;20228:58;;20149:143;;;;:::o;6025:109::-;6085:4;6127:1;6105:7;:19;;;:23;6098:30;;6025:109;;;:::o;13631:258::-;13742:18;13748:2;13752:7;13742:5;:18::i;:::-;13775:53;13806:1;13810:2;13814:7;13823:4;13775:22;:53::i;:::-;13767:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;13631:258;;;:::o;20298:196::-;20366:13;20419:1;20413:4;20406:15;20442:1;20436:4;20429:15;20477:4;20471;20461:21;20452:30;;20298:196;;;;:::o;13895:409::-;13985:1;13971:16;;:2;:16;;;;13963:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;14040:16;14048:7;14040;:16::i;:::-;14039:17;14031:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14098:45;14127:1;14131:2;14135:7;14098:20;:45::i;:::-;14169:1;14152:9;:13;14162:2;14152:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;14196:2;14177:7;:16;14185:7;14177:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;14237:7;14233:2;14212:33;;14229:1;14212:33;;;;;;;;;;;;14254:44;14282:1;14286:2;14290:7;14254:19;:44::i;:::-;13895:409;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;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:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:340::-;3125:5;3174:3;3167:4;3159:6;3155:17;3151:27;3141:122;;3182:79;;:::i;:::-;3141:122;3299:6;3286:20;3324:79;3399:3;3391:6;3384:4;3376:6;3372:17;3324:79;:::i;:::-;3315:88;;3131:278;3069:340;;;;:::o;3415:139::-;3461:5;3499:6;3486:20;3477:29;;3515:33;3542:5;3515:33;:::i;:::-;3415:139;;;;:::o;3560:143::-;3617:5;3648:6;3642:13;3633:22;;3664:33;3691:5;3664:33;:::i;:::-;3560:143;;;;:::o;3709:137::-;3754:5;3792:6;3779:20;3770:29;;3808:32;3834:5;3808:32;:::i;:::-;3709:137;;;;:::o;3852:329::-;3911:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:119;;;3966:79;;:::i;:::-;3928:119;4086:1;4111:53;4156:7;4147:6;4136:9;4132:22;4111:53;:::i;:::-;4101:63;;4057:117;3852:329;;;;:::o;4187:474::-;4255:6;4263;4312:2;4300:9;4291:7;4287:23;4283:32;4280:119;;;4318:79;;:::i;:::-;4280:119;4438:1;4463:53;4508:7;4499:6;4488:9;4484:22;4463:53;:::i;:::-;4453:63;;4409:117;4565:2;4591:53;4636:7;4627:6;4616:9;4612:22;4591:53;:::i;:::-;4581:63;;4536:118;4187:474;;;;;:::o;4667:619::-;4744:6;4752;4760;4809:2;4797:9;4788:7;4784:23;4780:32;4777:119;;;4815:79;;:::i;:::-;4777:119;4935:1;4960:53;5005:7;4996:6;4985:9;4981:22;4960:53;:::i;:::-;4950:63;;4906:117;5062:2;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5033:118;5190:2;5216:53;5261:7;5252:6;5241:9;5237:22;5216:53;:::i;:::-;5206:63;;5161:118;4667:619;;;;;:::o;5292:943::-;5387:6;5395;5403;5411;5460:3;5448:9;5439:7;5435:23;5431:33;5428:120;;;5467:79;;:::i;:::-;5428:120;5587:1;5612:53;5657:7;5648:6;5637:9;5633:22;5612:53;:::i;:::-;5602:63;;5558:117;5714:2;5740:53;5785:7;5776:6;5765:9;5761:22;5740:53;:::i;:::-;5730:63;;5685:118;5842:2;5868:53;5913:7;5904:6;5893:9;5889:22;5868:53;:::i;:::-;5858:63;;5813:118;5998:2;5987:9;5983:18;5970:32;6029:18;6021:6;6018:30;6015:117;;;6051:79;;:::i;:::-;6015:117;6156:62;6210:7;6201:6;6190:9;6186:22;6156:62;:::i;:::-;6146:72;;5941:287;5292:943;;;;;;;:::o;6241:684::-;6334:6;6342;6391:2;6379:9;6370:7;6366:23;6362:32;6359:119;;;6397:79;;:::i;:::-;6359:119;6517:1;6542:53;6587:7;6578:6;6567:9;6563:22;6542:53;:::i;:::-;6532:63;;6488:117;6672:2;6661:9;6657:18;6644:32;6703:18;6695:6;6692:30;6689:117;;;6725:79;;:::i;:::-;6689:117;6830:78;6900:7;6891:6;6880:9;6876:22;6830:78;:::i;:::-;6820:88;;6615:303;6241:684;;;;;:::o;6931:468::-;6996:6;7004;7053:2;7041:9;7032:7;7028:23;7024:32;7021:119;;;7059:79;;:::i;:::-;7021:119;7179:1;7204:53;7249:7;7240:6;7229:9;7225:22;7204:53;:::i;:::-;7194:63;;7150:117;7306:2;7332:50;7374:7;7365:6;7354:9;7350:22;7332:50;:::i;:::-;7322:60;;7277:115;6931:468;;;;;:::o;7405:474::-;7473:6;7481;7530:2;7518:9;7509:7;7505:23;7501:32;7498:119;;;7536:79;;:::i;:::-;7498:119;7656:1;7681:53;7726:7;7717:6;7706:9;7702:22;7681:53;:::i;:::-;7671:63;;7627:117;7783:2;7809:53;7854:7;7845:6;7834:9;7830:22;7809:53;:::i;:::-;7799:63;;7754:118;7405:474;;;;;:::o;7885:829::-;7987:6;7995;8003;8052:2;8040:9;8031:7;8027:23;8023:32;8020:119;;;8058:79;;:::i;:::-;8020:119;8206:1;8195:9;8191:17;8178:31;8236:18;8228:6;8225:30;8222:117;;;8258:79;;:::i;:::-;8222:117;8363:78;8433:7;8424:6;8413:9;8409:22;8363:78;:::i;:::-;8353:88;;8149:302;8490:2;8516:53;8561:7;8552:6;8541:9;8537:22;8516:53;:::i;:::-;8506:63;;8461:118;8618:2;8644:53;8689:7;8680:6;8669:9;8665:22;8644:53;:::i;:::-;8634:63;;8589:118;7885:829;;;;;:::o;8720:329::-;8779:6;8828:2;8816:9;8807:7;8803:23;8799:32;8796:119;;;8834:79;;:::i;:::-;8796:119;8954:1;8979:53;9024:7;9015:6;9004:9;9000:22;8979:53;:::i;:::-;8969:63;;8925:117;8720:329;;;;:::o;9055:327::-;9113:6;9162:2;9150:9;9141:7;9137:23;9133:32;9130:119;;;9168:79;;:::i;:::-;9130:119;9288:1;9313:52;9357:7;9348:6;9337:9;9333:22;9313:52;:::i;:::-;9303:62;;9259:116;9055:327;;;;:::o;9388:349::-;9457:6;9506:2;9494:9;9485:7;9481:23;9477:32;9474:119;;;9512:79;;:::i;:::-;9474:119;9632:1;9657:63;9712:7;9703:6;9692:9;9688:22;9657:63;:::i;:::-;9647:73;;9603:127;9388:349;;;;:::o;9743:509::-;9812:6;9861:2;9849:9;9840:7;9836:23;9832:32;9829:119;;;9867:79;;:::i;:::-;9829:119;10015:1;10004:9;10000:17;9987:31;10045:18;10037:6;10034:30;10031:117;;;10067:79;;:::i;:::-;10031:117;10172:63;10227:7;10218:6;10207:9;10203:22;10172:63;:::i;:::-;10162:73;;9958:287;9743:509;;;;:::o;10258:329::-;10317:6;10366:2;10354:9;10345:7;10341:23;10337:32;10334:119;;;10372:79;;:::i;:::-;10334:119;10492:1;10517:53;10562:7;10553:6;10542:9;10538:22;10517:53;:::i;:::-;10507:63;;10463:117;10258:329;;;;:::o;10593:351::-;10663:6;10712:2;10700:9;10691:7;10687:23;10683:32;10680:119;;;10718:79;;:::i;:::-;10680:119;10838:1;10863:64;10919:7;10910:6;10899:9;10895:22;10863:64;:::i;:::-;10853:74;;10809:128;10593:351;;;;:::o;10950:684::-;11043:6;11051;11100:2;11088:9;11079:7;11075:23;11071:32;11068:119;;;11106:79;;:::i;:::-;11068:119;11226:1;11251:53;11296:7;11287:6;11276:9;11272:22;11251:53;:::i;:::-;11241:63;;11197:117;11381:2;11370:9;11366:18;11353:32;11412:18;11404:6;11401:30;11398:117;;;11434:79;;:::i;:::-;11398:117;11539:78;11609:7;11600:6;11589:9;11585:22;11539:78;:::i;:::-;11529:88;;11324:303;10950:684;;;;;:::o;11640:470::-;11706:6;11714;11763:2;11751:9;11742:7;11738:23;11734:32;11731:119;;;11769:79;;:::i;:::-;11731:119;11889:1;11914:52;11958:7;11949:6;11938:9;11934:22;11914:52;:::i;:::-;11904:62;;11860:116;12015:2;12041:52;12085:7;12076:6;12065:9;12061:22;12041:52;:::i;:::-;12031:62;;11986:117;11640:470;;;;;:::o;12116:118::-;12203:24;12221:5;12203:24;:::i;:::-;12198:3;12191:37;12116:118;;:::o;12240:157::-;12345:45;12365:24;12383:5;12365:24;:::i;:::-;12345:45;:::i;:::-;12340:3;12333:58;12240:157;;:::o;12403:109::-;12484:21;12499:5;12484:21;:::i;:::-;12479:3;12472:34;12403:109;;:::o;12518:360::-;12604:3;12632:38;12664:5;12632:38;:::i;:::-;12686:70;12749:6;12744:3;12686:70;:::i;:::-;12679:77;;12765:52;12810:6;12805:3;12798:4;12791:5;12787:16;12765:52;:::i;:::-;12842:29;12864:6;12842:29;:::i;:::-;12837:3;12833:39;12826:46;;12608:270;12518:360;;;;:::o;12884:161::-;12986:52;13032:5;12986:52;:::i;:::-;12981:3;12974:65;12884:161;;:::o;13051:364::-;13139:3;13167:39;13200:5;13167:39;:::i;:::-;13222:71;13286:6;13281:3;13222:71;:::i;:::-;13215:78;;13302:52;13347:6;13342:3;13335:4;13328:5;13324:16;13302:52;:::i;:::-;13379:29;13401:6;13379:29;:::i;:::-;13374:3;13370:39;13363:46;;13143:272;13051:364;;;;:::o;13421:377::-;13527:3;13555:39;13588:5;13555:39;:::i;:::-;13610:89;13692:6;13687:3;13610:89;:::i;:::-;13603:96;;13708:52;13753:6;13748:3;13741:4;13734:5;13730:16;13708:52;:::i;:::-;13785:6;13780:3;13776:16;13769:23;;13531:267;13421:377;;;;:::o;13804:366::-;13946:3;13967:67;14031:2;14026:3;13967:67;:::i;:::-;13960:74;;14043:93;14132:3;14043:93;:::i;:::-;14161:2;14156:3;14152:12;14145:19;;13804:366;;;:::o;14176:::-;14318:3;14339:67;14403:2;14398:3;14339:67;:::i;:::-;14332:74;;14415:93;14504:3;14415:93;:::i;:::-;14533:2;14528:3;14524:12;14517:19;;14176:366;;;:::o;14548:::-;14690:3;14711:67;14775:2;14770:3;14711:67;:::i;:::-;14704:74;;14787:93;14876:3;14787:93;:::i;:::-;14905:2;14900:3;14896:12;14889:19;;14548:366;;;:::o;14920:::-;15062:3;15083:67;15147:2;15142:3;15083:67;:::i;:::-;15076:74;;15159:93;15248:3;15159:93;:::i;:::-;15277:2;15272:3;15268:12;15261:19;;14920:366;;;:::o;15292:::-;15434:3;15455:67;15519:2;15514:3;15455:67;:::i;:::-;15448:74;;15531:93;15620:3;15531:93;:::i;:::-;15649:2;15644:3;15640:12;15633:19;;15292:366;;;:::o;15664:::-;15806:3;15827:67;15891:2;15886:3;15827:67;:::i;:::-;15820:74;;15903:93;15992:3;15903:93;:::i;:::-;16021:2;16016:3;16012:12;16005:19;;15664:366;;;:::o;16036:::-;16178:3;16199:67;16263:2;16258:3;16199:67;:::i;:::-;16192:74;;16275:93;16364:3;16275:93;:::i;:::-;16393:2;16388:3;16384:12;16377:19;;16036:366;;;:::o;16408:::-;16550:3;16571:67;16635:2;16630:3;16571:67;:::i;:::-;16564:74;;16647:93;16736:3;16647:93;:::i;:::-;16765:2;16760:3;16756:12;16749:19;;16408:366;;;:::o;16780:::-;16922:3;16943:67;17007:2;17002:3;16943:67;:::i;:::-;16936:74;;17019:93;17108:3;17019:93;:::i;:::-;17137:2;17132:3;17128:12;17121:19;;16780:366;;;:::o;17152:::-;17294:3;17315:67;17379:2;17374:3;17315:67;:::i;:::-;17308:74;;17391:93;17480:3;17391:93;:::i;:::-;17509:2;17504:3;17500:12;17493:19;;17152:366;;;:::o;17524:::-;17666:3;17687:67;17751:2;17746:3;17687:67;:::i;:::-;17680:74;;17763:93;17852:3;17763:93;:::i;:::-;17881:2;17876:3;17872:12;17865:19;;17524:366;;;:::o;17896:::-;18038:3;18059:67;18123:2;18118:3;18059:67;:::i;:::-;18052:74;;18135:93;18224:3;18135:93;:::i;:::-;18253:2;18248:3;18244:12;18237:19;;17896:366;;;:::o;18268:::-;18410:3;18431:67;18495:2;18490:3;18431:67;:::i;:::-;18424:74;;18507:93;18596:3;18507:93;:::i;:::-;18625:2;18620:3;18616:12;18609:19;;18268:366;;;:::o;18640:::-;18782:3;18803:67;18867:2;18862:3;18803:67;:::i;:::-;18796:74;;18879:93;18968:3;18879:93;:::i;:::-;18997:2;18992:3;18988:12;18981:19;;18640:366;;;:::o;19012:::-;19154:3;19175:67;19239:2;19234:3;19175:67;:::i;:::-;19168:74;;19251:93;19340:3;19251:93;:::i;:::-;19369:2;19364:3;19360:12;19353:19;;19012:366;;;:::o;19384:400::-;19544:3;19565:84;19647:1;19642:3;19565:84;:::i;:::-;19558:91;;19658:93;19747:3;19658:93;:::i;:::-;19776:1;19771:3;19767:11;19760:18;;19384:400;;;:::o;19790:366::-;19932:3;19953:67;20017:2;20012:3;19953:67;:::i;:::-;19946:74;;20029:93;20118:3;20029:93;:::i;:::-;20147:2;20142:3;20138:12;20131:19;;19790:366;;;:::o;20162:::-;20304:3;20325:67;20389:2;20384:3;20325:67;:::i;:::-;20318:74;;20401:93;20490:3;20401:93;:::i;:::-;20519:2;20514:3;20510:12;20503:19;;20162:366;;;:::o;20534:::-;20676:3;20697:67;20761:2;20756:3;20697:67;:::i;:::-;20690:74;;20773:93;20862:3;20773:93;:::i;:::-;20891:2;20886:3;20882:12;20875:19;;20534:366;;;:::o;20906:::-;21048:3;21069:67;21133:2;21128:3;21069:67;:::i;:::-;21062:74;;21145:93;21234:3;21145:93;:::i;:::-;21263:2;21258:3;21254:12;21247:19;;20906:366;;;:::o;21278:::-;21420:3;21441:67;21505:2;21500:3;21441:67;:::i;:::-;21434:74;;21517:93;21606:3;21517:93;:::i;:::-;21635:2;21630:3;21626:12;21619:19;;21278:366;;;:::o;21650:::-;21792:3;21813:67;21877:2;21872:3;21813:67;:::i;:::-;21806:74;;21889:93;21978:3;21889:93;:::i;:::-;22007:2;22002:3;21998:12;21991:19;;21650:366;;;:::o;22022:118::-;22109:24;22127:5;22109:24;:::i;:::-;22104:3;22097:37;22022:118;;:::o;22146:115::-;22231:23;22248:5;22231:23;:::i;:::-;22226:3;22219:36;22146:115;;:::o;22267:112::-;22350:22;22366:5;22350:22;:::i;:::-;22345:3;22338:35;22267:112;;:::o;22385:256::-;22497:3;22512:75;22583:3;22574:6;22512:75;:::i;:::-;22612:2;22607:3;22603:12;22596:19;;22632:3;22625:10;;22385:256;;;;:::o;22647:701::-;22928:3;22950:95;23041:3;23032:6;22950:95;:::i;:::-;22943:102;;23062:95;23153:3;23144:6;23062:95;:::i;:::-;23055:102;;23174:148;23318:3;23174:148;:::i;:::-;23167:155;;23339:3;23332:10;;22647:701;;;;;:::o;23354:222::-;23447:4;23485:2;23474:9;23470:18;23462:26;;23498:71;23566:1;23555:9;23551:17;23542:6;23498:71;:::i;:::-;23354:222;;;;:::o;23582:640::-;23777:4;23815:3;23804:9;23800:19;23792:27;;23829:71;23897:1;23886:9;23882:17;23873:6;23829:71;:::i;:::-;23910:72;23978:2;23967:9;23963:18;23954:6;23910:72;:::i;:::-;23992;24060:2;24049:9;24045:18;24036:6;23992:72;:::i;:::-;24111:9;24105:4;24101:20;24096:2;24085:9;24081:18;24074:48;24139:76;24210:4;24201:6;24139:76;:::i;:::-;24131:84;;23582:640;;;;;;;:::o;24228:210::-;24315:4;24353:2;24342:9;24338:18;24330:26;;24366:65;24428:1;24417:9;24413:17;24404:6;24366:65;:::i;:::-;24228:210;;;;:::o;24444:252::-;24552:4;24590:2;24579:9;24575:18;24567:26;;24603:86;24686:1;24675:9;24671:17;24662:6;24603:86;:::i;:::-;24444:252;;;;:::o;24702:313::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:78;25003:4;24994:6;24930:78;:::i;:::-;24922:86;;24702:313;;;;:::o;25021:419::-;25187:4;25225:2;25214:9;25210:18;25202:26;;25274:9;25268:4;25264:20;25260:1;25249:9;25245:17;25238:47;25302:131;25428:4;25302:131;:::i;:::-;25294:139;;25021:419;;;:::o;25446:::-;25612:4;25650:2;25639:9;25635:18;25627:26;;25699:9;25693:4;25689:20;25685:1;25674:9;25670:17;25663:47;25727:131;25853:4;25727:131;:::i;:::-;25719:139;;25446:419;;;:::o;25871:::-;26037:4;26075:2;26064:9;26060:18;26052:26;;26124:9;26118:4;26114:20;26110:1;26099:9;26095:17;26088:47;26152:131;26278:4;26152:131;:::i;:::-;26144:139;;25871:419;;;:::o;26296:::-;26462:4;26500:2;26489:9;26485:18;26477:26;;26549:9;26543:4;26539:20;26535:1;26524:9;26520:17;26513:47;26577:131;26703:4;26577:131;:::i;:::-;26569:139;;26296:419;;;:::o;26721:::-;26887:4;26925:2;26914:9;26910:18;26902:26;;26974:9;26968:4;26964:20;26960:1;26949:9;26945:17;26938:47;27002:131;27128:4;27002:131;:::i;:::-;26994:139;;26721:419;;;:::o;27146:::-;27312:4;27350:2;27339:9;27335:18;27327:26;;27399:9;27393:4;27389:20;27385:1;27374:9;27370:17;27363:47;27427:131;27553:4;27427:131;:::i;:::-;27419:139;;27146:419;;;:::o;27571:::-;27737:4;27775:2;27764:9;27760:18;27752:26;;27824:9;27818:4;27814:20;27810:1;27799:9;27795:17;27788:47;27852:131;27978:4;27852:131;:::i;:::-;27844:139;;27571:419;;;:::o;27996:::-;28162:4;28200:2;28189:9;28185:18;28177:26;;28249:9;28243:4;28239:20;28235:1;28224:9;28220:17;28213:47;28277:131;28403:4;28277:131;:::i;:::-;28269:139;;27996:419;;;:::o;28421:::-;28587:4;28625:2;28614:9;28610:18;28602:26;;28674:9;28668:4;28664:20;28660:1;28649:9;28645:17;28638:47;28702:131;28828:4;28702:131;:::i;:::-;28694:139;;28421:419;;;:::o;28846:::-;29012:4;29050:2;29039:9;29035:18;29027:26;;29099:9;29093:4;29089:20;29085:1;29074:9;29070:17;29063:47;29127:131;29253:4;29127:131;:::i;:::-;29119:139;;28846:419;;;:::o;29271:::-;29437:4;29475:2;29464:9;29460:18;29452:26;;29524:9;29518:4;29514:20;29510:1;29499:9;29495:17;29488:47;29552:131;29678:4;29552:131;:::i;:::-;29544:139;;29271:419;;;:::o;29696:::-;29862:4;29900:2;29889:9;29885:18;29877:26;;29949:9;29943:4;29939:20;29935:1;29924:9;29920:17;29913:47;29977:131;30103:4;29977:131;:::i;:::-;29969:139;;29696:419;;;:::o;30121:::-;30287:4;30325:2;30314:9;30310:18;30302:26;;30374:9;30368:4;30364:20;30360:1;30349:9;30345:17;30338:47;30402:131;30528:4;30402:131;:::i;:::-;30394:139;;30121:419;;;:::o;30546:::-;30712:4;30750:2;30739:9;30735:18;30727:26;;30799:9;30793:4;30789:20;30785:1;30774:9;30770:17;30763:47;30827:131;30953:4;30827:131;:::i;:::-;30819:139;;30546:419;;;:::o;30971:::-;31137:4;31175:2;31164:9;31160:18;31152:26;;31224:9;31218:4;31214:20;31210:1;31199:9;31195:17;31188:47;31252:131;31378:4;31252:131;:::i;:::-;31244:139;;30971:419;;;:::o;31396:::-;31562:4;31600:2;31589:9;31585:18;31577:26;;31649:9;31643:4;31639:20;31635:1;31624:9;31620:17;31613:47;31677:131;31803:4;31677:131;:::i;:::-;31669:139;;31396:419;;;:::o;31821:::-;31987:4;32025:2;32014:9;32010:18;32002:26;;32074:9;32068:4;32064:20;32060:1;32049:9;32045:17;32038:47;32102:131;32228:4;32102:131;:::i;:::-;32094:139;;31821:419;;;:::o;32246:::-;32412:4;32450:2;32439:9;32435:18;32427:26;;32499:9;32493:4;32489:20;32485:1;32474:9;32470:17;32463:47;32527:131;32653:4;32527:131;:::i;:::-;32519:139;;32246:419;;;:::o;32671:::-;32837:4;32875:2;32864:9;32860:18;32852:26;;32924:9;32918:4;32914:20;32910:1;32899:9;32895:17;32888:47;32952:131;33078:4;32952:131;:::i;:::-;32944:139;;32671:419;;;:::o;33096:::-;33262:4;33300:2;33289:9;33285:18;33277:26;;33349:9;33343:4;33339:20;33335:1;33324:9;33320:17;33313:47;33377:131;33503:4;33377:131;:::i;:::-;33369:139;;33096:419;;;:::o;33521:::-;33687:4;33725:2;33714:9;33710:18;33702:26;;33774:9;33768:4;33764:20;33760:1;33749:9;33745:17;33738:47;33802:131;33928:4;33802:131;:::i;:::-;33794:139;;33521:419;;;:::o;33946:222::-;34039:4;34077:2;34066:9;34062:18;34054:26;;34090:71;34158:1;34147:9;34143:17;34134:6;34090:71;:::i;:::-;33946:222;;;;:::o;34174:218::-;34265:4;34303:2;34292:9;34288:18;34280:26;;34316:69;34382:1;34371:9;34367:17;34358:6;34316:69;:::i;:::-;34174:218;;;;:::o;34398:214::-;34487:4;34525:2;34514:9;34510:18;34502:26;;34538:67;34602:1;34591:9;34587:17;34578:6;34538:67;:::i;:::-;34398:214;;;;:::o;34618:129::-;34652:6;34679:20;;:::i;:::-;34669:30;;34708:33;34736:4;34728:6;34708:33;:::i;:::-;34618:129;;;:::o;34753:75::-;34786:6;34819:2;34813:9;34803:19;;34753:75;:::o;34834:311::-;34911:4;35001:18;34993:6;34990:30;34987:56;;;35023:18;;:::i;:::-;34987:56;35073:4;35065:6;35061:17;35053:25;;35133:4;35127;35123:15;35115:23;;34834:311;;;:::o;35151:307::-;35212:4;35302:18;35294:6;35291:30;35288:56;;;35324:18;;:::i;:::-;35288:56;35362:29;35384:6;35362:29;:::i;:::-;35354:37;;35446:4;35440;35436:15;35428:23;;35151:307;;;:::o;35464:308::-;35526:4;35616:18;35608:6;35605:30;35602:56;;;35638:18;;:::i;:::-;35602:56;35676:29;35698:6;35676:29;:::i;:::-;35668:37;;35760:4;35754;35750:15;35742:23;;35464:308;;;:::o;35778:98::-;35829:6;35863:5;35857:12;35847:22;;35778:98;;;:::o;35882:99::-;35934:6;35968:5;35962:12;35952:22;;35882:99;;;:::o;35987:168::-;36070:11;36104:6;36099:3;36092:19;36144:4;36139:3;36135:14;36120:29;;35987:168;;;;:::o;36161:169::-;36245:11;36279:6;36274:3;36267:19;36319:4;36314:3;36310:14;36295:29;;36161:169;;;;:::o;36336:148::-;36438:11;36475:3;36460:18;;36336:148;;;;:::o;36490:305::-;36530:3;36549:20;36567:1;36549:20;:::i;:::-;36544:25;;36583:20;36601:1;36583:20;:::i;:::-;36578:25;;36737:1;36669:66;36665:74;36662:1;36659:81;36656:107;;;36743:18;;:::i;:::-;36656:107;36787:1;36784;36780:9;36773:16;;36490:305;;;;:::o;36801:185::-;36841:1;36858:20;36876:1;36858:20;:::i;:::-;36853:25;;36892:20;36910:1;36892:20;:::i;:::-;36887:25;;36931:1;36921:35;;36936:18;;:::i;:::-;36921:35;36978:1;36975;36971:9;36966:14;;36801:185;;;;:::o;36992:191::-;37032:4;37052:20;37070:1;37052:20;:::i;:::-;37047:25;;37086:20;37104:1;37086:20;:::i;:::-;37081:25;;37125:1;37122;37119:8;37116:34;;;37130:18;;:::i;:::-;37116:34;37175:1;37172;37168:9;37160:17;;36992:191;;;;:::o;37189:96::-;37226:7;37255:24;37273:5;37255:24;:::i;:::-;37244:35;;37189:96;;;:::o;37291:90::-;37325:7;37368:5;37361:13;37354:21;37343:32;;37291:90;;;:::o;37387:77::-;37424:7;37453:5;37442:16;;37387:77;;;:::o;37470:149::-;37506:7;37546:66;37539:5;37535:78;37524:89;;37470:149;;;:::o;37625:126::-;37662:7;37702:42;37695:5;37691:54;37680:65;;37625:126;;;:::o;37757:77::-;37794:7;37823:5;37812:16;;37757:77;;;:::o;37840:95::-;37876:7;37916:12;37909:5;37905:24;37894:35;;37840:95;;;:::o;37941:86::-;37976:7;38016:4;38009:5;38005:16;37994:27;;37941:86;;;:::o;38033:141::-;38098:9;38131:37;38162:5;38131:37;:::i;:::-;38118:50;;38033:141;;;:::o;38180:126::-;38230:9;38263:37;38294:5;38263:37;:::i;:::-;38250:50;;38180:126;;;:::o;38312:113::-;38362:9;38395:24;38413:5;38395:24;:::i;:::-;38382:37;;38312:113;;;:::o;38431:154::-;38515:6;38510:3;38505;38492:30;38577:1;38568:6;38563:3;38559:16;38552:27;38431:154;;;:::o;38591:307::-;38659:1;38669:113;38683:6;38680:1;38677:13;38669:113;;;38768:1;38763:3;38759:11;38753:18;38749:1;38744:3;38740:11;38733:39;38705:2;38702:1;38698:10;38693:15;;38669:113;;;38800:6;38797:1;38794:13;38791:101;;;38880:1;38871:6;38866:3;38862:16;38855:27;38791:101;38640:258;38591:307;;;:::o;38904:320::-;38948:6;38985:1;38979:4;38975:12;38965:22;;39032:1;39026:4;39022:12;39053:18;39043:81;;39109:4;39101:6;39097:17;39087:27;;39043:81;39171:2;39163:6;39160:14;39140:18;39137:38;39134:84;;;39190:18;;:::i;:::-;39134:84;38955:269;38904:320;;;:::o;39230:281::-;39313:27;39335:4;39313:27;:::i;:::-;39305:6;39301:40;39443:6;39431:10;39428:22;39407:18;39395:10;39392:34;39389:62;39386:88;;;39454:18;;:::i;:::-;39386:88;39494:10;39490:2;39483:22;39273:238;39230:281;;:::o;39517:233::-;39556:3;39579:24;39597:5;39579:24;:::i;:::-;39570:33;;39625:66;39618:5;39615:77;39612:103;;;39695:18;;:::i;:::-;39612:103;39742:1;39735:5;39731:13;39724:20;;39517:233;;;:::o;39756:100::-;39795:7;39824:26;39844:5;39824:26;:::i;:::-;39813:37;;39756:100;;;:::o;39862:94::-;39901:7;39930:20;39944:5;39930:20;:::i;:::-;39919:31;;39862:94;;;:::o;39962:176::-;39994:1;40011:20;40029:1;40011:20;:::i;:::-;40006:25;;40045:20;40063:1;40045:20;:::i;:::-;40040:25;;40084:1;40074:35;;40089:18;;:::i;:::-;40074:35;40130:1;40127;40123:9;40118:14;;39962:176;;;;:::o;40144:180::-;40192:77;40189:1;40182:88;40289:4;40286:1;40279:15;40313:4;40310:1;40303:15;40330:180;40378:77;40375:1;40368:88;40475:4;40472:1;40465:15;40499:4;40496:1;40489:15;40516:180;40564:77;40561:1;40554:88;40661:4;40658:1;40651:15;40685:4;40682:1;40675:15;40702:180;40750:77;40747:1;40740:88;40847:4;40844:1;40837:15;40871:4;40868:1;40861:15;40888:180;40936:77;40933:1;40926:88;41033:4;41030:1;41023:15;41057:4;41054:1;41047:15;41074:117;41183:1;41180;41173:12;41197:117;41306:1;41303;41296:12;41320:117;41429:1;41426;41419:12;41443:117;41552:1;41549;41542:12;41566:117;41675:1;41672;41665:12;41689:102;41730:6;41781:2;41777:7;41772:2;41765:5;41761:14;41757:28;41747:38;;41689:102;;;:::o;41797:94::-;41830:8;41878:5;41874:2;41870:14;41849:35;;41797:94;;;:::o;41897:172::-;42037:24;42033:1;42025:6;42021:14;42014:48;41897:172;:::o;42075:173::-;42215:25;42211:1;42203:6;42199:14;42192:49;42075:173;:::o;42254:237::-;42394:34;42390:1;42382:6;42378:14;42371:58;42463:20;42458:2;42450:6;42446:15;42439:45;42254:237;:::o;42497:225::-;42637:34;42633:1;42625:6;42621:14;42614:58;42706:8;42701:2;42693:6;42689:15;42682:33;42497:225;:::o;42728:224::-;42868:34;42864:1;42856:6;42852:14;42845:58;42937:7;42932:2;42924:6;42920:15;42913:32;42728:224;:::o;42958:178::-;43098:30;43094:1;43086:6;43082:14;43075:54;42958:178;:::o;43142:164::-;43282:16;43278:1;43270:6;43266:14;43259:40;43142:164;:::o;43312:::-;43452:16;43448:1;43440:6;43436:14;43429:40;43312:164;:::o;43482:223::-;43622:34;43618:1;43610:6;43606:14;43599:58;43691:6;43686:2;43678:6;43674:15;43667:31;43482:223;:::o;43711:175::-;43851:27;43847:1;43839:6;43835:14;43828:51;43711:175;:::o;43892:228::-;44032:34;44028:1;44020:6;44016:14;44009:58;44101:11;44096:2;44088:6;44084:15;44077:36;43892:228;:::o;44126:166::-;44266:18;44262:1;44254:6;44250:14;44243:42;44126:166;:::o;44298:176::-;44438:28;44434:1;44426:6;44422:14;44415:52;44298:176;:::o;44480:249::-;44620:34;44616:1;44608:6;44604:14;44597:58;44689:32;44684:2;44676:6;44672:15;44665:57;44480:249;:::o;44735:182::-;44875:34;44871:1;44863:6;44859:14;44852:58;44735:182;:::o;44923:155::-;45063:7;45059:1;45051:6;45047:14;45040:31;44923:155;:::o;45084:182::-;45224:34;45220:1;45212:6;45208:14;45201:58;45084:182;:::o;45272:174::-;45412:26;45408:1;45400:6;45396:14;45389:50;45272:174;:::o;45452:220::-;45592:34;45588:1;45580:6;45576:14;45569:58;45661:3;45656:2;45648:6;45644:15;45637:28;45452:220;:::o;45678:179::-;45818:31;45814:1;45806:6;45802:14;45795:55;45678:179;:::o;45863:164::-;46003:16;45999:1;45991:6;45987:14;45980:40;45863:164;:::o;46033:233::-;46173:34;46169:1;46161:6;46157:14;46150:58;46242:16;46237:2;46229:6;46225:15;46218:41;46033:233;:::o;46272:122::-;46345:24;46363:5;46345:24;:::i;:::-;46338:5;46335:35;46325:63;;46384:1;46381;46374:12;46325:63;46272:122;:::o;46400:116::-;46470:21;46485:5;46470:21;:::i;:::-;46463:5;46460:32;46450:60;;46506:1;46503;46496:12;46450:60;46400:116;:::o;46522:122::-;46595:24;46613:5;46595:24;:::i;:::-;46588:5;46585:35;46575:63;;46634:1;46631;46624:12;46575:63;46522:122;:::o;46650:120::-;46722:23;46739:5;46722:23;:::i;:::-;46715:5;46712:34;46702:62;;46760:1;46757;46750:12;46702:62;46650:120;:::o;46776:122::-;46849:24;46867:5;46849:24;:::i;:::-;46842:5;46839:35;46829:63;;46888:1;46885;46878:12;46829:63;46776:122;:::o;46904:120::-;46976:23;46993:5;46976:23;:::i;:::-;46969:5;46966:34;46956:62;;47014:1;47011;47004:12;46956:62;46904:120;:::o

Swarm Source

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