ETH Price: $3,809.62 (+4.96%)

Token

DOGLIENS (DLN)
 

Overview

Max Total Supply

2,000 DLN

Holders

330

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
jonamico.eth
Balance
1 DLN
0x2491b933854409eca08a7899f64e06fb3a3ac4df
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DOGLIENS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0

/*

########   #######   ######   ##       #### ######## ##    ##  ######  
##     ## ##     ## ##    ##  ##        ##  ##       ###   ## ##    ## 
##     ## ##     ## ##        ##        ##  ##       ####  ## ##       
##     ## ##     ## ##   #### ##        ##  ######   ## ## ##  ######  
##     ## ##     ## ##    ##  ##        ##  ##       ##  ####       ## 
##     ## ##     ## ##    ##  ##        ##  ##       ##   ### ##    ## 
########   #######   ######   ######## #### ######## ##    ##  ######  

*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol

pragma solidity ^0.8.0;

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}


// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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


// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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


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

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

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


    function approve(address to, uint256 tokenId) external;


    function setApprovalForAll(address operator, bool _approved) external;


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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: erc721a/contracts/IERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;



/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}


// File: erc721a/contracts/ERC721A.sol

// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

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

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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


    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

 
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}


    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}


// File: contracts/DOGLIENS.sol

pragma solidity >= 0.8.0 < 0.9.0;

contract DOGLIENS is ERC721A, Ownable, ReentrancyGuard {

  using Strings for uint256;
  address public signerAddress;

  string public uriPrefix;
  string public notRevealedURI = "ipfs://QmVFsyAPjYhU358QbgETkDc6hutC8CPLhfFBy5H8poM9Ar/hidden.json";
  string public uriSuffix = ".json";
  
  uint256 public cost = 0 ether;

  uint256 public maxSupply = 600;

  uint256 public MaxperTx = 3;
  uint256 public nftPerAddressLimit = 10;

  bool public paused = true;
  uint256 public revealed = 0;

  bool public teamMintEnabled = false;
  bool public publicMintEnabled = false;
  bool public whitelistMintEnabled = false;

  mapping(address => bool) public whitelistedAddresses;
  mapping(address => uint256) public whitelistClaimed;
  mapping(address => uint256) public teamMintClaimed;
  mapping(address => uint256) public addressMintedBalance;

  constructor( address _signerAddress ) ERC721A ( "DOGLIENS", "DLN" ) {
    signerAddress = _signerAddress;
  }

// ~~~~~~~~~~~~~~~~~~~~ URI's ~~~~~~~~~~~~~~~~~~~~

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

// ~~~~~~~~~~~~~~~~~~~~ Modifiers ~~~~~~~~~~~~~~~~~~~~

  modifier mintCompliance(uint256 _mintAmount) {
    if (msg.sender != owner()) {
        require(!paused, "The contract is paused!");
        require(_mintAmount <= MaxperTx, "Max mint per transaction exceeded!");
        require(addressMintedBalance[msg.sender] + _mintAmount <= nftPerAddressLimit, "Max mint amount per address exceeded!");
        }
    require(_mintAmount > 0, "Mint amount can't be zero.");
    require(tx.origin == msg.sender, "The caller is another contract!");
    require(totalSupply() + _mintAmount <= maxSupply, "Mint amount exceeds max supply!");
    _;
  }

  modifier mintPriceCompliance(uint256 _mintAmount) {
    if (msg.sender != owner()) {
        require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        }
    _;
  }

// ~~~~~~~~~~~~~~~~~~~~ Mint Functions ~~~~~~~~~~~~~~~~~~~~
  
  // PUBLIC MINT
  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    require(publicMintEnabled, "Public mint is not active yet!");

    addressMintedBalance[msg.sender] += _mintAmount;
    _safeMint(_msgSender(), _mintAmount);
  }
  
  // WHITELIST AND OG MINT
  function mintWhitelist(uint256 _mintAmount, bytes memory sig) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    require(whitelistMintEnabled, "Whitelist mint is not active yet!");
    require(isValidData(msg.sender, sig) == true, "User is not whitelisted!");
    require(whitelistClaimed[msg.sender] + _mintAmount <= nftPerAddressLimit, "Max Whitelist mint exceeded!");

    addressMintedBalance[msg.sender] += _mintAmount;
    whitelistClaimed[msg.sender] += _mintAmount;
    _safeMint(_msgSender(), _mintAmount);
  }

  // TEAM MINT
  function mintTeam(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    require(teamMintEnabled, "Team mint is not enabled!");
    require(isWhitelisted(msg.sender) == true, "User is not a team member!");
    require(teamMintClaimed[msg.sender] + _mintAmount <= 10, "Max team mint exceeded!");

    teamMintClaimed[msg.sender] += _mintAmount;
    _safeMint(_msgSender(), _mintAmount);
  }

  // MINT for address
  function mintToAddress(uint256 _mintAmount, address _receiver) public onlyOwner {
    require(totalSupply() + _mintAmount <= maxSupply, "Mint amount exceeds max supply!");
    _safeMint(_receiver, _mintAmount);
  }

// ~~~~~~~~~~~~~~~~~~~~ SIGNATURES ~~~~~~~~~~~~~~~~~~~~
  function isValidData(address _user, bytes memory sig) public view returns (bool) {
    bytes32 message = keccak256(abi.encodePacked(_user));
    return (recoverSigner(message, sig) == signerAddress);
  }

  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 splitSignature(bytes memory sig) public pure returns (uint8, bytes32, bytes32) {
    require(sig.length == 65);
    bytes32 r; bytes32 s; uint8 v;
    assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) }
    return (v, r, s);
  }

// ~~~~~~~~~~~~~~~~~~~~ Checks ~~~~~~~~~~~~~~~~~~~~

  // Check Wallet assets
  function walletOfOwner(address _owner) public view returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = _startTokenId();
    uint256 ownedTokenIndex = 0;
    address latestOwnerAddress;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) {
      TokenOwnership memory ownership = _ownerships[currentTokenId];

      if (!ownership.burned) {
        if (ownership.addr != address(0)) {
          latestOwnerAddress = ownership.addr;
        }

        if (latestOwnerAddress == _owner) {
          ownedTokenIds[ownedTokenIndex] = currentTokenId;
          ownedTokenIndex++;
        }
      }
      currentTokenId++;
    }
    return ownedTokenIds;
  }

  // Start Token
  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

  // TOKEN URI
  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token.");
    
    if (_tokenId > revealed) { return notRevealedURI; }

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

  // Check if address is whitelisted
  function isWhitelisted(address _user) public view returns (bool) {
    return whitelistedAddresses[_user];
  }

// ~~~~~~~~~~~~~~~~~~~~ onlyOwner Functions ~~~~~~~~~~~~~~~~~~~~

  // SIGNER
  function setSigner(address _newSigner) public onlyOwner {
    signerAddress = _newSigner;
  }

  // REVEAL
  function setRevealed(uint256 _amountRevealed) public onlyOwner {
    revealed = _amountRevealed;
  }
  
  // PAUSE
  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  // SET COST
  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  // SET MAX SUPPLY
  function setMaxSupply(uint256 _MaxSupply) public onlyOwner {
    maxSupply = _MaxSupply;
  }
  
  // SET MAX MINT PER TRX
  function setMaxMintPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    MaxperTx = _maxMintAmountPerTx;
  }
  
  // SET MAX PER ADDRESS LIMIT
  function setMaxPerAddLimit(uint256 _maxPerAddLimit) public onlyOwner {
    nftPerAddressLimit = _maxPerAddLimit;
  }
  
  // SET BASE URI
  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }
  
  // SET PUBLIC MINT STATE
  function setPublicMintState(bool _state) public onlyOwner {
    publicMintEnabled = _state;
  }

  // SET TEAM MINT STATE
  function setTeamMintState(bool _state) public onlyOwner {
    teamMintEnabled = _state;
  }

  // SET WHITELIST MINT STATE
  function setWLMintState(bool _state) public onlyOwner {
    whitelistMintEnabled = _state;
  }

  // WHITELIST USERS
  function whitelistUsers(address[] calldata _users) public onlyOwner {
    for (uint256 i = 0; i < _users.length; i++) {
        whitelistedAddresses[_users[i]] = true; 
    }
  }

  function withdraw() public onlyOwner nonReentrant {
    (bool os, ) = payable(owner()).call{value: address(this).balance}('');
    require(os);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MaxperTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"isValidData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintTeam","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAddLimit","type":"uint256"}],"name":"setMaxPerAddLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountRevealed","type":"uint256"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setTeamMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWLMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"teamMintClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052604051806080016040528060418152602001620063f160419139600c9080519060200190620000359291906200033a565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000839291906200033a565b506000600e55610258600f556003601055600a6011556001601260006101000a81548160ff02191690831515021790555060006013556000601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548160ff0219169083151502179055503480156200011757600080fd5b50604051620064323803806200643283398181016040528101906200013d919062000401565b6040518060400160405280600881526020017f444f474c49454e530000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f444c4e00000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001c19291906200033a565b508060039080519060200190620001da9291906200033a565b50620001eb6200026360201b60201c565b600081905550505062000213620002076200026c60201b60201c565b6200027460201b60201c565b600160098190555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620004eb565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003489062000467565b90600052602060002090601f0160209004810192826200036c5760008555620003b8565b82601f106200038757805160ff1916838001178555620003b8565b82800160010185558215620003b8579182015b82811115620003b75782518255916020019190600101906200039a565b5b509050620003c79190620003cb565b5090565b5b80821115620003e6576000816000905550600101620003cc565b5090565b600081519050620003fb81620004d1565b92915050565b6000602082840312156200041a5762000419620004cc565b5b60006200042a84828501620003ea565b91505092915050565b6000620004408262000447565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048057607f821691505b602082108114156200049757620004966200049d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620004dc8162000433565b8114620004e857600080fd5b50565b615ef680620004fb6000396000f3fe60806040526004361061036b5760003560e01c806362b99ad4116101c6578063a0712d68116100f7578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610cb3578063edec5f2714610cf0578063f2fde38b14610d19578063ff64569114610d425761036b565b8063c87b56dd14610c0e578063d5abeb0114610c4b578063db4bec4414610c765761036b565b8063b0940d45116100d1578063b0940d4514610b54578063b3b2398214610b91578063b88d4fde14610bba578063ba7d2c7614610be35761036b565b8063a0712d6814610ad0578063a22cb46514610aec578063a7bb580314610b155761036b565b806372250380116101645780638da5cb5b1161013e5780638da5cb5b14610a2157806395d89b4114610a4c57806397aba7f914610a775780639f41554a14610ab45761036b565b806372250380146109a45780637ec4a659146109cf578063879fbedf146109f85761036b565b80636caede3d116101a05780636caede3d146108fc5780636f8b44b01461092757806370a0823114610950578063715018a61461098d5761036b565b806362b99ad41461086b5780636352211e146108965780636c19e783146108d35761036b565b80633ccfd60b116102a0578063512b658d1161023e5780635b7633d0116102185780635b7633d0146107c15780635c975abb146107ec5780635cdb83e114610817578063616cdb1e146108425761036b565b8063512b658d14610742578063518302271461076b5780635503a0e8146107965761036b565b8063438b63001161027a578063438b63001461068a57806344a0d68a146106c7578063489f2bcd146106f05780634d973765146107195761036b565b80633ccfd60b1461060d5780633dec7d051461062457806342842e0e146106615761036b565b806316c38b3c1161030d57806323b872dd116102e757806323b872dd146105625780632fd5bce21461058b578063342f48aa146105b45780633af32abf146105d05761036b565b806316c38b3c146104d157806318160ddd146104fa57806318cae269146105255761036b565b8063081812fc11610349578063081812fc14610415578063095ea7b3146104525780630f4161aa1461047b57806313faede6146104a65761036b565b806301ffc9a71461037057806306c933d8146103ad57806306fdde03146103ea575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190614b28565b610d6d565b6040516103a49190615269565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190614833565b610e4f565b6040516103e19190615269565b60405180910390f35b3480156103f657600080fd5b506103ff610e6f565b60405161040c91906152c9565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190614c14565b610f01565b60405161044991906151e0565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614a12565b610f7d565b005b34801561048757600080fd5b50610490611082565b60405161049d9190615269565b60405180910390f35b3480156104b257600080fd5b506104bb611095565b6040516104c8919061552b565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190614a9f565b61109b565b005b34801561050657600080fd5b5061050f611134565b60405161051c919061552b565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190614833565b61114b565b604051610559919061552b565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906148a0565b611163565b005b34801561059757600080fd5b506105b260048036038101906105ad9190614c14565b611173565b005b6105ce60048036038101906105c99190614c14565b6111f9565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190614833565b611685565b6040516106049190615269565b60405180910390f35b34801561061957600080fd5b506106226116db565b005b34801561063057600080fd5b5061064b60048036038101906106469190614833565b61182d565b604051610658919061552b565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906148a0565b611845565b005b34801561069657600080fd5b506106b160048036038101906106ac9190614833565b611865565b6040516106be9190615247565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190614c14565b611a79565b005b3480156106fc57600080fd5b5061071760048036038101906107129190614c14565b611aff565b005b34801561072557600080fd5b50610740600480360381019061073b9190614a9f565b611b85565b005b34801561074e57600080fd5b5061076960048036038101906107649190614c41565b611c1e565b005b34801561077757600080fd5b50610780611cff565b60405161078d919061552b565b60405180910390f35b3480156107a257600080fd5b506107ab611d05565b6040516107b891906152c9565b60405180910390f35b3480156107cd57600080fd5b506107d6611d93565b6040516107e391906151e0565b60405180910390f35b3480156107f857600080fd5b50610801611db9565b60405161080e9190615269565b60405180910390f35b34801561082357600080fd5b5061082c611dcc565b6040516108399190615269565b60405180910390f35b34801561084e57600080fd5b5061086960048036038101906108649190614c14565b611ddf565b005b34801561087757600080fd5b50610880611e65565b60405161088d91906152c9565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190614c14565b611ef3565b6040516108ca91906151e0565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614833565b611f09565b005b34801561090857600080fd5b50610911611fc9565b60405161091e9190615269565b60405180910390f35b34801561093357600080fd5b5061094e60048036038101906109499190614c14565b611fdc565b005b34801561095c57600080fd5b5061097760048036038101906109729190614833565b612062565b604051610984919061552b565b60405180910390f35b34801561099957600080fd5b506109a2612132565b005b3480156109b057600080fd5b506109b96121ba565b6040516109c691906152c9565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f19190614bcb565b612248565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190614a9f565b6122de565b005b348015610a2d57600080fd5b50610a36612377565b604051610a4391906151e0565b60405180910390f35b348015610a5857600080fd5b50610a616123a1565b604051610a6e91906152c9565b60405180910390f35b348015610a8357600080fd5b50610a9e6004803603810190610a999190614acc565b612433565b604051610aab91906151e0565b60405180910390f35b610ace6004803603810190610ac99190614c81565b6124a8565b005b610aea6004803603810190610ae59190614c14565b61298d565b005b348015610af857600080fd5b50610b136004803603810190610b0e9190614976565b612d3c565b005b348015610b2157600080fd5b50610b3c6004803603810190610b379190614b82565b612eb4565b604051610b4b93929190615546565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b7691906149b6565b612ef7565b604051610b889190615269565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190614a9f565b612f86565b005b348015610bc657600080fd5b50610be16004803603810190610bdc91906148f3565b61301f565b005b348015610bef57600080fd5b50610bf8613097565b604051610c05919061552b565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c309190614c14565b61309d565b604051610c4291906152c9565b60405180910390f35b348015610c5757600080fd5b50610c606131e4565b604051610c6d919061552b565b60405180910390f35b348015610c8257600080fd5b50610c9d6004803603810190610c989190614833565b6131ea565b604051610caa919061552b565b60405180910390f35b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614860565b613202565b604051610ce79190615269565b60405180910390f35b348015610cfc57600080fd5b50610d176004803603810190610d129190614a52565b613296565b005b348015610d2557600080fd5b50610d406004803603810190610d3b9190614833565b6133b7565b005b348015610d4e57600080fd5b50610d576134af565b604051610d64919061552b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e485750610e47826134b5565b5b9050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b606060028054610e7e90615882565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa90615882565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050905090565b6000610f0c8261351f565b610f42576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f8882611ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ff0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661100f61356d565b73ffffffffffffffffffffffffffffffffffffffff16146110725761103b8161103661356d565b613202565b611071576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b61107d838383613575565b505050565b601460019054906101000a900460ff1681565b600e5481565b6110a361356d565b73ffffffffffffffffffffffffffffffffffffffff166110c1612377565b73ffffffffffffffffffffffffffffffffffffffff1614611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e9061538b565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600061113e613627565b6001546000540303905090565b60186020528060005260406000206000915090505481565b61116e838383613630565b505050565b61117b61356d565b73ffffffffffffffffffffffffffffffffffffffff16611199612377565b73ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e69061538b565b60405180910390fd5b8060138190555050565b80611202612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461135957601260009054906101000a900460ff1615611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b906153ab565b60405180910390fd5b6010548111156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c09061542b565b60405180910390fd5b60115481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461131791906156a0565b1115611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f9061540b565b60405180910390fd5b5b6000811161139c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113939061536b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906153cb565b60405180910390fd5b600f5481611416611134565b61142091906156a0565b1115611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114589061534b565b60405180910390fd5b8161146a612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114ed5780600e546114aa9190615727565b3410156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e3906154eb565b60405180910390fd5b5b601460009054906101000a900460ff1661153c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115339061546b565b60405180910390fd5b6001151561154933611685565b15151461158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906154ab565b60405180910390fd5b600a83601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115d891906156a0565b1115611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061532b565b60405180910390fd5b82601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166891906156a0565b9250508190555061168061167a61356d565b84613ae6565b505050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116e361356d565b73ffffffffffffffffffffffffffffffffffffffff16611701612377565b73ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061538b565b60405180910390fd5b6002600954141561179d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117949061548b565b60405180910390fd5b600260098190555060006117af612377565b73ffffffffffffffffffffffffffffffffffffffff16476040516117d2906151cb565b60006040518083038185875af1925050503d806000811461180f576040519150601f19603f3d011682016040523d82523d6000602084013e611814565b606091505b505090508061182257600080fd5b506001600981905550565b60176020528060005260406000206000915090505481565b6118608383836040518060200160405280600081525061301f565b505050565b6060600061187283612062565b905060008167ffffffffffffffff8111156118905761188f615a3f565b5b6040519080825280602002602001820160405280156118be5781602001602082028036833780820191505090505b50905060006118cb613627565b90506000805b84821080156118e1575060005483105b15611a6c576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611a5857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146119f457806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a575783858481518110611a3c57611a3b615a10565b5b6020026020010181815250508280611a53906158e5565b9350505b5b8380611a63906158e5565b945050506118d1565b8395505050505050919050565b611a8161356d565b73ffffffffffffffffffffffffffffffffffffffff16611a9f612377565b73ffffffffffffffffffffffffffffffffffffffff1614611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec9061538b565b60405180910390fd5b80600e8190555050565b611b0761356d565b73ffffffffffffffffffffffffffffffffffffffff16611b25612377565b73ffffffffffffffffffffffffffffffffffffffff1614611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b729061538b565b60405180910390fd5b8060118190555050565b611b8d61356d565b73ffffffffffffffffffffffffffffffffffffffff16611bab612377565b73ffffffffffffffffffffffffffffffffffffffff1614611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061538b565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b611c2661356d565b73ffffffffffffffffffffffffffffffffffffffff16611c44612377565b73ffffffffffffffffffffffffffffffffffffffff1614611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c919061538b565b60405180910390fd5b600f5482611ca6611134565b611cb091906156a0565b1115611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce89061534b565b60405180910390fd5b611cfb8183613ae6565b5050565b60135481565b600d8054611d1290615882565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3e90615882565b8015611d8b5780601f10611d6057610100808354040283529160200191611d8b565b820191906000526020600020905b815481529060010190602001808311611d6e57829003601f168201915b505050505081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b601460009054906101000a900460ff1681565b611de761356d565b73ffffffffffffffffffffffffffffffffffffffff16611e05612377565b73ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e529061538b565b60405180910390fd5b8060108190555050565b600b8054611e7290615882565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9e90615882565b8015611eeb5780601f10611ec057610100808354040283529160200191611eeb565b820191906000526020600020905b815481529060010190602001808311611ece57829003601f168201915b505050505081565b6000611efe82613b04565b600001519050919050565b611f1161356d565b73ffffffffffffffffffffffffffffffffffffffff16611f2f612377565b73ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061538b565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460029054906101000a900460ff1681565b611fe461356d565b73ffffffffffffffffffffffffffffffffffffffff16612002612377565b73ffffffffffffffffffffffffffffffffffffffff1614612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f9061538b565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61213a61356d565b73ffffffffffffffffffffffffffffffffffffffff16612158612377565b73ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a59061538b565b60405180910390fd5b6121b86000613d8f565b565b600c80546121c790615882565b80601f01602080910402602001604051908101604052809291908181526020018280546121f390615882565b80156122405780601f1061221557610100808354040283529160200191612240565b820191906000526020600020905b81548152906001019060200180831161222357829003601f168201915b505050505081565b61225061356d565b73ffffffffffffffffffffffffffffffffffffffff1661226e612377565b73ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb9061538b565b60405180910390fd5b80600b90805190602001906122da929190614599565b5050565b6122e661356d565b73ffffffffffffffffffffffffffffffffffffffff16612304612377565b73ffffffffffffffffffffffffffffffffffffffff161461235a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123519061538b565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546123b090615882565b80601f01602080910402602001604051908101604052809291908181526020018280546123dc90615882565b80156124295780601f106123fe57610100808354040283529160200191612429565b820191906000526020600020905b81548152906001019060200180831161240c57829003601f168201915b5050505050905090565b60008060008061244285612eb4565b809350819450829550505050600186848484604051600081526020016040526040516124719493929190615284565b6020604051602081039080840390855afa158015612493573d6000803e3d6000fd5b50505060206040510351935050505092915050565b816124b1612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461260857601260009054906101000a900460ff1615612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a906153ab565b60405180910390fd5b601054811115612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f9061542b565b60405180910390fd5b60115481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125c691906156a0565b1115612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fe9061540b565b60405180910390fd5b5b6000811161264b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126429061536b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146126b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b0906153cb565b60405180910390fd5b600f54816126c5611134565b6126cf91906156a0565b1115612710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127079061534b565b60405180910390fd5b82612719612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461279c5780600e546127599190615727565b34101561279b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612792906154eb565b60405180910390fd5b5b601460029054906101000a900460ff166127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061544b565b60405180910390fd5b600115156127f93385612ef7565b15151461283b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612832906153eb565b60405180910390fd5b60115484601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288991906156a0565b11156128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c19061550b565b60405180910390fd5b83601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291991906156a0565b9250508190555083601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461296f91906156a0565b9250508190555061298761298161356d565b85613ae6565b50505050565b80612996612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612aed57601260009054906101000a900460ff1615612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f906153ab565b60405180910390fd5b601054811115612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a549061542b565b60405180910390fd5b60115481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aab91906156a0565b1115612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae39061540b565b60405180910390fd5b5b60008111612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b279061536b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906153cb565b60405180910390fd5b600f5481612baa611134565b612bb491906156a0565b1115612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec9061534b565b60405180910390fd5b81612bfe612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c815780600e54612c3e9190615727565b341015612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c77906154eb565b60405180910390fd5b5b601460019054906101000a900460ff16612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc79061530b565b60405180910390fd5b82601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1f91906156a0565b92505081905550612d37612d3161356d565b84613ae6565b505050565b612d4461356d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612da9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612db661356d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612e6361356d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ea89190615269565b60405180910390a35050565b60008060006041845114612ec757600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b60008083604051602001612f0b919061517f565b604051602081830303815290604052805190602001209050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f668285612433565b73ffffffffffffffffffffffffffffffffffffffff161491505092915050565b612f8e61356d565b73ffffffffffffffffffffffffffffffffffffffff16612fac612377565b73ffffffffffffffffffffffffffffffffffffffff1614613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff99061538b565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b61302a848484613630565b6130498373ffffffffffffffffffffffffffffffffffffffff16613e55565b156130915761305a84848484613e78565b613090576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60115481565b60606130a88261351f565b6130e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130de906154cb565b60405180910390fd5b60135482111561318357600c80546130fe90615882565b80601f016020809104026020016040519081016040528092919081815260200182805461312a90615882565b80156131775780601f1061314c57610100808354040283529160200191613177565b820191906000526020600020905b81548152906001019060200180831161315a57829003601f168201915b505050505090506131df565b600061318d613fd8565b905060008151116131ad57604051806020016040528060008152506131db565b806131b78461406a565b600d6040516020016131cb9392919061519a565b6040516020818303038152906040525b9150505b919050565b600f5481565b60166020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61329e61356d565b73ffffffffffffffffffffffffffffffffffffffff166132bc612377565b73ffffffffffffffffffffffffffffffffffffffff1614613312576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133099061538b565b60405180910390fd5b60005b828290508110156133b25760016015600085858581811061333957613338615a10565b5b905060200201602081019061334e9190614833565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806133aa906158e5565b915050613315565b505050565b6133bf61356d565b73ffffffffffffffffffffffffffffffffffffffff166133dd612377565b73ffffffffffffffffffffffffffffffffffffffff1614613433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342a9061538b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349a906152eb565b60405180910390fd5b6134ac81613d8f565b50565b60105481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161352a613627565b11158015613539575060005482105b8015613566575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061363b82613b04565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146136a6576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166136c761356d565b73ffffffffffffffffffffffffffffffffffffffff1614806136f657506136f5856136f061356d565b613202565b5b8061373b575061370461356d565b73ffffffffffffffffffffffffffffffffffffffff1661372384610f01565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613774576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137db576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137e885858560016141cb565b6137f460008487613575565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a74576000548214613a7357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613adf85858560016141d1565b5050505050565b613b008282604051806020016040528060008152506141d7565b5050565b613b0c61461f565b600082905080613b1a613627565b11613d5857600054811015613d57576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151613d5557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613c39578092505050613d8a565b5b600115613d5457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613d4f578092505050613d8a565b613c3a565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e9e61356d565b8786866040518563ffffffff1660e01b8152600401613ec094939291906151fb565b602060405180830381600087803b158015613eda57600080fd5b505af1925050508015613f0b57506040513d601f19601f82011682018060405250810190613f089190614b55565b60015b613f85573d8060008114613f3b576040519150601f19603f3d011682016040523d82523d6000602084013e613f40565b606091505b50600081511415613f7d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b8054613fe790615882565b80601f016020809104026020016040519081016040528092919081815260200182805461401390615882565b80156140605780601f1061403557610100808354040283529160200191614060565b820191906000526020600020905b81548152906001019060200180831161404357829003601f168201915b5050505050905090565b606060008214156140b2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506141c6565b600082905060005b600082146140e45780806140cd906158e5565b915050600a826140dd91906156f6565b91506140ba565b60008167ffffffffffffffff811115614100576140ff615a3f565b5b6040519080825280601f01601f1916602001820160405280156141325781602001600182028036833780820191505090505b5090505b600085146141bf5760018261414b9190615781565b9150600a8561415a9190615952565b603061416691906156a0565b60f81b81838151811061417c5761417b615a10565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856141b891906156f6565b9450614136565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614244576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561427f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61428c60008583866141cb565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061444d8673ffffffffffffffffffffffffffffffffffffffff16613e55565b15614512575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46144c26000878480600101955087613e78565b6144f8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061445357826000541461450d57600080fd5b61457d565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210614513575b81600081905550505061459360008583866141d1565b50505050565b8280546145a590615882565b90600052602060002090601f0160209004810192826145c7576000855561460e565b82601f106145e057805160ff191683800117855561460e565b8280016001018555821561460e579182015b8281111561460d5782518255916020019190600101906145f2565b5b50905061461b9190614662565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561467b576000816000905550600101614663565b5090565b600061469261468d846155a2565b61557d565b9050828152602081018484840111156146ae576146ad615a7d565b5b6146b9848285615840565b509392505050565b60006146d46146cf846155d3565b61557d565b9050828152602081018484840111156146f0576146ef615a7d565b5b6146fb848285615840565b509392505050565b60008135905061471281615e4d565b92915050565b60008083601f84011261472e5761472d615a73565b5b8235905067ffffffffffffffff81111561474b5761474a615a6e565b5b60208301915083602082028301111561476757614766615a78565b5b9250929050565b60008135905061477d81615e64565b92915050565b60008135905061479281615e7b565b92915050565b6000813590506147a781615e92565b92915050565b6000815190506147bc81615e92565b92915050565b600082601f8301126147d7576147d6615a73565b5b81356147e784826020860161467f565b91505092915050565b600082601f83011261480557614804615a73565b5b81356148158482602086016146c1565b91505092915050565b60008135905061482d81615ea9565b92915050565b60006020828403121561484957614848615a87565b5b600061485784828501614703565b91505092915050565b6000806040838503121561487757614876615a87565b5b600061488585828601614703565b925050602061489685828601614703565b9150509250929050565b6000806000606084860312156148b9576148b8615a87565b5b60006148c786828701614703565b93505060206148d886828701614703565b92505060406148e98682870161481e565b9150509250925092565b6000806000806080858703121561490d5761490c615a87565b5b600061491b87828801614703565b945050602061492c87828801614703565b935050604061493d8782880161481e565b925050606085013567ffffffffffffffff81111561495e5761495d615a82565b5b61496a878288016147c2565b91505092959194509250565b6000806040838503121561498d5761498c615a87565b5b600061499b85828601614703565b92505060206149ac8582860161476e565b9150509250929050565b600080604083850312156149cd576149cc615a87565b5b60006149db85828601614703565b925050602083013567ffffffffffffffff8111156149fc576149fb615a82565b5b614a08858286016147c2565b9150509250929050565b60008060408385031215614a2957614a28615a87565b5b6000614a3785828601614703565b9250506020614a488582860161481e565b9150509250929050565b60008060208385031215614a6957614a68615a87565b5b600083013567ffffffffffffffff811115614a8757614a86615a82565b5b614a9385828601614718565b92509250509250929050565b600060208284031215614ab557614ab4615a87565b5b6000614ac38482850161476e565b91505092915050565b60008060408385031215614ae357614ae2615a87565b5b6000614af185828601614783565b925050602083013567ffffffffffffffff811115614b1257614b11615a82565b5b614b1e858286016147c2565b9150509250929050565b600060208284031215614b3e57614b3d615a87565b5b6000614b4c84828501614798565b91505092915050565b600060208284031215614b6b57614b6a615a87565b5b6000614b79848285016147ad565b91505092915050565b600060208284031215614b9857614b97615a87565b5b600082013567ffffffffffffffff811115614bb657614bb5615a82565b5b614bc2848285016147c2565b91505092915050565b600060208284031215614be157614be0615a87565b5b600082013567ffffffffffffffff811115614bff57614bfe615a82565b5b614c0b848285016147f0565b91505092915050565b600060208284031215614c2a57614c29615a87565b5b6000614c388482850161481e565b91505092915050565b60008060408385031215614c5857614c57615a87565b5b6000614c668582860161481e565b9250506020614c7785828601614703565b9150509250929050565b60008060408385031215614c9857614c97615a87565b5b6000614ca68582860161481e565b925050602083013567ffffffffffffffff811115614cc757614cc6615a82565b5b614cd3858286016147c2565b9150509250929050565b6000614ce98383615152565b60208301905092915050565b614cfe816157b5565b82525050565b614d15614d10826157b5565b61592e565b82525050565b6000614d2682615629565b614d308185615657565b9350614d3b83615604565b8060005b83811015614d6c578151614d538882614cdd565b9750614d5e8361564a565b925050600181019050614d3f565b5085935050505092915050565b614d82816157c7565b82525050565b614d91816157d3565b82525050565b6000614da282615634565b614dac8185615668565b9350614dbc81856020860161584f565b614dc581615a8c565b840191505092915050565b6000614ddb8261563f565b614de58185615684565b9350614df581856020860161584f565b614dfe81615a8c565b840191505092915050565b6000614e148261563f565b614e1e8185615695565b9350614e2e81856020860161584f565b80840191505092915050565b60008154614e4781615882565b614e518186615695565b94506001821660008114614e6c5760018114614e7d57614eb0565b60ff19831686528186019350614eb0565b614e8685615614565b60005b83811015614ea857815481890152600182019150602081019050614e89565b838801955050505b50505092915050565b6000614ec6602683615684565b9150614ed182615aaa565b604082019050919050565b6000614ee9601e83615684565b9150614ef482615af9565b602082019050919050565b6000614f0c601783615684565b9150614f1782615b22565b602082019050919050565b6000614f2f601f83615684565b9150614f3a82615b4b565b602082019050919050565b6000614f52601a83615684565b9150614f5d82615b74565b602082019050919050565b6000614f75602083615684565b9150614f8082615b9d565b602082019050919050565b6000614f98601783615684565b9150614fa382615bc6565b602082019050919050565b6000614fbb601f83615684565b9150614fc682615bef565b602082019050919050565b6000614fde601883615684565b9150614fe982615c18565b602082019050919050565b6000615001600083615679565b915061500c82615c41565b600082019050919050565b6000615024602583615684565b915061502f82615c44565b604082019050919050565b6000615047602283615684565b915061505282615c93565b604082019050919050565b600061506a602183615684565b915061507582615ce2565b604082019050919050565b600061508d601983615684565b915061509882615d31565b602082019050919050565b60006150b0601f83615684565b91506150bb82615d5a565b602082019050919050565b60006150d3601a83615684565b91506150de82615d83565b602082019050919050565b60006150f6603083615684565b915061510182615dac565b604082019050919050565b6000615119601383615684565b915061512482615dfb565b602082019050919050565b600061513c601c83615684565b915061514782615e24565b602082019050919050565b61515b81615829565b82525050565b61516a81615829565b82525050565b61517981615833565b82525050565b600061518b8284614d04565b60148201915081905092915050565b60006151a68286614e09565b91506151b28285614e09565b91506151be8284614e3a565b9150819050949350505050565b60006151d682614ff4565b9150819050919050565b60006020820190506151f56000830184614cf5565b92915050565b60006080820190506152106000830187614cf5565b61521d6020830186614cf5565b61522a6040830185615161565b818103606083015261523c8184614d97565b905095945050505050565b600060208201905081810360008301526152618184614d1b565b905092915050565b600060208201905061527e6000830184614d79565b92915050565b60006080820190506152996000830187614d88565b6152a66020830186615170565b6152b36040830185614d88565b6152c06060830184614d88565b95945050505050565b600060208201905081810360008301526152e38184614dd0565b905092915050565b6000602082019050818103600083015261530481614eb9565b9050919050565b6000602082019050818103600083015261532481614edc565b9050919050565b6000602082019050818103600083015261534481614eff565b9050919050565b6000602082019050818103600083015261536481614f22565b9050919050565b6000602082019050818103600083015261538481614f45565b9050919050565b600060208201905081810360008301526153a481614f68565b9050919050565b600060208201905081810360008301526153c481614f8b565b9050919050565b600060208201905081810360008301526153e481614fae565b9050919050565b6000602082019050818103600083015261540481614fd1565b9050919050565b6000602082019050818103600083015261542481615017565b9050919050565b600060208201905081810360008301526154448161503a565b9050919050565b600060208201905081810360008301526154648161505d565b9050919050565b6000602082019050818103600083015261548481615080565b9050919050565b600060208201905081810360008301526154a4816150a3565b9050919050565b600060208201905081810360008301526154c4816150c6565b9050919050565b600060208201905081810360008301526154e4816150e9565b9050919050565b600060208201905081810360008301526155048161510c565b9050919050565b600060208201905081810360008301526155248161512f565b9050919050565b60006020820190506155406000830184615161565b92915050565b600060608201905061555b6000830186615170565b6155686020830185614d88565b6155756040830184614d88565b949350505050565b6000615587615598565b905061559382826158b4565b919050565b6000604051905090565b600067ffffffffffffffff8211156155bd576155bc615a3f565b5b6155c682615a8c565b9050602081019050919050565b600067ffffffffffffffff8211156155ee576155ed615a3f565b5b6155f782615a8c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006156ab82615829565b91506156b683615829565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156eb576156ea615983565b5b828201905092915050565b600061570182615829565b915061570c83615829565b92508261571c5761571b6159b2565b5b828204905092915050565b600061573282615829565b915061573d83615829565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561577657615775615983565b5b828202905092915050565b600061578c82615829565b915061579783615829565b9250828210156157aa576157a9615983565b5b828203905092915050565b60006157c082615809565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561586d578082015181840152602081019050615852565b8381111561587c576000848401525b50505050565b6000600282049050600182168061589a57607f821691505b602082108114156158ae576158ad6159e1565b5b50919050565b6158bd82615a8c565b810181811067ffffffffffffffff821117156158dc576158db615a3f565b5b80604052505050565b60006158f082615829565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561592357615922615983565b5b600182019050919050565b600061593982615940565b9050919050565b600061594b82615a9d565b9050919050565b600061595d82615829565b915061596883615829565b925082615978576159776159b2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f742061637469766520796574210000600082015250565b7f4d6178207465616d206d696e7420657863656564656421000000000000000000600082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163742100600082015250565b7f55736572206973206e6f742077686974656c6973746564210000000000000000600082015250565b50565b7f4d6178206d696e7420616d6f756e74207065722061646472657373206578636560008201527f6564656421000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74206973206e6f74206163746976652079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f5465616d206d696e74206973206e6f7420656e61626c65642100000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f55736572206973206e6f742061207465616d206d656d62657221000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b7f4d61782057686974656c697374206d696e742065786365656465642100000000600082015250565b615e56816157b5565b8114615e6157600080fd5b50565b615e6d816157c7565b8114615e7857600080fd5b50565b615e84816157d3565b8114615e8f57600080fd5b50565b615e9b816157dd565b8114615ea657600080fd5b50565b615eb281615829565b8114615ebd57600080fd5b5056fea26469706673582212208f7fee5350037901433afb205aa1663fe964ea670bf06820bea61e085d829f4d64736f6c63430008070033697066733a2f2f516d5646737941506a59685533353851626745546b446336687574433843504c6866464279354838706f4d3941722f68696464656e2e6a736f6e000000000000000000000000c74407ebb1bb9f25f9fbe5acc1034440a9c35a17

Deployed Bytecode

0x60806040526004361061036b5760003560e01c806362b99ad4116101c6578063a0712d68116100f7578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610cb3578063edec5f2714610cf0578063f2fde38b14610d19578063ff64569114610d425761036b565b8063c87b56dd14610c0e578063d5abeb0114610c4b578063db4bec4414610c765761036b565b8063b0940d45116100d1578063b0940d4514610b54578063b3b2398214610b91578063b88d4fde14610bba578063ba7d2c7614610be35761036b565b8063a0712d6814610ad0578063a22cb46514610aec578063a7bb580314610b155761036b565b806372250380116101645780638da5cb5b1161013e5780638da5cb5b14610a2157806395d89b4114610a4c57806397aba7f914610a775780639f41554a14610ab45761036b565b806372250380146109a45780637ec4a659146109cf578063879fbedf146109f85761036b565b80636caede3d116101a05780636caede3d146108fc5780636f8b44b01461092757806370a0823114610950578063715018a61461098d5761036b565b806362b99ad41461086b5780636352211e146108965780636c19e783146108d35761036b565b80633ccfd60b116102a0578063512b658d1161023e5780635b7633d0116102185780635b7633d0146107c15780635c975abb146107ec5780635cdb83e114610817578063616cdb1e146108425761036b565b8063512b658d14610742578063518302271461076b5780635503a0e8146107965761036b565b8063438b63001161027a578063438b63001461068a57806344a0d68a146106c7578063489f2bcd146106f05780634d973765146107195761036b565b80633ccfd60b1461060d5780633dec7d051461062457806342842e0e146106615761036b565b806316c38b3c1161030d57806323b872dd116102e757806323b872dd146105625780632fd5bce21461058b578063342f48aa146105b45780633af32abf146105d05761036b565b806316c38b3c146104d157806318160ddd146104fa57806318cae269146105255761036b565b8063081812fc11610349578063081812fc14610415578063095ea7b3146104525780630f4161aa1461047b57806313faede6146104a65761036b565b806301ffc9a71461037057806306c933d8146103ad57806306fdde03146103ea575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190614b28565b610d6d565b6040516103a49190615269565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190614833565b610e4f565b6040516103e19190615269565b60405180910390f35b3480156103f657600080fd5b506103ff610e6f565b60405161040c91906152c9565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190614c14565b610f01565b60405161044991906151e0565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614a12565b610f7d565b005b34801561048757600080fd5b50610490611082565b60405161049d9190615269565b60405180910390f35b3480156104b257600080fd5b506104bb611095565b6040516104c8919061552b565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190614a9f565b61109b565b005b34801561050657600080fd5b5061050f611134565b60405161051c919061552b565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190614833565b61114b565b604051610559919061552b565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906148a0565b611163565b005b34801561059757600080fd5b506105b260048036038101906105ad9190614c14565b611173565b005b6105ce60048036038101906105c99190614c14565b6111f9565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190614833565b611685565b6040516106049190615269565b60405180910390f35b34801561061957600080fd5b506106226116db565b005b34801561063057600080fd5b5061064b60048036038101906106469190614833565b61182d565b604051610658919061552b565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906148a0565b611845565b005b34801561069657600080fd5b506106b160048036038101906106ac9190614833565b611865565b6040516106be9190615247565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190614c14565b611a79565b005b3480156106fc57600080fd5b5061071760048036038101906107129190614c14565b611aff565b005b34801561072557600080fd5b50610740600480360381019061073b9190614a9f565b611b85565b005b34801561074e57600080fd5b5061076960048036038101906107649190614c41565b611c1e565b005b34801561077757600080fd5b50610780611cff565b60405161078d919061552b565b60405180910390f35b3480156107a257600080fd5b506107ab611d05565b6040516107b891906152c9565b60405180910390f35b3480156107cd57600080fd5b506107d6611d93565b6040516107e391906151e0565b60405180910390f35b3480156107f857600080fd5b50610801611db9565b60405161080e9190615269565b60405180910390f35b34801561082357600080fd5b5061082c611dcc565b6040516108399190615269565b60405180910390f35b34801561084e57600080fd5b5061086960048036038101906108649190614c14565b611ddf565b005b34801561087757600080fd5b50610880611e65565b60405161088d91906152c9565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190614c14565b611ef3565b6040516108ca91906151e0565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f59190614833565b611f09565b005b34801561090857600080fd5b50610911611fc9565b60405161091e9190615269565b60405180910390f35b34801561093357600080fd5b5061094e60048036038101906109499190614c14565b611fdc565b005b34801561095c57600080fd5b5061097760048036038101906109729190614833565b612062565b604051610984919061552b565b60405180910390f35b34801561099957600080fd5b506109a2612132565b005b3480156109b057600080fd5b506109b96121ba565b6040516109c691906152c9565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f19190614bcb565b612248565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190614a9f565b6122de565b005b348015610a2d57600080fd5b50610a36612377565b604051610a4391906151e0565b60405180910390f35b348015610a5857600080fd5b50610a616123a1565b604051610a6e91906152c9565b60405180910390f35b348015610a8357600080fd5b50610a9e6004803603810190610a999190614acc565b612433565b604051610aab91906151e0565b60405180910390f35b610ace6004803603810190610ac99190614c81565b6124a8565b005b610aea6004803603810190610ae59190614c14565b61298d565b005b348015610af857600080fd5b50610b136004803603810190610b0e9190614976565b612d3c565b005b348015610b2157600080fd5b50610b3c6004803603810190610b379190614b82565b612eb4565b604051610b4b93929190615546565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b7691906149b6565b612ef7565b604051610b889190615269565b60405180910390f35b348015610b9d57600080fd5b50610bb86004803603810190610bb39190614a9f565b612f86565b005b348015610bc657600080fd5b50610be16004803603810190610bdc91906148f3565b61301f565b005b348015610bef57600080fd5b50610bf8613097565b604051610c05919061552b565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c309190614c14565b61309d565b604051610c4291906152c9565b60405180910390f35b348015610c5757600080fd5b50610c606131e4565b604051610c6d919061552b565b60405180910390f35b348015610c8257600080fd5b50610c9d6004803603810190610c989190614833565b6131ea565b604051610caa919061552b565b60405180910390f35b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614860565b613202565b604051610ce79190615269565b60405180910390f35b348015610cfc57600080fd5b50610d176004803603810190610d129190614a52565b613296565b005b348015610d2557600080fd5b50610d406004803603810190610d3b9190614833565b6133b7565b005b348015610d4e57600080fd5b50610d576134af565b604051610d64919061552b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e485750610e47826134b5565b5b9050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b606060028054610e7e90615882565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa90615882565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050905090565b6000610f0c8261351f565b610f42576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f8882611ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ff0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661100f61356d565b73ffffffffffffffffffffffffffffffffffffffff16146110725761103b8161103661356d565b613202565b611071576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b61107d838383613575565b505050565b601460019054906101000a900460ff1681565b600e5481565b6110a361356d565b73ffffffffffffffffffffffffffffffffffffffff166110c1612377565b73ffffffffffffffffffffffffffffffffffffffff1614611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e9061538b565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600061113e613627565b6001546000540303905090565b60186020528060005260406000206000915090505481565b61116e838383613630565b505050565b61117b61356d565b73ffffffffffffffffffffffffffffffffffffffff16611199612377565b73ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e69061538b565b60405180910390fd5b8060138190555050565b80611202612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461135957601260009054906101000a900460ff1615611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b906153ab565b60405180910390fd5b6010548111156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c09061542b565b60405180910390fd5b60115481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461131791906156a0565b1115611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f9061540b565b60405180910390fd5b5b6000811161139c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113939061536b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906153cb565b60405180910390fd5b600f5481611416611134565b61142091906156a0565b1115611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114589061534b565b60405180910390fd5b8161146a612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114ed5780600e546114aa9190615727565b3410156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e3906154eb565b60405180910390fd5b5b601460009054906101000a900460ff1661153c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115339061546b565b60405180910390fd5b6001151561154933611685565b15151461158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906154ab565b60405180910390fd5b600a83601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115d891906156a0565b1115611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061532b565b60405180910390fd5b82601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166891906156a0565b9250508190555061168061167a61356d565b84613ae6565b505050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116e361356d565b73ffffffffffffffffffffffffffffffffffffffff16611701612377565b73ffffffffffffffffffffffffffffffffffffffff1614611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061538b565b60405180910390fd5b6002600954141561179d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117949061548b565b60405180910390fd5b600260098190555060006117af612377565b73ffffffffffffffffffffffffffffffffffffffff16476040516117d2906151cb565b60006040518083038185875af1925050503d806000811461180f576040519150601f19603f3d011682016040523d82523d6000602084013e611814565b606091505b505090508061182257600080fd5b506001600981905550565b60176020528060005260406000206000915090505481565b6118608383836040518060200160405280600081525061301f565b505050565b6060600061187283612062565b905060008167ffffffffffffffff8111156118905761188f615a3f565b5b6040519080825280602002602001820160405280156118be5781602001602082028036833780820191505090505b50905060006118cb613627565b90506000805b84821080156118e1575060005483105b15611a6c576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611a5857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146119f457806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a575783858481518110611a3c57611a3b615a10565b5b6020026020010181815250508280611a53906158e5565b9350505b5b8380611a63906158e5565b945050506118d1565b8395505050505050919050565b611a8161356d565b73ffffffffffffffffffffffffffffffffffffffff16611a9f612377565b73ffffffffffffffffffffffffffffffffffffffff1614611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec9061538b565b60405180910390fd5b80600e8190555050565b611b0761356d565b73ffffffffffffffffffffffffffffffffffffffff16611b25612377565b73ffffffffffffffffffffffffffffffffffffffff1614611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b729061538b565b60405180910390fd5b8060118190555050565b611b8d61356d565b73ffffffffffffffffffffffffffffffffffffffff16611bab612377565b73ffffffffffffffffffffffffffffffffffffffff1614611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061538b565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b611c2661356d565b73ffffffffffffffffffffffffffffffffffffffff16611c44612377565b73ffffffffffffffffffffffffffffffffffffffff1614611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c919061538b565b60405180910390fd5b600f5482611ca6611134565b611cb091906156a0565b1115611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce89061534b565b60405180910390fd5b611cfb8183613ae6565b5050565b60135481565b600d8054611d1290615882565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3e90615882565b8015611d8b5780601f10611d6057610100808354040283529160200191611d8b565b820191906000526020600020905b815481529060010190602001808311611d6e57829003601f168201915b505050505081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b601460009054906101000a900460ff1681565b611de761356d565b73ffffffffffffffffffffffffffffffffffffffff16611e05612377565b73ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e529061538b565b60405180910390fd5b8060108190555050565b600b8054611e7290615882565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9e90615882565b8015611eeb5780601f10611ec057610100808354040283529160200191611eeb565b820191906000526020600020905b815481529060010190602001808311611ece57829003601f168201915b505050505081565b6000611efe82613b04565b600001519050919050565b611f1161356d565b73ffffffffffffffffffffffffffffffffffffffff16611f2f612377565b73ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061538b565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460029054906101000a900460ff1681565b611fe461356d565b73ffffffffffffffffffffffffffffffffffffffff16612002612377565b73ffffffffffffffffffffffffffffffffffffffff1614612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f9061538b565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61213a61356d565b73ffffffffffffffffffffffffffffffffffffffff16612158612377565b73ffffffffffffffffffffffffffffffffffffffff16146121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a59061538b565b60405180910390fd5b6121b86000613d8f565b565b600c80546121c790615882565b80601f01602080910402602001604051908101604052809291908181526020018280546121f390615882565b80156122405780601f1061221557610100808354040283529160200191612240565b820191906000526020600020905b81548152906001019060200180831161222357829003601f168201915b505050505081565b61225061356d565b73ffffffffffffffffffffffffffffffffffffffff1661226e612377565b73ffffffffffffffffffffffffffffffffffffffff16146122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb9061538b565b60405180910390fd5b80600b90805190602001906122da929190614599565b5050565b6122e661356d565b73ffffffffffffffffffffffffffffffffffffffff16612304612377565b73ffffffffffffffffffffffffffffffffffffffff161461235a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123519061538b565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546123b090615882565b80601f01602080910402602001604051908101604052809291908181526020018280546123dc90615882565b80156124295780601f106123fe57610100808354040283529160200191612429565b820191906000526020600020905b81548152906001019060200180831161240c57829003601f168201915b5050505050905090565b60008060008061244285612eb4565b809350819450829550505050600186848484604051600081526020016040526040516124719493929190615284565b6020604051602081039080840390855afa158015612493573d6000803e3d6000fd5b50505060206040510351935050505092915050565b816124b1612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461260857601260009054906101000a900460ff1615612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a906153ab565b60405180910390fd5b601054811115612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f9061542b565b60405180910390fd5b60115481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125c691906156a0565b1115612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fe9061540b565b60405180910390fd5b5b6000811161264b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126429061536b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146126b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b0906153cb565b60405180910390fd5b600f54816126c5611134565b6126cf91906156a0565b1115612710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127079061534b565b60405180910390fd5b82612719612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461279c5780600e546127599190615727565b34101561279b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612792906154eb565b60405180910390fd5b5b601460029054906101000a900460ff166127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061544b565b60405180910390fd5b600115156127f93385612ef7565b15151461283b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612832906153eb565b60405180910390fd5b60115484601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288991906156a0565b11156128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c19061550b565b60405180910390fd5b83601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291991906156a0565b9250508190555083601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461296f91906156a0565b9250508190555061298761298161356d565b85613ae6565b50505050565b80612996612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612aed57601260009054906101000a900460ff1615612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f906153ab565b60405180910390fd5b601054811115612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a549061542b565b60405180910390fd5b60115481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aab91906156a0565b1115612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae39061540b565b60405180910390fd5b5b60008111612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b279061536b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b95906153cb565b60405180910390fd5b600f5481612baa611134565b612bb491906156a0565b1115612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec9061534b565b60405180910390fd5b81612bfe612377565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c815780600e54612c3e9190615727565b341015612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c77906154eb565b60405180910390fd5b5b601460019054906101000a900460ff16612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc79061530b565b60405180910390fd5b82601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1f91906156a0565b92505081905550612d37612d3161356d565b84613ae6565b505050565b612d4461356d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612da9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612db661356d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612e6361356d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ea89190615269565b60405180910390a35050565b60008060006041845114612ec757600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b60008083604051602001612f0b919061517f565b604051602081830303815290604052805190602001209050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612f668285612433565b73ffffffffffffffffffffffffffffffffffffffff161491505092915050565b612f8e61356d565b73ffffffffffffffffffffffffffffffffffffffff16612fac612377565b73ffffffffffffffffffffffffffffffffffffffff1614613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff99061538b565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b61302a848484613630565b6130498373ffffffffffffffffffffffffffffffffffffffff16613e55565b156130915761305a84848484613e78565b613090576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60115481565b60606130a88261351f565b6130e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130de906154cb565b60405180910390fd5b60135482111561318357600c80546130fe90615882565b80601f016020809104026020016040519081016040528092919081815260200182805461312a90615882565b80156131775780601f1061314c57610100808354040283529160200191613177565b820191906000526020600020905b81548152906001019060200180831161315a57829003601f168201915b505050505090506131df565b600061318d613fd8565b905060008151116131ad57604051806020016040528060008152506131db565b806131b78461406a565b600d6040516020016131cb9392919061519a565b6040516020818303038152906040525b9150505b919050565b600f5481565b60166020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61329e61356d565b73ffffffffffffffffffffffffffffffffffffffff166132bc612377565b73ffffffffffffffffffffffffffffffffffffffff1614613312576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133099061538b565b60405180910390fd5b60005b828290508110156133b25760016015600085858581811061333957613338615a10565b5b905060200201602081019061334e9190614833565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806133aa906158e5565b915050613315565b505050565b6133bf61356d565b73ffffffffffffffffffffffffffffffffffffffff166133dd612377565b73ffffffffffffffffffffffffffffffffffffffff1614613433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342a9061538b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349a906152eb565b60405180910390fd5b6134ac81613d8f565b50565b60105481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161352a613627565b11158015613539575060005482105b8015613566575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061363b82613b04565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146136a6576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166136c761356d565b73ffffffffffffffffffffffffffffffffffffffff1614806136f657506136f5856136f061356d565b613202565b5b8061373b575061370461356d565b73ffffffffffffffffffffffffffffffffffffffff1661372384610f01565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613774576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137db576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137e885858560016141cb565b6137f460008487613575565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613a74576000548214613a7357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613adf85858560016141d1565b5050505050565b613b008282604051806020016040528060008152506141d7565b5050565b613b0c61461f565b600082905080613b1a613627565b11613d5857600054811015613d57576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151613d5557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613c39578092505050613d8a565b5b600115613d5457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613d4f578092505050613d8a565b613c3a565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e9e61356d565b8786866040518563ffffffff1660e01b8152600401613ec094939291906151fb565b602060405180830381600087803b158015613eda57600080fd5b505af1925050508015613f0b57506040513d601f19601f82011682018060405250810190613f089190614b55565b60015b613f85573d8060008114613f3b576040519150601f19603f3d011682016040523d82523d6000602084013e613f40565b606091505b50600081511415613f7d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b8054613fe790615882565b80601f016020809104026020016040519081016040528092919081815260200182805461401390615882565b80156140605780601f1061403557610100808354040283529160200191614060565b820191906000526020600020905b81548152906001019060200180831161404357829003601f168201915b5050505050905090565b606060008214156140b2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506141c6565b600082905060005b600082146140e45780806140cd906158e5565b915050600a826140dd91906156f6565b91506140ba565b60008167ffffffffffffffff811115614100576140ff615a3f565b5b6040519080825280601f01601f1916602001820160405280156141325781602001600182028036833780820191505090505b5090505b600085146141bf5760018261414b9190615781565b9150600a8561415a9190615952565b603061416691906156a0565b60f81b81838151811061417c5761417b615a10565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856141b891906156f6565b9450614136565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614244576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561427f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61428c60008583866141cb565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061444d8673ffffffffffffffffffffffffffffffffffffffff16613e55565b15614512575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46144c26000878480600101955087613e78565b6144f8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061445357826000541461450d57600080fd5b61457d565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210614513575b81600081905550505061459360008583866141d1565b50505050565b8280546145a590615882565b90600052602060002090601f0160209004810192826145c7576000855561460e565b82601f106145e057805160ff191683800117855561460e565b8280016001018555821561460e579182015b8281111561460d5782518255916020019190600101906145f2565b5b50905061461b9190614662565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561467b576000816000905550600101614663565b5090565b600061469261468d846155a2565b61557d565b9050828152602081018484840111156146ae576146ad615a7d565b5b6146b9848285615840565b509392505050565b60006146d46146cf846155d3565b61557d565b9050828152602081018484840111156146f0576146ef615a7d565b5b6146fb848285615840565b509392505050565b60008135905061471281615e4d565b92915050565b60008083601f84011261472e5761472d615a73565b5b8235905067ffffffffffffffff81111561474b5761474a615a6e565b5b60208301915083602082028301111561476757614766615a78565b5b9250929050565b60008135905061477d81615e64565b92915050565b60008135905061479281615e7b565b92915050565b6000813590506147a781615e92565b92915050565b6000815190506147bc81615e92565b92915050565b600082601f8301126147d7576147d6615a73565b5b81356147e784826020860161467f565b91505092915050565b600082601f83011261480557614804615a73565b5b81356148158482602086016146c1565b91505092915050565b60008135905061482d81615ea9565b92915050565b60006020828403121561484957614848615a87565b5b600061485784828501614703565b91505092915050565b6000806040838503121561487757614876615a87565b5b600061488585828601614703565b925050602061489685828601614703565b9150509250929050565b6000806000606084860312156148b9576148b8615a87565b5b60006148c786828701614703565b93505060206148d886828701614703565b92505060406148e98682870161481e565b9150509250925092565b6000806000806080858703121561490d5761490c615a87565b5b600061491b87828801614703565b945050602061492c87828801614703565b935050604061493d8782880161481e565b925050606085013567ffffffffffffffff81111561495e5761495d615a82565b5b61496a878288016147c2565b91505092959194509250565b6000806040838503121561498d5761498c615a87565b5b600061499b85828601614703565b92505060206149ac8582860161476e565b9150509250929050565b600080604083850312156149cd576149cc615a87565b5b60006149db85828601614703565b925050602083013567ffffffffffffffff8111156149fc576149fb615a82565b5b614a08858286016147c2565b9150509250929050565b60008060408385031215614a2957614a28615a87565b5b6000614a3785828601614703565b9250506020614a488582860161481e565b9150509250929050565b60008060208385031215614a6957614a68615a87565b5b600083013567ffffffffffffffff811115614a8757614a86615a82565b5b614a9385828601614718565b92509250509250929050565b600060208284031215614ab557614ab4615a87565b5b6000614ac38482850161476e565b91505092915050565b60008060408385031215614ae357614ae2615a87565b5b6000614af185828601614783565b925050602083013567ffffffffffffffff811115614b1257614b11615a82565b5b614b1e858286016147c2565b9150509250929050565b600060208284031215614b3e57614b3d615a87565b5b6000614b4c84828501614798565b91505092915050565b600060208284031215614b6b57614b6a615a87565b5b6000614b79848285016147ad565b91505092915050565b600060208284031215614b9857614b97615a87565b5b600082013567ffffffffffffffff811115614bb657614bb5615a82565b5b614bc2848285016147c2565b91505092915050565b600060208284031215614be157614be0615a87565b5b600082013567ffffffffffffffff811115614bff57614bfe615a82565b5b614c0b848285016147f0565b91505092915050565b600060208284031215614c2a57614c29615a87565b5b6000614c388482850161481e565b91505092915050565b60008060408385031215614c5857614c57615a87565b5b6000614c668582860161481e565b9250506020614c7785828601614703565b9150509250929050565b60008060408385031215614c9857614c97615a87565b5b6000614ca68582860161481e565b925050602083013567ffffffffffffffff811115614cc757614cc6615a82565b5b614cd3858286016147c2565b9150509250929050565b6000614ce98383615152565b60208301905092915050565b614cfe816157b5565b82525050565b614d15614d10826157b5565b61592e565b82525050565b6000614d2682615629565b614d308185615657565b9350614d3b83615604565b8060005b83811015614d6c578151614d538882614cdd565b9750614d5e8361564a565b925050600181019050614d3f565b5085935050505092915050565b614d82816157c7565b82525050565b614d91816157d3565b82525050565b6000614da282615634565b614dac8185615668565b9350614dbc81856020860161584f565b614dc581615a8c565b840191505092915050565b6000614ddb8261563f565b614de58185615684565b9350614df581856020860161584f565b614dfe81615a8c565b840191505092915050565b6000614e148261563f565b614e1e8185615695565b9350614e2e81856020860161584f565b80840191505092915050565b60008154614e4781615882565b614e518186615695565b94506001821660008114614e6c5760018114614e7d57614eb0565b60ff19831686528186019350614eb0565b614e8685615614565b60005b83811015614ea857815481890152600182019150602081019050614e89565b838801955050505b50505092915050565b6000614ec6602683615684565b9150614ed182615aaa565b604082019050919050565b6000614ee9601e83615684565b9150614ef482615af9565b602082019050919050565b6000614f0c601783615684565b9150614f1782615b22565b602082019050919050565b6000614f2f601f83615684565b9150614f3a82615b4b565b602082019050919050565b6000614f52601a83615684565b9150614f5d82615b74565b602082019050919050565b6000614f75602083615684565b9150614f8082615b9d565b602082019050919050565b6000614f98601783615684565b9150614fa382615bc6565b602082019050919050565b6000614fbb601f83615684565b9150614fc682615bef565b602082019050919050565b6000614fde601883615684565b9150614fe982615c18565b602082019050919050565b6000615001600083615679565b915061500c82615c41565b600082019050919050565b6000615024602583615684565b915061502f82615c44565b604082019050919050565b6000615047602283615684565b915061505282615c93565b604082019050919050565b600061506a602183615684565b915061507582615ce2565b604082019050919050565b600061508d601983615684565b915061509882615d31565b602082019050919050565b60006150b0601f83615684565b91506150bb82615d5a565b602082019050919050565b60006150d3601a83615684565b91506150de82615d83565b602082019050919050565b60006150f6603083615684565b915061510182615dac565b604082019050919050565b6000615119601383615684565b915061512482615dfb565b602082019050919050565b600061513c601c83615684565b915061514782615e24565b602082019050919050565b61515b81615829565b82525050565b61516a81615829565b82525050565b61517981615833565b82525050565b600061518b8284614d04565b60148201915081905092915050565b60006151a68286614e09565b91506151b28285614e09565b91506151be8284614e3a565b9150819050949350505050565b60006151d682614ff4565b9150819050919050565b60006020820190506151f56000830184614cf5565b92915050565b60006080820190506152106000830187614cf5565b61521d6020830186614cf5565b61522a6040830185615161565b818103606083015261523c8184614d97565b905095945050505050565b600060208201905081810360008301526152618184614d1b565b905092915050565b600060208201905061527e6000830184614d79565b92915050565b60006080820190506152996000830187614d88565b6152a66020830186615170565b6152b36040830185614d88565b6152c06060830184614d88565b95945050505050565b600060208201905081810360008301526152e38184614dd0565b905092915050565b6000602082019050818103600083015261530481614eb9565b9050919050565b6000602082019050818103600083015261532481614edc565b9050919050565b6000602082019050818103600083015261534481614eff565b9050919050565b6000602082019050818103600083015261536481614f22565b9050919050565b6000602082019050818103600083015261538481614f45565b9050919050565b600060208201905081810360008301526153a481614f68565b9050919050565b600060208201905081810360008301526153c481614f8b565b9050919050565b600060208201905081810360008301526153e481614fae565b9050919050565b6000602082019050818103600083015261540481614fd1565b9050919050565b6000602082019050818103600083015261542481615017565b9050919050565b600060208201905081810360008301526154448161503a565b9050919050565b600060208201905081810360008301526154648161505d565b9050919050565b6000602082019050818103600083015261548481615080565b9050919050565b600060208201905081810360008301526154a4816150a3565b9050919050565b600060208201905081810360008301526154c4816150c6565b9050919050565b600060208201905081810360008301526154e4816150e9565b9050919050565b600060208201905081810360008301526155048161510c565b9050919050565b600060208201905081810360008301526155248161512f565b9050919050565b60006020820190506155406000830184615161565b92915050565b600060608201905061555b6000830186615170565b6155686020830185614d88565b6155756040830184614d88565b949350505050565b6000615587615598565b905061559382826158b4565b919050565b6000604051905090565b600067ffffffffffffffff8211156155bd576155bc615a3f565b5b6155c682615a8c565b9050602081019050919050565b600067ffffffffffffffff8211156155ee576155ed615a3f565b5b6155f782615a8c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006156ab82615829565b91506156b683615829565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156eb576156ea615983565b5b828201905092915050565b600061570182615829565b915061570c83615829565b92508261571c5761571b6159b2565b5b828204905092915050565b600061573282615829565b915061573d83615829565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561577657615775615983565b5b828202905092915050565b600061578c82615829565b915061579783615829565b9250828210156157aa576157a9615983565b5b828203905092915050565b60006157c082615809565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561586d578082015181840152602081019050615852565b8381111561587c576000848401525b50505050565b6000600282049050600182168061589a57607f821691505b602082108114156158ae576158ad6159e1565b5b50919050565b6158bd82615a8c565b810181811067ffffffffffffffff821117156158dc576158db615a3f565b5b80604052505050565b60006158f082615829565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561592357615922615983565b5b600182019050919050565b600061593982615940565b9050919050565b600061594b82615a9d565b9050919050565b600061595d82615829565b915061596883615829565b925082615978576159776159b2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74206973206e6f742061637469766520796574210000600082015250565b7f4d6178207465616d206d696e7420657863656564656421000000000000000000600082015250565b7f4d696e7420616d6f756e742065786365656473206d617820737570706c792100600082015250565b7f4d696e7420616d6f756e742063616e2774206265207a65726f2e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163742100600082015250565b7f55736572206973206e6f742077686974656c6973746564210000000000000000600082015250565b50565b7f4d6178206d696e7420616d6f756e74207065722061646472657373206578636560008201527f6564656421000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74206973206e6f74206163746976652079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f5465616d206d696e74206973206e6f7420656e61626c65642100000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f55736572206973206e6f742061207465616d206d656d62657221000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b7f4d61782057686974656c697374206d696e742065786365656465642100000000600082015250565b615e56816157b5565b8114615e6157600080fd5b50565b615e6d816157c7565b8114615e7857600080fd5b50565b615e84816157d3565b8114615e8f57600080fd5b50565b615e9b816157dd565b8114615ea657600080fd5b50565b615eb281615829565b8114615ebd57600080fd5b5056fea26469706673582212208f7fee5350037901433afb205aa1663fe964ea670bf06820bea61e085d829f4d64736f6c63430008070033

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

000000000000000000000000c74407ebb1bb9f25f9fbe5acc1034440a9c35a17

-----Decoded View---------------
Arg [0] : _signerAddress (address): 0xC74407eBb1BB9F25f9FBe5acC1034440A9c35A17

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c74407ebb1bb9f25f9fbe5acc1034440a9c35a17


Deployed Bytecode Sourcemap

37327:7899:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20207:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37970:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23322:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24826:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24388:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37881:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37627:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43739:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19447:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38138:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25691:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43617:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40310:444;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43304:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45073:150;;;;;;;;;;;;;:::i;:::-;;38083:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25932:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41864:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43837:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44221:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44761:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40783:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37807:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37585:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37419:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37777:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37841:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44067:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37454:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23130:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43503:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37923:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43938:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20576:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4594:103;;;;;;;;;;;;;:::i;:::-;;37482:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44366:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44502:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3943:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23491:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41275:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39730:558;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39411:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25102:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41063:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44631:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26188:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37732:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42832:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37663:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38027:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25460:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44885:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4852:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37700:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20207:305;20309:4;20361:25;20346:40;;;:11;:40;;;;:105;;;;20418:33;20403:48;;;:11;:48;;;;20346:105;:158;;;;20468:36;20492:11;20468:23;:36::i;:::-;20346:158;20326:178;;20207:305;;;:::o;37970:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;23322:100::-;23376:13;23409:5;23402:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23322:100;:::o;24826:204::-;24894:7;24919:16;24927:7;24919;:16::i;:::-;24914:64;;24944:34;;;;;;;;;;;;;;24914:64;24998:15;:24;25014:7;24998:24;;;;;;;;;;;;;;;;;;;;;24991:31;;24826:204;;;:::o;24388:372::-;24461:13;24477:24;24493:7;24477:15;:24::i;:::-;24461:40;;24522:5;24516:11;;:2;:11;;;24512:48;;;24536:24;;;;;;;;;;;;;;24512:48;24593:5;24577:21;;:12;:10;:12::i;:::-;:21;;;24573:139;;24604:37;24621:5;24628:12;:10;:12::i;:::-;24604:16;:37::i;:::-;24600:112;;24665:35;;;;;;;;;;;;;;24600:112;24573:139;24724:28;24733:2;24737:7;24746:5;24724:8;:28::i;:::-;24450:310;24388:372;;:::o;37881:37::-;;;;;;;;;;;;;:::o;37627:29::-;;;;:::o;43739:77::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43804:6:::1;43795;;:15;;;;;;;;;;;;;;;;;;43739:77:::0;:::o;19447:312::-;19500:7;19725:15;:13;:15::i;:::-;19710:12;;19694:13;;:28;:46;19687:53;;19447:312;:::o;38138:55::-;;;;;;;;;;;;;;;;;:::o;25691:170::-;25825:28;25835:4;25841:2;25845:7;25825:9;:28::i;:::-;25691:170;;;:::o;43617:102::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43698:15:::1;43687:8;:26;;;;43617:102:::0;:::o;40310:444::-;40379:11;38609:7;:5;:7::i;:::-;38595:21;;:10;:21;;;38591:303;;38638:6;;;;;;;;;;;38637:7;38629:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38706:8;;38691:11;:23;;38683:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38822:18;;38807:11;38772:20;:32;38793:10;38772:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;38764:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;38591:303;38922:1;38908:11;:15;38900:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38982:10;38969:23;;:9;:23;;;38961:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39074:9;;39059:11;39043:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;39035:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;40412:11:::1;39214:7;:5;:7::i;:::-;39200:21;;:10;:21;;;39196:113;;39262:11;39255:4;;:18;;;;:::i;:::-;39242:9;:31;;39234:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39196:113;40440:15:::2;;;;;;;;;;;40432:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40529:4;40500:33;;:25;40514:10;40500:13;:25::i;:::-;:33;;;40492:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40624:2;40609:11;40579:15;:27;40595:10;40579:27;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:47;;40571:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;40694:11;40663:15;:27;40679:10;40663:27;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;40712:36;40722:12;:10;:12::i;:::-;40736:11;40712:9;:36::i;:::-;39126:1:::1;40310:444:::0;;:::o;43304:112::-;43363:4;43383:20;:27;43404:5;43383:27;;;;;;;;;;;;;;;;;;;;;;;;;43376:34;;43304:112;;;:::o;45073:150::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;787:1:::1;1007:7;;:19;;999:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;787:1;1140:7;:18;;;;45131:7:::2;45152;:5;:7::i;:::-;45144:21;;45173;45144:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45130:69;;;45214:2;45206:11;;;::::0;::::2;;45123:100;743:1:::1;1185:7;:22;;;;45073:150::o:0;38083:50::-;;;;;;;;;;;;;;;;;:::o;25932:185::-;26070:39;26087:4;26093:2;26097:7;26070:39;;;;;;;;;;;;:16;:39::i;:::-;25932:185;;;:::o;41864:827::-;41924:16;41949:23;41975:17;41985:6;41975:9;:17::i;:::-;41949:43;;41999:30;42046:15;42032:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41999:63;;42069:22;42094:15;:13;:15::i;:::-;42069:40;;42116:23;42150:26;42185:474;42210:15;42192;:33;:67;;;;;42246:13;;42229:14;:30;42192:67;42185:474;;;42270:31;42304:11;:27;42316:14;42304:27;;;;;;;;;;;42270:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42347:9;:16;;;42342:285;;42406:1;42380:28;;:9;:14;;;:28;;;42376:94;;42444:9;:14;;;42423:35;;42376:94;42508:6;42486:28;;:18;:28;;;42482:136;;;42562:14;42529:13;42543:15;42529:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;42589:17;;;;;:::i;:::-;;;;42482:136;42342:285;42635:16;;;;;:::i;:::-;;;;42261:398;42185:474;;;42672:13;42665:20;;;;;;;41864:827;;;:::o;43837:74::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43900:5:::1;43893:4;:12;;;;43837:74:::0;:::o;44221:118::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44318:15:::1;44297:18;:36;;;;44221:118:::0;:::o;44761:96::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44845:6:::1;44822:20;;:29;;;;;;;;;;;;;;;;;;44761:96:::0;:::o;40783:217::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40909:9:::1;;40894:11;40878:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;40870:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;40961:33;40971:9;40982:11;40961:9;:33::i;:::-;40783:217:::0;;:::o;37807:27::-;;;;:::o;37585:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37419:28::-;;;;;;;;;;;;;:::o;37777:25::-;;;;;;;;;;;;;:::o;37841:35::-;;;;;;;;;;;;;:::o;44067:114::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44156:19:::1;44145:8;:30;;;;44067:114:::0;:::o;37454:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23130:125::-;23194:7;23221:21;23234:7;23221:12;:21::i;:::-;:26;;;23214:33;;23130:125;;;:::o;43503:95::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43582:10:::1;43566:13;;:26;;;;;;;;;;;;;;;;;;43503:95:::0;:::o;37923:40::-;;;;;;;;;;;;;:::o;43938:94::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44016:10:::1;44004:9;:22;;;;43938:94:::0;:::o;20576:206::-;20640:7;20681:1;20664:19;;:5;:19;;;20660:60;;;20692:28;;;;;;;;;;;;;;20660:60;20746:12;:19;20759:5;20746:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;20738:36;;20731:43;;20576:206;;;:::o;4594:103::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4659:30:::1;4686:1;4659:18;:30::i;:::-;4594:103::o:0;37482:98::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44366:100::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44450:10:::1;44438:9;:22;;;;;;;;;;;;:::i;:::-;;44366:100:::0;:::o;44502:97::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44587:6:::1;44567:17;;:26;;;;;;;;;;;;;;;;;;44502:97:::0;:::o;3943:87::-;3989:7;4016:6;;;;;;;;;;;4009:13;;3943:87;:::o;23491:104::-;23547:13;23580:7;23573:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23491:104;:::o;41275:209::-;41354:7;41370;41379:9;41390;41418:19;41433:3;41418:14;:19::i;:::-;41406:31;;;;;;;;;;;;41451:27;41461:7;41470:1;41473;41476;41451:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41444:34;;;;;41275:209;;;;:::o;39730:558::-;39822:11;38609:7;:5;:7::i;:::-;38595:21;;:10;:21;;;38591:303;;38638:6;;;;;;;;;;;38637:7;38629:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38706:8;;38691:11;:23;;38683:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38822:18;;38807:11;38772:20;:32;38793:10;38772:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;38764:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;38591:303;38922:1;38908:11;:15;38900:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38982:10;38969:23;;:9;:23;;;38961:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39074:9;;39059:11;39043:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;39035:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39855:11:::1;39214:7;:5;:7::i;:::-;39200:21;;:10;:21;;;39196:113;;39262:11;39255:4;;:18;;;;:::i;:::-;39242:9;:31;;39234:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39196:113;39883:20:::2;;;;;;;;;;;39875:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39988:4;39956:36;;:28;39968:10;39980:3;39956:11;:28::i;:::-;:36;;;39948:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40082:18;;40067:11;40036:16;:28;40053:10;40036:28;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:64;;40028:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;40178:11;40142:20;:32;40163:10;40142:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;40228:11;40196:16;:28;40213:10;40196:28;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;40246:36;40256:12;:10;:12::i;:::-;40270:11;40246:9;:36::i;:::-;39126:1:::1;39730:558:::0;;;:::o;39411:283::-;39476:11;38609:7;:5;:7::i;:::-;38595:21;;:10;:21;;;38591:303;;38638:6;;;;;;;;;;;38637:7;38629:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38706:8;;38691:11;:23;;38683:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38822:18;;38807:11;38772:20;:32;38793:10;38772:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;38764:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;38591:303;38922:1;38908:11;:15;38900:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38982:10;38969:23;;:9;:23;;;38961:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39074:9;;39059:11;39043:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;39035:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39509:11:::1;39214:7;:5;:7::i;:::-;39200:21;;:10;:21;;;39196:113;;39262:11;39255:4;;:18;;;;:::i;:::-;39242:9;:31;;39234:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39196:113;39537:17:::2;;;;;;;;;;;39529:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39634:11;39598:20;:32;39619:10;39598:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;39652:36;39662:12;:10;:12::i;:::-;39676:11;39652:9;:36::i;:::-;39126:1:::1;39411:283:::0;;:::o;25102:287::-;25213:12;:10;:12::i;:::-;25201:24;;:8;:24;;;25197:54;;;25234:17;;;;;;;;;;;;;;25197:54;25309:8;25264:18;:32;25283:12;:10;:12::i;:::-;25264:32;;;;;;;;;;;;;;;:42;25297:8;25264:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25362:8;25333:48;;25348:12;:10;:12::i;:::-;25333:48;;;25372:8;25333:48;;;;;;:::i;:::-;;;;;;;;25102:287;;:::o;41490:::-;41553:5;41560:7;41569;41607:2;41593:3;:10;:16;41585:25;;;;;;41617:9;41628;41639:7;41684:2;41679:3;41675:12;41669:19;41664:24;;41709:2;41704:3;41700:12;41694:19;41689:24;;41742:2;41737:3;41733:12;41727:19;41724:1;41719:28;41714:33;;41763:1;41766;41769;41755:16;;;;;;;;;41490:287;;;;;:::o;41063:206::-;41138:4;41151:15;41196:5;41179:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;41169:34;;;;;;41151:52;;41249:13;;;;;;;;;;;41218:44;;:27;41232:7;41241:3;41218:13;:27::i;:::-;:44;;;41210:53;;;41063:206;;;;:::o;44631:93::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44712:6:::1;44694:15;;:24;;;;;;;;;;;;;;;;;;44631:93:::0;:::o;26188:370::-;26355:28;26365:4;26371:2;26375:7;26355:9;:28::i;:::-;26398:15;:2;:13;;;:15::i;:::-;26394:157;;;26419:56;26450:4;26456:2;26460:7;26469:5;26419:30;:56::i;:::-;26415:136;;26499:40;;;;;;;;;;;;;;26415:136;26394:157;26188:370;;;;:::o;37732:38::-;;;;:::o;42832:428::-;42906:13;42936:17;42944:8;42936:7;:17::i;:::-;42928:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43033:8;;43022;:19;43018:51;;;43052:14;43045:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43018:51;43077:28;43108:10;:8;:10::i;:::-;43077:41;;43163:1;43138:14;43132:28;:32;:122;;;;;;;;;;;;;;;;;43196:14;43212:19;:8;:17;:19::i;:::-;43233:9;43179:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43132:122;43125:129;;;42832:428;;;;:::o;37663:30::-;;;;:::o;38027:51::-;;;;;;;;;;;;;;;;;:::o;25460:164::-;25557:4;25581:18;:25;25600:5;25581:25;;;;;;;;;;;;;;;:35;25607:8;25581:35;;;;;;;;;;;;;;;;;;;;;;;;;25574:42;;25460:164;;;;:::o;44885:182::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44965:9:::1;44960:102;44984:6;;:13;;44980:1;:17;44960:102;;;45049:4;45015:20;:31;45036:6;;45043:1;45036:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45015:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;44999:3;;;;;:::i;:::-;;;;44960:102;;;;44885:182:::0;;:::o;4852:201::-;4174:12;:10;:12::i;:::-;4163:23;;:7;:5;:7::i;:::-;:23;;;4155:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4961:1:::1;4941:22;;:8;:22;;;;4933:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5017:28;5036:8;5017:18;:28::i;:::-;4852:201:::0;:::o;37700:27::-;;;;:::o;11435:157::-;11520:4;11559:25;11544:40;;;:11;:40;;;;11537:47;;11435:157;;;:::o;26813:174::-;26870:4;26913:7;26894:15;:13;:15::i;:::-;:26;;:53;;;;;26934:13;;26924:7;:23;26894:53;:85;;;;;26952:11;:20;26964:7;26952:20;;;;;;;;;;;:27;;;;;;;;;;;;26951:28;26894:85;26887:92;;26813:174;;;:::o;3233:98::-;3286:7;3313:10;3306:17;;3233:98;:::o;36035:196::-;36177:2;36150:15;:24;36166:7;36150:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36215:7;36211:2;36195:28;;36204:5;36195:28;;;;;;;;;;;;36035:196;;;:::o;42715:95::-;42780:7;42803:1;42796:8;;42715:95;:::o;30983:2130::-;31098:35;31136:21;31149:7;31136:12;:21::i;:::-;31098:59;;31196:4;31174:26;;:13;:18;;;:26;;;31170:67;;31209:28;;;;;;;;;;;;;;31170:67;31250:22;31292:4;31276:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;31313:36;31330:4;31336:12;:10;:12::i;:::-;31313:16;:36::i;:::-;31276:73;:126;;;;31390:12;:10;:12::i;:::-;31366:36;;:20;31378:7;31366:11;:20::i;:::-;:36;;;31276:126;31250:153;;31421:17;31416:66;;31447:35;;;;;;;;;;;;;;31416:66;31511:1;31497:16;;:2;:16;;;31493:52;;;31522:23;;;;;;;;;;;;;;31493:52;31558:43;31580:4;31586:2;31590:7;31599:1;31558:21;:43::i;:::-;31666:35;31683:1;31687:7;31696:4;31666:8;:35::i;:::-;32027:1;31997:12;:18;32010:4;31997:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32071:1;32043:12;:16;32056:2;32043:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32089:31;32123:11;:20;32135:7;32123:20;;;;;;;;;;;32089:54;;32174:2;32158:8;:13;;;:18;;;;;;;;;;;;;;;;;;32224:15;32191:8;:23;;;:49;;;;;;;;;;;;;;;;;;32492:19;32524:1;32514:7;:11;32492:33;;32540:31;32574:11;:24;32586:11;32574:24;;;;;;;;;;;32540:58;;32642:1;32617:27;;:8;:13;;;;;;;;;;;;:27;;;32613:384;;;32827:13;;32812:11;:28;32808:174;;32881:4;32865:8;:13;;;:20;;;;;;;;;;;;;;;;;;32934:13;:28;;;32908:8;:23;;;:54;;;;;;;;;;;;;;;;;;32808:174;32613:384;31972:1036;;;33044:7;33040:2;33025:27;;33034:4;33025:27;;;;;;;;;;;;33063:42;33084:4;33090:2;33094:7;33103:1;33063:20;:42::i;:::-;31087:2026;;30983:2130;;;:::o;27071:104::-;27140:27;27150:2;27154:8;27140:27;;;;;;;;;;;;:9;:27::i;:::-;27071:104;;:::o;21957:1111::-;22019:21;;:::i;:::-;22053:12;22068:7;22053:22;;22136:4;22117:15;:13;:15::i;:::-;:23;22113:888;;22153:13;;22146:4;:20;22142:859;;;22187:31;22221:11;:17;22233:4;22221:17;;;;;;;;;;;22187:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22262:9;:16;;;22257:729;;22333:1;22307:28;;:9;:14;;;:28;;;22303:101;;22371:9;22364:16;;;;;;22303:101;22706:261;22713:4;22706:261;;;22746:6;;;;;;;;22791:11;:17;22803:4;22791:17;;;;;;;;;;;22779:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22865:1;22839:28;;:9;:14;;;:28;;;22835:109;;22907:9;22900:16;;;;;;22835:109;22706:261;;;22257:729;22168:833;22142:859;22113:888;23029:31;;;;;;;;;;;;;;21957:1111;;;;:::o;5213:191::-;5287:16;5306:6;;;;;;;;;;;5287:25;;5332:8;5323:6;;:17;;;;;;;;;;;;;;;;;;5387:8;5356:40;;5377:8;5356:40;;;;;;;;;;;;5276:128;5213:191;:::o;5665:115::-;5725:4;5771:1;5749:7;:19;;;:23;5742:30;;5665:115;;;:::o;36241:667::-;36404:4;36441:2;36425:36;;;36462:12;:10;:12::i;:::-;36476:4;36482:7;36491:5;36425:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36421:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36676:1;36659:6;:13;:18;36655:235;;;36705:40;;;;;;;;;;;;;;36655:235;36848:6;36842:13;36833:6;36829:2;36825:15;36818:38;36421:480;36554:45;;;36544:55;;;:6;:55;;;;36537:62;;;36241:667;;;;;;:::o;38371:104::-;38431:13;38460:9;38453:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38371:104;:::o;1491:534::-;1547:13;1588:1;1579:5;:10;1575:53;;;1606:10;;;;;;;;;;;;;;;;;;;;;1575:53;1638:12;1653:5;1638:20;;1669:14;1694:78;1709:1;1701:4;:9;1694:78;;1727:8;;;;;:::i;:::-;;;;1758:2;1750:10;;;;;:::i;:::-;;;1694:78;;;1782:19;1814:6;1804:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1782:39;;1832:154;1848:1;1839:5;:10;1832:154;;1876:1;1866:11;;;;;:::i;:::-;;;1943:2;1935:5;:10;;;;:::i;:::-;1922:2;:24;;;;:::i;:::-;1909:39;;1892:6;1899;1892:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1972:2;1963:11;;;;;:::i;:::-;;;1832:154;;;2010:6;1996:21;;;;;1491:534;;;;:::o;36919:159::-;;;;;:::o;37088:158::-;;;;;:::o;27548:1749::-;27671:20;27694:13;;27671:36;;27736:1;27722:16;;:2;:16;;;27718:48;;;27747:19;;;;;;;;;;;;;;27718:48;27793:1;27781:8;:13;27777:44;;;27803:18;;;;;;;;;;;;;;27777:44;27834:61;27864:1;27868:2;27872:12;27886:8;27834:21;:61::i;:::-;28207:8;28172:12;:16;28185:2;28172:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28271:8;28231:12;:16;28244:2;28231:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28330:2;28297:11;:25;28309:12;28297:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;28397:15;28347:11;:25;28359:12;28347:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;28430:20;28453:12;28430:35;;28480:11;28509:8;28494:12;:23;28480:37;;28538:15;:2;:13;;;:15::i;:::-;28534:631;;;28574:313;28630:12;28626:2;28605:38;;28622:1;28605:38;;;;;;;;;;;;28671:69;28710:1;28714:2;28718:14;;;;;;28734:5;28671:30;:69::i;:::-;28666:174;;28776:40;;;;;;;;;;;;;;28666:174;28882:3;28867:12;:18;28574:313;;28968:12;28951:13;;:29;28947:43;;28982:8;;;28947:43;28534:631;;;29031:119;29087:14;;;;;;29083:2;29062:40;;29079:1;29062:40;;;;;;;;;;;;29145:3;29130:12;:18;29031:119;;28534:631;29195:12;29179:13;:28;;;;28147:1072;;29229:60;29258:1;29262:2;29266:12;29280:8;29229:20;:60::i;:::-;27660:1637;27548:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:652::-;5953:6;5961;6010:2;5998:9;5989:7;5985:23;5981:32;5978:119;;;6016:79;;:::i;:::-;5978:119;6136:1;6161:53;6206:7;6197:6;6186:9;6182:22;6161:53;:::i;:::-;6151:63;;6107:117;6291:2;6280:9;6276:18;6263:32;6322:18;6314:6;6311:30;6308:117;;;6344:79;;:::i;:::-;6308:117;6449:62;6503:7;6494:6;6483:9;6479:22;6449:62;:::i;:::-;6439:72;;6234:287;5876:652;;;;;:::o;6534:474::-;6602:6;6610;6659:2;6647:9;6638:7;6634:23;6630:32;6627:119;;;6665:79;;:::i;:::-;6627:119;6785:1;6810:53;6855:7;6846:6;6835:9;6831:22;6810:53;:::i;:::-;6800:63;;6756:117;6912:2;6938:53;6983:7;6974:6;6963:9;6959:22;6938:53;:::i;:::-;6928:63;;6883:118;6534:474;;;;;:::o;7014:559::-;7100:6;7108;7157:2;7145:9;7136:7;7132:23;7128:32;7125:119;;;7163:79;;:::i;:::-;7125:119;7311:1;7300:9;7296:17;7283:31;7341:18;7333:6;7330:30;7327:117;;;7363:79;;:::i;:::-;7327:117;7476:80;7548:7;7539:6;7528:9;7524:22;7476:80;:::i;:::-;7458:98;;;;7254:312;7014:559;;;;;:::o;7579:323::-;7635:6;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:50;7877:7;7868:6;7857:9;7853:22;7835:50;:::i;:::-;7825:60;;7781:114;7579:323;;;;:::o;7908:652::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8323:2;8312:9;8308:18;8295:32;8354:18;8346:6;8343:30;8340:117;;;8376:79;;:::i;:::-;8340:117;8481:62;8535:7;8526:6;8515:9;8511:22;8481:62;:::i;:::-;8471:72;;8266:287;7908:652;;;;;:::o;8566:327::-;8624:6;8673:2;8661:9;8652:7;8648:23;8644:32;8641:119;;;8679:79;;:::i;:::-;8641:119;8799:1;8824:52;8868:7;8859:6;8848:9;8844:22;8824:52;:::i;:::-;8814:62;;8770:116;8566:327;;;;:::o;8899:349::-;8968:6;9017:2;9005:9;8996:7;8992:23;8988:32;8985:119;;;9023:79;;:::i;:::-;8985:119;9143:1;9168:63;9223:7;9214:6;9203:9;9199:22;9168:63;:::i;:::-;9158:73;;9114:127;8899:349;;;;:::o;9254:507::-;9322:6;9371:2;9359:9;9350:7;9346:23;9342:32;9339:119;;;9377:79;;:::i;:::-;9339:119;9525:1;9514:9;9510:17;9497:31;9555:18;9547:6;9544:30;9541:117;;;9577:79;;:::i;:::-;9541:117;9682:62;9736:7;9727:6;9716:9;9712:22;9682:62;:::i;:::-;9672:72;;9468:286;9254:507;;;;:::o;9767:509::-;9836:6;9885:2;9873:9;9864:7;9860:23;9856:32;9853:119;;;9891:79;;:::i;:::-;9853:119;10039:1;10028:9;10024:17;10011:31;10069:18;10061:6;10058:30;10055:117;;;10091:79;;:::i;:::-;10055:117;10196:63;10251:7;10242:6;10231:9;10227:22;10196:63;:::i;:::-;10186:73;;9982:287;9767:509;;;;:::o;10282:329::-;10341:6;10390:2;10378:9;10369:7;10365:23;10361:32;10358:119;;;10396:79;;:::i;:::-;10358:119;10516:1;10541:53;10586:7;10577:6;10566:9;10562:22;10541:53;:::i;:::-;10531:63;;10487:117;10282:329;;;;:::o;10617:474::-;10685:6;10693;10742:2;10730:9;10721:7;10717:23;10713:32;10710:119;;;10748:79;;:::i;:::-;10710:119;10868:1;10893:53;10938:7;10929:6;10918:9;10914:22;10893:53;:::i;:::-;10883:63;;10839:117;10995:2;11021:53;11066:7;11057:6;11046:9;11042:22;11021:53;:::i;:::-;11011:63;;10966:118;10617:474;;;;;:::o;11097:652::-;11174:6;11182;11231:2;11219:9;11210:7;11206:23;11202:32;11199:119;;;11237:79;;:::i;:::-;11199:119;11357:1;11382:53;11427:7;11418:6;11407:9;11403:22;11382:53;:::i;:::-;11372:63;;11328:117;11512:2;11501:9;11497:18;11484:32;11543:18;11535:6;11532:30;11529:117;;;11565:79;;:::i;:::-;11529:117;11670:62;11724:7;11715:6;11704:9;11700:22;11670:62;:::i;:::-;11660:72;;11455:287;11097:652;;;;;:::o;11755:179::-;11824:10;11845:46;11887:3;11879:6;11845:46;:::i;:::-;11923:4;11918:3;11914:14;11900:28;;11755:179;;;;:::o;11940:118::-;12027:24;12045:5;12027:24;:::i;:::-;12022:3;12015:37;11940:118;;:::o;12064:157::-;12169:45;12189:24;12207:5;12189:24;:::i;:::-;12169:45;:::i;:::-;12164:3;12157:58;12064:157;;:::o;12257:732::-;12376:3;12405:54;12453:5;12405:54;:::i;:::-;12475:86;12554:6;12549:3;12475:86;:::i;:::-;12468:93;;12585:56;12635:5;12585:56;:::i;:::-;12664:7;12695:1;12680:284;12705:6;12702:1;12699:13;12680:284;;;12781:6;12775:13;12808:63;12867:3;12852:13;12808:63;:::i;:::-;12801:70;;12894:60;12947:6;12894:60;:::i;:::-;12884:70;;12740:224;12727:1;12724;12720:9;12715:14;;12680:284;;;12684:14;12980:3;12973:10;;12381:608;;;12257:732;;;;:::o;12995:109::-;13076:21;13091:5;13076:21;:::i;:::-;13071:3;13064:34;12995:109;;:::o;13110:118::-;13197:24;13215:5;13197:24;:::i;:::-;13192:3;13185:37;13110:118;;:::o;13234:360::-;13320:3;13348:38;13380:5;13348:38;:::i;:::-;13402:70;13465:6;13460:3;13402:70;:::i;:::-;13395:77;;13481:52;13526:6;13521:3;13514:4;13507:5;13503:16;13481:52;:::i;:::-;13558:29;13580:6;13558:29;:::i;:::-;13553:3;13549:39;13542:46;;13324:270;13234:360;;;;:::o;13600:364::-;13688:3;13716:39;13749:5;13716:39;:::i;:::-;13771:71;13835:6;13830:3;13771:71;:::i;:::-;13764:78;;13851:52;13896:6;13891:3;13884:4;13877:5;13873:16;13851:52;:::i;:::-;13928:29;13950:6;13928:29;:::i;:::-;13923:3;13919:39;13912:46;;13692:272;13600:364;;;;:::o;13970:377::-;14076:3;14104:39;14137:5;14104:39;:::i;:::-;14159:89;14241:6;14236:3;14159:89;:::i;:::-;14152:96;;14257:52;14302:6;14297:3;14290:4;14283:5;14279:16;14257:52;:::i;:::-;14334:6;14329:3;14325:16;14318:23;;14080:267;13970:377;;;;:::o;14377:845::-;14480:3;14517:5;14511:12;14546:36;14572:9;14546:36;:::i;:::-;14598:89;14680:6;14675:3;14598:89;:::i;:::-;14591:96;;14718:1;14707:9;14703:17;14734:1;14729:137;;;;14880:1;14875:341;;;;14696:520;;14729:137;14813:4;14809:9;14798;14794:25;14789:3;14782:38;14849:6;14844:3;14840:16;14833:23;;14729:137;;14875:341;14942:38;14974:5;14942:38;:::i;:::-;15002:1;15016:154;15030:6;15027:1;15024:13;15016:154;;;15104:7;15098:14;15094:1;15089:3;15085:11;15078:35;15154:1;15145:7;15141:15;15130:26;;15052:4;15049:1;15045:12;15040:17;;15016:154;;;15199:6;15194:3;15190:16;15183:23;;14882:334;;14696:520;;14484:738;;14377:845;;;;:::o;15228:366::-;15370:3;15391:67;15455:2;15450:3;15391:67;:::i;:::-;15384:74;;15467:93;15556:3;15467:93;:::i;:::-;15585:2;15580:3;15576:12;15569:19;;15228:366;;;:::o;15600:::-;15742:3;15763:67;15827:2;15822:3;15763:67;:::i;:::-;15756:74;;15839:93;15928:3;15839:93;:::i;:::-;15957:2;15952:3;15948:12;15941:19;;15600:366;;;:::o;15972:::-;16114:3;16135:67;16199:2;16194:3;16135:67;:::i;:::-;16128:74;;16211:93;16300:3;16211:93;:::i;:::-;16329:2;16324:3;16320:12;16313:19;;15972:366;;;:::o;16344:::-;16486:3;16507:67;16571:2;16566:3;16507:67;:::i;:::-;16500:74;;16583:93;16672:3;16583:93;:::i;:::-;16701:2;16696:3;16692:12;16685:19;;16344:366;;;:::o;16716:::-;16858:3;16879:67;16943:2;16938:3;16879:67;:::i;:::-;16872:74;;16955:93;17044:3;16955:93;:::i;:::-;17073:2;17068:3;17064:12;17057:19;;16716:366;;;:::o;17088:::-;17230:3;17251:67;17315:2;17310:3;17251:67;:::i;:::-;17244:74;;17327:93;17416:3;17327:93;:::i;:::-;17445:2;17440:3;17436:12;17429:19;;17088:366;;;:::o;17460:::-;17602:3;17623:67;17687:2;17682:3;17623:67;:::i;:::-;17616:74;;17699:93;17788:3;17699:93;:::i;:::-;17817:2;17812:3;17808:12;17801:19;;17460:366;;;:::o;17832:::-;17974:3;17995:67;18059:2;18054:3;17995:67;:::i;:::-;17988:74;;18071:93;18160:3;18071:93;:::i;:::-;18189:2;18184:3;18180:12;18173:19;;17832:366;;;:::o;18204:::-;18346:3;18367:67;18431:2;18426:3;18367:67;:::i;:::-;18360:74;;18443:93;18532:3;18443:93;:::i;:::-;18561:2;18556:3;18552:12;18545:19;;18204:366;;;:::o;18576:398::-;18735:3;18756:83;18837:1;18832:3;18756:83;:::i;:::-;18749:90;;18848:93;18937:3;18848:93;:::i;:::-;18966:1;18961:3;18957:11;18950:18;;18576:398;;;:::o;18980:366::-;19122:3;19143:67;19207:2;19202:3;19143:67;:::i;:::-;19136:74;;19219:93;19308:3;19219:93;:::i;:::-;19337:2;19332:3;19328:12;19321:19;;18980:366;;;:::o;19352:::-;19494:3;19515:67;19579:2;19574:3;19515:67;:::i;:::-;19508:74;;19591:93;19680:3;19591:93;:::i;:::-;19709:2;19704:3;19700:12;19693:19;;19352:366;;;:::o;19724:::-;19866:3;19887:67;19951:2;19946:3;19887:67;:::i;:::-;19880:74;;19963:93;20052:3;19963:93;:::i;:::-;20081:2;20076:3;20072:12;20065:19;;19724:366;;;:::o;20096:::-;20238:3;20259:67;20323:2;20318:3;20259:67;:::i;:::-;20252:74;;20335:93;20424:3;20335:93;:::i;:::-;20453:2;20448:3;20444:12;20437:19;;20096:366;;;:::o;20468:::-;20610:3;20631:67;20695:2;20690:3;20631:67;:::i;:::-;20624:74;;20707:93;20796:3;20707:93;:::i;:::-;20825:2;20820:3;20816:12;20809:19;;20468:366;;;:::o;20840:::-;20982:3;21003:67;21067:2;21062:3;21003:67;:::i;:::-;20996:74;;21079:93;21168:3;21079:93;:::i;:::-;21197:2;21192:3;21188:12;21181:19;;20840:366;;;:::o;21212:::-;21354:3;21375:67;21439:2;21434:3;21375:67;:::i;:::-;21368:74;;21451:93;21540:3;21451:93;:::i;:::-;21569:2;21564:3;21560:12;21553:19;;21212:366;;;:::o;21584:::-;21726:3;21747:67;21811:2;21806:3;21747:67;:::i;:::-;21740:74;;21823:93;21912:3;21823:93;:::i;:::-;21941:2;21936:3;21932:12;21925:19;;21584:366;;;:::o;21956:::-;22098:3;22119:67;22183:2;22178:3;22119:67;:::i;:::-;22112:74;;22195:93;22284:3;22195:93;:::i;:::-;22313:2;22308:3;22304:12;22297:19;;21956:366;;;:::o;22328:108::-;22405:24;22423:5;22405:24;:::i;:::-;22400:3;22393:37;22328:108;;:::o;22442:118::-;22529:24;22547:5;22529:24;:::i;:::-;22524:3;22517:37;22442:118;;:::o;22566:112::-;22649:22;22665:5;22649:22;:::i;:::-;22644:3;22637:35;22566:112;;:::o;22684:256::-;22796:3;22811:75;22882:3;22873:6;22811:75;:::i;:::-;22911:2;22906:3;22902:12;22895:19;;22931:3;22924:10;;22684:256;;;;:::o;22946:589::-;23171:3;23193:95;23284:3;23275:6;23193:95;:::i;:::-;23186:102;;23305:95;23396:3;23387:6;23305:95;:::i;:::-;23298:102;;23417:92;23505:3;23496:6;23417:92;:::i;:::-;23410:99;;23526:3;23519:10;;22946:589;;;;;;:::o;23541:379::-;23725:3;23747:147;23890:3;23747:147;:::i;:::-;23740:154;;23911:3;23904:10;;23541:379;;;:::o;23926:222::-;24019:4;24057:2;24046:9;24042:18;24034:26;;24070:71;24138:1;24127:9;24123:17;24114:6;24070:71;:::i;:::-;23926:222;;;;:::o;24154:640::-;24349:4;24387:3;24376:9;24372:19;24364:27;;24401:71;24469:1;24458:9;24454:17;24445:6;24401:71;:::i;:::-;24482:72;24550:2;24539:9;24535:18;24526:6;24482:72;:::i;:::-;24564;24632:2;24621:9;24617:18;24608:6;24564:72;:::i;:::-;24683:9;24677:4;24673:20;24668:2;24657:9;24653:18;24646:48;24711:76;24782:4;24773:6;24711:76;:::i;:::-;24703:84;;24154:640;;;;;;;:::o;24800:373::-;24943:4;24981:2;24970:9;24966:18;24958:26;;25030:9;25024:4;25020:20;25016:1;25005:9;25001:17;24994:47;25058:108;25161:4;25152:6;25058:108;:::i;:::-;25050:116;;24800:373;;;;:::o;25179:210::-;25266:4;25304:2;25293:9;25289:18;25281:26;;25317:65;25379:1;25368:9;25364:17;25355:6;25317:65;:::i;:::-;25179:210;;;;:::o;25395:545::-;25568:4;25606:3;25595:9;25591:19;25583:27;;25620:71;25688:1;25677:9;25673:17;25664:6;25620:71;:::i;:::-;25701:68;25765:2;25754:9;25750:18;25741:6;25701:68;:::i;:::-;25779:72;25847:2;25836:9;25832:18;25823:6;25779:72;:::i;:::-;25861;25929:2;25918:9;25914:18;25905:6;25861:72;:::i;:::-;25395:545;;;;;;;:::o;25946:313::-;26059:4;26097:2;26086:9;26082:18;26074:26;;26146:9;26140:4;26136:20;26132:1;26121:9;26117:17;26110:47;26174:78;26247:4;26238:6;26174:78;:::i;:::-;26166:86;;25946:313;;;;:::o;26265:419::-;26431:4;26469:2;26458:9;26454:18;26446:26;;26518:9;26512:4;26508:20;26504:1;26493:9;26489:17;26482:47;26546:131;26672:4;26546:131;:::i;:::-;26538:139;;26265:419;;;:::o;26690:::-;26856:4;26894:2;26883:9;26879:18;26871:26;;26943:9;26937:4;26933:20;26929:1;26918:9;26914:17;26907:47;26971:131;27097:4;26971:131;:::i;:::-;26963:139;;26690:419;;;:::o;27115:::-;27281:4;27319:2;27308:9;27304:18;27296:26;;27368:9;27362:4;27358:20;27354:1;27343:9;27339:17;27332:47;27396:131;27522:4;27396:131;:::i;:::-;27388:139;;27115:419;;;:::o;27540:::-;27706:4;27744:2;27733:9;27729:18;27721:26;;27793:9;27787:4;27783:20;27779:1;27768:9;27764:17;27757:47;27821:131;27947:4;27821:131;:::i;:::-;27813:139;;27540:419;;;:::o;27965:::-;28131:4;28169:2;28158:9;28154:18;28146:26;;28218:9;28212:4;28208:20;28204:1;28193:9;28189:17;28182:47;28246:131;28372:4;28246:131;:::i;:::-;28238:139;;27965:419;;;:::o;28390:::-;28556:4;28594:2;28583:9;28579:18;28571:26;;28643:9;28637:4;28633:20;28629:1;28618:9;28614:17;28607:47;28671:131;28797:4;28671:131;:::i;:::-;28663:139;;28390:419;;;:::o;28815:::-;28981:4;29019:2;29008:9;29004:18;28996:26;;29068:9;29062:4;29058:20;29054:1;29043:9;29039:17;29032:47;29096:131;29222:4;29096:131;:::i;:::-;29088:139;;28815:419;;;:::o;29240:::-;29406:4;29444:2;29433:9;29429:18;29421:26;;29493:9;29487:4;29483:20;29479:1;29468:9;29464:17;29457:47;29521:131;29647:4;29521:131;:::i;:::-;29513:139;;29240:419;;;:::o;29665:::-;29831:4;29869:2;29858:9;29854:18;29846:26;;29918:9;29912:4;29908:20;29904:1;29893:9;29889:17;29882:47;29946:131;30072:4;29946:131;:::i;:::-;29938:139;;29665:419;;;:::o;30090:::-;30256:4;30294:2;30283:9;30279:18;30271:26;;30343:9;30337:4;30333:20;30329:1;30318:9;30314:17;30307:47;30371:131;30497:4;30371:131;:::i;:::-;30363:139;;30090:419;;;:::o;30515:::-;30681:4;30719:2;30708:9;30704:18;30696:26;;30768:9;30762:4;30758:20;30754:1;30743:9;30739:17;30732:47;30796:131;30922:4;30796:131;:::i;:::-;30788:139;;30515:419;;;:::o;30940:::-;31106:4;31144:2;31133:9;31129:18;31121:26;;31193:9;31187:4;31183:20;31179:1;31168:9;31164:17;31157:47;31221:131;31347:4;31221:131;:::i;:::-;31213:139;;30940:419;;;:::o;31365:::-;31531:4;31569:2;31558:9;31554:18;31546:26;;31618:9;31612:4;31608:20;31604:1;31593:9;31589:17;31582:47;31646:131;31772:4;31646:131;:::i;:::-;31638:139;;31365:419;;;:::o;31790:::-;31956:4;31994:2;31983:9;31979:18;31971:26;;32043:9;32037:4;32033:20;32029:1;32018:9;32014:17;32007:47;32071:131;32197:4;32071:131;:::i;:::-;32063:139;;31790:419;;;:::o;32215:::-;32381:4;32419:2;32408:9;32404:18;32396:26;;32468:9;32462:4;32458:20;32454:1;32443:9;32439:17;32432:47;32496:131;32622:4;32496:131;:::i;:::-;32488:139;;32215:419;;;:::o;32640:::-;32806:4;32844:2;32833:9;32829:18;32821:26;;32893:9;32887:4;32883:20;32879:1;32868:9;32864:17;32857:47;32921:131;33047:4;32921:131;:::i;:::-;32913:139;;32640:419;;;:::o;33065:::-;33231:4;33269:2;33258:9;33254:18;33246:26;;33318:9;33312:4;33308:20;33304:1;33293:9;33289:17;33282:47;33346:131;33472:4;33346:131;:::i;:::-;33338:139;;33065:419;;;:::o;33490:::-;33656:4;33694:2;33683:9;33679:18;33671:26;;33743:9;33737:4;33733:20;33729:1;33718:9;33714:17;33707:47;33771:131;33897:4;33771:131;:::i;:::-;33763:139;;33490:419;;;:::o;33915:222::-;34008:4;34046:2;34035:9;34031:18;34023:26;;34059:71;34127:1;34116:9;34112:17;34103:6;34059:71;:::i;:::-;33915:222;;;;:::o;34143:434::-;34288:4;34326:2;34315:9;34311:18;34303:26;;34339:67;34403:1;34392:9;34388:17;34379:6;34339:67;:::i;:::-;34416:72;34484:2;34473:9;34469:18;34460:6;34416:72;:::i;:::-;34498;34566:2;34555:9;34551:18;34542:6;34498:72;:::i;:::-;34143:434;;;;;;:::o;34583:129::-;34617:6;34644:20;;:::i;:::-;34634:30;;34673:33;34701:4;34693:6;34673:33;:::i;:::-;34583:129;;;:::o;34718:75::-;34751:6;34784:2;34778:9;34768:19;;34718:75;:::o;34799:307::-;34860:4;34950:18;34942:6;34939:30;34936:56;;;34972:18;;:::i;:::-;34936:56;35010:29;35032:6;35010:29;:::i;:::-;35002:37;;35094:4;35088;35084:15;35076:23;;34799:307;;;:::o;35112:308::-;35174:4;35264:18;35256:6;35253:30;35250:56;;;35286:18;;:::i;:::-;35250:56;35324:29;35346:6;35324:29;:::i;:::-;35316:37;;35408:4;35402;35398:15;35390:23;;35112:308;;;:::o;35426:132::-;35493:4;35516:3;35508:11;;35546:4;35541:3;35537:14;35529:22;;35426:132;;;:::o;35564:141::-;35613:4;35636:3;35628:11;;35659:3;35656:1;35649:14;35693:4;35690:1;35680:18;35672:26;;35564:141;;;:::o;35711:114::-;35778:6;35812:5;35806:12;35796:22;;35711:114;;;:::o;35831:98::-;35882:6;35916:5;35910:12;35900:22;;35831:98;;;:::o;35935:99::-;35987:6;36021:5;36015:12;36005:22;;35935:99;;;:::o;36040:113::-;36110:4;36142;36137:3;36133:14;36125:22;;36040:113;;;:::o;36159:184::-;36258:11;36292:6;36287:3;36280:19;36332:4;36327:3;36323:14;36308:29;;36159:184;;;;:::o;36349:168::-;36432:11;36466:6;36461:3;36454:19;36506:4;36501:3;36497:14;36482:29;;36349:168;;;;:::o;36523:147::-;36624:11;36661:3;36646:18;;36523:147;;;;:::o;36676:169::-;36760:11;36794:6;36789:3;36782:19;36834:4;36829:3;36825:14;36810:29;;36676:169;;;;:::o;36851:148::-;36953:11;36990:3;36975:18;;36851:148;;;;:::o;37005:305::-;37045:3;37064:20;37082:1;37064:20;:::i;:::-;37059:25;;37098:20;37116:1;37098:20;:::i;:::-;37093:25;;37252:1;37184:66;37180:74;37177:1;37174:81;37171:107;;;37258:18;;:::i;:::-;37171:107;37302:1;37299;37295:9;37288:16;;37005:305;;;;:::o;37316:185::-;37356:1;37373:20;37391:1;37373:20;:::i;:::-;37368:25;;37407:20;37425:1;37407:20;:::i;:::-;37402:25;;37446:1;37436:35;;37451:18;;:::i;:::-;37436:35;37493:1;37490;37486:9;37481:14;;37316:185;;;;:::o;37507:348::-;37547:7;37570:20;37588:1;37570:20;:::i;:::-;37565:25;;37604:20;37622:1;37604:20;:::i;:::-;37599:25;;37792:1;37724:66;37720:74;37717:1;37714:81;37709:1;37702:9;37695:17;37691:105;37688:131;;;37799:18;;:::i;:::-;37688:131;37847:1;37844;37840:9;37829:20;;37507:348;;;;:::o;37861:191::-;37901:4;37921:20;37939:1;37921:20;:::i;:::-;37916:25;;37955:20;37973:1;37955:20;:::i;:::-;37950:25;;37994:1;37991;37988:8;37985:34;;;37999:18;;:::i;:::-;37985:34;38044:1;38041;38037:9;38029:17;;37861:191;;;;:::o;38058:96::-;38095:7;38124:24;38142:5;38124:24;:::i;:::-;38113:35;;38058:96;;;:::o;38160:90::-;38194:7;38237:5;38230:13;38223:21;38212:32;;38160:90;;;:::o;38256:77::-;38293:7;38322:5;38311:16;;38256:77;;;:::o;38339:149::-;38375:7;38415:66;38408:5;38404:78;38393:89;;38339:149;;;:::o;38494:126::-;38531:7;38571:42;38564:5;38560:54;38549:65;;38494:126;;;:::o;38626:77::-;38663:7;38692:5;38681:16;;38626:77;;;:::o;38709:86::-;38744:7;38784:4;38777:5;38773:16;38762:27;;38709:86;;;:::o;38801:154::-;38885:6;38880:3;38875;38862:30;38947:1;38938:6;38933:3;38929:16;38922:27;38801:154;;;:::o;38961:307::-;39029:1;39039:113;39053:6;39050:1;39047:13;39039:113;;;39138:1;39133:3;39129:11;39123:18;39119:1;39114:3;39110:11;39103:39;39075:2;39072:1;39068:10;39063:15;;39039:113;;;39170:6;39167:1;39164:13;39161:101;;;39250:1;39241:6;39236:3;39232:16;39225:27;39161:101;39010:258;38961:307;;;:::o;39274:320::-;39318:6;39355:1;39349:4;39345:12;39335:22;;39402:1;39396:4;39392:12;39423:18;39413:81;;39479:4;39471:6;39467:17;39457:27;;39413:81;39541:2;39533:6;39530:14;39510:18;39507:38;39504:84;;;39560:18;;:::i;:::-;39504:84;39325:269;39274:320;;;:::o;39600:281::-;39683:27;39705:4;39683:27;:::i;:::-;39675:6;39671:40;39813:6;39801:10;39798:22;39777:18;39765:10;39762:34;39759:62;39756:88;;;39824:18;;:::i;:::-;39756:88;39864:10;39860:2;39853:22;39643:238;39600:281;;:::o;39887:233::-;39926:3;39949:24;39967:5;39949:24;:::i;:::-;39940:33;;39995:66;39988:5;39985:77;39982:103;;;40065:18;;:::i;:::-;39982:103;40112:1;40105:5;40101:13;40094:20;;39887:233;;;:::o;40126:100::-;40165:7;40194:26;40214:5;40194:26;:::i;:::-;40183:37;;40126:100;;;:::o;40232:94::-;40271:7;40300:20;40314:5;40300:20;:::i;:::-;40289:31;;40232:94;;;:::o;40332:176::-;40364:1;40381:20;40399:1;40381:20;:::i;:::-;40376:25;;40415:20;40433:1;40415:20;:::i;:::-;40410:25;;40454:1;40444:35;;40459:18;;:::i;:::-;40444:35;40500:1;40497;40493:9;40488:14;;40332:176;;;;:::o;40514:180::-;40562:77;40559:1;40552:88;40659:4;40656:1;40649:15;40683:4;40680:1;40673:15;40700:180;40748:77;40745:1;40738:88;40845:4;40842:1;40835:15;40869:4;40866:1;40859:15;40886:180;40934:77;40931:1;40924:88;41031:4;41028:1;41021:15;41055:4;41052:1;41045:15;41072:180;41120:77;41117:1;41110:88;41217:4;41214:1;41207:15;41241:4;41238:1;41231:15;41258:180;41306:77;41303:1;41296:88;41403:4;41400:1;41393:15;41427:4;41424:1;41417:15;41444:117;41553:1;41550;41543:12;41567:117;41676:1;41673;41666:12;41690:117;41799:1;41796;41789:12;41813:117;41922:1;41919;41912:12;41936:117;42045:1;42042;42035:12;42059:117;42168:1;42165;42158:12;42182:102;42223:6;42274:2;42270:7;42265:2;42258:5;42254:14;42250:28;42240:38;;42182:102;;;:::o;42290:94::-;42323:8;42371:5;42367:2;42363:14;42342:35;;42290:94;;;:::o;42390:225::-;42530:34;42526:1;42518:6;42514:14;42507:58;42599:8;42594:2;42586:6;42582:15;42575:33;42390:225;:::o;42621:180::-;42761:32;42757:1;42749:6;42745:14;42738:56;42621:180;:::o;42807:173::-;42947:25;42943:1;42935:6;42931:14;42924:49;42807:173;:::o;42986:181::-;43126:33;43122:1;43114:6;43110:14;43103:57;42986:181;:::o;43173:176::-;43313:28;43309:1;43301:6;43297:14;43290:52;43173:176;:::o;43355:182::-;43495:34;43491:1;43483:6;43479:14;43472:58;43355:182;:::o;43543:173::-;43683:25;43679:1;43671:6;43667:14;43660:49;43543:173;:::o;43722:181::-;43862:33;43858:1;43850:6;43846:14;43839:57;43722:181;:::o;43909:174::-;44049:26;44045:1;44037:6;44033:14;44026:50;43909:174;:::o;44089:114::-;;:::o;44209:224::-;44349:34;44345:1;44337:6;44333:14;44326:58;44418:7;44413:2;44405:6;44401:15;44394:32;44209:224;:::o;44439:221::-;44579:34;44575:1;44567:6;44563:14;44556:58;44648:4;44643:2;44635:6;44631:15;44624:29;44439:221;:::o;44666:220::-;44806:34;44802:1;44794:6;44790:14;44783:58;44875:3;44870:2;44862:6;44858:15;44851:28;44666:220;:::o;44892:175::-;45032:27;45028:1;45020:6;45016:14;45009:51;44892:175;:::o;45073:181::-;45213:33;45209:1;45201:6;45197:14;45190:57;45073:181;:::o;45260:176::-;45400:28;45396:1;45388:6;45384:14;45377:52;45260:176;:::o;45442:235::-;45582:34;45578:1;45570:6;45566:14;45559:58;45651:18;45646:2;45638:6;45634:15;45627:43;45442:235;:::o;45683:169::-;45823:21;45819:1;45811:6;45807:14;45800:45;45683:169;:::o;45858:178::-;45998:30;45994:1;45986:6;45982:14;45975:54;45858:178;:::o;46042:122::-;46115:24;46133:5;46115:24;:::i;:::-;46108:5;46105:35;46095:63;;46154:1;46151;46144:12;46095:63;46042:122;:::o;46170:116::-;46240:21;46255:5;46240:21;:::i;:::-;46233:5;46230:32;46220:60;;46276:1;46273;46266:12;46220:60;46170:116;:::o;46292:122::-;46365:24;46383:5;46365:24;:::i;:::-;46358:5;46355:35;46345:63;;46404:1;46401;46394:12;46345:63;46292:122;:::o;46420:120::-;46492:23;46509:5;46492:23;:::i;:::-;46485:5;46482:34;46472:62;;46530:1;46527;46520:12;46472:62;46420:120;:::o;46546:122::-;46619:24;46637:5;46619:24;:::i;:::-;46612:5;46609:35;46599:63;;46658:1;46655;46648:12;46599:63;46546:122;:::o

Swarm Source

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