ETH Price: $3,516.28 (+0.85%)
Gas: 2 Gwei

Token

Shizuk Origin (SZK)
 

Overview

Max Total Supply

1,134 SZK

Holders

449

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
whitecrow105.eth
Balance
3 SZK
0x25699fd4882257697a36284b5b39c1fc3ffd4212
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:
Shizuk

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-17
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// Interfaces
interface IERC165 {
  function supportsInterface(bytes4 _interfaceId) external view returns (bool);
}

interface IERC721 {
  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) external payable;
  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata _data) external payable;
  function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
  function approve(address _to, uint256 _tokenId) external payable;
  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 IERC721Metadata {
  function name() external view returns (string memory);
  function symbol() external view returns (string memory);
  function tokenURI(uint256 _tokenId) external view returns (string memory);
}

interface IERC721Receiver {
  function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);
}

library LibPart {
  bytes32 public constant TYPE_HASH = keccak256("Part(address account,uint96 value)");
  struct Part {
    address payable account;
    uint256 value;
  }
  function hash(Part memory part) internal pure returns (bytes32) {
    return keccak256(abi.encode(TYPE_HASH, part.account, part.value));
  }
}

// Abstract Contracts
abstract contract Ownable {
  address public owner;

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

  constructor() {
    owner = msg.sender;
  }

  modifier onlyOwner() {
    require(owner == msg.sender, "Ownable: caller is not the owner");
    _;
  }

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

abstract contract Mintable {
  mapping (address => bool) public minters;

  constructor() {
    minters[msg.sender] = true;
  }

  modifier onlyMinter() {
    require(minters[msg.sender], "Mintable: caller is not the minter");
    _;
  }

  function setMinter(address _minter) public virtual onlyMinter {
    require(_minter != address(0), "Mintable: new minter is the zero address");
    minters[_minter] = true;
  }

  function removeMinter(address _minter) external onlyMinter returns (bool) {
    require(minters[_minter], "Mintable: _minter is not a minter");
    minters[_minter] = false;
    return true;
  }
}

abstract contract ReentrancyGuard {
  uint256 private constant _NOT_ENTERED = 1;
  uint256 private constant _ENTERED = 2;

  uint256 private _status;

  constructor() {
    _status = _NOT_ENTERED;
  }

  modifier nonReentrant() {
    require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
    _status = _ENTERED;
    _;
    _status = _NOT_ENTERED;
  }
}

// Contract
contract Shizuk is Ownable, Mintable, ReentrancyGuard {
  // ERC721
  mapping(uint256 => address) private _owners;
  mapping(address => uint256) private _balances;
  mapping(uint256 => address) private _tokenApprovals;
  mapping(address => mapping(address => bool)) private _operatorApprovals;

  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);
  event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalities);

  // Constants
  bytes4 private constant _INTERFACE_ID_ROYALTIES = 0xcad96cca; // Rarible
  bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; // ERC2981

  // ERC721Metadata
  string public name = 'Shizuk Origin';
  string public symbol = 'SZK';

  // ERC721Enumerable
  mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
  mapping(uint256 => uint256) private _ownedTokensIndex;
  uint256[] private _allTokens;
  mapping(uint256 => uint256) private _allTokensIndex;

  // Rarible
  mapping (uint256 => LibPart.Part[]) internal royalties;
  LibPart.Part internal globalRoyalty;

  // Customized
  mapping(uint256 => TokenInfo) public tokenInfo; // tokenId => traitCode
  mapping(bytes12 => uint256) public traitCodeIndex; // traitCode => tokenId

  struct TokenInfo {
    bytes12 traitCode;
    string metadataHash;
    string contentHash;
  }
    
  // Constructor
  constructor() {}

  // ERC165
  function supportsInterface(bytes4 interfaceId) public pure returns (bool) {
    return
      interfaceId == type(IERC165).interfaceId ||
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == _INTERFACE_ID_ROYALTIES ||
      interfaceId == _INTERFACE_ID_ERC2981;
  }

  // Customized (public)
  function mint(
    address _to,
    bytes12 _traitCode,
    string memory _metadataHash,
    string memory _contentHash) external onlyMinter returns (bool) {

    _mint(_to, _traitCode, _metadataHash, _contentHash);

    return true;
  }

  // ERC721 (public)
  function balanceOf(address owner) public view returns (uint256) {
    require(owner != address(0), "ERC721: balance query for the zero address");
    return _balances[owner];
  }

  function ownerOf(uint256 tokenId) public view returns (address) {
    address tokenOwner = _owners[tokenId];
    require(tokenOwner != address(0), "ERC721: owner query for nonexistent token");
    return tokenOwner;
  }

  function approve(address to, uint256 tokenId) public returns (bool) {
    address owner = ownerOf(tokenId);
    require(to != owner, "ERC721: approval to current owner");

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

    _approve(to, tokenId);
    return true;
  }

  function getApproved(uint256 tokenId) public view returns (address) {
    require(_exists(tokenId), "ERC721: approved query for nonexistent token");
    return _tokenApprovals[tokenId];
  }

  function setApprovalForAll(address operator, bool approved) public returns (bool) {
    require(operator != msg.sender, "ERC721: approve to caller");

    _operatorApprovals[msg.sender][operator] = approved;
    emit ApprovalForAll(msg.sender, operator, approved);
    return true;
  }

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

  function transferFrom(address from, address to, uint256 tokenId) public returns (bool) {
    require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");
    _transfer(from, to, tokenId);
    return true;
  }

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

  function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public returns (bool) {
    require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");
    _safeTransfer(from, to, tokenId, _data);
    return true;
  }

  // ERC721 (private)
  function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) private {
    _transfer(from, to, tokenId);
    require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
  }

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

  function _isApprovedOrOwner(address spender, uint256 tokenId) private view returns (bool) {
    require(_exists(tokenId), "ERC721: operator query for nonexistent token");
    address owner = ownerOf(tokenId);
    return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
  }

  function _mint(
    address _to,
    bytes12 _traitCode,
    string memory _metadataHash,
    string memory _contentHash) private {
    
    uint256 tokenId = _allTokens.length + 1;

    require(tokenId > 0, "Shizuk: tokenId should be non-zero");
    require(!_exists(tokenId), "ERC721: token already minted");
    require(_to != address(0), "ERC721: mint to the zero address");

    require(traitCodeIndex[_traitCode] == 0, "Shizuk: same traitCode already minted");

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

    _balances[_to] += 1;
    _owners[tokenId] = _to;
    tokenInfo[tokenId] = TokenInfo(
      _traitCode,
      _metadataHash,
      _contentHash
    );
    traitCodeIndex[_traitCode] = tokenId;

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

  function _transfer(address from, address to, uint256 tokenId) private {
    require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
    require(to != address(0), "ERC721: transfer to the zero address");

    _beforeTokenTransfer(from, to, tokenId);

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

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

    emit Transfer(from, to, tokenId);
  }

  function _approve(address to, uint256 tokenId) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(ownerOf(tokenId), to, tokenId);
  }

  function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) {
    if (isContract(to)) {
      try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  // ERC721Metadata
  function tokenURI(uint256 _tokenId) public view returns (string memory) {
    require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");
    return string(abi.encodePacked('ipfs://', tokenInfo[_tokenId].metadataHash));
  }

  // ERC721Enumerable (public)
  function totalSupply() public view returns (uint256) {
    return _allTokens.length;
  }

  function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
    require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
    return _ownedTokens[owner][index];
  }

  function tokenByIndex(uint256 index) public view returns (uint256) {
    require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
    return _allTokens[index];
  }

  // ERC721Enumerable (private)
  function _beforeTokenTransfer(address from, address to, uint256 tokenId) private {
    if (from == address(0)) {
      _addTokenToAllTokensEnumeration(tokenId);
    } else if (from != to) {
      _removeTokenFromOwnerEnumeration(from, tokenId);
    }
    if (to == address(0)) {
      _removeTokenFromAllTokensEnumeration(tokenId);
    } else if (to != from) {
      _addTokenToOwnerEnumeration(to, tokenId);
    }
  }

  function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
    uint256 length = balanceOf(to);
    _ownedTokens[to][length] = tokenId;
    _ownedTokensIndex[tokenId] = length;
  }

  function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
    _allTokensIndex[tokenId] = _allTokens.length;
    _allTokens.push(tokenId);
  }

  function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
    uint256 lastTokenIndex = balanceOf(from) - 1;
    uint256 tokenIndex = _ownedTokensIndex[tokenId];

    if (tokenIndex != lastTokenIndex) {
       uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

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

    delete _ownedTokensIndex[tokenId];
    delete _ownedTokens[from][lastTokenIndex];
  }

  function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
    uint256 lastTokenIndex = _allTokens.length - 1;
    uint256 tokenIndex = _allTokensIndex[tokenId];

    uint256 lastTokenId = _allTokens[lastTokenIndex];

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

    delete _allTokensIndex[tokenId];
    _allTokens.pop();
  }

  // ERC2981
  function royaltyInfo(uint256 id, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount) {
    if(globalRoyalty.value == 0) {
      if (royalties[id].length == 0) {
        receiver = address(0);
        royaltyAmount = 0;
      } else {
        LibPart.Part[] memory _royalties = royalties[id];
        receiver = _royalties[0].account;
        uint basisPoint;
        for (uint i = 0; i < _royalties.length; i++) {
          basisPoint += _royalties[i].value;
        }
        royaltyAmount = basisPoint * _salePrice / 10000;
      }
    } else {
      receiver = globalRoyalty.account;
      royaltyAmount = globalRoyalty.value * _salePrice / 10000;
    }
  }

  // Rarible
  function _updateAccount(uint256 _id, address _from, address _to) internal {
    uint length = royalties[_id].length;
    for(uint i = 0; i < length; i++) {
      if (royalties[_id][i].account == _from) {
        royalties[_id][i].account = payable(address(uint160(_to)));
      }
    }
  }

  function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory) {
    if(globalRoyalty.value == 0) {
      return royalties[id];
    } else{
      LibPart.Part[] memory _royalties = new LibPart.Part[](1);
      _royalties[0] = globalRoyalty;
      return _royalties;
    }
  }

  function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) internal {
    emit RoyaltiesSet(id, _royalties);
  }

  function setRoyalty(uint256 _tokenId, address payable _royaltiesRecipientAddress, uint96 _percentageBasisPoints) public onlyOwner returns (bool) {
    require(_royaltiesRecipientAddress != address(0), "Recipient should be present");
    require(_percentageBasisPoints != 0, "Royalty value should be positive");
    require(_percentageBasisPoints < 10000, "Royalty total value should be < 10000");

    LibPart.Part[] memory _royalties = new LibPart.Part[](1);
    _royalties[0].account = _royaltiesRecipientAddress;
    _royalties[0].value = _percentageBasisPoints;

    if(royalties[_tokenId].length > 0) {
      royalties[_tokenId][0].account = _royaltiesRecipientAddress;
      royalties[_tokenId][0].value = _percentageBasisPoints;
    } else {
      royalties[_tokenId].push(_royalties[0]);
    }
    _onRoyaltiesSet(_tokenId, _royalties);
    return true;
  }

  function setGlobalRoyalty(address payable _royaltiesRecipientAddress, uint96 _percentageBasisPoints) public onlyOwner returns (bool) {
    globalRoyalty = LibPart.Part(_royaltiesRecipientAddress, _percentageBasisPoints);
    return true;    
  }

  // Utils
  function isContract(address account) private view returns (bool) {
    uint256 size;
    assembly {
      size := extcodesize(account)
    }
    return size > 0;
  }

  function toString(uint256 value) private pure returns (string memory) {
    // Inspired by OraclizeAPI's implementation - MIT licence
    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

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":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"indexed":false,"internalType":"struct LibPart.Part[]","name":"royalities","type":"tuple[]"}],"name":"RoyaltiesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getRaribleV2Royalties","outputs":[{"components":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct LibPart.Part[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes12","name":"_traitCode","type":"bytes12"},{"internalType":"string","name":"_metadataHash","type":"string"},{"internalType":"string","name":"_contentHash","type":"string"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_royaltiesRecipientAddress","type":"address"},{"internalType":"uint96","name":"_percentageBasisPoints","type":"uint96"}],"name":"setGlobalRoyalty","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address payable","name":"_royaltiesRecipientAddress","type":"address"},{"internalType":"uint96","name":"_percentageBasisPoints","type":"uint96"}],"name":"setRoyalty","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenInfo","outputs":[{"internalType":"bytes12","name":"traitCode","type":"bytes12"},{"internalType":"string","name":"metadataHash","type":"string"},{"internalType":"string","name":"contentHash","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes12","name":"","type":"bytes12"}],"name":"traitCodeIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600d60808190526c29b434bd3ab59027b934b3b4b760991b60a0908152620000309160079190620000a1565b5060408051808201909152600380825262535a4b60e81b60209092019182526200005d91600891620000a1565b503480156200006b57600080fd5b50600080546001600160a01b0319163390811782558152600160208190526040909120805460ff19168217905560025562000184565b828054620000af9062000147565b90600052602060002090601f016020900481019282620000d357600085556200011e565b82601f10620000ee57805160ff19168380011785556200011e565b828001600101855582156200011e579182015b828111156200011e57825182559160200191906001019062000101565b506200012c92915062000130565b5090565b5b808211156200012c576000815560010162000131565b600181811c908216806200015c57607f821691505b602082108114156200017e57634e487b7160e01b600052602260045260246000fd5b50919050565b61279780620001946000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063cad96cca11610097578063e985e9c511610071578063e985e9c5146103fe578063f2fde38b14610411578063f46eccc414610424578063fca3b5aa1461044757600080fd5b8063cad96cca146103a9578063cc33c875146103c9578063cdb1311d146103eb57600080fd5b806395d89b41116100d357806395d89b4114610368578063a22cb46514610370578063b88d4fde14610383578063c87b56dd1461039657600080fd5b806370a082311461032f57806380c8d690146103425780638da5cb5b1461035557600080fd5b80632f745c591161016657806342842e0e1161014057806342842e0e146102d45780634f6ccce7146102e95780636352211e146102fc5780637032b1431461030f57600080fd5b80632f745c591461029b5780632fdc9b0e146102ae5780633092afd5146102c157600080fd5b8063095ea7b3116101a2578063095ea7b31461023157806318160ddd1461024457806323b872dd146102565780632a55205a1461026957600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063081812fc14610206575b600080fd5b6101dc6101d7366004612244565b61045a565b60405190151581526020015b60405180910390f35b6101f96104e2565b6040516101e891906124cf565b61021961021436600461227e565b610570565b6040516001600160a01b0390911681526020016101e8565b6101dc61023f3660046121fd565b61060a565b600b545b6040519081526020016101e8565b6101dc61026436600461208e565b610726565b61027c6102773660046122d5565b610759565b604080516001600160a01b0390931683526020830191909152016101e8565b6102486102a93660046121fd565b6108bf565b6101dc6102bc366004612182565b610955565b6101dc6102cf36600461200c565b61099c565b6102e76102e236600461208e565b610a67565b005b6102486102f736600461227e565b610a88565b61021961030a36600461227e565b610b1b565b61024861031d366004612229565b60116020526000908152604090205481565b61024861033d36600461200c565b610b92565b6101dc610350366004612297565b610c19565b600054610219906001600160a01b031681565b6101f9610f18565b6101dc61037e36600461214f565b610f25565b6101dc6103913660046120cf565b610ff1565b6101f96103a436600461227e565b611025565b6103bc6103b736600461227e565b6110dc565b6040516101e89190612485565b6103dc6103d736600461227e565b6111e7565b6040516101e893929190612498565b6101dc6103f9366004612029565b61131f565b6101dc61040c366004612055565b611392565b6102e761041f36600461200c565b6113c0565b6101dc61043236600461200c565b60016020526000908152604090205460ff1681565b6102e761045536600461200c565b611471565b60006001600160e01b031982166301ffc9a760e01b148061048b57506001600160e01b031982166380ac58cd60e01b145b806104a657506001600160e01b03198216635b5e139f60e01b145b806104c157506001600160e01b0319821663656cb66560e11b145b806104dc57506001600160e01b0319821663152a902d60e11b145b92915050565b600780546104ef90612685565b80601f016020809104026020016040519081016040528092919081815260200182805461051b90612685565b80156105685780601f1061053d57610100808354040283529160200191610568565b820191906000526020600020905b81548152906001019060200180831161054b57829003601f168201915b505050505081565b6000818152600360205260408120546001600160a01b03166105ee5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60008061061683610b1b565b9050806001600160a01b0316846001600160a01b031614156106845760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105e5565b336001600160a01b03821614806106a057506106a08133611392565b6107125760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105e5565b61071c848461152e565b5060019392505050565b6000610732338361159c565b61074e5760405162461bcd60e51b81526004016105e5906125ab565b61071c84848461166b565b600f546000908190610889576000848152600d6020526040902054610783575060009050806108b8565b6000848152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156107f7576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016107af565b5050505090508060008151811061081057610810612707565b60209081029190910101515192506000805b82518110156108685782818151811061083d5761083d612707565b602002602001015160200151826108549190612615565b915080610860816126c0565b915050610822565b50612710610876868361264f565b610880919061262d565b925050506108b8565b600e54600f546001600160a01b039091169250612710906108ab90859061264f565b6108b5919061262d565b90505b9250929050565b60006108ca83610b92565b821061092c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105e5565b506001600160a01b03919091166000908152600960209081526040808320938352929052205490565b3360009081526001602052604081205460ff166109845760405162461bcd60e51b81526004016105e590612569565b61099085858585611816565b5060015b949350505050565b3360009081526001602052604081205460ff166109cb5760405162461bcd60e51b81526004016105e590612569565b6001600160a01b03821660009081526001602052604090205460ff16610a3d5760405162461bcd60e51b815260206004820152602160248201527f4d696e7461626c653a205f6d696e746572206973206e6f742061206d696e74656044820152603960f91b60648201526084016105e5565b506001600160a01b0381166000908152600160208190526040909120805460ff191690555b919050565b610a8283838360405180602001604052806000815250610ff1565b50505050565b6000610a93600b5490565b8210610af65760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105e5565b600b8281548110610b0957610b09612707565b90600052602060002001549050919050565b6000818152600360205260408120546001600160a01b0316806104dc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105e5565b60006001600160a01b038216610bfd5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105e5565b506001600160a01b031660009081526004602052604090205490565b600080546001600160a01b03163314610c445760405162461bcd60e51b81526004016105e590612534565b6001600160a01b038316610c9a5760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e74000000000060448201526064016105e5565b6001600160601b038216610cf05760405162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f73697469766560448201526064016105e5565b612710826001600160601b031610610d585760405162461bcd60e51b815260206004820152602560248201527f526f79616c747920746f74616c2076616c75652073686f756c64206265203c20604482015264031303030360dc1b60648201526084016105e5565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610d6f5790505090508381600081518110610dac57610dac612707565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050826001600160601b031681600081518110610ded57610ded612707565b6020908102919091018101518101919091526000868152600d909152604090205415610ea4576000858152600d602052604081208054869290610e3257610e32612707565b6000918252602080832060029290920290910180546001600160a01b0319166001600160a01b039490941693909317909255868152600d9091526040812080546001600160601b0386169290610e8a57610e8a612707565b906000526020600020906002020160010181905550610f0e565b6000858152600d60205260408120825190918391610ec457610ec4612707565b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101555b6109908582611ae9565b600880546104ef90612685565b60006001600160a01b038316331415610f805760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105e5565b3360008181526006602090815260408083206001600160a01b03881680855290835292819020805460ff191687151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350600192915050565b6000610ffd338461159c565b6110195760405162461bcd60e51b81526004016105e5906125ab565b61099085858585611b26565b6000818152600360205260409020546060906001600160a01b03166110a45760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016105e5565b60008281526010602090815260409182902091516110c6926001019101612393565b6040516020818303038152906040529050919050565b600f54606090611162576000828152600d6020908152604080832080548251818502810185019093528083529193909284015b82821015611157576000848152602090819020604080518082019091526002850290910180546001600160a01b0316825260019081015482840152908352909201910161110f565b505050509050919050565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161117957505060408051808201909152600e546001600160a01b03168152600f54602082015281519192509082906000906111d6576111d6612707565b602090810291909101015292915050565b6010602052600090815260409020805460018201805460a09290921b929161120e90612685565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90612685565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b50505050509080600201805461129c90612685565b80601f01602080910402602001604051908101604052809291908181526020018280546112c890612685565b80156113155780601f106112ea57610100808354040283529160200191611315565b820191906000526020600020905b8154815290600101906020018083116112f857829003601f168201915b5050505050905083565b600080546001600160a01b0316331461134a5760405162461bcd60e51b81526004016105e590612534565b50604080518082019091526001600160a01b0383168082526001600160601b0383166020909201829052600e80546001600160a01b0319169091179055600f55600192915050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6000546001600160a01b031633146113ea5760405162461bcd60e51b81526004016105e590612534565b6001600160a01b03811661144f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e5565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602052604090205460ff166114a05760405162461bcd60e51b81526004016105e590612569565b6001600160a01b0381166115075760405162461bcd60e51b815260206004820152602860248201527f4d696e7461626c653a206e6577206d696e74657220697320746865207a65726f604482015267206164647265737360c01b60648201526084016105e5565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061156382610b1b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166116155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105e5565b600061162083610b1b565b9050806001600160a01b0316846001600160a01b0316148061165b5750836001600160a01b031661165084610570565b6001600160a01b0316145b8061099457506109948185611392565b826001600160a01b031661167e82610b1b565b6001600160a01b0316146116e65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105e5565b6001600160a01b0382166117485760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105e5565b611753838383611b59565b61175e60008261152e565b6001600160a01b038316600090815260046020526040812080546001929061178790849061266e565b90915550506001600160a01b03821660009081526004602052604081208054600192906117b5908490612615565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b54600090611827906001612615565b9050600081116118845760405162461bcd60e51b815260206004820152602260248201527f5368697a756b3a20746f6b656e49642073686f756c64206265206e6f6e2d7a65604482015261726f60f01b60648201526084016105e5565b6000818152600360205260409020546001600160a01b0316156118e95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105e5565b6001600160a01b03851661193f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105e5565b6001600160a01b03198416600090815260116020526040902054156119b45760405162461bcd60e51b815260206004820152602560248201527f5368697a756b3a2073616d65207472616974436f646520616c7265616479206d6044820152641a5b9d195960da1b60648201526084016105e5565b6119c060008683611b59565b6001600160a01b03851660009081526004602052604081208054600192906119e9908490612615565b9091555050600081815260036020908152604080832080546001600160a01b03199081166001600160a01b038b1617909155815160608101835290881681528083018781528183018790528585526010845291909320835181546bffffffffffffffffffffffff191660a09190911c178155905180519192611a7392600185019290910190611ea7565b5060408201518051611a8f916002840191602090910190611ea7565b5050506001600160a01b031984166000908152601160205260408082208390555182916001600160a01b038816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050505050565b7f11de1ed290ef7c79f0112213bdb47a9e423f83e4878a1d730a7a48c35065794d8282604051611b1a9291906125fc565b60405180910390a15050565b611b3184848461166b565b611b3d84848484611c16565b610a825760405162461bcd60e51b81526004016105e5906124e2565b6001600160a01b038316611bb457611baf81600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b611bd7565b816001600160a01b0316836001600160a01b031614611bd757611bd78382611d17565b6001600160a01b038216611bf357611bee81611db4565b505050565b826001600160a01b0316826001600160a01b031614611bee57611bee8282611e63565b6000833b15611d0f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c51903390899088908890600401612448565b602060405180830381600087803b158015611c6b57600080fd5b505af1925050508015611c9b575060408051601f3d908101601f19168201909252611c9891810190612261565b60015b611cf5573d808015611cc9576040519150601f19603f3d011682016040523d82523d6000602084013e611cce565b606091505b508051611ced5760405162461bcd60e51b81526004016105e5906124e2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610994565b506001610994565b60006001611d2484610b92565b611d2e919061266e565b6000838152600a6020526040902054909150808214611d81576001600160a01b03841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a602090815260408084208490556001600160a01b039094168352600981528383209183525290812055565b600b54600090611dc69060019061266e565b6000838152600c6020526040812054600b8054939450909284908110611dee57611dee612707565b9060005260206000200154905080600b8381548110611e0f57611e0f612707565b6000918252602080832090910192909255828152600c9091526040808220849055858252812055600b805480611e4757611e476126f1565b6001900381819060005260206000200160009055905550505050565b6000611e6e83610b92565b6001600160a01b0390931660009081526009602090815260408083208684528252808320859055938252600a9052919091209190915550565b828054611eb390612685565b90600052602060002090601f016020900481019282611ed55760008555611f1b565b82601f10611eee57805160ff1916838001178555611f1b565b82800160010185558215611f1b579182015b82811115611f1b578251825591602001919060010190611f00565b50611f27929150611f2b565b5090565b5b80821115611f275760008155600101611f2c565b600067ffffffffffffffff80841115611f5b57611f5b61271d565b604051601f8501601f19908116603f01168101908282118183101715611f8357611f8361271d565b81604052809350858152868686011115611f9c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b031981168114610a6257600080fd5b600082601f830112611fdf57600080fd5b611fee83833560208501611f40565b9392505050565b80356001600160601b0381168114610a6257600080fd5b60006020828403121561201e57600080fd5b8135611fee81612733565b6000806040838503121561203c57600080fd5b823561204781612733565b91506108b560208401611ff5565b6000806040838503121561206857600080fd5b823561207381612733565b9150602083013561208381612733565b809150509250929050565b6000806000606084860312156120a357600080fd5b83356120ae81612733565b925060208401356120be81612733565b929592945050506040919091013590565b600080600080608085870312156120e557600080fd5b84356120f081612733565b9350602085013561210081612733565b925060408501359150606085013567ffffffffffffffff81111561212357600080fd5b8501601f8101871361213457600080fd5b61214387823560208401611f40565b91505092959194509250565b6000806040838503121561216257600080fd5b823561216d81612733565b91506020830135801515811461208357600080fd5b6000806000806080858703121561219857600080fd5b84356121a381612733565b93506121b160208601611fb6565b9250604085013567ffffffffffffffff808211156121ce57600080fd5b6121da88838901611fce565b935060608701359150808211156121f057600080fd5b5061214387828801611fce565b6000806040838503121561221057600080fd5b823561221b81612733565b946020939093013593505050565b60006020828403121561223b57600080fd5b611fee82611fb6565b60006020828403121561225657600080fd5b8135611fee8161274b565b60006020828403121561227357600080fd5b8151611fee8161274b565b60006020828403121561229057600080fd5b5035919050565b6000806000606084860312156122ac57600080fd5b8335925060208401356122be81612733565b91506122cc60408501611ff5565b90509250925092565b600080604083850312156122e857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561233b57815180516001600160a01b03168852830151838801526040909601959082019060010161230b565b509495945050505050565b6000815180845260005b8181101561236c57602081850181015186830182015201612350565b8181111561237e576000602083870101525b50601f01601f19169290920160200192915050565b66697066733a2f2f60c81b8152600060076000845481600182811c9150808316806123bf57607f831692505b60208084108214156123df57634e487b7160e01b86526022600452602486fd5b8180156123f3576001811461240857612439565b60ff1986168a890152848a0188019650612439565b60008b81526020902060005b8681101561242f5781548c82018b0152908501908301612414565b505087858b010196505b50949998505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061247b90830184612346565b9695505050505050565b602081526000611fee60208301846122f7565b6001600160601b0360a01b841681526060602082015260006124bd6060830185612346565b828103604084015261247b8185612346565b602081526000611fee6020830184612346565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4d696e7461626c653a2063616c6c6572206973206e6f7420746865206d696e7460408201526132b960f11b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b82815260406020820152600061099460408301846122f7565b60008219821115612628576126286126db565b500190565b60008261264a57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612669576126696126db565b500290565b600082821015612680576126806126db565b500390565b600181811c9082168061269957607f821691505b602082108114156126ba57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126d4576126d46126db565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461274857600080fd5b50565b6001600160e01b03198116811461274857600080fdfea2646970667358221220c8c3152a1c6f9180741f9cd8f58e031edcd3c94eda829cd133e93573ddfba30664736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063cad96cca11610097578063e985e9c511610071578063e985e9c5146103fe578063f2fde38b14610411578063f46eccc414610424578063fca3b5aa1461044757600080fd5b8063cad96cca146103a9578063cc33c875146103c9578063cdb1311d146103eb57600080fd5b806395d89b41116100d357806395d89b4114610368578063a22cb46514610370578063b88d4fde14610383578063c87b56dd1461039657600080fd5b806370a082311461032f57806380c8d690146103425780638da5cb5b1461035557600080fd5b80632f745c591161016657806342842e0e1161014057806342842e0e146102d45780634f6ccce7146102e95780636352211e146102fc5780637032b1431461030f57600080fd5b80632f745c591461029b5780632fdc9b0e146102ae5780633092afd5146102c157600080fd5b8063095ea7b3116101a2578063095ea7b31461023157806318160ddd1461024457806323b872dd146102565780632a55205a1461026957600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063081812fc14610206575b600080fd5b6101dc6101d7366004612244565b61045a565b60405190151581526020015b60405180910390f35b6101f96104e2565b6040516101e891906124cf565b61021961021436600461227e565b610570565b6040516001600160a01b0390911681526020016101e8565b6101dc61023f3660046121fd565b61060a565b600b545b6040519081526020016101e8565b6101dc61026436600461208e565b610726565b61027c6102773660046122d5565b610759565b604080516001600160a01b0390931683526020830191909152016101e8565b6102486102a93660046121fd565b6108bf565b6101dc6102bc366004612182565b610955565b6101dc6102cf36600461200c565b61099c565b6102e76102e236600461208e565b610a67565b005b6102486102f736600461227e565b610a88565b61021961030a36600461227e565b610b1b565b61024861031d366004612229565b60116020526000908152604090205481565b61024861033d36600461200c565b610b92565b6101dc610350366004612297565b610c19565b600054610219906001600160a01b031681565b6101f9610f18565b6101dc61037e36600461214f565b610f25565b6101dc6103913660046120cf565b610ff1565b6101f96103a436600461227e565b611025565b6103bc6103b736600461227e565b6110dc565b6040516101e89190612485565b6103dc6103d736600461227e565b6111e7565b6040516101e893929190612498565b6101dc6103f9366004612029565b61131f565b6101dc61040c366004612055565b611392565b6102e761041f36600461200c565b6113c0565b6101dc61043236600461200c565b60016020526000908152604090205460ff1681565b6102e761045536600461200c565b611471565b60006001600160e01b031982166301ffc9a760e01b148061048b57506001600160e01b031982166380ac58cd60e01b145b806104a657506001600160e01b03198216635b5e139f60e01b145b806104c157506001600160e01b0319821663656cb66560e11b145b806104dc57506001600160e01b0319821663152a902d60e11b145b92915050565b600780546104ef90612685565b80601f016020809104026020016040519081016040528092919081815260200182805461051b90612685565b80156105685780601f1061053d57610100808354040283529160200191610568565b820191906000526020600020905b81548152906001019060200180831161054b57829003601f168201915b505050505081565b6000818152600360205260408120546001600160a01b03166105ee5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60008061061683610b1b565b9050806001600160a01b0316846001600160a01b031614156106845760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105e5565b336001600160a01b03821614806106a057506106a08133611392565b6107125760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105e5565b61071c848461152e565b5060019392505050565b6000610732338361159c565b61074e5760405162461bcd60e51b81526004016105e5906125ab565b61071c84848461166b565b600f546000908190610889576000848152600d6020526040902054610783575060009050806108b8565b6000848152600d6020908152604080832080548251818502810185019093528083529192909190849084015b828210156107f7576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016107af565b5050505090508060008151811061081057610810612707565b60209081029190910101515192506000805b82518110156108685782818151811061083d5761083d612707565b602002602001015160200151826108549190612615565b915080610860816126c0565b915050610822565b50612710610876868361264f565b610880919061262d565b925050506108b8565b600e54600f546001600160a01b039091169250612710906108ab90859061264f565b6108b5919061262d565b90505b9250929050565b60006108ca83610b92565b821061092c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105e5565b506001600160a01b03919091166000908152600960209081526040808320938352929052205490565b3360009081526001602052604081205460ff166109845760405162461bcd60e51b81526004016105e590612569565b61099085858585611816565b5060015b949350505050565b3360009081526001602052604081205460ff166109cb5760405162461bcd60e51b81526004016105e590612569565b6001600160a01b03821660009081526001602052604090205460ff16610a3d5760405162461bcd60e51b815260206004820152602160248201527f4d696e7461626c653a205f6d696e746572206973206e6f742061206d696e74656044820152603960f91b60648201526084016105e5565b506001600160a01b0381166000908152600160208190526040909120805460ff191690555b919050565b610a8283838360405180602001604052806000815250610ff1565b50505050565b6000610a93600b5490565b8210610af65760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105e5565b600b8281548110610b0957610b09612707565b90600052602060002001549050919050565b6000818152600360205260408120546001600160a01b0316806104dc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105e5565b60006001600160a01b038216610bfd5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105e5565b506001600160a01b031660009081526004602052604090205490565b600080546001600160a01b03163314610c445760405162461bcd60e51b81526004016105e590612534565b6001600160a01b038316610c9a5760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e74000000000060448201526064016105e5565b6001600160601b038216610cf05760405162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f73697469766560448201526064016105e5565b612710826001600160601b031610610d585760405162461bcd60e51b815260206004820152602560248201527f526f79616c747920746f74616c2076616c75652073686f756c64206265203c20604482015264031303030360dc1b60648201526084016105e5565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610d6f5790505090508381600081518110610dac57610dac612707565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050826001600160601b031681600081518110610ded57610ded612707565b6020908102919091018101518101919091526000868152600d909152604090205415610ea4576000858152600d602052604081208054869290610e3257610e32612707565b6000918252602080832060029290920290910180546001600160a01b0319166001600160a01b039490941693909317909255868152600d9091526040812080546001600160601b0386169290610e8a57610e8a612707565b906000526020600020906002020160010181905550610f0e565b6000858152600d60205260408120825190918391610ec457610ec4612707565b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101555b6109908582611ae9565b600880546104ef90612685565b60006001600160a01b038316331415610f805760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105e5565b3360008181526006602090815260408083206001600160a01b03881680855290835292819020805460ff191687151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350600192915050565b6000610ffd338461159c565b6110195760405162461bcd60e51b81526004016105e5906125ab565b61099085858585611b26565b6000818152600360205260409020546060906001600160a01b03166110a45760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016105e5565b60008281526010602090815260409182902091516110c6926001019101612393565b6040516020818303038152906040529050919050565b600f54606090611162576000828152600d6020908152604080832080548251818502810185019093528083529193909284015b82821015611157576000848152602090819020604080518082019091526002850290910180546001600160a01b0316825260019081015482840152908352909201910161110f565b505050509050919050565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161117957505060408051808201909152600e546001600160a01b03168152600f54602082015281519192509082906000906111d6576111d6612707565b602090810291909101015292915050565b6010602052600090815260409020805460018201805460a09290921b929161120e90612685565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90612685565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b50505050509080600201805461129c90612685565b80601f01602080910402602001604051908101604052809291908181526020018280546112c890612685565b80156113155780601f106112ea57610100808354040283529160200191611315565b820191906000526020600020905b8154815290600101906020018083116112f857829003601f168201915b5050505050905083565b600080546001600160a01b0316331461134a5760405162461bcd60e51b81526004016105e590612534565b50604080518082019091526001600160a01b0383168082526001600160601b0383166020909201829052600e80546001600160a01b0319169091179055600f55600192915050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6000546001600160a01b031633146113ea5760405162461bcd60e51b81526004016105e590612534565b6001600160a01b03811661144f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e5565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602052604090205460ff166114a05760405162461bcd60e51b81526004016105e590612569565b6001600160a01b0381166115075760405162461bcd60e51b815260206004820152602860248201527f4d696e7461626c653a206e6577206d696e74657220697320746865207a65726f604482015267206164647265737360c01b60648201526084016105e5565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061156382610b1b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166116155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105e5565b600061162083610b1b565b9050806001600160a01b0316846001600160a01b0316148061165b5750836001600160a01b031661165084610570565b6001600160a01b0316145b8061099457506109948185611392565b826001600160a01b031661167e82610b1b565b6001600160a01b0316146116e65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105e5565b6001600160a01b0382166117485760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105e5565b611753838383611b59565b61175e60008261152e565b6001600160a01b038316600090815260046020526040812080546001929061178790849061266e565b90915550506001600160a01b03821660009081526004602052604081208054600192906117b5908490612615565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b54600090611827906001612615565b9050600081116118845760405162461bcd60e51b815260206004820152602260248201527f5368697a756b3a20746f6b656e49642073686f756c64206265206e6f6e2d7a65604482015261726f60f01b60648201526084016105e5565b6000818152600360205260409020546001600160a01b0316156118e95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105e5565b6001600160a01b03851661193f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105e5565b6001600160a01b03198416600090815260116020526040902054156119b45760405162461bcd60e51b815260206004820152602560248201527f5368697a756b3a2073616d65207472616974436f646520616c7265616479206d6044820152641a5b9d195960da1b60648201526084016105e5565b6119c060008683611b59565b6001600160a01b03851660009081526004602052604081208054600192906119e9908490612615565b9091555050600081815260036020908152604080832080546001600160a01b03199081166001600160a01b038b1617909155815160608101835290881681528083018781528183018790528585526010845291909320835181546bffffffffffffffffffffffff191660a09190911c178155905180519192611a7392600185019290910190611ea7565b5060408201518051611a8f916002840191602090910190611ea7565b5050506001600160a01b031984166000908152601160205260408082208390555182916001600160a01b038816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050505050565b7f11de1ed290ef7c79f0112213bdb47a9e423f83e4878a1d730a7a48c35065794d8282604051611b1a9291906125fc565b60405180910390a15050565b611b3184848461166b565b611b3d84848484611c16565b610a825760405162461bcd60e51b81526004016105e5906124e2565b6001600160a01b038316611bb457611baf81600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b611bd7565b816001600160a01b0316836001600160a01b031614611bd757611bd78382611d17565b6001600160a01b038216611bf357611bee81611db4565b505050565b826001600160a01b0316826001600160a01b031614611bee57611bee8282611e63565b6000833b15611d0f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611c51903390899088908890600401612448565b602060405180830381600087803b158015611c6b57600080fd5b505af1925050508015611c9b575060408051601f3d908101601f19168201909252611c9891810190612261565b60015b611cf5573d808015611cc9576040519150601f19603f3d011682016040523d82523d6000602084013e611cce565b606091505b508051611ced5760405162461bcd60e51b81526004016105e5906124e2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610994565b506001610994565b60006001611d2484610b92565b611d2e919061266e565b6000838152600a6020526040902054909150808214611d81576001600160a01b03841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a602090815260408084208490556001600160a01b039094168352600981528383209183525290812055565b600b54600090611dc69060019061266e565b6000838152600c6020526040812054600b8054939450909284908110611dee57611dee612707565b9060005260206000200154905080600b8381548110611e0f57611e0f612707565b6000918252602080832090910192909255828152600c9091526040808220849055858252812055600b805480611e4757611e476126f1565b6001900381819060005260206000200160009055905550505050565b6000611e6e83610b92565b6001600160a01b0390931660009081526009602090815260408083208684528252808320859055938252600a9052919091209190915550565b828054611eb390612685565b90600052602060002090601f016020900481019282611ed55760008555611f1b565b82601f10611eee57805160ff1916838001178555611f1b565b82800160010185558215611f1b579182015b82811115611f1b578251825591602001919060010190611f00565b50611f27929150611f2b565b5090565b5b80821115611f275760008155600101611f2c565b600067ffffffffffffffff80841115611f5b57611f5b61271d565b604051601f8501601f19908116603f01168101908282118183101715611f8357611f8361271d565b81604052809350858152868686011115611f9c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b031981168114610a6257600080fd5b600082601f830112611fdf57600080fd5b611fee83833560208501611f40565b9392505050565b80356001600160601b0381168114610a6257600080fd5b60006020828403121561201e57600080fd5b8135611fee81612733565b6000806040838503121561203c57600080fd5b823561204781612733565b91506108b560208401611ff5565b6000806040838503121561206857600080fd5b823561207381612733565b9150602083013561208381612733565b809150509250929050565b6000806000606084860312156120a357600080fd5b83356120ae81612733565b925060208401356120be81612733565b929592945050506040919091013590565b600080600080608085870312156120e557600080fd5b84356120f081612733565b9350602085013561210081612733565b925060408501359150606085013567ffffffffffffffff81111561212357600080fd5b8501601f8101871361213457600080fd5b61214387823560208401611f40565b91505092959194509250565b6000806040838503121561216257600080fd5b823561216d81612733565b91506020830135801515811461208357600080fd5b6000806000806080858703121561219857600080fd5b84356121a381612733565b93506121b160208601611fb6565b9250604085013567ffffffffffffffff808211156121ce57600080fd5b6121da88838901611fce565b935060608701359150808211156121f057600080fd5b5061214387828801611fce565b6000806040838503121561221057600080fd5b823561221b81612733565b946020939093013593505050565b60006020828403121561223b57600080fd5b611fee82611fb6565b60006020828403121561225657600080fd5b8135611fee8161274b565b60006020828403121561227357600080fd5b8151611fee8161274b565b60006020828403121561229057600080fd5b5035919050565b6000806000606084860312156122ac57600080fd5b8335925060208401356122be81612733565b91506122cc60408501611ff5565b90509250925092565b600080604083850312156122e857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561233b57815180516001600160a01b03168852830151838801526040909601959082019060010161230b565b509495945050505050565b6000815180845260005b8181101561236c57602081850181015186830182015201612350565b8181111561237e576000602083870101525b50601f01601f19169290920160200192915050565b66697066733a2f2f60c81b8152600060076000845481600182811c9150808316806123bf57607f831692505b60208084108214156123df57634e487b7160e01b86526022600452602486fd5b8180156123f3576001811461240857612439565b60ff1986168a890152848a0188019650612439565b60008b81526020902060005b8681101561242f5781548c82018b0152908501908301612414565b505087858b010196505b50949998505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061247b90830184612346565b9695505050505050565b602081526000611fee60208301846122f7565b6001600160601b0360a01b841681526060602082015260006124bd6060830185612346565b828103604084015261247b8185612346565b602081526000611fee6020830184612346565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4d696e7461626c653a2063616c6c6572206973206e6f7420746865206d696e7460408201526132b960f11b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b82815260406020820152600061099460408301846122f7565b60008219821115612628576126286126db565b500190565b60008261264a57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612669576126696126db565b500290565b600082821015612680576126806126db565b500390565b600181811c9082168061269957607f821691505b602082108114156126ba57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126d4576126d46126db565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461274857600080fd5b50565b6001600160e01b03198116811461274857600080fdfea2646970667358221220c8c3152a1c6f9180741f9cd8f58e031edcd3c94eda829cd133e93573ddfba30664736f6c63430008070033

Deployed Bytecode Sourcemap

3271:13435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4879:347;;;;;;:::i;:::-;;:::i;:::-;;;10306:14:1;;10299:22;10281:41;;10269:2;10254:18;4879:347:0;;;;;;;;4110:36;;;:::i;:::-;;;;;;;:::i;6336:192::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9013:32:1;;;8995:51;;8983:2;8968:18;6336:192:0;8849:203:1;5948:382:0;;;;;;:::i;:::-;;:::i;10794:90::-;10861:10;:17;10794:90;;;21556:25:1;;;21544:2;21529:18;10794:90:0;21410:177:1;6978:254:0;;;;;;:::i;:::-;;:::i;13257:710::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;9742:32:1;;;9724:51;;9806:2;9791:18;;9784:34;;;;9697:18;13257:710:0;9550:274:1;10890:222:0;;;;;;:::i;:::-;;:::i;5258:246::-;;;;;;:::i;:::-;;:::i;2670:198::-;;;;;;:::i;:::-;;:::i;7238:128::-;;;;;;:::i;:::-;;:::i;:::-;;11118:189;;;;;;:::i;:::-;;:::i;5719:223::-;;;;;;:::i;:::-;;:::i;4638:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;5532:181;;;;;;:::i;:::-;;:::i;14736:882::-;;;;;;:::i;:::-;;:::i;1763:20::-;;;;;-1:-1:-1;;;;;1763:20:0;;;4151:28;;;:::i;6534:291::-;;;;;;:::i;:::-;;:::i;7372:289::-;;;;;;:::i;:::-;;:::i;10511:245::-;;;;;;:::i;:::-;;:::i;14289:309::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4563:46::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;15624:248::-;;;;;;:::i;:::-;;:::i;6831:141::-;;;;;;:::i;:::-;;:::i;2043:182::-;;;;;;:::i;:::-;;:::i;2264:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2485:179;;;;;;:::i;:::-;;:::i;4879:347::-;4947:4;-1:-1:-1;;;;;;4974:40:0;;-1:-1:-1;;;4974:40:0;;:91;;-1:-1:-1;;;;;;;5025:40:0;;-1:-1:-1;;;5025:40:0;4974:91;:150;;;-1:-1:-1;;;;;;;5076:48:0;;-1:-1:-1;;;5076:48:0;4974:150;:199;;;-1:-1:-1;;;;;;;5135:38:0;;-1:-1:-1;;;5135:38:0;4974:199;:246;;;-1:-1:-1;;;;;;;5184:36:0;;-1:-1:-1;;;5184:36:0;4974:246;4960:260;4879:347;-1:-1:-1;;4879:347:0:o;4110:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6336:192::-;6395:7;8025:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8025:16:0;6411:73;;;;-1:-1:-1;;;6411:73:0;;15994:2:1;6411:73:0;;;15976:21:1;16033:2;16013:18;;;16006:30;16072:34;16052:18;;;16045:62;-1:-1:-1;;;16123:18:1;;;16116:42;16175:19;;6411:73:0;;;;;;;;;-1:-1:-1;6498:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;6498:24:0;;6336:192::o;5948:382::-;6010:4;6023:13;6039:16;6047:7;6039;:16::i;:::-;6023:32;;6076:5;-1:-1:-1;;;;;6070:11:0;:2;-1:-1:-1;;;;;6070:11:0;;;6062:57;;;;-1:-1:-1;;;6062:57:0;;17997:2:1;6062:57:0;;;17979:21:1;18036:2;18016:18;;;18009:30;18075:34;18055:18;;;18048:62;-1:-1:-1;;;18126:18:1;;;18119:31;18167:19;;6062:57:0;17795:397:1;6062:57:0;6144:10;-1:-1:-1;;;;;6144:19:0;;;;:58;;;6167:35;6184:5;6191:10;6167:16;:35::i;:::-;6128:148;;;;-1:-1:-1;;;6128:148:0;;14387:2:1;6128:148:0;;;14369:21:1;14426:2;14406:18;;;14399:30;14465:34;14445:18;;;14438:62;14536:26;14516:18;;;14509:54;14580:19;;6128:148:0;14185:420:1;6128:148:0;6285:21;6294:2;6298:7;6285:8;:21::i;:::-;-1:-1:-1;6320:4:0;;5948:382;-1:-1:-1;;;5948:382:0:o;6978:254::-;7059:4;7080:39;7099:10;7111:7;7080:18;:39::i;:::-;7072:101;;;;-1:-1:-1;;;7072:101:0;;;;;;;:::i;:::-;7180:28;7190:4;7196:2;7200:7;7180:9;:28::i;13257:710::-;13384:19;;13333:16;;;;13381:581;;13423:13;;;;:9;:13;;;;;:20;13419:416;;-1:-1:-1;13480:1:0;;-1:-1:-1;13480:1:0;13381:581;;13419:416;13537:32;13572:13;;;:9;:13;;;;;;;;13537:48;;;;;;;;;;;;;;;;;;;13572:13;;13537:48;:32;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13537:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13607:10;13618:1;13607:13;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;-1:-1:-1;13607:21:0;;13665:103;13686:10;:17;13682:1;:21;13665:103;;;13737:10;13748:1;13737:13;;;;;;;;:::i;:::-;;;;;;;:19;;;13723:33;;;;;:::i;:::-;;-1:-1:-1;13705:3:0;;;;:::i;:::-;;;;13665:103;;;-1:-1:-1;13820:5:0;13794:23;13807:10;13794;:23;:::i;:::-;:31;;;;:::i;:::-;13778:47;;13526:309;;13381:581;;;13868:13;:21;13914:19;;-1:-1:-1;;;;;13868:21:0;;;;-1:-1:-1;13949:5:0;;13914:32;;13936:10;;13914:32;:::i;:::-;:40;;;;:::i;:::-;13898:56;;13381:581;13257:710;;;;;:::o;10890:222::-;10970:7;11002:16;11012:5;11002:9;:16::i;:::-;10994:5;:24;10986:80;;;;-1:-1:-1;;;10986:80:0;;11259:2:1;10986:80:0;;;11241:21:1;11298:2;11278:18;;;11271:30;11337:34;11317:18;;;11310:62;-1:-1:-1;;;11388:18:1;;;11381:41;11439:19;;10986:80:0;11057:407:1;10986:80:0;-1:-1:-1;;;;;;11080:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;10890:222::o;5258:246::-;2415:10;5412:4;2407:19;;;:7;:19;;;;;;;;2399:66;;;;-1:-1:-1;;;2399:66:0;;;;;;;:::i;:::-;5427:51:::1;5433:3;5438:10;5450:13;5465:12;5427:5;:51::i;:::-;-1:-1:-1::0;5494:4:0::1;2472:1;5258:246:::0;;;;;;:::o;2670:198::-;2415:10;2738:4;2407:19;;;:7;:19;;;;;;;;2399:66;;;;-1:-1:-1;;;2399:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;2751:62;;;::::0;-1:-1:-1;;;2751:62:0;;20042:2:1;2751:62:0::1;::::0;::::1;20024:21:1::0;20081:2;20061:18;;;20054:30;20120:34;20100:18;;;20093:62;-1:-1:-1;;;20171:18:1;;;20164:31;20212:19;;2751:62:0::1;19840:397:1::0;2751:62:0::1;-1:-1:-1::0;;;;;;2820:16:0;::::1;2839:5;2820:16:::0;;;:7:::1;:16;::::0;;;;;;;:24;;-1:-1:-1;;2820:24:0::1;::::0;;2472:1:::1;2670:198:::0;;;:::o;7238:128::-;7321:39;7338:4;7344:2;7348:7;7321:39;;;;;;;;;;;;:16;:39::i;:::-;;7238:128;;;:::o;11118:189::-;11176:7;11208:13;10861:10;:17;;10794:90;11208:13;11200:5;:21;11192:78;;;;-1:-1:-1;;;11192:78:0;;19629:2:1;11192:78:0;;;19611:21:1;19668:2;19648:18;;;19641:30;19707:34;19687:18;;;19680:62;-1:-1:-1;;;19758:18:1;;;19751:42;19810:19;;11192:78:0;19427:408:1;11192:78:0;11284:10;11295:5;11284:17;;;;;;;;:::i;:::-;;;;;;;;;11277:24;;11118:189;;;:::o;5719:223::-;5774:7;5811:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5811:16:0;5842:24;5834:78;;;;-1:-1:-1;;;5834:78:0;;15223:2:1;5834:78:0;;;15205:21:1;15262:2;15242:18;;;15235:30;15301:34;15281:18;;;15274:62;-1:-1:-1;;;15352:18:1;;;15345:39;15401:19;;5834:78:0;15021:405:1;5532:181:0;5587:7;-1:-1:-1;;;;;5611:19:0;;5603:74;;;;-1:-1:-1;;;5603:74:0;;14812:2:1;5603:74:0;;;14794:21:1;14851:2;14831:18;;;14824:30;14890:34;14870:18;;;14863:62;-1:-1:-1;;;14941:18:1;;;14934:40;14991:19;;5603:74:0;14610:406:1;5603:74:0;-1:-1:-1;;;;;;5691:16:0;;;;;:9;:16;;;;;;;5532:181::o;14736:882::-;14875:4;1967:5;;-1:-1:-1;;;;;1967:5:0;1976:10;1967:19;1959:64;;;;-1:-1:-1;;;1959:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14896:40:0;::::1;14888:80;;;::::0;-1:-1:-1;;;14888:80:0;;21256:2:1;14888:80:0::1;::::0;::::1;21238:21:1::0;21295:2;21275:18;;;21268:30;21334:29;21314:18;;;21307:57;21381:18;;14888:80:0::1;21054:351:1::0;14888:80:0::1;-1:-1:-1::0;;;;;14983:27:0;::::1;14975:72;;;::::0;-1:-1:-1;;;14975:72:0;;14026:2:1;14975:72:0::1;::::0;::::1;14008:21:1::0;;;14045:18;;;14038:30;14104:34;14084:18;;;14077:62;14156:18;;14975:72:0::1;13824:356:1::0;14975:72:0::1;15087:5;15062:22;-1:-1:-1::0;;;;;15062:30:0::1;;15054:80;;;::::0;-1:-1:-1;;;15054:80:0;;20444:2:1;15054:80:0::1;::::0;::::1;20426:21:1::0;20483:2;20463:18;;;20456:30;20522:34;20502:18;;;20495:62;-1:-1:-1;;;20573:18:1;;;20566:35;20618:19;;15054:80:0::1;20242:401:1::0;15054:80:0::1;15178:21;::::0;;15197:1:::1;15178:21:::0;;;;;::::1;::::0;;;15143:32:::1;::::0;15178:21:::1;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;15178:21:0::1;;;;;;;;;;;;;;;15143:56;;15230:26;15206:10;15217:1;15206:13;;;;;;;;:::i;:::-;;;;;;;:21;;:50;-1:-1:-1::0;;;;;15206:50:0::1;;;-1:-1:-1::0;;;;;15206:50:0::1;;;::::0;::::1;15285:22;-1:-1:-1::0;;;;;15263:44:0::1;:10;15274:1;15263:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;:19;::::1;:44:::0;;;;-1:-1:-1;15319:19:0;;;:9:::1;:19:::0;;;;;;:26;:30;15316:235:::1;;15360:19;::::0;;;:9:::1;:19;::::0;;;;:22;;15393:26;;15360:19;:22:::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;:59:::0;;-1:-1:-1;;;;;;15360:59:0::1;-1:-1:-1::0;;;;;15360:59:0;;;::::1;::::0;;;::::1;::::0;;;15428:19;;;:9:::1;:19:::0;;;;;;:22;;-1:-1:-1;;;;;15428:53:0;::::1;::::0;15360:22;15428::::1;;;;:::i;:::-;;;;;;;;;;;:28;;:53;;;;15316:235;;;15504:19;::::0;;;:9:::1;:19;::::0;;;;15529:13;;15504:19;;15529:10;;:13:::1;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;15504:39;;::::1;::::0;;::::1;::::0;;-1:-1:-1;15504:39:0;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;15504:39:0::1;-1:-1:-1::0;;;;;15504:39:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;15316:235:::1;15557:37;15573:8;15583:10;15557:15;:37::i;4151:28::-:0;;;;;;;:::i;6534:291::-;6610:4;-1:-1:-1;;;;;6631:22:0;;6643:10;6631:22;;6623:60;;;;-1:-1:-1;;;6623:60:0;;13259:2:1;6623:60:0;;;13241:21:1;13298:2;13278:18;;;13271:30;13337:27;13317:18;;;13310:55;13382:18;;6623:60:0;13057:349:1;6623:60:0;6711:10;6692:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;6692:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;6692:51:0;;;;;;;;;;6755:46;;10281:41:1;;;6692:40:0;;6711:10;6755:46;;10254:18:1;6755:46:0;;;;;;;-1:-1:-1;6815:4:0;6534:291;;;;:::o;7372:289::-;7477:4;7498:39;7517:10;7529:7;7498:18;:39::i;:::-;7490:101;;;;-1:-1:-1;;;7490:101:0;;;;;;;:::i;:::-;7598:39;7612:4;7618:2;7622:7;7631:5;7598:13;:39::i;10511:245::-;8005:4;8025:16;;;:7;:16;;;;;;10568:13;;-1:-1:-1;;;;;8025:16:0;10590:77;;;;-1:-1:-1;;;10590:77:0;;17581:2:1;10590:77:0;;;17563:21:1;17620:2;17600:18;;;17593:30;17659:34;17639:18;;;17632:62;-1:-1:-1;;;17710:18:1;;;17703:45;17765:19;;10590:77:0;17379:411:1;10590:77:0;10716:19;;;;:9;:19;;;;;;;;;10688:61;;;;10716:32;;;10688:61;;:::i;:::-;;;;;;;;;;;;;10674:76;;10511:245;;;:::o;14289:309::-;14388:19;;14355:21;;14385:208;;14430:13;;;;:9;:13;;;;;;;;14423:20;;;;;;;;;;;;;;;;;;;14430:13;;14423:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14423:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14289:309;;;:::o;14385:208::-;14500:21;;;14519:1;14500:21;;;;;;;;;14465:32;;14500:21;;;;-1:-1:-1;;;;;;;;;;;;;;;;;14500:21:0;;;;;;;;;;;;-1:-1:-1;;14530:29:0;;;;;;;;;14546:13;14530:29;-1:-1:-1;;;;;14530:29:0;;;;;;;;;:13;;;;-1:-1:-1;14530:29:0;:13;;-1:-1:-1;;14530:13:0;;;;:::i;:::-;;;;;;;;;;:29;14575:10;14289:309;-1:-1:-1;;14289:309:0:o;4563:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15624:248::-;15751:4;1967:5;;-1:-1:-1;;;;;1967:5:0;1976:10;1967:19;1959:64;;;;-1:-1:-1;;;1959:64:0;;;;;;;:::i;:::-;-1:-1:-1;15780:64:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;15780:64:0;::::1;::::0;;;-1:-1:-1;;;;;15780:64:0;::::1;;::::0;;::::1;::::0;;;15764:13:::1;:80:::0;;-1:-1:-1;;;;;;15764:80:0::1;::::0;;::::1;::::0;;;;;15624:248;;;;:::o;6831:141::-;-1:-1:-1;;;;;6931:25:0;;;6911:4;6931:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;6831:141::o;2043:182::-;1967:5;;-1:-1:-1;;;;;1967:5:0;1976:10;1967:19;1959:64;;;;-1:-1:-1;;;1959:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2129:23:0;::::1;2121:74;;;::::0;-1:-1:-1;;;2121:74:0;;12090:2:1;2121:74:0::1;::::0;::::1;12072:21:1::0;12129:2;12109:18;;;12102:30;12168:34;12148:18;;;12141:62;-1:-1:-1;;;12219:18:1;;;12212:36;12265:19;;2121:74:0::1;11888:402:1::0;2121:74:0::1;2202:5;:17:::0;;-1:-1:-1;;;;;;2202:17:0::1;-1:-1:-1::0;;;;;2202:17:0;;;::::1;::::0;;;::::1;::::0;;2043:182::o;2485:179::-;2415:10;2407:19;;;;:7;:19;;;;;;;;2399:66;;;;-1:-1:-1;;;2399:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2562:21:0;::::1;2554:74;;;::::0;-1:-1:-1;;;2554:74:0;;18802:2:1;2554:74:0::1;::::0;::::1;18784:21:1::0;18841:2;18821:18;;;18814:30;18880:34;18860:18;;;18853:62;-1:-1:-1;;;18931:18:1;;;18924:38;18979:19;;2554:74:0::1;18600:404:1::0;2554:74:0::1;-1:-1:-1::0;;;;;2635:16:0::1;;::::0;;;2654:4:::1;2635:16;::::0;;;;;;;:23;;-1:-1:-1;;2635:23:0::1;::::0;;::::1;::::0;;2485:179::o;9685:148::-;9747:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;9747:29:0;-1:-1:-1;;;;;9747:29:0;;;;;;;;:24;;9797:16;9747:24;9797:7;:16::i;:::-;-1:-1:-1;;;;;9788:39:0;;;;;;;;;;;9685:148;;:::o;8067:318::-;8151:4;8025:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8025:16:0;8164:73;;;;-1:-1:-1;;;8164:73:0;;13613:2:1;8164:73:0;;;13595:21:1;13652:2;13632:18;;;13625:30;13691:34;13671:18;;;13664:62;-1:-1:-1;;;13742:18:1;;;13735:42;13794:19;;8164:73:0;13411:408:1;8164:73:0;8244:13;8260:16;8268:7;8260;:16::i;:::-;8244:32;;8302:5;-1:-1:-1;;;;;8291:16:0;:7;-1:-1:-1;;;;;8291:16:0;;:51;;;;8335:7;-1:-1:-1;;;;;8311:31:0;:20;8323:7;8311:11;:20::i;:::-;-1:-1:-1;;;;;8311:31:0;;8291:51;:87;;;;8346:32;8363:5;8370:7;8346:16;:32::i;9189:490::-;9294:4;-1:-1:-1;;;;;9274:24:0;:16;9282:7;9274;:16::i;:::-;-1:-1:-1;;;;;9274:24:0;;9266:78;;;;-1:-1:-1;;;9266:78:0;;17171:2:1;9266:78:0;;;17153:21:1;17210:2;17190:18;;;17183:30;17249:34;17229:18;;;17222:62;-1:-1:-1;;;17300:18:1;;;17293:39;17349:19;;9266:78:0;16969:405:1;9266:78:0;-1:-1:-1;;;;;9359:16:0;;9351:65;;;;-1:-1:-1;;;9351:65:0;;12854:2:1;9351:65:0;;;12836:21:1;12893:2;12873:18;;;12866:30;12932:34;12912:18;;;12905:62;-1:-1:-1;;;12983:18:1;;;12976:34;13027:19;;9351:65:0;12652:400:1;9351:65:0;9425:39;9446:4;9452:2;9456:7;9425:20;:39::i;:::-;9521:29;9538:1;9542:7;9521:8;:29::i;:::-;-1:-1:-1;;;;;9559:15:0;;;;;;:9;:15;;;;;:20;;9578:1;;9559:15;:20;;9578:1;;9559:20;:::i;:::-;;;;-1:-1:-1;;;;;;;9586:13:0;;;;;;:9;:13;;;;;:18;;9603:1;;9586:13;:18;;9603:1;;9586:18;:::i;:::-;;;;-1:-1:-1;;9611:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9611:21:0;-1:-1:-1;;;;;9611:21:0;;;;;;;;;9646:27;;9611:16;;9646:27;;;;;;;9189:490;;;:::o;8391:792::-;8556:10;:17;8538:15;;8556:21;;8576:1;8556:21;:::i;:::-;8538:39;;8604:1;8594:7;:11;8586:58;;;;-1:-1:-1;;;8586:58:0;;16407:2:1;8586:58:0;;;16389:21:1;16446:2;16426:18;;;16419:30;16485:34;16465:18;;;16458:62;-1:-1:-1;;;16536:18:1;;;16529:32;16578:19;;8586:58:0;16205:398:1;8586:58:0;8005:4;8025:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8025:16:0;:30;8651:58;;;;-1:-1:-1;;;8651:58:0;;12497:2:1;8651:58:0;;;12479:21:1;12536:2;12516:18;;;12509:30;12575;12555:18;;;12548:58;12623:18;;8651:58:0;12295:352:1;8651:58:0;-1:-1:-1;;;;;8724:17:0;;8716:62;;;;-1:-1:-1;;;8716:62:0;;15633:2:1;8716:62:0;;;15615:21:1;;;15652:18;;;15645:30;15711:34;15691:18;;;15684:62;15763:18;;8716:62:0;15431:356:1;8716:62:0;-1:-1:-1;;;;;;8795:26:0;;;;;;:14;:26;;;;;;:31;8787:81;;;;-1:-1:-1;;;8787:81:0;;20850:2:1;8787:81:0;;;20832:21:1;20889:2;20869:18;;;20862:30;20928:34;20908:18;;;20901:62;-1:-1:-1;;;20979:18:1;;;20972:35;21024:19;;8787:81:0;20648:401:1;8787:81:0;8877:46;8906:1;8910:3;8915:7;8877:20;:46::i;:::-;-1:-1:-1;;;;;8932:14:0;;;;;;:9;:14;;;;;:19;;8950:1;;8932:14;:19;;8950:1;;8932:19;:::i;:::-;;;;-1:-1:-1;;8958:16:0;;;;:7;:16;;;;;;;;:22;;-1:-1:-1;;;;;;8958:22:0;;;-1:-1:-1;;;;;8958:22:0;;;;;;9008:78;;;;;;;;;;;;;;;;;;;;;;;;8987:18;;;:9;:18;;;;;;:99;;;;-1:-1:-1;;8987:99:0;;;;;;;;;;;;;:18;;:99;;-1:-1:-1;8987:99:0;;;;;;;;:::i;:::-;-1:-1:-1;8987:99:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;9093:26:0;;;;;;:14;:26;;;;;;:36;;;9143:34;9122:7;;-1:-1:-1;;;;;9143:34:0;;;;;9093:26;;9143:34;8525:658;8391:792;;;;:::o;14604:126::-;14696:28;14709:2;14713:10;14696:28;;;;;;;:::i;:::-;;;;;;;;14604:126;;:::o;7690:253::-;7791:28;7801:4;7807:2;7811:7;7791:9;:28::i;:::-;7834:48;7857:4;7863:2;7867:7;7876:5;7834:22;:48::i;:::-;7826:111;;;;-1:-1:-1;;;7826:111:0;;;;;;;:::i;11346:429::-;-1:-1:-1;;;;;11438:18:0;;11434:167;;11467:40;11499:7;12087:10;:17;;12060:24;;;;:15;:24;;;;;:44;;;12111:24;;;;;;;;;;;;11987:154;11467:40;11434:167;;;11533:2;-1:-1:-1;;;;;11525:10:0;:4;-1:-1:-1;;;;;11525:10:0;;11521:80;;11546:47;11579:4;11585:7;11546:32;:47::i;:::-;-1:-1:-1;;;;;11611:16:0;;11607:163;;11638:45;11675:7;11638:36;:45::i;:::-;11346:429;;;:::o;11607:163::-;11707:4;-1:-1:-1;;;;;11701:10:0;:2;-1:-1:-1;;;;;11701:10:0;;11697:73;;11722:40;11750:2;11754:7;11722:27;:40::i;9839:645::-;9951:4;16007:20;;16047:8;9964:515;;9997:70;;-1:-1:-1;;;9997:70:0;;-1:-1:-1;;;;;9997:36:0;;;;;:70;;10034:10;;10046:4;;10052:7;;10061:5;;9997:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9997:70:0;;;;;;;;-1:-1:-1;;9997:70:0;;;;;;;;;;;;:::i;:::-;;;9993:445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10219:13:0;;10215:214;;10252:60;;-1:-1:-1;;;10252:60:0;;;;;;;:::i;10215:214::-;10397:6;10391:13;10382:6;10378:2;10374:15;10367:38;9993:445;-1:-1:-1;;;;;;10110:55:0;-1:-1:-1;;;10110:55:0;;-1:-1:-1;10103:62:0;;9964:515;-1:-1:-1;10467:4:0;10460:11;;12147:597;12235:22;12278:1;12260:15;12270:4;12260:9;:15::i;:::-;:19;;;;:::i;:::-;12286:18;12307:26;;;:17;:26;;;;;;12235:44;;-1:-1:-1;12346:28:0;;;12342:307;;-1:-1:-1;;;;;12408:18:0;;12386:19;12408:18;;;:12;:18;;;;;;;;:34;;;;;;;;;12453:30;;;;;;:44;;;12564:30;;:17;:30;;;;;:43;;;12342:307;-1:-1:-1;12664:26:0;;;;:17;:26;;;;;;;;12657:33;;;-1:-1:-1;;;;;12704:18:0;;;;;:12;:18;;;;;:34;;;;;;;12697:41;12147:597::o;12750:487::-;12853:10;:17;12828:22;;12853:21;;12873:1;;12853:21;:::i;:::-;12881:18;12902:24;;;:15;:24;;;;;;12957:10;:26;;12828:46;;-1:-1:-1;12902:24:0;;12828:46;;12957:26;;;;;;:::i;:::-;;;;;;;;;12935:48;;13017:11;12992:10;13003;12992:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;13093:28;;;:15;:28;;;;;;;:41;;;13184:24;;;;;13177:31;13215:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12821:416;;;12750:487;:::o;11781:200::-;11862:14;11879:13;11889:2;11879:9;:13::i;:::-;-1:-1:-1;;;;;11899:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;11940:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;11781:200:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:190::-;718:20;;-1:-1:-1;;;;;;767:48:1;;757:59;;747:87;;830:1;827;820:12;845:221;888:5;941:3;934:4;926:6;922:17;918:27;908:55;;959:1;956;949:12;908:55;981:79;1056:3;1047:6;1034:20;1027:4;1019:6;1015:17;981:79;:::i;:::-;972:88;845:221;-1:-1:-1;;;845:221:1:o;1071:179::-;1138:20;;-1:-1:-1;;;;;1187:38:1;;1177:49;;1167:77;;1240:1;1237;1230:12;1255:247;1314:6;1367:2;1355:9;1346:7;1342:23;1338:32;1335:52;;;1383:1;1380;1373:12;1335:52;1422:9;1409:23;1441:31;1466:5;1441:31;:::i;1507:327::-;1582:6;1590;1643:2;1631:9;1622:7;1618:23;1614:32;1611:52;;;1659:1;1656;1649:12;1611:52;1698:9;1685:23;1717:31;1742:5;1717:31;:::i;:::-;1767:5;-1:-1:-1;1791:37:1;1824:2;1809:18;;1791:37;:::i;1839:388::-;1907:6;1915;1968:2;1956:9;1947:7;1943:23;1939:32;1936:52;;;1984:1;1981;1974:12;1936:52;2023:9;2010:23;2042:31;2067:5;2042:31;:::i;:::-;2092:5;-1:-1:-1;2149:2:1;2134:18;;2121:32;2162:33;2121:32;2162:33;:::i;:::-;2214:7;2204:17;;;1839:388;;;;;:::o;2232:456::-;2309:6;2317;2325;2378:2;2366:9;2357:7;2353:23;2349:32;2346:52;;;2394:1;2391;2384:12;2346:52;2433:9;2420:23;2452:31;2477:5;2452:31;:::i;:::-;2502:5;-1:-1:-1;2559:2:1;2544:18;;2531:32;2572:33;2531:32;2572:33;:::i;:::-;2232:456;;2624:7;;-1:-1:-1;;;2678:2:1;2663:18;;;;2650:32;;2232:456::o;2693:794::-;2788:6;2796;2804;2812;2865:3;2853:9;2844:7;2840:23;2836:33;2833:53;;;2882:1;2879;2872:12;2833:53;2921:9;2908:23;2940:31;2965:5;2940:31;:::i;:::-;2990:5;-1:-1:-1;3047:2:1;3032:18;;3019:32;3060:33;3019:32;3060:33;:::i;:::-;3112:7;-1:-1:-1;3166:2:1;3151:18;;3138:32;;-1:-1:-1;3221:2:1;3206:18;;3193:32;3248:18;3237:30;;3234:50;;;3280:1;3277;3270:12;3234:50;3303:22;;3356:4;3348:13;;3344:27;-1:-1:-1;3334:55:1;;3385:1;3382;3375:12;3334:55;3408:73;3473:7;3468:2;3455:16;3450:2;3446;3442:11;3408:73;:::i;:::-;3398:83;;;2693:794;;;;;;;:::o;3492:416::-;3557:6;3565;3618:2;3606:9;3597:7;3593:23;3589:32;3586:52;;;3634:1;3631;3624:12;3586:52;3673:9;3660:23;3692:31;3717:5;3692:31;:::i;:::-;3742:5;-1:-1:-1;3799:2:1;3784:18;;3771:32;3841:15;;3834:23;3822:36;;3812:64;;3872:1;3869;3862:12;3913:753;4019:6;4027;4035;4043;4096:3;4084:9;4075:7;4071:23;4067:33;4064:53;;;4113:1;4110;4103:12;4064:53;4152:9;4139:23;4171:31;4196:5;4171:31;:::i;:::-;4221:5;-1:-1:-1;4245:38:1;4279:2;4264:18;;4245:38;:::i;:::-;4235:48;;4334:2;4323:9;4319:18;4306:32;4357:18;4398:2;4390:6;4387:14;4384:34;;;4414:1;4411;4404:12;4384:34;4437:50;4479:7;4470:6;4459:9;4455:22;4437:50;:::i;:::-;4427:60;;4540:2;4529:9;4525:18;4512:32;4496:48;;4569:2;4559:8;4556:16;4553:36;;;4585:1;4582;4575:12;4553:36;;4608:52;4652:7;4641:8;4630:9;4626:24;4608:52;:::i;4671:315::-;4739:6;4747;4800:2;4788:9;4779:7;4775:23;4771:32;4768:52;;;4816:1;4813;4806:12;4768:52;4855:9;4842:23;4874:31;4899:5;4874:31;:::i;:::-;4924:5;4976:2;4961:18;;;;4948:32;;-1:-1:-1;;;4671:315:1:o;4991:186::-;5050:6;5103:2;5091:9;5082:7;5078:23;5074:32;5071:52;;;5119:1;5116;5109:12;5071:52;5142:29;5161:9;5142:29;:::i;5182:245::-;5240:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:52;;;5309:1;5306;5299:12;5261:52;5348:9;5335:23;5367:30;5391:5;5367:30;:::i;5432:249::-;5501:6;5554:2;5542:9;5533:7;5529:23;5525:32;5522:52;;;5570:1;5567;5560:12;5522:52;5602:9;5596:16;5621:30;5645:5;5621:30;:::i;5686:180::-;5745:6;5798:2;5786:9;5777:7;5773:23;5769:32;5766:52;;;5814:1;5811;5804:12;5766:52;-1:-1:-1;5837:23:1;;5686:180;-1:-1:-1;5686:180:1:o;5871:395::-;5955:6;5963;5971;6024:2;6012:9;6003:7;5999:23;5995:32;5992:52;;;6040:1;6037;6030:12;5992:52;6076:9;6063:23;6053:33;;6136:2;6125:9;6121:18;6108:32;6149:31;6174:5;6149:31;:::i;:::-;6199:5;-1:-1:-1;6223:37:1;6256:2;6241:18;;6223:37;:::i;:::-;6213:47;;5871:395;;;;;:::o;6271:248::-;6339:6;6347;6400:2;6388:9;6379:7;6375:23;6371:32;6368:52;;;6416:1;6413;6406:12;6368:52;-1:-1:-1;;6439:23:1;;;6509:2;6494:18;;;6481:32;;-1:-1:-1;6271:248:1:o;6524:552::-;6581:3;6619:5;6613:12;6646:6;6641:3;6634:19;6672:4;6701:2;6696:3;6692:12;6685:19;;6738:2;6731:5;6727:14;6759:1;6769:282;6783:6;6780:1;6777:13;6769:282;;;6842:13;;6884:9;;-1:-1:-1;;;;;6880:35:1;6868:48;;6956:11;;6950:18;6936:12;;;6929:40;6998:4;6989:14;;;;7026:15;;;;6912:1;6798:9;6769:282;;;-1:-1:-1;7067:3:1;;6524:552;-1:-1:-1;;;;;6524:552:1:o;7081:471::-;7122:3;7160:5;7154:12;7187:6;7182:3;7175:19;7212:1;7222:162;7236:6;7233:1;7230:13;7222:162;;;7298:4;7354:13;;;7350:22;;7344:29;7326:11;;;7322:20;;7315:59;7251:12;7222:162;;;7402:6;7399:1;7396:13;7393:87;;;7468:1;7461:4;7452:6;7447:3;7443:16;7439:27;7432:38;7393:87;-1:-1:-1;7534:2:1;7513:15;-1:-1:-1;;7509:29:1;7500:39;;;;7541:4;7496:50;;7081:471;-1:-1:-1;;7081:471:1:o;7557:1287::-;-1:-1:-1;;;7811:3:1;7804:22;7786:3;7845:1;7866;7899:6;7893:13;7929:3;7951:1;7979:9;7975:2;7971:18;7961:28;;8039:2;8028:9;8024:18;8061;8051:61;;8105:4;8097:6;8093:17;8083:27;;8051:61;8131:2;8179;8171:6;8168:14;8148:18;8145:38;8142:165;;;-1:-1:-1;;;8206:33:1;;8262:4;8259:1;8252:15;8292:4;8213:3;8280:17;8142:165;8323:18;8350:122;;;;8486:1;8481:338;;;;8316:503;;8350:122;-1:-1:-1;;8392:24:1;;8378:12;;;8371:46;8441:16;;;8437:25;;;-1:-1:-1;8350:122:1;;8481:338;22048:1;22041:14;;;22085:4;22072:18;;8576:1;8590:174;8604:6;8601:1;8598:13;8590:174;;;8691:14;;8673:11;;;8669:20;;8662:44;8734:16;;;;8619:10;;8590:174;;;8594:3;;8806:2;8797:6;8792:3;8788:16;8784:25;8777:32;;8316:503;-1:-1:-1;8835:3:1;;7557:1287;-1:-1:-1;;;;;;;;;7557:1287:1:o;9057:488::-;-1:-1:-1;;;;;9326:15:1;;;9308:34;;9378:15;;9373:2;9358:18;;9351:43;9425:2;9410:18;;9403:34;;;9473:3;9468:2;9453:18;;9446:31;;;9251:4;;9494:45;;9519:19;;9511:6;9494:45;:::i;:::-;9486:53;9057:488;-1:-1:-1;;;;;;9057:488:1:o;9829:307::-;10050:2;10039:9;10032:21;10013:4;10070:60;10126:2;10115:9;10111:18;10103:6;10070:60;:::i;10333:495::-;-1:-1:-1;;;;;10574:3:1;10570:36;10562:6;10558:49;10547:9;10540:68;10644:2;10639;10628:9;10624:18;10617:30;10521:4;10670:44;10710:2;10699:9;10695:18;10687:6;10670:44;:::i;:::-;10762:9;10754:6;10750:22;10745:2;10734:9;10730:18;10723:50;10790:32;10815:6;10807;10790:32;:::i;10833:219::-;10982:2;10971:9;10964:21;10945:4;11002:44;11042:2;11031:9;11027:18;11019:6;11002:44;:::i;11469:414::-;11671:2;11653:21;;;11710:2;11690:18;;;11683:30;11749:34;11744:2;11729:18;;11722:62;-1:-1:-1;;;11815:2:1;11800:18;;11793:48;11873:3;11858:19;;11469:414::o;16608:356::-;16810:2;16792:21;;;16829:18;;;16822:30;16888:34;16883:2;16868:18;;16861:62;16955:2;16940:18;;16608:356::o;18197:398::-;18399:2;18381:21;;;18438:2;18418:18;;;18411:30;18477:34;18472:2;18457:18;;18450:62;-1:-1:-1;;;18543:2:1;18528:18;;18521:32;18585:3;18570:19;;18197:398::o;19009:413::-;19211:2;19193:21;;;19250:2;19230:18;;;19223:30;19289:34;19284:2;19269:18;;19262:62;-1:-1:-1;;;19355:2:1;19340:18;;19333:47;19412:3;19397:19;;19009:413::o;21592:378::-;21841:6;21830:9;21823:25;21884:2;21879;21868:9;21864:18;21857:30;21804:4;21904:60;21960:2;21949:9;21945:18;21937:6;21904:60;:::i;22101:128::-;22141:3;22172:1;22168:6;22165:1;22162:13;22159:39;;;22178:18;;:::i;:::-;-1:-1:-1;22214:9:1;;22101:128::o;22234:217::-;22274:1;22300;22290:132;;22344:10;22339:3;22335:20;22332:1;22325:31;22379:4;22376:1;22369:15;22407:4;22404:1;22397:15;22290:132;-1:-1:-1;22436:9:1;;22234:217::o;22456:168::-;22496:7;22562:1;22558;22554:6;22550:14;22547:1;22544:21;22539:1;22532:9;22525:17;22521:45;22518:71;;;22569:18;;:::i;:::-;-1:-1:-1;22609:9:1;;22456:168::o;22629:125::-;22669:4;22697:1;22694;22691:8;22688:34;;;22702:18;;:::i;:::-;-1:-1:-1;22739:9:1;;22629:125::o;22759:380::-;22838:1;22834:12;;;;22881;;;22902:61;;22956:4;22948:6;22944:17;22934:27;;22902:61;23009:2;23001:6;22998:14;22978:18;22975:38;22972:161;;;23055:10;23050:3;23046:20;23043:1;23036:31;23090:4;23087:1;23080:15;23118:4;23115:1;23108:15;22972:161;;22759:380;;;:::o;23144:135::-;23183:3;-1:-1:-1;;23204:17:1;;23201:43;;;23224:18;;:::i;:::-;-1:-1:-1;23271:1:1;23260:13;;23144:135::o;23284:127::-;23345:10;23340:3;23336:20;23333:1;23326:31;23376:4;23373:1;23366:15;23400:4;23397:1;23390:15;23416:127;23477:10;23472:3;23468:20;23465:1;23458:31;23508:4;23505:1;23498:15;23532:4;23529:1;23522:15;23548:127;23609:10;23604:3;23600:20;23597:1;23590:31;23640:4;23637:1;23630:15;23664:4;23661:1;23654:15;23680:127;23741:10;23736:3;23732:20;23729:1;23722:31;23772:4;23769:1;23762:15;23796:4;23793:1;23786:15;23812:131;-1:-1:-1;;;;;23887:31:1;;23877:42;;23867:70;;23933:1;23930;23923:12;23867:70;23812:131;:::o;23948:::-;-1:-1:-1;;;;;;24022:32:1;;24012:43;;24002:71;;24069:1;24066;24059:12

Swarm Source

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