ETH Price: $3,464.76 (-0.78%)

Token

HypedHuskyMetaCityNFT (HHMC)
 

Overview

Max Total Supply

524 HHMC

Holders

155

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
eric333.eth
0xbf740d0df311fbda350cf4693d559a1565b27259
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
HypedHuskyMetaCityNFT

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-25
*/

// SPDX-Identifier: MIT
pragma solidity >= 0.5.17;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: openzeppelin-solidity\contracts\ownership\Ownable.sol


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: node_modules\multi-token-standard\contracts\interfaces\IERC165.sol




/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {

    /**
     * @notice Query if a contract implements an interface
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas
     * @param _interfaceId The interface identifier, as specified in ERC-165
     */
    function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

// File: node_modules\multi-token-standard\contracts\utils\SafeMath.sol



/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {

  /**
   * @dev Multiplies two unsigned integers, reverts on overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath#mul: OVERFLOW");

    return c;
  }

  /**
   * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, "SafeMath#div: DIVISION_BY_ZERO");
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a, "SafeMath#sub: UNDERFLOW");
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Adds two unsigned integers, reverts on overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath#add: OVERFLOW");

    return c; 
  }

  /**
   * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
   * reverts when dividing by zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO");
    return a % b;
  }

}

// File: node_modules\multi-token-standard\contracts\interfaces\IERC1155TokenReceiver.sol


/**
 * @dev ERC-1155 interface for accepting safe transfers.
 */
interface IERC1155TokenReceiver {

  /**
   * @notice Handle the receipt of a single ERC1155 token type
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value MUST result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _id        The id of the token being transferred
   * @param _amount    The amount of tokens being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   */
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Handle the receipt of multiple ERC1155 token types
   * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated
   * This function MAY throw to revert and reject the transfer
   * Return of other amount than the magic value WILL result in the transaction being reverted
   * Note: The token contract address is always the message sender
   * @param _operator  The address which called the `safeBatchTransferFrom` function
   * @param _from      The address which previously owned the token
   * @param _ids       An array containing ids of each token being transferred
   * @param _amounts   An array containing amounts of each token being transferred
   * @param _data      Additional data with no specified format
   * @return           `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   */
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);

  /**
   * @notice Indicates whether a contract implements the `ERC1155TokenReceiver` functions and so can accept ERC1155 token types.
   * @param  interfaceID The ERC-165 interface ID that is queried for support.s
   * @dev This function MUST return true if it implements the ERC1155TokenReceiver interface and ERC-165 interface.
   *      This function MUST NOT consume more than 5,000 gas.
   * @return Wheter ERC-165 or ERC1155TokenReceiver interfaces are supported.
   */
  function supportsInterface(bytes4 interfaceID) external view returns (bool);

}

// File: node_modules\multi-token-standard\contracts\interfaces\IERC1155.sol



interface IERC1155 {
  // Events

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);

  /**
   * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
   *   Operator MUST be msg.sender
   *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
   *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
   *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
   *   To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
   */
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);

  /**
   * @dev MUST emit when an approval is updated
   */
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /**
   * @dev MUST emit when the URI is updated for a token ID
   *   URIs are defined in RFC 3986
   *   The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema"
   */
  event URI(string _amount, uint256 indexed _id);

  /**
   * @notice Transfers amount of an _id from the _from address to the _to address specified
   * @dev MUST emit TransferSingle event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @dev MUST emit TransferBatch event on success
   * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
   * MUST throw if `_to` is the zero address
   * MUST throw if length of `_ids` is not the same as length of `_amounts`
   * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent
   * MUST throw on any other error
   * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
   * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
  */
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  
  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return        The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @dev MUST emit the ApprovalForAll event on success
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved) external;

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return           True if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);

}

// File: node_modules\multi-token-standard\contracts\utils\Address.sol

/**
 * Copyright 2018 ZeroEx Intl.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */



/**
 * Utility library of inline functions on addresses
 */
library Address {

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param account address of the account to check
   * @return whether the target address is a contract
   */
  function isContract(address account) internal view returns (bool) {
    bytes32 codehash;
    bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    assembly { codehash := extcodehash(account) }
    return (codehash != 0x0 && codehash != accountHash);
  }

}




/**
 * @notice Contract that handles metadata related methods.
 * @dev Methods assume a deterministic generation of URI based on token IDs.
 *      Methods also assume that URI uses hex representation of token IDs.
 */
contract ERC1155Metadata {

  // URI's default URI prefix
  string internal baseMetadataURI;
  event URI(string _uri, uint256 indexed _id);


  /***********************************|
  |     Metadata Public Function s    |
  |__________________________________*/

  /**
   * @notice A distinct Uniform Resource Identifier (URI) for a given token.
   * @dev URIs are defined in RFC 3986.
   *      URIs are assumed to be deterministically generated based on token ID
   *      Token IDs are assumed to be represented in their hex format in URIs
   * @return URI string
   */
  function uri(uint256 _id) public view returns (string memory) {
    return string(abi.encodePacked(baseMetadataURI, _uint2str(_id), ".json"));
  }


  /***********************************|
  |    Metadata Internal Functions    |
  |__________________________________*/

  /**
   * @notice Will emit default URI log event for corresponding token _id
   * @param _tokenIDs Array of IDs of tokens to log default URI
   */
  function _logURIs(uint256[] memory _tokenIDs) internal {
    string memory baseURL = baseMetadataURI;
    string memory tokenURI;

    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      tokenURI = string(abi.encodePacked(baseURL, _uint2str(_tokenIDs[i]), ".json"));
      emit URI(tokenURI, _tokenIDs[i]);
    }
  }

  /**
   * @notice Will emit a specific URI log event for corresponding token
   * @param _tokenIDs IDs of the token corresponding to the _uris logged
   * @param _URIs    The URIs of the specified _tokenIDs
   */
  function _logURIs(uint256[] memory _tokenIDs, string[] memory _URIs) internal {
    require(_tokenIDs.length == _URIs.length, "ERC1155Metadata#_logURIs: INVALID_ARRAYS_LENGTH");
    for (uint256 i = 0; i < _tokenIDs.length; i++) {
      emit URI(_URIs[i], _tokenIDs[i]);
    }
  }

  /**
   * @notice Will update the base URL of token's URI
   * @param _newBaseMetadataURI New base URL of token's URI
   */
  function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal {
    baseMetadataURI = _newBaseMetadataURI;
  }


  /***********************************|
  |    Utility Internal Functions     |
  |__________________________________*/

  /**
   * @notice Convert uint256 to string
   * @param _i Unsigned integer to convert to string
   */
  function _uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
    if (_i == 0) {
      return "0";
    }

    uint256 j = _i;
    uint256 ii = _i;
    uint256 len;

    // Get number of bytes
    while (j != 0) {
      len++;
      j /= 10;
    }

    bytes memory bstr = new bytes(len);
    uint256 k = len - 1;

    // Get each individual ASCII
    while (ii != 0) {
      bstr[k--] = byte(uint8(48 + ii % 10));
      ii /= 10;
    }

    // Convert to string
    return string(bstr);
  }

}

// File: node_modules\multi-token-standard\contracts\tokens\ERC1155\ERC1155.sol








/**
 * @dev Implementation of Multi-Token Standard contract
 */
contract ERC1155 is IERC165 {
  using SafeMath for uint256;
  using Address for address;


  /***********************************|
  |        Variables and Events       |
  |__________________________________*/

  // onReceive function signatures
  bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61;
  bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;

  // Objects balances
  mapping (address => mapping(uint256 => uint256)) internal balances;

  // Operator Functions
  mapping (address => mapping(address => bool)) internal operators;

  // Events
  event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);
  event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
  event URI(string _uri, uint256 indexed _id);


  /***********************************|
  |     Public Transfer Functions     |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   * @param _data    Additional data with no specified format, sent in call to `_to`
   */
  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    public
  {
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeTransferFrom: INVALID_OPERATOR");
    require(_to != address(0),"ERC1155#safeTransferFrom: INVALID_RECIPIENT");
    // require(_amount >= balances[_from][_id]) is not necessary since checked with safemath operations

    _safeTransferFrom(_from, _to, _id, _amount);
    _callonERC1155Received(_from, _to, _id, _amount, _data);
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   * @param _data     Additional data with no specified format, sent in call to `_to`
   */
  function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    public
  {
    // Requirements
    require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155#safeBatchTransferFrom: INVALID_OPERATOR");
    require(_to != address(0), "ERC1155#safeBatchTransferFrom: INVALID_RECIPIENT");

    _safeBatchTransferFrom(_from, _to, _ids, _amounts);
    _callonERC1155BatchReceived(_from, _to, _ids, _amounts, _data);
  }


  /***********************************|
  |    Internal Transfer Functions    |
  |__________________________________*/

  /**
   * @notice Transfers amount amount of an _id from the _from address to the _to address specified
   * @param _from    Source address
   * @param _to      Target address
   * @param _id      ID of the token type
   * @param _amount  Transfered amount
   */
  function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount)
    internal
  {
    // Update balances
    balances[_from][_id] = balances[_from][_id].sub(_amount); // Subtract amount
    balances[_to][_id] = balances[_to][_id].add(_amount);     // Add amount

    // Emit event
    emit TransferSingle(msg.sender, _from, _to, _id, _amount);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...)
   */
  function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
  {
    // Check if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received(msg.sender, _from, _id, _amount, _data);
      require(retval == ERC1155_RECEIVED_VALUE, "ERC1155#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE");
    }
  }

  /**
   * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
   * @param _from     Source addresses
   * @param _to       Target addresses
   * @param _ids      IDs of each token type
   * @param _amounts  Transfer amounts per token type
   */
  function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH");

    // Number of transfer to execute
    uint256 nTransfer = _ids.length;

    // Executing all transfers
    for (uint256 i = 0; i < nTransfer; i++) {
      // Update storage balance of previous bin
      balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
      balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
    }

    // Emit event
    emit TransferBatch(msg.sender, _from, _to, _ids, _amounts);
  }

  /**
   * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...)
   */
  function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    // Pass data if recipient is contract
    if (_to.isContract()) {
      bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived(msg.sender, _from, _ids, _amounts, _data);
      require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE");
    }
  }


  /***********************************|
  |         Operator Functions        |
  |__________________________________*/

  /**
   * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
   * @param _operator  Address to add to the set of authorized operators
   * @param _approved  True if the operator is approved, false to revoke approval
   */
  function setApprovalForAll(address _operator, bool _approved)
    external
  {
    // Update operator status
    operators[msg.sender][_operator] = _approved;
    emit ApprovalForAll(msg.sender, _operator, _approved);
  }

  /**
   * @notice Queries the approval status of an operator for a given owner
   * @param _owner     The owner of the Tokens
   * @param _operator  Address of authorized operator
   * @return True if the operator is approved, false if not
   */
  function isApprovedForAll(address _owner, address _operator)
    public view returns (bool isOperator)
  {
    return operators[_owner][_operator];
  }


  /***********************************|
  |         Balance Functions         |
  |__________________________________*/

  /**
   * @notice Get the balance of an account's Tokens
   * @param _owner  The address of the token holder
   * @param _id     ID of the Token
   * @return The _owner's balance of the Token type requested
   */
  function balanceOf(address _owner, uint256 _id)
    public view returns (uint256)
  {
    return balances[_owner][_id];
  }

  /**
   * @notice Get the balance of multiple account/token pairs
   * @param _owners The addresses of the token holders
   * @param _ids    ID of the Tokens
   * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
   */
  function balanceOfBatch(address[] memory _owners, uint256[] memory _ids)
    public view returns (uint256[] memory)
  {
    require(_owners.length == _ids.length, "ERC1155#balanceOfBatch: INVALID_ARRAY_LENGTH");

    // Variables
    uint256[] memory batchBalances = new uint256[](_owners.length);

    // Iterate over each owner and token ID
    for (uint256 i = 0; i < _owners.length; i++) {
      batchBalances[i] = balances[_owners[i]][_ids[i]];
    }

    return batchBalances;
  }


  /***********************************|
  |          ERC165 Functions         |
  |__________________________________*/

  /**
   * INTERFACE_SIGNATURE_ERC165 = bytes4(keccak256("supportsInterface(bytes4)"));
   */
  bytes4 constant private INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7;

  /**
   * INTERFACE_SIGNATURE_ERC1155 =
   * bytes4(keccak256("safeTransferFrom(address,address,uint256,uint256,bytes)")) ^
   * bytes4(keccak256("safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)")) ^
   * bytes4(keccak256("balanceOf(address,uint256)")) ^
   * bytes4(keccak256("balanceOfBatch(address[],uint256[])")) ^
   * bytes4(keccak256("setApprovalForAll(address,bool)")) ^
   * bytes4(keccak256("isApprovedForAll(address,address)"));
   */
  bytes4 constant private INTERFACE_SIGNATURE_ERC1155 = 0xd9b67a26;

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceID  The interface identifier, as specified in ERC-165
   * @return `true` if the contract implements `_interfaceID` and
   */
  function supportsInterface(bytes4 _interfaceID) external view returns (bool) {
    if (_interfaceID == INTERFACE_SIGNATURE_ERC165 ||
        _interfaceID == INTERFACE_SIGNATURE_ERC1155) {
      return true;
    }
    return false;
  }

}

// File: multi-token-standard\contracts\tokens\ERC1155\ERC1155MintBurn.sol




/**
 * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume
 *      a parent contract to be executed as they are `internal` functions
 */
contract ERC1155MintBurn is ERC1155 {


  /****************************************|
  |            Minting Functions           |
  |_______________________________________*/

  /**
   * @notice Mint _amount of tokens of a given id
   * @param _to      The address to mint tokens to
   * @param _id      Token id to mint
   * @param _amount  The amount to be minted
   * @param _data    Data to pass if receiver is contract
   */
  function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
  {
    // Add _amount
    balances[_to][_id] = balances[_to][_id].add(_amount);

    // Emit event
    emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);

    // Calling onReceive method if recipient is contract
    _callonERC1155Received(address(0x0), _to, _id, _amount, _data);
  }

  /**
   * @notice Mint tokens for each ids in _ids
   * @param _to       The address to mint tokens to
   * @param _ids      Array of ids to mint
   * @param _amounts  Array of amount of tokens to mint per id
   * @param _data    Data to pass if receiver is contract
   */
  function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchMint: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nMint = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nMint; i++) {
      // Update storage balance
      balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts);

    // Calling onReceive method if recipient is contract
    _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, _data);
  }


  /****************************************|
  |            Burning Functions           |
  |_______________________________________*/

  /**
   * @notice Burn _amount of tokens of a given token id
   * @param _from    The address to burn tokens from
   * @param _id      Token id to burn
   * @param _amount  The amount to be burned
   */
  function _burn(address _from, uint256 _id, uint256 _amount)
    internal
  {
    //Substract _amount
    balances[_from][_id] = balances[_from][_id].sub(_amount);

    // Emit event
    emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount);
  }

  /**
   * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair
   * @param _from     The address to burn tokens from
   * @param _ids      Array of token ids to burn
   * @param _amounts  Array of the amount to be burned
   */
  function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts)
    internal
  {
    require(_ids.length == _amounts.length, "ERC1155MintBurn#batchBurn: INVALID_ARRAYS_LENGTH");

    // Number of mints to execute
    uint256 nBurn = _ids.length;

     // Executing all minting
    for (uint256 i = 0; i < nBurn; i++) {
      // Update storage balance
      balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
    }

    // Emit batch mint event
    emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts);
  }

}

// File: contracts\Strings.sol


library Strings {
  // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
  function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) {
      bytes memory _ba = bytes(_a);
      bytes memory _bb = bytes(_b);
      bytes memory _bc = bytes(_c);
      bytes memory _bd = bytes(_d);
      bytes memory _be = bytes(_e);
      string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
      bytes memory babcde = bytes(abcde);
      uint k = 0;
      for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
      for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
      for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
      for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
      for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i];
      return string(babcde);
    }

    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string memory _a, string memory _b) internal pure returns (string memory) {
        return strConcat(_a, _b, "", "", "");
    }

    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }

    /**
     * Index Of
     *
     * Locates and returns the position of a character within a string
     * 
     * @param _base When being used for a data type this is the extended object
     *              otherwise this is the string acting as the haystack to be
     *              searched
     * @param _value The needle to search for, at present this is currently
     *               limited to one character
     * @return int The position of the needle starting from 0 and returning -1
     *             in the case of no matches found
     */
    function indexOf(string memory _base, string memory _value)
        internal
        pure
        returns (int) {
        return _indexOf(_base, _value, 0);
    }

    /**
     * Index Of
     *
     * Locates and returns the position of a character within a string starting
     * from a defined offset
     * 
     * @param _base When being used for a data type this is the extended object
     *              otherwise this is the string acting as the haystack to be
     *              searched
     * @param _value The needle to search for, at present this is currently
     *               limited to one character
     * @param _offset The starting point to start searching from which can start
     *                from 0, but must not exceed the length of the string
     * @return int The position of the needle starting from 0 and returning -1
     *             in the case of no matches found
     */
    function _indexOf(string memory _base, string memory _value, uint _offset)
        internal
        pure
        returns (int) {
        bytes memory _baseBytes = bytes(_base);
        bytes memory _valueBytes = bytes(_value);

        assert(_valueBytes.length == 1);

        for (uint i = _offset; i < _baseBytes.length; i++) {
            if (_baseBytes[i] == _valueBytes[0]) {
                return int(i);
            }
        }

        return -1;
    }
}

// File: contracts\ERC1155Tradable.sol







contract OwnableDelegateProxy { }

contract ProxyRegistry {
  mapping(address => OwnableDelegateProxy) public proxies;
}

/**
 * @title ERC1155Tradable
 * ERC1155Tradable - ERC1155 contract that whitelists an operator address, has create and mint functionality, and supports useful standards from OpenZeppelin,
  like _exists(), name(), symbol(), and totalSupply()
 */
contract ERC1155Tradable is ERC1155, ERC1155MintBurn, ERC1155Metadata, Ownable {

    //address proxyRegistryAddress;
	  uint256 private totalTokenAssets = 10000;
    uint256 private totalReserve = 336;
    uint256 public _currentTokenID = 0;
    uint256 public _customizedTokenId = 9000;
    // uint256 private _maxTokenPerUser = 1000;
    uint256 private _maxTokenPerMint = 2;
    uint256 public sold = 0;
    uint256 private reserved = 0;
    // uint256 private presalesMaxToken = 3;
    uint256 private preSalesPrice1 = 0.07 ether;
    uint256 private preSalesPrice2 = 0.088 ether;
    uint256 private publicSalesPrice = 0.088 ether;
    uint256 private preSalesMaxSupply3 = 9000;
    address private signerAddress = 0x22A19Fd9F3a29Fe8260F88C46dB04941Fa0615C9;
    uint16 public salesStage = 3; //1-presales1 , 2-presales2 , 3-public
    address payable public companyWallet = 0xE369C3f00d8dc97Be4B58a7ede901E48c4767bD2; //test

    mapping(uint256 => uint256) private _presalesPrice;
    mapping(address => uint256) public presales1minted; // To check how many tokens an address has minted during presales
    mapping(address => uint256) public presales2minted; // To check how many tokens an address has minted during presales
    mapping(address => uint256) public minted; // To check how many tokens an address has minted
    mapping (uint256 => address) public creators;
    mapping (uint256 => uint256) public tokenSupply;
    mapping(uint256 => string) public rawdata;

    event TokenMinted(uint indexed _tokenid, address indexed _userAddress, string indexed _rawData);
    // Contract name
    string public name;
    // Contract symbol
    string public symbol;
    
    /**
    * @dev Require msg.sender to be the creator of the token id
    */
    modifier creatorOnly(uint256 _id) {
        require(creators[_id] == msg.sender, "ERC1155Tradable#creatorOnly: ONLY_CREATOR_ALLOWED");
        _;
    }

    /**
    * @dev Require msg.sender to own more than 0 of the token id
    */
    modifier ownersOnly(uint256 _id) {
        require(balances[msg.sender][_id] > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED");
        _;
    }

    constructor(
        string memory _name,
        string memory _symbol
        //address _proxyRegistryAddress
    ) public {
        name = _name;
        symbol = _symbol;
        //proxyRegistryAddress = _proxyRegistryAddress;
    }

    using Strings for string;

    // // Function to receive Ether. msg.data must be empty
    // receive() external payable {}

    // // Fallback function is called when msg.data is not empty
    // fallback() external payable {}

    function uri(
        uint256 _id
    ) public view returns (string memory) {
        require(_exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        return Strings.strConcat(
        baseMetadataURI,
        Strings.uint2str(_id)
        );
    }

    /**
        * @dev Returns the total quantity for a token ID
        * @param _id uint256 ID of the token to query
        * @return amount of token in existence
        */
    function totalSupply(
        uint256 _id
    ) public view returns (uint256) {
        return tokenSupply[_id];
    }



    /**
    * @dev Will update the base URL of token's URI
    * @param _newBaseMetadataURI New base URL of token's URI
    */
    function setBaseMetadataURI(
        string memory _newBaseMetadataURI
    ) public onlyOwner {
        _setBaseMetadataURI(_newBaseMetadataURI);
    }

    /**
        * @dev Creates a new token type and assigns _initialSupply to an address
        * NOTE: remove onlyOwner if you want third parties to create new tokens on your contract (which may change your IDs)
        * @param _initialOwner address of the first owner of the token
        * @param _initialSupply amount to supply the first owner
        * @param _uri Optional URI for this token type
        * @param _data Data to pass if receiver is contract
        * @return The newly created token ID
        */
    function reserve( //When start this mint 336 first
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _uri,
        bytes calldata _data
    ) external onlyOwner returns (uint256) {
        require(reserved + _initialSupply <= totalReserve, "Reserve Empty");

        sold += _initialSupply;
        
        for (uint256 i = 0; i < _initialSupply; i++) {
        reserved++;
        uint256 _id = reserved;

        if (bytes(_uri).length > 0) {
            emit URI(_uri, _id);
        }


        creators[_id] = msg.sender;
        _mint(_initialOwner, _id, 1, _data);
        tokenSupply[_id] = 1;
        }
        return 0;
    }
    
    function toBytes(address a) public pure returns (bytes memory b){
        assembly {
            let m := mload(0x40)
            a := and(a, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
            mstore(add(m, 20), xor(0x140000000000000000000000000000000000000000, a))
            mstore(0x40, add(m, 52))
            b := m
        }
    }

    function addressToString(address _addr) internal pure returns(string memory) {
        bytes32 value = bytes32(uint256(_addr));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = "0";
        str[1] = "x";
        for (uint i = 0; i < 20; i++) {
            str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))];
        }
        return string(str);
    }

    function toAsciiString(address x) internal pure returns (string memory) {
        bytes memory s = new bytes(40);
        for (uint i = 0; i < 20; i++) {
            bytes1 b = bytes1(uint8(uint(uint160(x)) / (2**(8*(19 - i)))));
            bytes1 hi = bytes1(uint8(b) / 16);
            bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));
            s[2*i] = char(hi);
            s[2*i+1] = char(lo);            
        }
        return string(s);
    }


    function char(
        bytes1 b
        ) internal pure returns (bytes1 c) {
        if (uint8(b) < 10) return bytes1(uint8(b) + 0x30);
        else return bytes1(uint8(b) + 0x57);
    }

    function bytes32ToString(bytes32 _bytes32) public pure returns (string memory) {
        uint8 i = 0;
        bytes memory bytesArray = new bytes(64);
        for (i = 0; i < bytesArray.length; i++) {

            uint8 _f = uint8(_bytes32[i/2] & 0x0f);
            uint8 _l = uint8(_bytes32[i/2] >> 4);

            bytesArray[i] = toByte(_f);
            i = i + 1;
            bytesArray[i] = toByte(_l);
        }
        return string(bytesArray);
    }

    function stringToBytes32(string memory source) public pure returns (bytes32 result) {
        bytes memory tempEmptyStringTest = bytes(source);
        if (tempEmptyStringTest.length == 0) {
            return 0x0;
        }

        assembly {
            result := mload(add(source, 32))
        }
    }

    function splitSignature(bytes memory sig)
        public
        pure
        returns (uint8, bytes32, bytes32)
    {
        require(sig.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;

        assembly {
            // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
            // second 32 bytes
            s := mload(add(sig, 64))
            // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }
        
        return (v, r, s);
    }

    function recoverSigner(bytes32 message, bytes memory sig)
        public
        pure
        returns (address)
        {
        uint8 v;
        bytes32 r;
        bytes32 s;

        (v, r, s) = splitSignature(sig);
        return ecrecover(message, v, r, s);
    }
    
    function isValidData(string memory _word, bytes memory sig) public view returns(bool){
        bytes32 message = keccak256(abi.encodePacked(_word));
        return (recoverSigner(message, sig) == signerAddress);
    }


    function toByte(uint8 _uint8) public pure returns (byte) {
        if(_uint8 < 10) {
            return byte(_uint8 + 48);
        } else {
            return byte(_uint8 + 87);
        }
    }

    function withdraw() public onlyOwner {
      require(companyWallet != address(0), "Please Set Company Wallet Address");
      uint256 balance = address(this).balance;
      companyWallet.transfer(balance);
    }

        
    function presales(
        address _initialOwner,
        uint256 _initialSupply,
        bytes calldata _sig,
        bytes calldata _data
    ) external payable returns (uint256) {
        require(salesStage == 1 || salesStage == 2, "Presales is closed");
        if(salesStage == 1){
            require(sold + _initialSupply <= preSalesMaxSupply3, "Max Token reached for Sales Stage 1");
            require(_initialSupply * preSalesPrice1 == msg.value, "Invalid Fund");

        }else if(salesStage == 2){
            require(sold + _initialSupply <= preSalesMaxSupply3, "Max Token reached for Sales Stage 2");
            require(_initialSupply * preSalesPrice2 == msg.value, "Invalid Fund");
        }
        require(isValidData(addressToString(msg.sender), _sig), addressToString(msg.sender));
        
        sold += _initialSupply;

        if(salesStage == 1){
        presales1minted[_initialOwner] += _initialSupply;
        }else if(salesStage == 2){
        presales2minted[_initialOwner] += _initialSupply;
        }
        minted[_initialOwner] += _initialSupply;

        for (uint256 i = 0; i < _initialSupply; i++) {
        uint256 _id = _getNextTokenID() + totalReserve;
        _incrementTokenTypeId();
        creators[_id] = msg.sender;
        _mint(_initialOwner, _id, 1, _data);
        tokenSupply[_id] = 1;
        emit TokenMinted(_id, _initialOwner, "");
        }

        return 0;
    }


    function publicsales(
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _uri,
        bytes calldata _data
    ) external payable returns (uint256) {
        require(salesStage == 3 , "Public Sales Is Closed");
        require(sold + _initialSupply <= preSalesMaxSupply3, "Max Token reached for Sales Stage 3");
        require(_initialSupply * publicSalesPrice == msg.value , "Invalid Fund");

        sold += _initialSupply;
        minted[_initialOwner] += _initialSupply;

        for (uint256 i = 0; i < _initialSupply; i++) {
        uint256 _id = _getNextTokenID() + totalReserve;
        _incrementTokenTypeId();

        if (bytes(_uri).length > 0) {
        emit URI(_uri, _id);
        }

        creators[_id] = msg.sender;
        _mint(_initialOwner, _id, 1, _data);
        tokenSupply[_id] = 1;
        emit TokenMinted(_id, _initialOwner, "");
        }
        return 0;
    }

    function CustomizedSales(
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _rawdata,
        bytes calldata _sig,
        bytes calldata _data,
        uint price
    ) external payable returns (uint256) {
        string memory data = Strings.strConcat(_rawdata, _uint2str(price));
        require(isValidData(data, _sig), "Invalid Signature");
        uint temp_id = _getNextCustomizedTokenID();
        require(temp_id + _initialSupply -1 <= totalTokenAssets, "Max Token Minted");
        require(msg.value == price, "Invalid fund");

        for (uint256 i = 0; i < _initialSupply; i++) {
            uint256 _id = _getNextCustomizedTokenID();
            _incrementCustomizedTokenTypeId();
            creators[_id] = msg.sender;
            _mint(_initialOwner, _id, 1, _data);
            tokenSupply[_id] = 1;
            rawdata[_id] = _rawdata;
            emit TokenMinted(_id, _initialOwner, _rawdata);
        }
        return 0;
    }

    function setSalesStage(
        uint16 stage
    ) public onlyOwner {
        salesStage = stage;
    }

    function setCompanyWallet(
        address payable newWallet
    ) public onlyOwner {
        companyWallet = newWallet;
    }

    
    function ownerMint( 
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _uri,
        bytes calldata _data
    ) external onlyOwner returns (uint256) {
        require(sold + _initialSupply <= preSalesMaxSupply3, "Max Token Minted");

        sold += _initialSupply;
        
        for (uint256 i = 0; i < _initialSupply; i++) {
            uint256 _id = _getNextTokenID() + totalReserve;
            _incrementTokenTypeId();
            //uint256 _id = reserved;

        if (bytes(_uri).length > 0) {
            emit URI(_uri, _id);
        }


        creators[_id] = msg.sender;
        _mint(_initialOwner, _id, 1, _data);
        tokenSupply[_id] = 1;
        }
        return 0;
    }
    
    function walletbalance(
    ) public view returns (uint256) {
            return address(this).balance;
        }
    

    /**
        * @dev Mint tokens for each id in _ids
        * @param _to          The address to mint tokens to
        * @param _ids         Array of ids to mint
        * @param _quantities  Array of amounts of tokens to mint per id
        * @param _data        Data to pass if receiver is contract
        */
    function batchMint(
        address _to,
        uint256[] memory _ids,
        uint256[] memory _quantities,
        bytes memory _data
    ) public {
        for (uint256 i = 0; i < _ids.length; i++) {
        uint256 _id = _ids[i];
        require(creators[_id] == msg.sender, "ERC1155Tradable#batchMint: ONLY_CREATOR_ALLOWED");
        uint256 quantity = _quantities[i];
        tokenSupply[_id] = tokenSupply[_id].add(quantity);
        }
        _batchMint(_to, _ids, _quantities, _data);
    }

    function setPrice(uint _sale1, uint _sale2, uint _salepublic) external onlyOwner{
      preSalesPrice1 = _sale1;
      preSalesPrice2 = _sale2;
      publicSalesPrice = _salepublic;
    }

    /**
        * @dev Change the creator address for given tokens
        * @param _to   Address of the new creator
        * @param _ids  Array of Token IDs to change creator
        */
    function setCreator(
        address _to,
        uint256[] memory _ids
    ) public {
        require(_to != address(0), "ERC1155Tradable#setCreator: INVALID_ADDRESS.");
        for (uint256 i = 0; i < _ids.length; i++) {
        uint256 id = _ids[i];
        _setCreator(_to, id);
        }
    }

  /**
    * @dev Change the creator address for given token
    * @param _to   Address of the new creator
    * @param _id  Token IDs to change creator of
    */
    function _setCreator(address _to, uint256 _id) internal creatorOnly(_id)
    {
        creators[_id] = _to;
    }

    /**
        * @dev Returns whether the specified token exists by checking to see if it has a creator
        * @param _id uint256 ID of the token to query the existence of
        * @return bool whether the token exists
        */
    function _exists(
        uint256 _id
    ) internal view returns (bool) {
        return creators[_id] != address(0);
    }

    /**
        * @dev calculates the next token ID based on value of _currentTokenID
        * @return uint256 for the next token ID
        */
    function _getNextTokenID() private view returns (uint256) {
        return _currentTokenID.add(1);
    }

    /**
        * @dev calculates the next token ID based on value of _customizedTokenId
        * @return uint256 for the next token ID
        */
    function _getNextCustomizedTokenID() private view returns (uint256) {
        return _customizedTokenId.add(1);
    }

    /**
        * @dev increments the value of _currentTokenID
        */
    function _incrementTokenTypeId() private  {
        _currentTokenID++;
    }

    /**
        * @dev increments the value of _customizedTokenId
        */
    function _incrementCustomizedTokenTypeId() private  {
        _customizedTokenId++;
    }
}


// File: contracts\MyCollectible.sol



/**
 * @title MyCollectible
 * MyCollectible - a contract for my semi-fungible tokens.
 */
contract HypedHuskyMetaCityNFT is ERC1155Tradable {
  constructor(string memory _name)//address _proxyRegistryAddress)
  ERC1155Tradable(
    _name,
    "HHMC"
  ) public {
    _setBaseMetadataURI("https://api.HypedHuskyMetaCityNFT.io/nft/");
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_tokenid","type":"uint256"},{"indexed":true,"internalType":"address","name":"_userAddress","type":"address"},{"indexed":true,"internalType":"string","name":"_rawData","type":"string"}],"name":"TokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_rawdata","type":"string"},{"internalType":"bytes","name":"_sig","type":"bytes"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"CustomizedSales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"_currentTokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_customizedTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_bytes32","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"companyWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"_word","type":"string"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"isValidData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"ownerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"bytes","name":"_sig","type":"bytes"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"presales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales1minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presales2minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"publicsales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rawdata","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"salesStage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_newBaseMetadataURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setCompanyWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"setCreator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_sale1","type":"uint256"},{"internalType":"uint256","name":"_sale2","type":"uint256"},{"internalType":"uint256","name":"_salepublic","type":"uint256"}],"name":"setPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"stage","type":"uint16"}],"name":"setSalesStage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"source","type":"string"}],"name":"stringToBytes32","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint8","name":"_uint8","type":"uint8"}],"name":"toByte","outputs":[{"internalType":"bytes1","name":"","type":"bytes1"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"toBytes","outputs":[{"internalType":"bytes","name":"b","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"walletbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405261271060045561015060055560006006819055612328600781905560026008556009829055600a9190915566f8b0a10e470000600b55670138a388a43c0000600c819055600d55600e55600f8054600360a01b61ffff60a01b196001600160a01b03199283167322a19fd9f3a29fe8260f88c46db04941fa0615c91716179091556010805490911673e369c3f00d8dc97be4b58a7ede901e48c4767bd2179055348015620000b157600080fd5b5060405162004aef38038062004aef83398181016040526020811015620000d757600080fd5b8101908080516040519392919084640100000000821115620000f857600080fd5b9083019060208201858111156200010e57600080fd5b82516401000000008111828201881017156200012957600080fd5b82525081516020918201929091019080838360005b83811015620001585781810151838201526020016200013e565b50505050905090810190601f168015620001865780820380516001836020036101000a031916815260200191505b5060408181019052600481526348484d4360e01b6020820152849350915060009050620001bb6001600160e01b036200026b16565b600380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200021e90601890602085019062000289565b5080516200023490601990602084019062000289565b5050506200026460405180606001604052806029815260200162004ac6602991396001600160e01b036200027016565b506200032b565b335b90565b80516200028590600290602084019062000289565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002cc57805160ff1916838001178555620002fc565b82800160010185558215620002fc579182015b82811115620002fc578251825591602001919060010190620002df565b506200030a9291506200030e565b5090565b6200026d91905b808211156200030a576000815560010162000315565b61478b806200033b6000396000f3fe60806040526004361061027c5760003560e01c80638e26dbfb1161014f578063ad8066c8116100c1578063cd53d08e1161007a578063cd53d08e14611482578063cfb51928146114ac578063d2a6b51a1461155d578063e985e9c51461161b578063f242432a14611656578063f2fde38b1461172c5761027c565b8063ad8066c814611100578063adb41f7514611115578063b48ab8b61461124b578063bcc7eae914611410578063bd85b03914611443578063ca8f5af41461146d5761027c565b806395d89b411161011357806395d89b4114610ea557806397aba7f914610eba578063a22cb46514610f72578063a7bb580314610fad578063a86b73f014611080578063aa585d56146110ca5761027c565b80638e26dbfb14610c895780638ec2297614610cb35780638f32d59b14610d865780639201de5514610d9b5780639242413f14610dc55761027c565b80632eb2c2d6116101f35780636b43974e116101ac5780636b43974e14610a935780636b941a9b14610b66578063715018a614610b995780637e518ec814610bae578063832efb5a14610c5f5780638da5cb5b14610c745761027c565b80632eb2c2d6146105ef5780633ccfd60b146107bd57806340259dad146107d25780634e1273f414610800578063593b79fe14610980578063677edc9b146109b35761027c565b80630e89341c116102455780630e89341c146103df5780631e7269c5146104095780631ec32d151461043c5780632693ebf21461046d57806328831187146104975780632b770121146104cc5761027c565b8062fdd58e1461028157806301ffc9a7146102cc57806302c7e7af1461031457806306fdde03146103295780630cd1635d146103b3575b600080fd5b34801561028d57600080fd5b506102ba600480360360408110156102a457600080fd5b506001600160a01b03813516906020013561175f565b60408051918252519081900360200190f35b3480156102d857600080fd5b50610300600480360360208110156102ef57600080fd5b50356001600160e01b031916611785565b604080519115158252519081900360200190f35b34801561032057600080fd5b506102ba6117cc565b34801561033557600080fd5b5061033e6117d2565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b506103c8611860565b6040805161ffff9092168252519081900360200190f35b3480156103eb57600080fd5b5061033e6004803603602081101561040257600080fd5b5035611871565b34801561041557600080fd5b506102ba6004803603602081101561042c57600080fd5b50356001600160a01b031661195a565b34801561044857600080fd5b5061045161196c565b604080516001600160a01b039092168252519081900360200190f35b34801561047957600080fd5b506102ba6004803603602081101561049057600080fd5b503561197b565b3480156104a357600080fd5b506104ca600480360360208110156104ba57600080fd5b50356001600160a01b031661198d565b005b6102ba600480360360c08110156104e257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561051157600080fd5b82018360208201111561052357600080fd5b803590602001918460018302840111600160201b8311171561054457600080fd5b919390929091602081019035600160201b81111561056157600080fd5b82018360208201111561057357600080fd5b803590602001918460018302840111600160201b8311171561059457600080fd5b919390929091602081019035600160201b8111156105b157600080fd5b8201836020820111156105c357600080fd5b803590602001918460018302840111600160201b831117156105e457600080fd5b9193509150356119f6565b3480156105fb57600080fd5b506104ca600480360360a081101561061257600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561064557600080fd5b82018360208201111561065757600080fd5b803590602001918460208302840111600160201b8311171561067857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156106c757600080fd5b8201836020820111156106d957600080fd5b803590602001918460208302840111600160201b831117156106fa57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561074957600080fd5b82018360208201111561075b57600080fd5b803590602001918460018302840111600160201b8311171561077c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c98945050505050565b3480156107c957600080fd5b506104ca611d54565b3480156107de57600080fd5b506104ca600480360360208110156107f557600080fd5b503561ffff16611e20565b34801561080c57600080fd5b506109306004803603604081101561082357600080fd5b810190602081018135600160201b81111561083d57600080fd5b82018360208201111561084f57600080fd5b803590602001918460208302840111600160201b8311171561087057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108bf57600080fd5b8201836020820111156108d157600080fd5b803590602001918460208302840111600160201b831117156108f257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611e89945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561096c578181015183820152602001610954565b505050509050019250505060405180910390f35b34801561098c57600080fd5b5061033e600480360360208110156109a357600080fd5b50356001600160a01b0316611f8a565b3480156109bf57600080fd5b506102ba600480360360808110156109d657600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610a0557600080fd5b820183602082011115610a1757600080fd5b803590602001918460018302840111600160201b83111715610a3857600080fd5b919390929091602081019035600160201b811115610a5557600080fd5b820183602082011115610a6757600080fd5b803590602001918460018302840111600160201b83111715610a8857600080fd5b509092509050611fae565b6102ba60048036036080811015610aa957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ad857600080fd5b820183602082011115610aea57600080fd5b803590602001918460018302840111600160201b83111715610b0b57600080fd5b919390929091602081019035600160201b811115610b2857600080fd5b820183602082011115610b3a57600080fd5b803590602001918460018302840111600160201b83111715610b5b57600080fd5b509092509050612152565b348015610b7257600080fd5b506102ba60048036036020811015610b8957600080fd5b50356001600160a01b03166123bc565b348015610ba557600080fd5b506104ca6123ce565b348015610bba57600080fd5b506104ca60048036036020811015610bd157600080fd5b810190602081018135600160201b811115610beb57600080fd5b820183602082011115610bfd57600080fd5b803590602001918460018302840111600160201b83111715610c1e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061245f945050505050565b348015610c6b57600080fd5b506102ba6124b2565b348015610c8057600080fd5b506104516124b8565b348015610c9557600080fd5b5061033e60048036036020811015610cac57600080fd5b50356124c8565b6102ba60048036036080811015610cc957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610cf857600080fd5b820183602082011115610d0a57600080fd5b803590602001918460018302840111600160201b83111715610d2b57600080fd5b919390929091602081019035600160201b811115610d4857600080fd5b820183602082011115610d5a57600080fd5b803590602001918460018302840111600160201b83111715610d7b57600080fd5b509092509050612530565b348015610d9257600080fd5b5061030061294c565b348015610da757600080fd5b5061033e60048036036020811015610dbe57600080fd5b5035612972565b348015610dd157600080fd5b506102ba60048036036080811015610de857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610e1757600080fd5b820183602082011115610e2957600080fd5b803590602001918460018302840111600160201b83111715610e4a57600080fd5b919390929091602081019035600160201b811115610e6757600080fd5b820183602082011115610e7957600080fd5b803590602001918460018302840111600160201b83111715610e9a57600080fd5b509092509050612a69565b348015610eb157600080fd5b5061033e612c0f565b348015610ec657600080fd5b5061045160048036036040811015610edd57600080fd5b81359190810190604081016020820135600160201b811115610efe57600080fd5b820183602082011115610f1057600080fd5b803590602001918460018302840111600160201b83111715610f3157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612c6a945050505050565b348015610f7e57600080fd5b506104ca60048036036040811015610f9557600080fd5b506001600160a01b0381351690602001351515612ced565b348015610fb957600080fd5b5061105e60048036036020811015610fd057600080fd5b810190602081018135600160201b811115610fea57600080fd5b820183602082011115610ffc57600080fd5b803590602001918460018302840111600160201b8311171561101d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d5b945050505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b34801561108c57600080fd5b506110ad600480360360208110156110a357600080fd5b503560ff16612d8a565b604080516001600160f81b03199092168252519081900360200190f35b3480156110d657600080fd5b506104ca600480360360608110156110ed57600080fd5b5080359060208101359060400135612db2565b34801561110c57600080fd5b506102ba612e07565b34801561112157600080fd5b506103006004803603604081101561113857600080fd5b810190602081018135600160201b81111561115257600080fd5b82018360208201111561116457600080fd5b803590602001918460018302840111600160201b8311171561118557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156111d757600080fd5b8201836020820111156111e957600080fd5b803590602001918460018302840111600160201b8311171561120a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612e0b945050505050565b34801561125757600080fd5b506104ca6004803603608081101561126e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561129857600080fd5b8201836020820111156112aa57600080fd5b803590602001918460208302840111600160201b831117156112cb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561131a57600080fd5b82018360208201111561132c57600080fd5b803590602001918460208302840111600160201b8311171561134d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561139c57600080fd5b8201836020820111156113ae57600080fd5b803590602001918460018302840111600160201b831117156113cf57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612ea8945050505050565b34801561141c57600080fd5b506102ba6004803603602081101561143357600080fd5b50356001600160a01b0316612f94565b34801561144f57600080fd5b506102ba6004803603602081101561146657600080fd5b5035612fa6565b34801561147957600080fd5b506102ba612fb8565b34801561148e57600080fd5b50610451600480360360208110156114a557600080fd5b5035612fbe565b3480156114b857600080fd5b506102ba600480360360208110156114cf57600080fd5b810190602081018135600160201b8111156114e957600080fd5b8201836020820111156114fb57600080fd5b803590602001918460018302840111600160201b8311171561151c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612fd9945050505050565b34801561156957600080fd5b506104ca6004803603604081101561158057600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156115aa57600080fd5b8201836020820111156115bc57600080fd5b803590602001918460208302840111600160201b831117156115dd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ff7945050505050565b34801561162757600080fd5b506103006004803603604081101561163e57600080fd5b506001600160a01b0381358116916020013516613078565b34801561166257600080fd5b506104ca600480360360a081101561167957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b8111156116b857600080fd5b8201836020820111156116ca57600080fd5b803590602001918460018302840111600160201b831117156116eb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506130a6945050505050565b34801561173857600080fd5b506104ca6004803603602081101561174f57600080fd5b50356001600160a01b031661315b565b6001600160a01b0391909116600090815260208181526040808320938352929052205490565b60006001600160e01b031982166301ffc9a760e01b14806117b657506001600160e01b03198216636cdb3d1360e11b145b156117c3575060016117c7565b5060005b919050565b60095481565b6018805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118585780601f1061182d57610100808354040283529160200191611858565b820191906000526020600020905b81548152906001019060200180831161183b57829003601f168201915b505050505081565b600f54600160a01b900461ffff1681565b606061187c826131ab565b6118b75760405162461bcd60e51b815260040180806020018281038252602581526020018061458e6025913960400191505060405180910390fd5b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815261195493909290918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505061194f846131c8565b613289565b92915050565b60146020526000908152604090205481565b6010546001600160a01b031681565b60166020526000908152604090205481565b61199561294c565b6119d4576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60006060611a3f89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061194f92508791506132c59050565b9050611a818188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e0b92505050565b611ac6576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964205369676e617475726560781b604482015290519081900360640190fd5b6000611ad0613388565b905060045460018c8301031115611b21576040805162461bcd60e51b815260206004820152601060248201526f13585e08151bdad95b88135a5b9d195960821b604482015290519081900360640190fd5b833414611b64576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908199d5b9960a21b604482015290519081900360640190fd5b60005b8b811015611c85576000611b79613388565b9050611b836133a4565b336015600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611bfe8e8260018b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133af92505050565b60008181526016602090815260408083206001905560179091529020611c25908d8d614311565b508b8b60405180838380828437808301925050509250505060405180910390208e6001600160a01b0316827fec2cd236ed6d37bf5a71276ac93889db12834493a090efd543a3d2eca8dcdcc860405160405180910390a450600101611b67565b5060009c9b505050505050505050505050565b336001600160a01b0386161480611cb45750611cb48533613078565b611cef5760405162461bcd60e51b815260040180806020018281038252602f815260200180614622602f913960400191505060405180910390fd5b6001600160a01b038416611d345760405162461bcd60e51b815260040180806020018281038252603081526020018061455e6030913960400191505060405180910390fd5b611d408585858561344f565b611d4d85858585856136fa565b5050505050565b611d5c61294c565b611d9b576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6010546001600160a01b0316611de25760405162461bcd60e51b81526004018080602001828103825260218152602001806144436021913960400191505060405180910390fd5b60105460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611e1c573d6000803e3d6000fd5b5050565b611e2861294c565b611e67576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b600f805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b60608151835114611ecb5760405162461bcd60e51b815260040180806020018281038252602c8152602001806145f6602c913960400191505060405180910390fd5b60608351604051908082528060200260200182016040528015611ef8578160200160208202803883390190505b50905060005b8451811015611f8257600080868381518110611f1657fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110611f4c57fe5b6020026020010151815260200190815260200160002054828281518110611f6f57fe5b6020908102919091010152600101611efe565b509392505050565b604080516001600160a01b0392909216600560a21b18601483015260348201905290565b6000611fb861294c565b611ff7576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b60055486600a54011115612042576040805162461bcd60e51b815260206004820152600d60248201526c5265736572766520456d70747960981b604482015290519081900360640190fd5b600980548701905560005b8681101561214457600a80546001019081905585156120c857807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b60008181526015602090815260409182902080546001600160a01b031916331790558151601f870182900482028101820190925285825261212a918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b60009081526016602052604090206001908190550161204d565b506000979650505050505050565b600f54600090600160a01b900461ffff166003146121b0576040805162461bcd60e51b8152602060048201526016602482015275141d589b1a58c814d85b195cc8125cc810db1bdcd95960521b604482015290519081900360640190fd5b600e54866009540111156121f55760405162461bcd60e51b81526004018080602001828103825260238152602001806145d36023913960400191505060405180910390fd5b34600d5487021461223c576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908119d5b9960a21b604482015290519081900360640190fd5b60098054870190556001600160a01b03871660009081526014602052604081208054880190555b86811015612144576000600554612278613900565b019050612283613917565b85156122eb57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b60008181526015602090815260409182902080546001600160a01b031916331790558151601f870182900482028101820190925285825261234d918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b60008181526016602052604080822060019055517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470916001600160a01b038c169184917fec2cd236ed6d37bf5a71276ac93889db12834493a090efd543a3d2eca8dcdcc891a450600101612263565b60126020526000908152604090205481565b6123d661294c565b612415576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b61246761294c565b6124a6576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6124af81613922565b50565b60065481565b6003546001600160a01b03165b90565b60176020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118585780601f1061182d57610100808354040283529160200191611858565b600f54600090600160a01b900461ffff166001148061255c5750600f54600160a01b900461ffff166002145b6125a2576040805162461bcd60e51b8152602060048201526012602482015271141c995cd85b195cc81a5cc818db1bdcd95960721b604482015290519081900360640190fd5b600f54600160a01b900461ffff166001141561264957600e54866009540111156125fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806144b96023913960400191505060405180910390fd5b34600b54870214612644576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908119d5b9960a21b604482015290519081900360640190fd5b6126eb565b600f54600160a01b900461ffff16600214156126eb57600e54866009540111156126a45760405162461bcd60e51b815260040180806020018281038252602381526020018061453b6023913960400191505060405180910390fd5b34600c548702146126eb576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908119d5b9960a21b604482015290519081900360640190fd5b6127336126f733613935565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e0b92505050565b61273c33613935565b906127c55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561278a578181015183820152602001612772565b50505050905090810190601f1680156127b75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506009805487019055600f54600160a01b900461ffff1660011415612807576001600160a01b038716600090815260126020526040902080548701905561283c565b600f54600160a01b900461ffff166002141561283c576001600160a01b03871660009081526013602052604090208054870190555b6001600160a01b03871660009081526014602052604081208054880190555b86811015612144576000600554612870613900565b01905061287b613917565b60008181526015602090815260409182902080546001600160a01b031916331790558151601f87018290048202810182019092528582526128dd918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b60008181526016602052604080822060019055517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470916001600160a01b038c169184917fec2cd236ed6d37bf5a71276ac93889db12834493a090efd543a3d2eca8dcdcc891a45060010161285b565b6003546000906001600160a01b0316612963613aa8565b6001600160a01b031614905090565b6040805181815260608181018352916000918391602082018180388339019050509050600091505b80518260ff161015612a6257600084600260ff85160460ff16602081106129bd57fe5b1a600f1690506000600486600260ff87160460ff16602081106129dc57fe5b1a60f81b6001600160f81b031916901c60f81c90506129fa82612d8a565b838560ff1681518110612a0957fe5b60200101906001600160f81b031916908160001a905350836001019350612a2f81612d8a565b838560ff1681518110612a3e57fe5b60200101906001600160f81b031916908160001a905350506001909201915061299a565b9392505050565b6000612a7361294c565b612ab2576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b600e5486600954011115612b00576040805162461bcd60e51b815260206004820152601060248201526f13585e08151bdad95b88135a5b9d195960821b604482015290519081900360640190fd5b600980548701905560005b86811015612144576000600554612b20613900565b019050612b2b613917565b8515612b9357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b60008181526015602090815260409182902080546001600160a01b031916331790558151601f8701829004820281018201909252858252612bf5918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b600090815260166020526040902060019081905501612b0b565b6019805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118585780601f1061182d57610100808354040283529160200191611858565b600080600080612c7985612d5b565b604080516000815260208082018084528c905260ff8616828401526060820185905260808201849052915194975092955090935060019260a080840193601f198301929081900390910190855afa158015612cd8573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60008060008351604114612d6e57600080fd5b5050506020810151604082015160609092015160001a92909190565b6000600a8260ff161015612da557506030810160f81b6117c7565b506057810160f81b6117c7565b612dba61294c565b612df9576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b600b92909255600c55600d55565b4790565b600080836040516020018082805190602001908083835b60208310612e415780518252601f199092019160209182019101612e22565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120600f549094506001600160a01b03169250612e96915083905085612c6a565b6001600160a01b031614949350505050565b60005b8351811015612f81576000848281518110612ec257fe5b602090810291909101810151600081815260159092526040909120549091506001600160a01b03163314612f275760405162461bcd60e51b815260040180806020018281038252602f815260200180614464602f913960400191505060405180910390fd5b6000848381518110612f3557fe5b60200260200101519050612f65816016600085815260200190815260200160002054613aac90919063ffffffff16565b6000928352601660205260409092209190915550600101612eab565b50612f8e84848484613aff565b50505050565b60136020526000908152604090205481565b60009081526016602052604090205490565b60075481565b6015602052600090815260409020546001600160a01b031681565b80516000908290612fee5750600090506117c7565b50506020015190565b6001600160a01b03821661303c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806146fa602c913960400191505060405180910390fd5b60005b815181101561307357600082828151811061305657fe5b6020026020010151905061306a8482613cd3565b5060010161303f565b505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b336001600160a01b03861614806130c257506130c28533613078565b6130fd5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144dc602a913960400191505060405180910390fd5b6001600160a01b0384166131425760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b61314e85858585613d59565b611d4d8585858585613e41565b61316361294c565b6131a2576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6124af81613fc3565b6000908152601560205260409020546001600160a01b0316151590565b6060816131ed57506040805180820190915260018152600360fc1b60208201526117c7565b8160005b811561320557600101600a820491506131f1565b6060816040519080825280601f01601f191660200182016040528015613232576020820181803883390190505b50905060001982015b851561328057600a860660300160f81b8282806001900393508151811061325e57fe5b60200101906001600160f81b031916908160001a905350600a8604955061323b565b50949350505050565b6060612a628383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250614064565b6060816132ea57506040805180820190915260018152600360fc1b60208201526117c7565b818060005b821561330357600101600a830492506132ef565b6060816040519080825280601f01601f191660200182016040528015613330576020820181803883390190505b50905060001982015b831561337e57600a840660300160f81b8282806001900393508151811061335c57fe5b60200101906001600160f81b031916908160001a905350600a84049350613339565b5095945050505050565b60075460009061339f90600163ffffffff613aac16565b905090565b600780546001019055565b6001600160a01b0384166000908152602081815260408083208684529091529020546133e1908363ffffffff613aac16565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4612f8e600085858585613e41565b805182511461348f5760405162461bcd60e51b81526004018080602001828103825260358152602001806145066035913960400191505060405180910390fd5b815160005b818110156136195761350a8382815181106134ab57fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106134e557fe5b602002602001015181526020019081526020016000205461427890919063ffffffff16565b600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061353c57fe5b60200260200101518152602001908152602001600020819055506135c483828151811061356557fe5b6020026020010151600080886001600160a01b03166001600160a01b03168152602001908152602001600020600087858151811061359f57fe5b6020026020010151815260200190815260200160002054613aac90919063ffffffff16565b600080876001600160a01b03166001600160a01b0316815260200190815260200160002060008684815181106135f657fe5b602090810291909101810151825281019190915260400160002055600101613494565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561369f578181015183820152602001613687565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156136de5781810151838201526020016136c6565b5050505090500194505050505060405180910390a45050505050565b61370c846001600160a01b03166142d5565b15611d4d576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156137ae578181015183820152602001613796565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156137ed5781810151838201526020016137d5565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613829578181015183820152602001613811565b50505050905090810190601f1680156138565780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561387b57600080fd5b505af115801561388f573d6000803e3d6000fd5b505050506040513d60208110156138a557600080fd5b505190506001600160e01b0319811663bc197c8160e01b146138f85760405162461bcd60e51b815260040180806020018281038252603f815260200180614681603f913960400191505060405180910390fd5b505050505050565b60065460009061339f90600163ffffffff613aac16565b600680546001019055565b8051611e1c90600290602084019061438f565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180388339019050509050600360fc1b8160008151811061399957fe5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106139c257fe5b60200101906001600160f81b031916908160001a90535060005b6014811015613280578260048583600c01602081106139f757fe5b1a60f81b6001600160f81b031916901c60f81c60ff1681518110613a1757fe5b602001015160f81c60f81b828260020260020181518110613a3457fe5b60200101906001600160f81b031916908160001a905350828482600c0160208110613a5b57fe5b825191901a600f16908110613a6c57fe5b602001015160f81c60f81b828260020260030181518110613a8957fe5b60200101906001600160f81b031916908160001a9053506001016139dc565b3390565b600082820183811015612a62576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b8151835114613b3f5760405162461bcd60e51b81526004018080602001828103825260308152602001806146516030913960400191505060405180910390fd5b825160005b81811015613bea57613b95848281518110613b5b57fe5b6020026020010151600080896001600160a01b03166001600160a01b03168152602001908152602001600020600088858151811061359f57fe5b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110613bc757fe5b602090810291909101810151825281019190915260400160002055600101613b44565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613c71578181015183820152602001613c59565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015613cb0578181015183820152602001613c98565b5050505090500194505050505060405180910390a4611d4d6000868686866136fa565b60008181526015602052604090205481906001600160a01b03163314613d2a5760405162461bcd60e51b81526004018080602001828103825260318152602001806147266031913960400191505060405180910390fd5b50600090815260156020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416600090815260208181526040808320858452909152902054613d8b908263ffffffff61427816565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054613dd4908263ffffffff613aac16565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b613e53846001600160a01b03166142d5565b15611d4d576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613ef6578181015183820152602001613ede565b50505050905090810190601f168015613f235780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613f4657600080fd5b505af1158015613f5a573d6000803e3d6000fd5b505050506040513d6020811015613f7057600080fd5b505190506001600160e01b0319811663f23a6e6160e01b146138f85760405162461bcd60e51b815260040180806020018281038252603a8152602001806146c0603a913960400191505060405180910390fd5b6001600160a01b0381166140085760405162461bcd60e51b81526004018080602001828103825260268152602001806144936026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156140b8576020820181803883390190505b509050806000805b8851811015614111578881815181106140d557fe5b602001015160f81c60f81b8383806001019450815181106140f257fe5b60200101906001600160f81b031916908160001a9053506001016140c0565b5060005b87518110156141665787818151811061412a57fe5b602001015160f81c60f81b83838060010194508151811061414757fe5b60200101906001600160f81b031916908160001a905350600101614115565b5060005b86518110156141bb5786818151811061417f57fe5b602001015160f81c60f81b83838060010194508151811061419c57fe5b60200101906001600160f81b031916908160001a90535060010161416a565b5060005b8551811015614210578581815181106141d457fe5b602001015160f81c60f81b8383806001019450815181106141f157fe5b60200101906001600160f81b031916908160001a9053506001016141bf565b5060005b84518110156142655784818151811061422957fe5b602001015160f81c60f81b83838060010194508151811061424657fe5b60200101906001600160f81b031916908160001a905350600101614214565b50909d9c50505050505050505050505050565b6000828211156142cf576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906143095750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143525782800160ff1982351617855561437f565b8280016001018555821561437f579182015b8281111561437f578235825591602001919060010190614364565b5061438b9291506143fd565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143d057805160ff191683800117855561437f565b8280016001018555821561437f579182015b8281111561437f5782518255916020019190600101906143e2565b6124c591905b8082111561438b576000815560010161440356fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e54506c656173652053657420436f6d70616e792057616c6c65742041646472657373455243313135355472616461626c652362617463684d696e743a204f4e4c595f43524541544f525f414c4c4f5745444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d617820546f6b656e207265616368656420666f722053616c657320537461676520314552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e4754484d617820546f6b656e207265616368656420666f722053616c6573205374616765203245524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724d617820546f6b656e207265616368656420666f722053616c65732053746167652033455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355472616461626c652373657443726561746f723a20494e56414c49445f414444524553532e455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c595f43524541544f525f414c4c4f574544a265627a7a72315820abcb70dbc5a3afa7bc9aed96a7ab37b48bd3b8c7e4ad96140d5336e6d0bd7a7764736f6c6343000511003268747470733a2f2f6170692e48797065644875736b794d657461436974794e46542e696f2f6e66742f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001548797065644875736b794d657461436974794e46540000000000000000000000

Deployed Bytecode

0x60806040526004361061027c5760003560e01c80638e26dbfb1161014f578063ad8066c8116100c1578063cd53d08e1161007a578063cd53d08e14611482578063cfb51928146114ac578063d2a6b51a1461155d578063e985e9c51461161b578063f242432a14611656578063f2fde38b1461172c5761027c565b8063ad8066c814611100578063adb41f7514611115578063b48ab8b61461124b578063bcc7eae914611410578063bd85b03914611443578063ca8f5af41461146d5761027c565b806395d89b411161011357806395d89b4114610ea557806397aba7f914610eba578063a22cb46514610f72578063a7bb580314610fad578063a86b73f014611080578063aa585d56146110ca5761027c565b80638e26dbfb14610c895780638ec2297614610cb35780638f32d59b14610d865780639201de5514610d9b5780639242413f14610dc55761027c565b80632eb2c2d6116101f35780636b43974e116101ac5780636b43974e14610a935780636b941a9b14610b66578063715018a614610b995780637e518ec814610bae578063832efb5a14610c5f5780638da5cb5b14610c745761027c565b80632eb2c2d6146105ef5780633ccfd60b146107bd57806340259dad146107d25780634e1273f414610800578063593b79fe14610980578063677edc9b146109b35761027c565b80630e89341c116102455780630e89341c146103df5780631e7269c5146104095780631ec32d151461043c5780632693ebf21461046d57806328831187146104975780632b770121146104cc5761027c565b8062fdd58e1461028157806301ffc9a7146102cc57806302c7e7af1461031457806306fdde03146103295780630cd1635d146103b3575b600080fd5b34801561028d57600080fd5b506102ba600480360360408110156102a457600080fd5b506001600160a01b03813516906020013561175f565b60408051918252519081900360200190f35b3480156102d857600080fd5b50610300600480360360208110156102ef57600080fd5b50356001600160e01b031916611785565b604080519115158252519081900360200190f35b34801561032057600080fd5b506102ba6117cc565b34801561033557600080fd5b5061033e6117d2565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610378578181015183820152602001610360565b50505050905090810190601f1680156103a55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103bf57600080fd5b506103c8611860565b6040805161ffff9092168252519081900360200190f35b3480156103eb57600080fd5b5061033e6004803603602081101561040257600080fd5b5035611871565b34801561041557600080fd5b506102ba6004803603602081101561042c57600080fd5b50356001600160a01b031661195a565b34801561044857600080fd5b5061045161196c565b604080516001600160a01b039092168252519081900360200190f35b34801561047957600080fd5b506102ba6004803603602081101561049057600080fd5b503561197b565b3480156104a357600080fd5b506104ca600480360360208110156104ba57600080fd5b50356001600160a01b031661198d565b005b6102ba600480360360c08110156104e257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561051157600080fd5b82018360208201111561052357600080fd5b803590602001918460018302840111600160201b8311171561054457600080fd5b919390929091602081019035600160201b81111561056157600080fd5b82018360208201111561057357600080fd5b803590602001918460018302840111600160201b8311171561059457600080fd5b919390929091602081019035600160201b8111156105b157600080fd5b8201836020820111156105c357600080fd5b803590602001918460018302840111600160201b831117156105e457600080fd5b9193509150356119f6565b3480156105fb57600080fd5b506104ca600480360360a081101561061257600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561064557600080fd5b82018360208201111561065757600080fd5b803590602001918460208302840111600160201b8311171561067857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156106c757600080fd5b8201836020820111156106d957600080fd5b803590602001918460208302840111600160201b831117156106fa57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561074957600080fd5b82018360208201111561075b57600080fd5b803590602001918460018302840111600160201b8311171561077c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c98945050505050565b3480156107c957600080fd5b506104ca611d54565b3480156107de57600080fd5b506104ca600480360360208110156107f557600080fd5b503561ffff16611e20565b34801561080c57600080fd5b506109306004803603604081101561082357600080fd5b810190602081018135600160201b81111561083d57600080fd5b82018360208201111561084f57600080fd5b803590602001918460208302840111600160201b8311171561087057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108bf57600080fd5b8201836020820111156108d157600080fd5b803590602001918460208302840111600160201b831117156108f257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611e89945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561096c578181015183820152602001610954565b505050509050019250505060405180910390f35b34801561098c57600080fd5b5061033e600480360360208110156109a357600080fd5b50356001600160a01b0316611f8a565b3480156109bf57600080fd5b506102ba600480360360808110156109d657600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610a0557600080fd5b820183602082011115610a1757600080fd5b803590602001918460018302840111600160201b83111715610a3857600080fd5b919390929091602081019035600160201b811115610a5557600080fd5b820183602082011115610a6757600080fd5b803590602001918460018302840111600160201b83111715610a8857600080fd5b509092509050611fae565b6102ba60048036036080811015610aa957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ad857600080fd5b820183602082011115610aea57600080fd5b803590602001918460018302840111600160201b83111715610b0b57600080fd5b919390929091602081019035600160201b811115610b2857600080fd5b820183602082011115610b3a57600080fd5b803590602001918460018302840111600160201b83111715610b5b57600080fd5b509092509050612152565b348015610b7257600080fd5b506102ba60048036036020811015610b8957600080fd5b50356001600160a01b03166123bc565b348015610ba557600080fd5b506104ca6123ce565b348015610bba57600080fd5b506104ca60048036036020811015610bd157600080fd5b810190602081018135600160201b811115610beb57600080fd5b820183602082011115610bfd57600080fd5b803590602001918460018302840111600160201b83111715610c1e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061245f945050505050565b348015610c6b57600080fd5b506102ba6124b2565b348015610c8057600080fd5b506104516124b8565b348015610c9557600080fd5b5061033e60048036036020811015610cac57600080fd5b50356124c8565b6102ba60048036036080811015610cc957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610cf857600080fd5b820183602082011115610d0a57600080fd5b803590602001918460018302840111600160201b83111715610d2b57600080fd5b919390929091602081019035600160201b811115610d4857600080fd5b820183602082011115610d5a57600080fd5b803590602001918460018302840111600160201b83111715610d7b57600080fd5b509092509050612530565b348015610d9257600080fd5b5061030061294c565b348015610da757600080fd5b5061033e60048036036020811015610dbe57600080fd5b5035612972565b348015610dd157600080fd5b506102ba60048036036080811015610de857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610e1757600080fd5b820183602082011115610e2957600080fd5b803590602001918460018302840111600160201b83111715610e4a57600080fd5b919390929091602081019035600160201b811115610e6757600080fd5b820183602082011115610e7957600080fd5b803590602001918460018302840111600160201b83111715610e9a57600080fd5b509092509050612a69565b348015610eb157600080fd5b5061033e612c0f565b348015610ec657600080fd5b5061045160048036036040811015610edd57600080fd5b81359190810190604081016020820135600160201b811115610efe57600080fd5b820183602082011115610f1057600080fd5b803590602001918460018302840111600160201b83111715610f3157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612c6a945050505050565b348015610f7e57600080fd5b506104ca60048036036040811015610f9557600080fd5b506001600160a01b0381351690602001351515612ced565b348015610fb957600080fd5b5061105e60048036036020811015610fd057600080fd5b810190602081018135600160201b811115610fea57600080fd5b820183602082011115610ffc57600080fd5b803590602001918460018302840111600160201b8311171561101d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d5b945050505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b34801561108c57600080fd5b506110ad600480360360208110156110a357600080fd5b503560ff16612d8a565b604080516001600160f81b03199092168252519081900360200190f35b3480156110d657600080fd5b506104ca600480360360608110156110ed57600080fd5b5080359060208101359060400135612db2565b34801561110c57600080fd5b506102ba612e07565b34801561112157600080fd5b506103006004803603604081101561113857600080fd5b810190602081018135600160201b81111561115257600080fd5b82018360208201111561116457600080fd5b803590602001918460018302840111600160201b8311171561118557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156111d757600080fd5b8201836020820111156111e957600080fd5b803590602001918460018302840111600160201b8311171561120a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612e0b945050505050565b34801561125757600080fd5b506104ca6004803603608081101561126e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561129857600080fd5b8201836020820111156112aa57600080fd5b803590602001918460208302840111600160201b831117156112cb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561131a57600080fd5b82018360208201111561132c57600080fd5b803590602001918460208302840111600160201b8311171561134d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561139c57600080fd5b8201836020820111156113ae57600080fd5b803590602001918460018302840111600160201b831117156113cf57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612ea8945050505050565b34801561141c57600080fd5b506102ba6004803603602081101561143357600080fd5b50356001600160a01b0316612f94565b34801561144f57600080fd5b506102ba6004803603602081101561146657600080fd5b5035612fa6565b34801561147957600080fd5b506102ba612fb8565b34801561148e57600080fd5b50610451600480360360208110156114a557600080fd5b5035612fbe565b3480156114b857600080fd5b506102ba600480360360208110156114cf57600080fd5b810190602081018135600160201b8111156114e957600080fd5b8201836020820111156114fb57600080fd5b803590602001918460018302840111600160201b8311171561151c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612fd9945050505050565b34801561156957600080fd5b506104ca6004803603604081101561158057600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156115aa57600080fd5b8201836020820111156115bc57600080fd5b803590602001918460208302840111600160201b831117156115dd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ff7945050505050565b34801561162757600080fd5b506103006004803603604081101561163e57600080fd5b506001600160a01b0381358116916020013516613078565b34801561166257600080fd5b506104ca600480360360a081101561167957600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b8111156116b857600080fd5b8201836020820111156116ca57600080fd5b803590602001918460018302840111600160201b831117156116eb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506130a6945050505050565b34801561173857600080fd5b506104ca6004803603602081101561174f57600080fd5b50356001600160a01b031661315b565b6001600160a01b0391909116600090815260208181526040808320938352929052205490565b60006001600160e01b031982166301ffc9a760e01b14806117b657506001600160e01b03198216636cdb3d1360e11b145b156117c3575060016117c7565b5060005b919050565b60095481565b6018805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118585780601f1061182d57610100808354040283529160200191611858565b820191906000526020600020905b81548152906001019060200180831161183b57829003601f168201915b505050505081565b600f54600160a01b900461ffff1681565b606061187c826131ab565b6118b75760405162461bcd60e51b815260040180806020018281038252602581526020018061458e6025913960400191505060405180910390fd5b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815261195493909290918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505061194f846131c8565b613289565b92915050565b60146020526000908152604090205481565b6010546001600160a01b031681565b60166020526000908152604090205481565b61199561294c565b6119d4576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60006060611a3f89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061194f92508791506132c59050565b9050611a818188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e0b92505050565b611ac6576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964205369676e617475726560781b604482015290519081900360640190fd5b6000611ad0613388565b905060045460018c8301031115611b21576040805162461bcd60e51b815260206004820152601060248201526f13585e08151bdad95b88135a5b9d195960821b604482015290519081900360640190fd5b833414611b64576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908199d5b9960a21b604482015290519081900360640190fd5b60005b8b811015611c85576000611b79613388565b9050611b836133a4565b336015600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611bfe8e8260018b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133af92505050565b60008181526016602090815260408083206001905560179091529020611c25908d8d614311565b508b8b60405180838380828437808301925050509250505060405180910390208e6001600160a01b0316827fec2cd236ed6d37bf5a71276ac93889db12834493a090efd543a3d2eca8dcdcc860405160405180910390a450600101611b67565b5060009c9b505050505050505050505050565b336001600160a01b0386161480611cb45750611cb48533613078565b611cef5760405162461bcd60e51b815260040180806020018281038252602f815260200180614622602f913960400191505060405180910390fd5b6001600160a01b038416611d345760405162461bcd60e51b815260040180806020018281038252603081526020018061455e6030913960400191505060405180910390fd5b611d408585858561344f565b611d4d85858585856136fa565b5050505050565b611d5c61294c565b611d9b576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6010546001600160a01b0316611de25760405162461bcd60e51b81526004018080602001828103825260218152602001806144436021913960400191505060405180910390fd5b60105460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611e1c573d6000803e3d6000fd5b5050565b611e2861294c565b611e67576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b600f805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b60608151835114611ecb5760405162461bcd60e51b815260040180806020018281038252602c8152602001806145f6602c913960400191505060405180910390fd5b60608351604051908082528060200260200182016040528015611ef8578160200160208202803883390190505b50905060005b8451811015611f8257600080868381518110611f1657fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110611f4c57fe5b6020026020010151815260200190815260200160002054828281518110611f6f57fe5b6020908102919091010152600101611efe565b509392505050565b604080516001600160a01b0392909216600560a21b18601483015260348201905290565b6000611fb861294c565b611ff7576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b60055486600a54011115612042576040805162461bcd60e51b815260206004820152600d60248201526c5265736572766520456d70747960981b604482015290519081900360640190fd5b600980548701905560005b8681101561214457600a80546001019081905585156120c857807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b60008181526015602090815260409182902080546001600160a01b031916331790558151601f870182900482028101820190925285825261212a918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b60009081526016602052604090206001908190550161204d565b506000979650505050505050565b600f54600090600160a01b900461ffff166003146121b0576040805162461bcd60e51b8152602060048201526016602482015275141d589b1a58c814d85b195cc8125cc810db1bdcd95960521b604482015290519081900360640190fd5b600e54866009540111156121f55760405162461bcd60e51b81526004018080602001828103825260238152602001806145d36023913960400191505060405180910390fd5b34600d5487021461223c576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908119d5b9960a21b604482015290519081900360640190fd5b60098054870190556001600160a01b03871660009081526014602052604081208054880190555b86811015612144576000600554612278613900565b019050612283613917565b85156122eb57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b60008181526015602090815260409182902080546001600160a01b031916331790558151601f870182900482028101820190925285825261234d918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b60008181526016602052604080822060019055517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470916001600160a01b038c169184917fec2cd236ed6d37bf5a71276ac93889db12834493a090efd543a3d2eca8dcdcc891a450600101612263565b60126020526000908152604090205481565b6123d661294c565b612415576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b61246761294c565b6124a6576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6124af81613922565b50565b60065481565b6003546001600160a01b03165b90565b60176020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156118585780601f1061182d57610100808354040283529160200191611858565b600f54600090600160a01b900461ffff166001148061255c5750600f54600160a01b900461ffff166002145b6125a2576040805162461bcd60e51b8152602060048201526012602482015271141c995cd85b195cc81a5cc818db1bdcd95960721b604482015290519081900360640190fd5b600f54600160a01b900461ffff166001141561264957600e54866009540111156125fd5760405162461bcd60e51b81526004018080602001828103825260238152602001806144b96023913960400191505060405180910390fd5b34600b54870214612644576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908119d5b9960a21b604482015290519081900360640190fd5b6126eb565b600f54600160a01b900461ffff16600214156126eb57600e54866009540111156126a45760405162461bcd60e51b815260040180806020018281038252602381526020018061453b6023913960400191505060405180910390fd5b34600c548702146126eb576040805162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a5908119d5b9960a21b604482015290519081900360640190fd5b6127336126f733613935565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e0b92505050565b61273c33613935565b906127c55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561278a578181015183820152602001612772565b50505050905090810190601f1680156127b75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506009805487019055600f54600160a01b900461ffff1660011415612807576001600160a01b038716600090815260126020526040902080548701905561283c565b600f54600160a01b900461ffff166002141561283c576001600160a01b03871660009081526013602052604090208054870190555b6001600160a01b03871660009081526014602052604081208054880190555b86811015612144576000600554612870613900565b01905061287b613917565b60008181526015602090815260409182902080546001600160a01b031916331790558151601f87018290048202810182019092528582526128dd918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b60008181526016602052604080822060019055517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470916001600160a01b038c169184917fec2cd236ed6d37bf5a71276ac93889db12834493a090efd543a3d2eca8dcdcc891a45060010161285b565b6003546000906001600160a01b0316612963613aa8565b6001600160a01b031614905090565b6040805181815260608181018352916000918391602082018180388339019050509050600091505b80518260ff161015612a6257600084600260ff85160460ff16602081106129bd57fe5b1a600f1690506000600486600260ff87160460ff16602081106129dc57fe5b1a60f81b6001600160f81b031916901c60f81c90506129fa82612d8a565b838560ff1681518110612a0957fe5b60200101906001600160f81b031916908160001a905350836001019350612a2f81612d8a565b838560ff1681518110612a3e57fe5b60200101906001600160f81b031916908160001a905350506001909201915061299a565b9392505050565b6000612a7361294c565b612ab2576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b600e5486600954011115612b00576040805162461bcd60e51b815260206004820152601060248201526f13585e08151bdad95b88135a5b9d195960821b604482015290519081900360640190fd5b600980548701905560005b86811015612144576000600554612b20613900565b019050612b2b613917565b8515612b9357807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b888860405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a25b60008181526015602090815260409182902080546001600160a01b031916331790558151601f8701829004820281018201909252858252612bf5918b9184916001918a908a90819084018382808284376000920191909152506133af92505050565b600090815260166020526040902060019081905501612b0b565b6019805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156118585780601f1061182d57610100808354040283529160200191611858565b600080600080612c7985612d5b565b604080516000815260208082018084528c905260ff8616828401526060820185905260808201849052915194975092955090935060019260a080840193601f198301929081900390910190855afa158015612cd8573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60008060008351604114612d6e57600080fd5b5050506020810151604082015160609092015160001a92909190565b6000600a8260ff161015612da557506030810160f81b6117c7565b506057810160f81b6117c7565b612dba61294c565b612df9576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b600b92909255600c55600d55565b4790565b600080836040516020018082805190602001908083835b60208310612e415780518252601f199092019160209182019101612e22565b51815160209384036101000a60001901801990921691161790526040805192909401828103601f190183529093528051920191909120600f549094506001600160a01b03169250612e96915083905085612c6a565b6001600160a01b031614949350505050565b60005b8351811015612f81576000848281518110612ec257fe5b602090810291909101810151600081815260159092526040909120549091506001600160a01b03163314612f275760405162461bcd60e51b815260040180806020018281038252602f815260200180614464602f913960400191505060405180910390fd5b6000848381518110612f3557fe5b60200260200101519050612f65816016600085815260200190815260200160002054613aac90919063ffffffff16565b6000928352601660205260409092209190915550600101612eab565b50612f8e84848484613aff565b50505050565b60136020526000908152604090205481565b60009081526016602052604090205490565b60075481565b6015602052600090815260409020546001600160a01b031681565b80516000908290612fee5750600090506117c7565b50506020015190565b6001600160a01b03821661303c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806146fa602c913960400191505060405180910390fd5b60005b815181101561307357600082828151811061305657fe5b6020026020010151905061306a8482613cd3565b5060010161303f565b505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b336001600160a01b03861614806130c257506130c28533613078565b6130fd5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144dc602a913960400191505060405180910390fd5b6001600160a01b0384166131425760405162461bcd60e51b815260040180806020018281038252602b815260200180614418602b913960400191505060405180910390fd5b61314e85858585613d59565b611d4d8585858585613e41565b61316361294c565b6131a2576040805162461bcd60e51b815260206004820181905260248201526000805160206145b3833981519152604482015290519081900360640190fd5b6124af81613fc3565b6000908152601560205260409020546001600160a01b0316151590565b6060816131ed57506040805180820190915260018152600360fc1b60208201526117c7565b8160005b811561320557600101600a820491506131f1565b6060816040519080825280601f01601f191660200182016040528015613232576020820181803883390190505b50905060001982015b851561328057600a860660300160f81b8282806001900393508151811061325e57fe5b60200101906001600160f81b031916908160001a905350600a8604955061323b565b50949350505050565b6060612a628383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250614064565b6060816132ea57506040805180820190915260018152600360fc1b60208201526117c7565b818060005b821561330357600101600a830492506132ef565b6060816040519080825280601f01601f191660200182016040528015613330576020820181803883390190505b50905060001982015b831561337e57600a840660300160f81b8282806001900393508151811061335c57fe5b60200101906001600160f81b031916908160001a905350600a84049350613339565b5095945050505050565b60075460009061339f90600163ffffffff613aac16565b905090565b600780546001019055565b6001600160a01b0384166000908152602081815260408083208684529091529020546133e1908363ffffffff613aac16565b6001600160a01b038516600081815260208181526040808320888452825280832094909455835187815290810186905283519293919233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4612f8e600085858585613e41565b805182511461348f5760405162461bcd60e51b81526004018080602001828103825260358152602001806145066035913960400191505060405180910390fd5b815160005b818110156136195761350a8382815181106134ab57fe5b6020026020010151600080896001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106134e557fe5b602002602001015181526020019081526020016000205461427890919063ffffffff16565b600080886001600160a01b03166001600160a01b03168152602001908152602001600020600086848151811061353c57fe5b60200260200101518152602001908152602001600020819055506135c483828151811061356557fe5b6020026020010151600080886001600160a01b03166001600160a01b03168152602001908152602001600020600087858151811061359f57fe5b6020026020010151815260200190815260200160002054613aac90919063ffffffff16565b600080876001600160a01b03166001600160a01b0316815260200190815260200160002060008684815181106135f657fe5b602090810291909101810151825281019190915260400160002055600101613494565b50836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561369f578181015183820152602001613687565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156136de5781810151838201526020016136c6565b5050505090500194505050505060405180910390a45050505050565b61370c846001600160a01b03166142d5565b15611d4d576000846001600160a01b031663bc197c8133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156137ae578181015183820152602001613796565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156137ed5781810151838201526020016137d5565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613829578181015183820152602001613811565b50505050905090810190601f1680156138565780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561387b57600080fd5b505af115801561388f573d6000803e3d6000fd5b505050506040513d60208110156138a557600080fd5b505190506001600160e01b0319811663bc197c8160e01b146138f85760405162461bcd60e51b815260040180806020018281038252603f815260200180614681603f913960400191505060405180910390fd5b505050505050565b60065460009061339f90600163ffffffff613aac16565b600680546001019055565b8051611e1c90600290602084019061438f565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180388339019050509050600360fc1b8160008151811061399957fe5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106139c257fe5b60200101906001600160f81b031916908160001a90535060005b6014811015613280578260048583600c01602081106139f757fe5b1a60f81b6001600160f81b031916901c60f81c60ff1681518110613a1757fe5b602001015160f81c60f81b828260020260020181518110613a3457fe5b60200101906001600160f81b031916908160001a905350828482600c0160208110613a5b57fe5b825191901a600f16908110613a6c57fe5b602001015160f81c60f81b828260020260030181518110613a8957fe5b60200101906001600160f81b031916908160001a9053506001016139dc565b3390565b600082820183811015612a62576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b8151835114613b3f5760405162461bcd60e51b81526004018080602001828103825260308152602001806146516030913960400191505060405180910390fd5b825160005b81811015613bea57613b95848281518110613b5b57fe5b6020026020010151600080896001600160a01b03166001600160a01b03168152602001908152602001600020600088858151811061359f57fe5b600080886001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110613bc757fe5b602090810291909101810151825281019190915260400160002055600101613b44565b50846001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613c71578181015183820152602001613c59565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015613cb0578181015183820152602001613c98565b5050505090500194505050505060405180910390a4611d4d6000868686866136fa565b60008181526015602052604090205481906001600160a01b03163314613d2a5760405162461bcd60e51b81526004018080602001828103825260318152602001806147266031913960400191505060405180910390fd5b50600090815260156020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038416600090815260208181526040808320858452909152902054613d8b908263ffffffff61427816565b6001600160a01b0380861660009081526020818152604080832087845282528083209490945591861681528082528281208582529091522054613dd4908263ffffffff613aac16565b6001600160a01b03808516600081815260208181526040808320888452825291829020949094558051868152938401859052805191939288169233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a450505050565b613e53846001600160a01b03166142d5565b15611d4d576000846001600160a01b031663f23a6e6133888787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613ef6578181015183820152602001613ede565b50505050905090810190601f168015613f235780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613f4657600080fd5b505af1158015613f5a573d6000803e3d6000fd5b505050506040513d6020811015613f7057600080fd5b505190506001600160e01b0319811663f23a6e6160e01b146138f85760405162461bcd60e51b815260040180806020018281038252603a8152602001806146c0603a913960400191505060405180910390fd5b6001600160a01b0381166140085760405162461bcd60e51b81526004018080602001828103825260268152602001806144936026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156140b8576020820181803883390190505b509050806000805b8851811015614111578881815181106140d557fe5b602001015160f81c60f81b8383806001019450815181106140f257fe5b60200101906001600160f81b031916908160001a9053506001016140c0565b5060005b87518110156141665787818151811061412a57fe5b602001015160f81c60f81b83838060010194508151811061414757fe5b60200101906001600160f81b031916908160001a905350600101614115565b5060005b86518110156141bb5786818151811061417f57fe5b602001015160f81c60f81b83838060010194508151811061419c57fe5b60200101906001600160f81b031916908160001a90535060010161416a565b5060005b8551811015614210578581815181106141d457fe5b602001015160f81c60f81b8383806001019450815181106141f157fe5b60200101906001600160f81b031916908160001a9053506001016141bf565b5060005b84518110156142655784818151811061422957fe5b602001015160f81c60f81b83838060010194508151811061424657fe5b60200101906001600160f81b031916908160001a905350600101614214565b50909d9c50505050505050505050505050565b6000828211156142cf576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906143095750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143525782800160ff1982351617855561437f565b8280016001018555821561437f579182015b8281111561437f578235825591602001919060010190614364565b5061438b9291506143fd565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143d057805160ff191683800117855561437f565b8280016001018555821561437f579182015b8281111561437f5782518255916020019190600101906143e2565b6124c591905b8082111561438b576000815560010161440356fe4552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f524543495049454e54506c656173652053657420436f6d70616e792057616c6c65742041646472657373455243313135355472616461626c652362617463684d696e743a204f4e4c595f43524541544f525f414c4c4f5745444f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d617820546f6b656e207265616368656420666f722053616c657320537461676520314552433131353523736166655472616e7366657246726f6d3a20494e56414c49445f4f50455241544f5245524331313535235f7361666542617463685472616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e4754484d617820546f6b656e207265616368656420666f722053616c6573205374616765203245524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f524543495049454e544552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724d617820546f6b656e207265616368656420666f722053616c65732053746167652033455243313135352362616c616e63654f6642617463683a20494e56414c49445f41525241595f4c454e47544845524331313535237361666542617463685472616e7366657246726f6d3a20494e56414c49445f4f50455241544f52455243313135354d696e744275726e2362617463684d696e743a20494e56414c49445f4152524159535f4c454e47544845524331313535235f63616c6c6f6e45524331313535426174636852656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474545524331313535235f63616c6c6f6e4552433131353552656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745455243313135355472616461626c652373657443726561746f723a20494e56414c49445f414444524553532e455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c595f43524541544f525f414c4c4f574544a265627a7a72315820abcb70dbc5a3afa7bc9aed96a7ab37b48bd3b8c7e4ad96140d5336e6d0bd7a7764736f6c63430005110032

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001548797065644875736b794d657461436974794e46540000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): HypedHuskyMetaCityNFT

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [2] : 48797065644875736b794d657461436974794e46540000000000000000000000


Deployed Bytecode Sourcemap

54597:258:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27783:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27783:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27783:127:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29758:240;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29758:240:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29758:240:0;-1:-1:-1;;;;;;29758:240:0;;:::i;:::-;;;;;;;;;;;;;;;;;;38445:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38445:23:0;;;:::i;39690:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39690:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39690:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38839:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38839:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40753:263;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40753:263:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40753:263:0;;:::i;39313:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39313:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39313:41:0;-1:-1:-1;;;;;39313:41:0;;:::i;38913:81::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38913:81:0;;;:::i;:::-;;;;-1:-1:-1;;;;;38913:81:0;;;;;;;;;;;;;;39462:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39462:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39462:47:0;;:::i;50314:130::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50314:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50314:130:0;-1:-1:-1;;;;;50314:130:0;;:::i;:::-;;49182:1009;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;49182:1009:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;49182:1009:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;49182:1009:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;49182:1009:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;49182:1009:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;49182:1009:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;49182:1009:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;49182:1009:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;49182:1009:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;49182:1009:0;;-1:-1:-1;49182:1009:0;-1:-1:-1;49182:1009:0;;:::i;22960:511::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22960:511:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;22960:511:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;22960:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22960:511:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22960:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;22960:511:0;;;;;;;;-1:-1:-1;22960:511:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;22960:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22960:511:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22960:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;22960:511:0;;;;;;;;-1:-1:-1;22960:511:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;22960:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22960:511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;22960:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;22960:511:0;;-1:-1:-1;22960:511:0;;-1:-1:-1;;;;;22960:511:0:i;46513:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46513:215:0;;;:::i;50199:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50199:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50199:107:0;;;;:::i;28198:500::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28198:500:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28198:500:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28198:500:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28198:500:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28198:500:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28198:500:0;;;;;;;;-1:-1:-1;28198:500:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28198:500:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28198:500:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28198:500:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28198:500:0;;-1:-1:-1;28198:500:0;;-1:-1:-1;;;;;28198:500:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28198:500:0;;;;;;;;;;;;;;;;;42872:350;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42872:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42872:350:0;-1:-1:-1;;;;;42872:350:0;;:::i;42164:696::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42164:696:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;42164:696:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;42164:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42164:696:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;42164:696:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;42164:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42164:696:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;42164:696:0;;-1:-1:-1;42164:696:0;-1:-1:-1;42164:696:0;:::i;48216:958::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;48216:958:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;48216:958:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;48216:958:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;48216:958:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;48216:958:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;48216:958:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;48216:958:0;;-1:-1:-1;48216:958:0;-1:-1:-1;48216:958:0;:::i;39067:50::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39067:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39067:50:0;-1:-1:-1;;;;;39067:50:0;;:::i;2922:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2922:140:0;;;:::i;41471:155::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41471:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41471:155:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41471:155:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41471:155:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41471:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41471:155:0;;-1:-1:-1;41471:155:0;;-1:-1:-1;;;;;41471:155:0:i;38265:34::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38265:34:0;;;:::i;2111:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2111:79:0;;;:::i;39516:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39516:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39516:41:0;;:::i;46746:1460::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;46746:1460:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46746:1460:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46746:1460:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46746:1460:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46746:1460:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46746:1460:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;46746:1460:0;;-1:-1:-1;46746:1460:0;-1:-1:-1;46746:1460:0;:::i;2477:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2477:94:0;;;:::i;44410:471::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44410:471:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44410:471:0;;:::i;50458:755::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50458:755:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;50458:755:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;50458:755:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;50458:755:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;50458:755:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;50458:755:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;50458:755:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;50458:755:0;;-1:-1:-1;50458:755:0;-1:-1:-1;50458:755:0;:::i;39739:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39739:20:0;;;:::i;45785:279::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45785:279:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45785:279:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;45785:279:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45785:279:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45785:279:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;45785:279:0;;-1:-1:-1;45785:279:0;;-1:-1:-1;;;;;45785:279:0:i;26789:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26789:227:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26789:227:0;;;;;;;;;;:::i;45211:566::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45211:566:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45211:566:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;45211:566:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45211:566:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45211:566:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;45211:566:0;;-1:-1:-1;45211:566:0;;-1:-1:-1;;;;;45211:566:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46306:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46306:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46306:199:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;;46306:199:0;;;;;;;;;;;;;;52199:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52199:191:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;52199:191:0;;;;;;;;;;;;:::i;51225:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51225:116:0;;;:::i;46076:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46076:220:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46076:220:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;46076:220:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46076:220:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46076:220:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46076:220:0;;;;;;;;-1:-1:-1;46076:220:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;46076:220:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46076:220:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46076:220:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46076:220:0;;-1:-1:-1;46076:220:0;;-1:-1:-1;;;;;46076:220:0:i;51678:513::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51678:513:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;51678:513:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;51678:513:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51678:513:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;51678:513:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51678:513:0;;;;;;;;-1:-1:-1;51678:513:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;51678:513:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51678:513:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;51678:513:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51678:513:0;;;;;;;;-1:-1:-1;51678:513:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;51678:513:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51678:513:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;51678:513:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51678:513:0;;-1:-1:-1;51678:513:0;;-1:-1:-1;;;;;51678:513:0:i;39190:50::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39190:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39190:50:0;-1:-1:-1;;;;;39190:50:0;;:::i;41206:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41206:122:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41206:122:0;;:::i;38306:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38306:40:0;;;:::i;39411:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39411:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39411:44:0;;:::i;44889:314::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44889:314:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44889:314:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;44889:314:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;44889:314:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;44889:314:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;44889:314:0;;-1:-1:-1;44889:314:0;;-1:-1:-1;;;;;44889:314:0:i;52591:307::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52591:307:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;52591:307:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52591:307:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52591:307:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;52591:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;52591:307:0;;-1:-1:-1;52591:307:0;;-1:-1:-1;;;;;52591:307:0:i;27275:155::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27275:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27275:155:0;;;;;;;;;;:::i;22022:545::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22022:545:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;22022:545:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;22022:545:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22022:545:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;22022:545:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;22022:545:0;;-1:-1:-1;22022:545:0;;-1:-1:-1;;;;;22022:545:0:i;3217:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3217:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3217:109:0;-1:-1:-1;;;;;3217:109:0;;:::i;27783:127::-;-1:-1:-1;;;;;27883:16:0;;;;27857:7;27883:16;;;;;;;;;;;:21;;;;;;;;;27783:127::o;29758:240::-;29829:4;-1:-1:-1;;;;;;29846:42:0;;-1:-1:-1;;;29846:42:0;;:98;;-1:-1:-1;;;;;;;29901:43:0;;-1:-1:-1;;;29901:43:0;29846:98;29842:132;;;-1:-1:-1;29962:4:0;29955:11;;29842:132;-1:-1:-1;29987:5:0;29758:240;;;;:::o;38445:23::-;;;;:::o;39690:18::-;;;;;;;;;;;;;;;-1:-1:-1;;39690:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38839:28::-;;;-1:-1:-1;;;38839:28:0;;;;;:::o;40753:263::-;40816:13;40850:12;40858:3;40850:7;:12::i;:::-;40842:62;;;;-1:-1:-1;;;40842:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40950:15;40922:86;;;;;;;-1:-1:-1;;40922:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40950:15;;40922:86;;40950:15;40922:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40976:21;40993:3;40976:16;:21::i;:::-;40922:17;:86::i;:::-;40915:93;40753:263;-1:-1:-1;;40753:263:0:o;39313:41::-;;;;;;;;;;;;;:::o;38913:81::-;;;-1:-1:-1;;;;;38913:81:0;;:::o;39462:47::-;;;;;;;;;;;;;:::o;50314:130::-;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;50411:13;:25;;-1:-1:-1;;;;;;50411:25:0;-1:-1:-1;;;;;50411:25:0;;;;;;;;;;50314:130::o;49182:1009::-;49422:7;49442:18;49463:45;49481:8;;49463:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;49491:16:0;;-1:-1:-1;49501:5:0;;-1:-1:-1;49491:9:0;;-1:-1:-1;49491:16:0:i;49463:45::-;49442:66;;49527:23;49539:4;49545;;49527:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;49527:11:0;;-1:-1:-1;;;49527:23:0:i;:::-;49519:53;;;;;-1:-1:-1;;;49519:53:0;;;;;;;;;;;;-1:-1:-1;;;49519:53:0;;;;;;;;;;;;;;;49583:12;49598:27;:25;:27::i;:::-;49583:42;;49675:16;;49670:1;49654:14;49644:7;:24;:27;:47;;49636:76;;;;;-1:-1:-1;;;49636:76:0;;;;;;;;;;;;-1:-1:-1;;;49636:76:0;;;;;;;;;;;;;;;49744:5;49731:9;:18;49723:43;;;;;-1:-1:-1;;;49723:43:0;;;;;;;;;;;;-1:-1:-1;;;49723:43:0;;;;;;;;;;;;;;;49784:9;49779:386;49803:14;49799:1;:18;49779:386;;;49839:11;49853:27;:25;:27::i;:::-;49839:41;;49895:33;:31;:33::i;:::-;49959:10;49943:8;:13;49952:3;49943:13;;;;;;;;;;;;:26;;;;;-1:-1:-1;;;;;49943:26:0;;;;;-1:-1:-1;;;;;49943:26:0;;;;;;49984:35;49990:13;50005:3;50010:1;50013:5;;49984:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;49984:5:0;;-1:-1:-1;;;49984:35:0:i;:::-;50034:16;;;;:11;:16;;;;;;;;50053:1;50034:20;;50069:7;:12;;;;;:23;;50084:8;;50069:23;:::i;:::-;;50144:8;;50112:41;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;50112:41:0;;;;;;;;;;;;;50129:13;-1:-1:-1;;;;;50112:41:0;50124:3;50112:41;;;;;;;;;;-1:-1:-1;49819:3:0;;49779:386;;;-1:-1:-1;50182:1:0;;49182:1009;-1:-1:-1;;;;;;;;;;;;49182:1009:0:o;22960:511::-;23141:10;-1:-1:-1;;;;;23141:19:0;;;;23140:60;;;23165:35;23182:5;23189:10;23165:16;:35::i;:::-;23132:120;;;;-1:-1:-1;;;23132:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23267:17:0;;23259:78;;;;-1:-1:-1;;;23259:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23346:50;23369:5;23376:3;23381:4;23387:8;23346:22;:50::i;:::-;23403:62;23431:5;23438:3;23443:4;23449:8;23459:5;23403:27;:62::i;:::-;22960:511;;;;;:::o;46513:215::-;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;46567:13;;-1:-1:-1;;;;;46567:13:0;46559:73;;;;-1:-1:-1;;;46559:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46689:13;;:31;;46659:21;;-1:-1:-1;;;;;46689:13:0;;:31;;;;;46659:21;;46641:15;46689:31;46641:15;46689:31;46659:21;46689:13;:31;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46689:31:0;2380:1;46513:215::o;50199:107::-;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;50280:10;:18;;;;;;-1:-1:-1;;;50280:18:0;-1:-1:-1;;;;50280:18:0;;;;;;;;;50199:107::o;28198:500::-;28297:16;28351:4;:11;28333:7;:14;:29;28325:86;;;;-1:-1:-1;;;28325:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28438:30;28485:7;:14;28471:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;28471:29:0;-1:-1:-1;28438:62:0;-1:-1:-1;28559:9:0;28554:110;28578:7;:14;28574:1;:18;28554:110;;;28627:8;:20;28636:7;28644:1;28636:10;;;;;;;;;;;;;;-1:-1:-1;;;;;28627:20:0;-1:-1:-1;;;;;28627:20:0;;;;;;;;;;;;:29;28648:4;28653:1;28648:7;;;;;;;;;;;;;;28627:29;;;;;;;;;;;;28608:13;28622:1;28608:16;;;;;;;;;;;;;;;;;:48;28594:3;;28554:110;;;-1:-1:-1;28679:13:0;28198:500;-1:-1:-1;;;28198:500:0:o;42872:350::-;42986:4;42980:11;;-1:-1:-1;;;;;43010:50:0;;;;-1:-1:-1;;;43093:52:0;43088:2;43081:10;;43074:72;43180:2;43173:10;;43160:24;;42980:11;42956:259::o;42164:696::-;42376:7;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;42433:12;;42415:14;42404:8;;:25;:41;;42396:67;;;;;-1:-1:-1;;;42396:67:0;;;;;;;;;;;;-1:-1:-1;;;42396:67:0;;;;;;;;;;;;;;;42476:4;:22;;;;;;:4;42519:315;42543:14;42539:1;:18;42519:315;;;42575:8;:10;;;;;;;;42635:22;;42631:74;;42689:3;42679:14;42683:4;;42679:14;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;42679:14:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;42679:14:0;;;;-1:-1:-1;42679:14:0;;-1:-1:-1;;;;42679:14:0;42631:74;42719:13;;;;:8;:13;;;;;;;;;:26;;-1:-1:-1;;;;;;42719:26:0;42735:10;42719:26;;;42756:35;;;;;;;;;;;;;;;;;;;;;;42762:13;;42728:3;;42719:26;;42785:5;;;;;;42756:35;;42785:5;;;;42756:35;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;42756:5:0;;-1:-1:-1;;;42756:35:0:i;:::-;42802:16;;;;:11;:16;;;;;42821:1;42802:20;;;;42559:3;42519:315;;;-1:-1:-1;42851:1:0;;42164:696;-1:-1:-1;;;;;;;42164:696:0:o;48216:958::-;48425:10;;48397:7;;-1:-1:-1;;;48425:10:0;;;;48439:1;48425:15;48417:51;;;;;-1:-1:-1;;;48417:51:0;;;;;;;;;;;;-1:-1:-1;;;48417:51:0;;;;;;;;;;;;;;;48512:18;;48494:14;48487:4;;:21;:43;;48479:91;;;;-1:-1:-1;;;48479:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48626:9;48606:16;;48589:14;:33;:46;48581:72;;;;;-1:-1:-1;;;48581:72:0;;;;;;;;;;;;-1:-1:-1;;;48581:72:0;;;;;;;;;;;;;;;48666:4;:22;;;;;;-1:-1:-1;;;;;48699:21:0;;48666:4;48699:21;;;:6;:21;;;;;:39;;;;;;48751:397;48775:14;48771:1;:18;48751:397;;;48807:11;48841:12;;48821:17;:15;:17::i;:::-;:32;48807:46;;48864:23;:21;:23::i;:::-;48904:22;;48900:70;;48954:3;48944:14;48948:4;;48944:14;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;48944:14:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;48944:14:0;;;;-1:-1:-1;48944:14:0;;-1:-1:-1;;;;48944:14:0;48900:70;48982:13;;;;:8;:13;;;;;;;;;:26;;-1:-1:-1;;;;;;48982:26:0;48998:10;48982:26;;;49019:35;;;;;;;;;;;;;;;;;;;;;;49025:13;;48991:3;;48982:26;;49048:5;;;;;;49019:35;;49048:5;;;;49019:35;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;49019:5:0;;-1:-1:-1;;;49019:35:0:i;:::-;49065:16;;;;:11;:16;;;;;;49084:1;49065:20;;49101:35;;;-1:-1:-1;;;;;49101:35:0;;;49077:3;;49101:35;;;-1:-1:-1;48791:3:0;;48751:397;;39067:50;;;;;;;;;;;;;:::o;2922:140::-;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;3005:6;;2984:40;;3021:1;;-1:-1:-1;;;;;3005:6:0;;2984:40;;3021:1;;2984:40;3035:6;:19;;-1:-1:-1;;;;;;3035:19:0;;;2922:140::o;41471:155::-;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;41578:40;41598:19;41578;:40::i;:::-;41471:155;:::o;38265:34::-;;;;:::o;2111:79::-;2176:6;;-1:-1:-1;;;;;2176:6:0;2111:79;;:::o;39516:41::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39516:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46746:1460;46951:10;;46923:7;;-1:-1:-1;;;46951:10:0;;;;46965:1;46951:15;;:34;;-1:-1:-1;46970:10:0;;-1:-1:-1;;;46970:10:0;;;;46984:1;46970:15;46951:34;46943:65;;;;;-1:-1:-1;;;46943:65:0;;;;;;;;;;;;-1:-1:-1;;;46943:65:0;;;;;;;;;;;;;;;47022:10;;-1:-1:-1;;;47022:10:0;;;;47036:1;47022:15;47019:449;;;47086:18;;47068:14;47061:4;;:21;:43;;47053:91;;;;-1:-1:-1;;;47053:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47202:9;47184:14;;47167;:31;:44;47159:69;;;;;-1:-1:-1;;;47159:69:0;;;;;;;;;;;;-1:-1:-1;;;47159:69:0;;;;;;;;;;;;;;;47019:449;;;47250:10;;-1:-1:-1;;;47250:10:0;;;;47264:1;47250:15;47247:221;;;47314:18;;47296:14;47289:4;;:21;:43;;47281:91;;;;-1:-1:-1;;;47281:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47430:9;47412:14;;47395;:31;:44;47387:69;;;;;-1:-1:-1;;;47387:69:0;;;;;;;;;;;;-1:-1:-1;;;47387:69:0;;;;;;;;;;;;;;;47486:46;47498:27;47514:10;47498:15;:27::i;:::-;47527:4;;47486:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;47486:11:0;;-1:-1:-1;;;47486:46:0:i;:::-;47534:27;47550:10;47534:15;:27::i;:::-;47478:84;;;;;-1:-1:-1;;;47478:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;47478:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47583:4:0;:22;;;;;;47621:10;;-1:-1:-1;;;47621:10:0;;;;-1:-1:-1;47621:15:0;47618:185;;;-1:-1:-1;;;;;47648:30:0;;;;;;:15;:30;;;;;:48;;;;;;47618:185;;;47716:10;;-1:-1:-1;;;47716:10:0;;;;47730:1;47716:15;47713:90;;;-1:-1:-1;;;;;47743:30:0;;;;;;:15;:30;;;;;:48;;;;;;47713:90;-1:-1:-1;;;;;47813:21:0;;;;;;:6;:21;;;;;:39;;;;;;47865:313;47889:14;47885:1;:18;47865:313;;;47921:11;47955:12;;47935:17;:15;:17::i;:::-;:32;47921:46;;47978:23;:21;:23::i;:::-;48012:13;;;;:8;:13;;;;;;;;;:26;;-1:-1:-1;;;;;;48012:26:0;48028:10;48012:26;;;48049:35;;;;;;;;;;;;;;;;;;;;;;48055:13;;48021:3;;48012:26;;48078:5;;;;;;48049:35;;48078:5;;;;48049:35;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;48049:5:0;;-1:-1:-1;;;48049:35:0:i;:::-;48095:16;;;;:11;:16;;;;;;48114:1;48095:20;;48131:35;;;-1:-1:-1;;;;;48131:35:0;;;48107:3;;48131:35;;;-1:-1:-1;47905:3:0;;47865:313;;2477:94;2557:6;;2517:4;;-1:-1:-1;;;;;2557:6:0;2541:12;:10;:12::i;:::-;-1:-1:-1;;;;;2541:22:0;;2534:29;;2477:94;:::o;44410:471::-;44558:2;44548:13;;;;;44474;44548;;;;;44474;44500:7;;44474:13;;44548;;;21:6:-1;;104:10;44548:13:0;87:34:-1;135:17;;-1:-1;44548:13:0;44522:39;;44581:1;44577:5;;44572:266;44588:10;:17;44584:1;:21;;;44572:266;;;44629:8;44646;44657:1;44655:3;;;;44646:13;;;;;;;;;;44662:4;44640:27;;-1:-1:-1;44682:8:0;44716:1;44699:8;44710:1;44640:27;44708:3;;;44699:13;;;;;;;;;;;;-1:-1:-1;;;;;44699:18:0;;;;44693:25;;44682:36;;44751:10;44758:2;44751:6;:10::i;:::-;44735;44746:1;44735:13;;;;;;;;;;;;;:26;-1:-1:-1;;;;;44735:26:0;;;;;;;;;44780:1;44784;44780:5;44776:9;;44816:10;44823:2;44816:6;:10::i;:::-;44800;44811:1;44800:13;;;;;;;;;;;;;:26;-1:-1:-1;;;;;44800:26:0;;;;;;;;-1:-1:-1;;44607:3:0;;;;;-1:-1:-1;44572:266:0;;;44862:10;44410:471;-1:-1:-1;;;44410:471:0:o;50458:755::-;50640:7;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;50693:18;;50675:14;50668:4;;:21;:43;;50660:72;;;;;-1:-1:-1;;;50660:72:0;;;;;;;;;;;;-1:-1:-1;;;50660:72:0;;;;;;;;;;;;;;;50745:4;:22;;;;;;:4;50788:399;50812:14;50808:1;:18;50788:399;;;50848:11;50882:12;;50862:17;:15;:17::i;:::-;:32;50848:46;;50909:23;:21;:23::i;:::-;50988:22;;50984:74;;51042:3;51032:14;51036:4;;51032:14;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;51032:14:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;51032:14:0;;;;-1:-1:-1;51032:14:0;;-1:-1:-1;;;;51032:14:0;50984:74;51072:13;;;;:8;:13;;;;;;;;;:26;;-1:-1:-1;;;;;;51072:26:0;51088:10;51072:26;;;51109:35;;;;;;;;;;;;;;;;;;;;;;51115:13;;51081:3;;51072:26;;51138:5;;;;;;51109:35;;51138:5;;;;51109:35;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;51109:5:0;;-1:-1:-1;;;51109:35:0:i;:::-;51155:16;;;;:11;:16;;;;;51174:1;51155:20;;;;50828:3;50788:399;;39739:20;;;;;;;;;;;;;;;-1:-1:-1;;39739:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45785:279;45891:7;45920;45938:9;45958;45992:19;46007:3;45992:14;:19::i;:::-;46029:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45980:31;;-1:-1:-1;45980:31:0;;-1:-1:-1;45980:31:0;;-1:-1:-1;46029:27:0;;;;;;;-1:-1:-1;;46029:27:0;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;46029:27:0;;-1:-1:-1;;46029:27:0;;;45785:279;-1:-1:-1;;;;;;;45785:279:0:o;26789:227::-;26916:10;26906:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;26906:32:0;;;;;;;;;;;;:44;;-1:-1:-1;;26906:44:0;;;;;;;;;;26962:48;;;;;;;26906:32;;26916:10;26962:48;;;;;;;;;;;26789:227;;:::o;45211:566::-;45301:5;45308:7;45317;45350:3;:10;45364:2;45350:16;45342:25;;;;;;-1:-1:-1;;;45540:2:0;45531:12;;45525:19;45610:2;45601:12;;45595:19;45717:2;45708:12;;;45702:19;45380:9;45694:28;;45525:19;;45595;45211:566::o;46306:199::-;46357:4;46386:2;46377:6;:11;;;46374:124;;;-1:-1:-1;46426:2:0;46417:11;;46412:17;;46405:24;;46374:124;-1:-1:-1;46483:2:0;46474:11;;46469:17;;46462:24;;52199:191;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;52288:14;:23;;;;52320:14;:23;52352:16;:30;52199:191::o;51225:116::-;51308:21;51225:116;:::o;46076:220::-;46156:4;46172:15;46217:5;46200:23;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;46200:23:0;;;;;;;26:21:-1;;;-1:-1;;22:32;6:49;;46200:23:0;;;46190:34;;;;;;;;46274:13;;46190:34;;-1:-1:-1;;;;;;46274:13:0;;-1:-1:-1;46243:27:0;;-1:-1:-1;46190:34:0;;-1:-1:-1;46266:3:0;46243:13;:27::i;:::-;-1:-1:-1;;;;;46243:44:0;;;46076:220;-1:-1:-1;;;;46076:220:0:o;51678:513::-;51849:9;51844:288;51868:4;:11;51864:1;:15;51844:288;;;51897:11;51911:4;51916:1;51911:7;;;;;;;;;;;;;;;;;;;51937:13;;;;:8;:13;;;;;;;;51911:7;;-1:-1:-1;;;;;;51937:13:0;51954:10;51937:27;51929:87;;;;-1:-1:-1;;;51929:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52027:16;52046:11;52058:1;52046:14;;;;;;;;;;;;;;52027:33;;52090:30;52111:8;52090:11;:16;52102:3;52090:16;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;52071:16;;;;:11;:16;;;;;;:49;;;;-1:-1:-1;51881:3:0;;51844:288;;;;52142:41;52153:3;52158:4;52164:11;52177:5;52142:10;:41::i;:::-;51678:513;;;;:::o;39190:50::-;;;;;;;;;;;;;:::o;41206:122::-;41277:7;41304:16;;;:11;:16;;;;;;;41206:122::o;38306:40::-;;;;:::o;39411:44::-;;;;;;;;;;;;-1:-1:-1;;;;;39411:44:0;;:::o;44889:314::-;45047:26;;44957:14;;45025:6;;45043:74;;-1:-1:-1;45102:3:0;;-1:-1:-1;45095:10:0;;45043:74;-1:-1:-1;;45181:2:0;45169:15;45163:22;;45138:58::o;52591:307::-;-1:-1:-1;;;;;52698:17:0;;52690:74;;;;-1:-1:-1;;;52690:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52780:9;52775:116;52799:4;:11;52795:1;:15;52775:116;;;52828:10;52841:4;52846:1;52841:7;;;;;;;;;;;;;;52828:20;;52859;52871:3;52876:2;52859:11;:20::i;:::-;-1:-1:-1;52812:3:0;;52775:116;;;;52591:307;;:::o;27275:155::-;-1:-1:-1;;;;;27396:17:0;;;27362:15;27396:17;;;:9;:17;;;;;;;;:28;;;;;;;;;;;;;;;27275:155::o;22022:545::-;22157:10;-1:-1:-1;;;;;22157:19:0;;;;22156:60;;;22181:35;22198:5;22205:10;22181:16;:35::i;:::-;22148:115;;;;-1:-1:-1;;;22148:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22278:17:0;;22270:72;;;;-1:-1:-1;;;22270:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22456:43;22474:5;22481:3;22486;22491:7;22456:17;:43::i;:::-;22506:55;22529:5;22536:3;22541;22546:7;22555:5;22506:22;:55::i;3217:109::-;2323:9;:7;:9::i;:::-;2315:54;;;;;-1:-1:-1;;;2315:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2315:54:0;;;;;;;;;;;;;;;3290:28;3309:8;3290:18;:28::i;53437:128::-;53506:4;53530:13;;;:8;:13;;;;;;-1:-1:-1;;;;;53530:13:0;:27;;;53437:128::o;35132:482::-;35182:27;35226:7;35222:50;;-1:-1:-1;35250:10:0;;;;;;;;;;;;-1:-1:-1;;;35250:10:0;;;;;;35222:50;35291:2;35282:6;35323:69;35330:6;;35323:69;;35353:5;;35378:2;35373:7;;;;35323:69;;;35402:17;35432:3;35422:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;35422:14:0;87:34:-1;135:17;;-1:-1;35422:14:0;-1:-1:-1;35402:34:0;-1:-1:-1;;;35456:7:0;;35474:103;35481:7;;35474:103;;35538:2;35533;:7;35528:2;:12;35517:25;;35505:4;35510:3;;;;;;;35505:9;;;;;;;;;;;:37;-1:-1:-1;;;;;35505:37:0;;;;;;;;-1:-1:-1;35563:2:0;35557:8;;;;35474:103;;;-1:-1:-1;35601:4:0;35132:482;-1:-1:-1;;;;35132:482:0:o;34976:148::-;35054:13;35087:29;35097:2;35101;35087:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;19825:539::-;19879:27;19919:7;19915:40;;-1:-1:-1;19937:10:0;;;;;;;;;;;;-1:-1:-1;;;19937:10:0;;;;;;19915:40;19975:2;;19963:9;20054:53;20061:6;;20054:53;;20078:5;;20097:2;20092:7;;;;20054:53;;;20115:17;20145:3;20135:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;20135:14:0;87:34:-1;135:17;;-1:-1;20135:14:0;-1:-1:-1;20115:34:0;-1:-1:-1;;;20168:7:0;;20218:87;20225:7;;20218:87;;20276:2;20271;:7;20266:2;:12;20255:25;;20243:4;20248:3;;;;;;;20243:9;;;;;;;;;;;:37;-1:-1:-1;;;;;20243:37:0;;;;;;;;-1:-1:-1;20295:2:0;20289:8;;;;20218:87;;;-1:-1:-1;20353:4:0;19825:539;-1:-1:-1;;;;;19825:539:0:o;53988:119::-;54074:18;;54047:7;;54074:25;;54097:1;54074:25;:22;:25;:::i;:::-;54067:32;;53988:119;:::o;54358:91::-;54421:18;:20;;;;;;54358:91::o;30708:401::-;-1:-1:-1;;;;;30851:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:31;;30874:7;30851:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;30830:13:0;;:8;:13;;;;;;;;;;;:18;;;;;;;;:52;;;;30915:59;;;;;;;;;;;;;30830:13;;:8;;30930:10;;30915:59;;;;;;;;31041:62;31072:3;31078;31083;31088:7;31097:5;31041:22;:62::i;25099:687::-;25256:8;:15;25241:4;:11;:30;25233:96;;;;-1:-1:-1;;;25233:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25396:11;;25376:17;25448:247;25472:9;25468:1;:13;25448:247;;;25573:41;25602:8;25611:1;25602:11;;;;;;;;;;;;;;25573:8;:15;25582:5;-1:-1:-1;;;;;25573:15:0;-1:-1:-1;;;;;25573:15:0;;;;;;;;;;;;:24;25589:4;25594:1;25589:7;;;;;;;;;;;;;;25573:24;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;25546:8;:15;25555:5;-1:-1:-1;;;;;25546:15:0;-1:-1:-1;;;;;25546:15:0;;;;;;;;;;;;:24;25562:4;25567:1;25562:7;;;;;;;;;;;;;;25546:24;;;;;;;;;;;:68;;;;25648:39;25675:8;25684:1;25675:11;;;;;;;;;;;;;;25648:8;:13;25657:3;-1:-1:-1;;;;;25648:13:0;-1:-1:-1;;;;;25648:13:0;;;;;;;;;;;;:22;25662:4;25667:1;25662:7;;;;;;;;;;;;;;25648:22;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;25623:8;:13;25632:3;-1:-1:-1;;;;;25623:13:0;-1:-1:-1;;;;;25623:13:0;;;;;;;;;;;;:22;25637:4;25642:1;25637:7;;;;;;;;;;;;;;;;;;;25623:22;;;;;;;;;;-1:-1:-1;25623:22:0;:64;25483:3;;25448:247;;;;25760:3;-1:-1:-1;;;;;25727:53:0;25753:5;-1:-1:-1;;;;;25727:53:0;25741:10;-1:-1:-1;;;;;25727:53:0;;25765:4;25771:8;25727:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25727:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25727:53:0;;;;;;;;;;;;;;;;;;;25099:687;;;;;:::o;25904:476::-;26110:16;:3;-1:-1:-1;;;;;26110:14:0;;:16::i;:::-;26106:269;;;26137:13;26175:3;-1:-1:-1;;;;;26153:49:0;;26203:10;26215:5;26222:4;26228:8;26238:5;26153:91;;;;;;;;;;;;;-1:-1:-1;;;;;26153:91:0;-1:-1:-1;;;;;26153:91:0;;;;;;-1:-1:-1;;;;;26153:91:0;-1:-1:-1;;;;;26153:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26153:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26153:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26153:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26153:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26153:91:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26153:91:0;;-1:-1:-1;;;;;;;26261:38:0;;-1:-1:-1;;;26261:38:0;26253:114;;;;-1:-1:-1;;;26253:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26106:269;25904:476;;;;;:::o;53722:106::-;53798:15;;53771:7;;53798:22;;53818:1;53798:22;:19;:22;:::i;54192:78::-;54245:15;:17;;;;;;54192:78::o;19461:123::-;19541:37;;;;:15;;:37;;;;;:::i;43230:500::-;43368:42;;;;;;;;;;;-1:-1:-1;;;43368:42:0;;;;43442:13;;43452:2;43442:13;;;43292;43442;;;;;;-1:-1:-1;;;;;43342:14:0;;;43368:42;43292:13;;43442;;;21:6:-1;;104:10;43442:13:0;87:34:-1;135:17;;-1:-1;43442:13:0;43423:32;;-1:-1:-1;;;43466:3:0;43470:1;43466:6;;;;;;;;;;;:12;-1:-1:-1;;;;;43466:12:0;;;;;;;;;-1:-1:-1;;;43489:3:0;43493:1;43489:6;;;;;;;;;;;:12;-1:-1:-1;;;;;43489:12:0;;;;;;;;-1:-1:-1;43517:6:0;43512:182;43533:2;43529:1;:6;43512:182;;;43570:8;43607:1;43590:5;43596:1;43600:2;43596:6;43590:13;;;;;;;;;;-1:-1:-1;;;;;43590:18:0;;;;43584:25;;43579:31;;43570:41;;;;;;;;;;;;;;;;43557:3;43563:1;43565;43563:3;43561:1;:5;43557:10;;;;;;;;;;;:54;-1:-1:-1;;;;;43557:54:0;;;;;;;;;43639:8;43659:5;43665:1;43669:2;43665:6;43659:13;;;;;;;43639:43;;43659:13;;;43675:4;43653:27;;43639:43;;;;;;;;;;;;;;43626:3;43632:1;43634;43632:3;43630:1;:5;43626:10;;;;;;;;;;;:56;-1:-1:-1;;;;;43626:56:0;;;;;;;;-1:-1:-1;43537:3:0;;43512:182;;834:98;914:10;834:98;:::o;5765:163::-;5823:7;5851:5;;;5871:6;;;;5863:41;;;;;-1:-1:-1;;;5863:41:0;;;;;;;;;;;;-1:-1:-1;;;5863:41:0;;;;;;;;;;;;;;31396:724;31546:8;:15;31531:4;:11;:30;31523:91;;;;-1:-1:-1;;;31523:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31674:11;;31658:13;31725:150;31749:5;31745:1;:9;31725:150;;;31828:39;31855:8;31864:1;31855:11;;;;;;;;;;;;;;31828:8;:13;31837:3;-1:-1:-1;;;;;31828:13:0;-1:-1:-1;;;;;31828:13:0;;;;;;;;;;;;:22;31842:4;31847:1;31842:7;;;;;;;31828:39;31803:8;:13;31812:3;-1:-1:-1;;;;;31803:13:0;-1:-1:-1;;;;;31803:13:0;;;;;;;;;;;;:22;31817:4;31822:1;31817:7;;;;;;;;;;;;;;;;;;;31803:22;;;;;;;;;;-1:-1:-1;31803:22:0;:64;31756:3;;31725:150;;;;31958:3;-1:-1:-1;;;;;31918:60:0;31952:3;-1:-1:-1;;;;;31918:60:0;31932:10;-1:-1:-1;;;;;31918:60:0;;31963:4;31969:8;31918:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31918:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31918:60:0;;;;;;;;;;;;;;;;;;;32045:69;32081:3;32087;32092:4;32098:8;32108:5;32045:27;:69::i;53073:116::-;39907:13;;;;:8;:13;;;;;;53141:3;;-1:-1:-1;;;;;39907:13:0;39924:10;39907:27;39899:89;;;;-1:-1:-1;;;39899:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53162:13:0;;;;:8;:13;;;;;:19;;-1:-1:-1;;;;;;53162:19:0;-1:-1:-1;;;;;53162:19:0;;;;;;;;;;53073:116::o;23875:376::-;-1:-1:-1;;;;;24031:15:0;;:8;:15;;;;;;;;;;;:20;;;;;;;;;:33;;24056:7;24031:33;:24;:33;:::i;:::-;-1:-1:-1;;;;;24008:15:0;;;:8;:15;;;;;;;;;;;:20;;;;;;;;:56;;;;24111:13;;;;;;;;;;;:18;;;;;;;;:31;;24134:7;24111:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;24090:13:0;;;:8;:13;;;;;;;;;;;:18;;;;;;;;;:52;;;;24193;;;;;;;;;;;;;24090:13;;24193:52;;;;24208:10;;24193:52;;;;;;;;;;;23875:376;;;;:::o;24364:429::-;24541:16;:3;-1:-1:-1;;;;;24541:14:0;;:16::i;:::-;24537:251;;;24568:13;24606:3;-1:-1:-1;;;;;24584:44:0;;24629:10;24641:5;24648:3;24653:7;24662:5;24584:84;;;;;;;;;;;;;-1:-1:-1;;;;;24584:84:0;-1:-1:-1;;;;;24584:84:0;;;;;;-1:-1:-1;;;;;24584:84:0;-1:-1:-1;;;;;24584:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24584:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24584:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24584:84:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24584:84:0;;-1:-1:-1;;;;;;;24685:32:0;;-1:-1:-1;;;24685:32:0;24677:103;;;;-1:-1:-1;;;24677:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3432:229;-1:-1:-1;;;;;3506:22:0;;3498:73;;;;-1:-1:-1;;;3498:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3608:6;;3587:38;;-1:-1:-1;;;;;3587:38:0;;;;3608:6;;3587:38;;3608:6;;3587:38;3636:6;:17;;-1:-1:-1;;;;;;3636:17:0;-1:-1:-1;;;;;3636:17:0;;;;;;;;;;3432:229::o;33730:872::-;33862:13;33886:16;33911:2;33886:28;;33923:16;33948:2;33923:28;;33960:16;33985:2;33960:28;;33997:16;34022:2;33997:28;;34034:16;34059:2;34034:28;;34071:19;34156:3;:10;34143:3;:10;34130:3;:10;34117:3;:10;34104:3;:10;:23;:36;:49;:62;34093:74;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;34093:74:0;87:34:-1;135:17;;-1:-1;34093:74:0;-1:-1:-1;34071:96:0;-1:-1:-1;34071:96:0;34219:6;;34238:58;34259:3;:10;34255:1;:14;34238:58;;;34290:3;34294:1;34290:6;;;;;;;;;;;;;;;;34276;34283:3;;;;;;34276:11;;;;;;;;;;;:20;-1:-1:-1;;;;;34276:20:0;;;;;;;;-1:-1:-1;34271:3:0;;34238:58;;;-1:-1:-1;34310:6:0;34305:58;34326:3;:10;34322:1;:14;34305:58;;;34357:3;34361:1;34357:6;;;;;;;;;;;;;;;;34343;34350:3;;;;;;34343:11;;;;;;;;;;;:20;-1:-1:-1;;;;;34343:20:0;;;;;;;;-1:-1:-1;34338:3:0;;34305:58;;;-1:-1:-1;34377:6:0;34372:58;34393:3;:10;34389:1;:14;34372:58;;;34424:3;34428:1;34424:6;;;;;;;;;;;;;;;;34410;34417:3;;;;;;34410:11;;;;;;;;;;;:20;-1:-1:-1;;;;;34410:20:0;;;;;;;;-1:-1:-1;34405:3:0;;34372:58;;;-1:-1:-1;34444:6:0;34439:58;34460:3;:10;34456:1;:14;34439:58;;;34491:3;34495:1;34491:6;;;;;;;;;;;;;;;;34477;34484:3;;;;;;34477:11;;;;;;;;;;;:20;-1:-1:-1;;;;;34477:20:0;;;;;;;;-1:-1:-1;34472:3:0;;34439:58;;;-1:-1:-1;34511:6:0;34506:58;34527:3;:10;34523:1;:14;34506:58;;;34558:3;34562:1;34558:6;;;;;;;;;;;;;;;;34544;34551:3;;;;;;34544:11;;;;;;;;;;;:20;-1:-1:-1;;;;;34544:20:0;;;;;;;;-1:-1:-1;34539:3:0;;34506:58;;;-1:-1:-1;34587:6:0;;33730:872;-1:-1:-1;;;;;;;;;;;;;33730:872:0:o;5522:163::-;5580:7;5609:1;5604;:6;;5596:42;;;;;-1:-1:-1;;;5596:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5657:5:0;;;5522:163::o;16550:673::-;16610:4;17138:20;;16668:66;17174:15;;;;;:42;;;17205:11;17193:8;:23;;17174:42;17166:51;16550:673;-1:-1:-1;;;;16550:673:0:o;54597:258::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54597:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54597:258:0;;;-1:-1:-1;54597:258:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://abcb70dbc5a3afa7bc9aed96a7ab37b48bd3b8c7e4ad96140d5336e6d0bd7a77
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.