ETH Price: $3,398.99 (+1.93%)

Token

Edgerunners (EDGE)
 

Overview

Max Total Supply

0 EDGE

Holders

49

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 EDGE
0x1d49510a59d8d1e9f1e2f30225c9a4f10b37cd17
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:
Edgerunners

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 12: Edgerunners.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./Ownable.sol";

contract Edgerunners is ERC721, Ownable {
    using Address for address;
    using Strings for uint256;
    
    // metadata
    bool public metadataLocked = false;
    string public baseURI = "";

    // supply and phases
    uint256 public availSupply;
    uint256 public reservedSupply;
    uint256 public mintIndex;
    bool public presaleEnded = false;
    bool public publicSaleEnded = false;
    bool public mintPaused = true;

    // presale whitelist
    mapping(address => bool) public isWhitelisted;
    event SetWhitelist(address[] added, address[] removed);
    
    // price
    uint256 public price = 0.05 ether;

    // limits
    uint256 public maxPerTx = 8;
    uint256 public maxPerTxPresale = 5;
    
    // shareholder withdraw
    uint256 public withdrawnByOwner;
    uint256 public withdrawnByShareholder;
    address public shareholderAddress;
    uint256 public constant SHAREHOLDER_PERCENTAGE = 30;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection, and by setting supply caps, mint indexes, and reserves
     */
    constructor()
        ERC721("Edgerunners", "EDGE")
    {
        availSupply = 8888;
        reservedSupply = 250;
        shareholderAddress = 0xbCc4CD9BDdaCeFff7e0E7B9dd7a7d7FbC622a960;
    }
    
    /**
     * ------------ METADATA ------------ 
     */

    /**
     * @dev Gets base metadata URI
     */
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    /**
     * @dev Sets base metadata URI, callable by owner
     */
    function setBaseUri(string memory _uri) external onlyOwner {
        require(metadataLocked == false);
        baseURI = _uri;
    }
    
    /**
     * @dev Lock metadata URI forever, callable by owner
     */
    function lockMetadata() external onlyOwner {
        require(metadataLocked == false);
        metadataLocked = true;
    }
    
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
        
        string memory base = _baseURI();
        return string(abi.encodePacked(base, tokenId.toString()));
    }
    
    /**
     * ------------ SALE AND PRESALE ------------ 
     */
     
    /**
     * @dev Ends public sale forever, callable by owner
     */
    function endSaleForever() external onlyOwner {
        publicSaleEnded = true;
    }
    
    /**
     * @dev Ends the presale, callable by owner
     */
    function endPresale() external onlyOwner {
        presaleEnded = true;
    }

    /**
     * @dev Pause/unpause sale or presale
     */
    function togglePauseMinting() external onlyOwner {
        mintPaused = !mintPaused;
    }

    /**
     * ------------ CONFIGURATION ------------ 
     */

    /**
     * @dev Edit whitelist
     */
    function editWhitelist(address[] calldata walletsToAdd, address[] calldata walletsToRemove) external onlyOwner {
        for (uint256 i = 0; i < walletsToAdd.length; i++) {
            isWhitelisted[walletsToAdd[i]] = true;
        }
        for (uint256 i = 0; i < walletsToRemove.length; i++) {
            isWhitelisted[walletsToRemove[i]] = false;
        }

        emit SetWhitelist(walletsToAdd, walletsToRemove);
    }

    /**
     * @dev Edit sale parameters: price points and count limits
     */
    function editParameters(uint256 _price, uint256 _maxPerTx, uint256 _maxPerTxPresale) external onlyOwner {
        price = _price;
        maxPerTx = _maxPerTx;
        maxPerTxPresale = _maxPerTxPresale;
    }
     
    /**
     * ------------ MINTING ------------ 
     */
    
    /**
     * @dev Mints `count` tokens to `to` address; internal
     */
    function mintInternal(address to, uint256 count) internal {
        for (uint256 i = 0; i < count; i++) {
            _mint(to, mintIndex);
            mintIndex++;
        }
    }
    
    /**
     * @dev Manual minting by owner, callable by owner
     */
    function mintOwner(address[] calldata owners, uint256[] calldata counts) external onlyOwner {
        require(owners.length == counts.length, "Bad length");
         
        for (uint256 i = 0; i < counts.length; i++) {
            require(reservedSupply >= counts[i], "Reserve exceeded");
            
            mintInternal(owners[i], counts[i]);
            reservedSupply -= counts[i];
            availSupply -= counts[i];
        }
    }
    
    /**
     * @dev Public minting during public sale or presale
     */
    function mint(uint256 count) public payable{
        require(!mintPaused, "Minting is currently paused");
        require(publicSaleEnded == false, "Sale ended");

        require(msg.value == count * price, "Ether value incorrect");
        require(availSupply - reservedSupply >= count, "Supply exceeded");

        if (!presaleEnded) {
            // presale checks
            require(isWhitelisted[msg.sender], "You are not whitelisted");
            require(count <= maxPerTxPresale, "Too many tokens");
        }
        else {
            // public sale
            require(count <= maxPerTx, "Too many tokens");
        }

        availSupply -= count;
        mintInternal(msg.sender, count);
    }

    /**
     * @dev Withdraw ether from this contract, callable by owner
     */
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        uint256 availableToWithdraw = ((balance + withdrawnByOwner + withdrawnByShareholder) * (100 - SHAREHOLDER_PERCENTAGE) / 100) - withdrawnByOwner;
        require(availableToWithdraw > 0, "Nothing to withdraw");
        withdrawnByOwner += availableToWithdraw;

        payable(msg.sender).transfer(availableToWithdraw);
    }

    /**
     * @dev Withdraw ether from this contract, callable by shareholder
     */
    function withdrawShareholder() external {
        require(msg.sender == shareholderAddress, "Only Shareholder");

        uint256 balance = address(this).balance;
        uint256 availableToWithdraw = ((balance + withdrawnByOwner + withdrawnByShareholder) * SHAREHOLDER_PERCENTAGE / 100) - withdrawnByShareholder;
        require(availableToWithdraw > 0, "Nothing to withdraw");
        withdrawnByShareholder += availableToWithdraw;

        payable(msg.sender).transfer(availableToWithdraw);
    }
}

File 1 of 12: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 12: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 12: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 12: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 12: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 7 of 12: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 8 of 12: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 9 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 10 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 11 of 12: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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 12 of 12: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"added","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"removed","type":"address[]"}],"name":"SetWhitelist","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":"SHAREHOLDER_PERCENTAGE","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":[],"name":"availSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_maxPerTx","type":"uint256"},{"internalType":"uint256","name":"_maxPerTxPresale","type":"uint256"}],"name":"editParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"walletsToAdd","type":"address[]"},{"internalType":"address[]","name":"walletsToRemove","type":"address[]"}],"name":"editWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSaleForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"counts","type":"uint256[]"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedSupply","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":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareholderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"togglePauseMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawShareholder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawnByOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawnByShareholder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526000600660146101000a81548160ff021916908315150217905550604051806020016040528060008152506007908051906020019062000046929190620002b5565b506000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555066b1a2bc2ec50000600d556008600e556005600f55348015620000ba57600080fd5b506040518060400160405280600b81526020017f4564676572756e6e6572730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f454447450000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013f929190620002b5565b50806001908051906020019062000158929190620002b5565b5050506200017b6200016f620001e760201b60201c565b620001ef60201b60201c565b6122b860088190555060fa60098190555073bcc4cd9bddacefff7e0e7b9dd7a7d7fbc622a960601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ca565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c39062000365565b90600052602060002090601f016020900481019282620002e7576000855562000333565b82601f106200030257805160ff191683800117855562000333565b8280016001018555821562000333579182015b828111156200033257825182559160200191906001019062000315565b5b50905062000342919062000346565b5090565b5b808211156200036157600081600090555060010162000347565b5090565b600060028204905060018216806200037e57607f821691505b602082108114156200039557620003946200039b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61491c80620003da6000396000f3fe60806040526004361061025c5760003560e01c806382c6ee9f11610144578063a22cb465116100b6578063e580b2b01161007a578063e580b2b014610859578063e985e9c514610884578063f1489ecd146108c1578063f2fde38b146108ea578063f74f9bfd14610913578063f968adbe1461093e5761025c565b8063a22cb4651461078a578063a43be57b146107b3578063b88d4fde146107ca578063c87b56dd146107f3578063d8fa3168146108305761025c565b806395d89b411161010857806395d89b41146106ad578063989bdbb6146106d85780639f5215dd146106ef578063a035b1fe1461071a578063a0712d6814610745578063a0bcfc7f146107615761025c565b806382c6ee9f146105ec57806388dc04e7146106035780638a49148b1461062c5780638da5cb5b14610657578063943d40e7146106825761025c565b80633e53afc3116101dd57806369d2ceb1116101a157806369d2ceb1146104ec5780636c0360eb1461051757806370a0823114610542578063715018a61461057f57806373b9904a146105965780637e4831d3146105c15761025c565b80633e53afc31461041957806342842e0e1461043057806344d19d2b1461045957806347f1eae3146104845780636352211e146104af5761025c565b8063095ea7b311610224578063095ea7b314610348578063125e0af01461037157806323b872dd1461039c5780633af32abf146103c55780633ccfd60b146104025761025c565b806301ffc9a71461026157806306f9991c1461029e57806306fdde03146102c957806307a18413146102f4578063081812fc1461030b575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061336a565b610969565b6040516102959190613a35565b60405180910390f35b3480156102aa57600080fd5b506102b3610a4b565b6040516102c09190613db2565b60405180910390f35b3480156102d557600080fd5b506102de610a51565b6040516102eb9190613a50565b60405180910390f35b34801561030057600080fd5b50610309610ae3565b005b34801561031757600080fd5b50610332600480360381019061032d919061340d565b610c63565b60405161033f9190613993565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190613228565b610ce8565b005b34801561037d57600080fd5b50610386610e00565b6040516103939190613a35565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613112565b610e13565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906130a5565b610e73565b6040516103f99190613a35565b60405180910390f35b34801561040e57600080fd5b50610417610e93565b005b34801561042557600080fd5b5061042e61100b565b005b34801561043c57600080fd5b5061045760048036038101906104529190613112565b6110b3565b005b34801561046557600080fd5b5061046e6110d3565b60405161047b9190613db2565b60405180910390f35b34801561049057600080fd5b506104996110d9565b6040516104a69190613db2565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061340d565b6110df565b6040516104e39190613993565b60405180910390f35b3480156104f857600080fd5b50610501611191565b60405161050e9190613a35565b60405180910390f35b34801561052357600080fd5b5061052c6111a4565b6040516105399190613a50565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906130a5565b611232565b6040516105769190613db2565b60405180910390f35b34801561058b57600080fd5b506105946112ea565b005b3480156105a257600080fd5b506105ab611372565b6040516105b89190613db2565b60405180910390f35b3480156105cd57600080fd5b506105d6611377565b6040516105e39190613a35565b60405180910390f35b3480156105f857600080fd5b5061060161138a565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061343a565b611423565b005b34801561063857600080fd5b506106416114b9565b60405161064e9190613db2565b60405180910390f35b34801561066357600080fd5b5061066c6114bf565b6040516106799190613993565b60405180910390f35b34801561068e57600080fd5b506106976114e9565b6040516106a49190613993565b60405180910390f35b3480156106b957600080fd5b506106c261150f565b6040516106cf9190613a50565b60405180910390f35b3480156106e457600080fd5b506106ed6115a1565b005b3480156106fb57600080fd5b5061070461165a565b6040516107119190613db2565b60405180910390f35b34801561072657600080fd5b5061072f611660565b60405161073c9190613db2565b60405180910390f35b61075f600480360381019061075a919061340d565b611666565b005b34801561076d57600080fd5b50610788600480360381019061078391906133c4565b611903565b005b34801561079657600080fd5b506107b160048036038101906107ac91906131e8565b6119b9565b005b3480156107bf57600080fd5b506107c86119cf565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613165565b611a68565b005b3480156107ff57600080fd5b5061081a6004803603810190610815919061340d565b611aca565b6040516108279190613a50565b60405180910390f35b34801561083c57600080fd5b50610857600480360381019061085291906132e9565b611b52565b005b34801561086557600080fd5b5061086e611d4a565b60405161087b9190613a35565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a691906130d2565b611d5d565b6040516108b89190613a35565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613268565b611df1565b005b3480156108f657600080fd5b50610911600480360381019061090c91906130a5565b611ff2565b005b34801561091f57600080fd5b506109286120ea565b6040516109359190613db2565b60405180910390f35b34801561094a57600080fd5b506109536120f0565b6040516109609190613db2565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a445750610a43826120f6565b5b9050919050565b600f5481565b606060008054610a60906140a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c906140a1565b8015610ad95780601f10610aae57610100808354040283529160200191610ad9565b820191906000526020600020905b815481529060010190602001808311610abc57829003601f168201915b5050505050905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613d32565b60405180910390fd5b600047905060006011546064601e60115460105486610b929190613ed6565b610b9c9190613ed6565b610ba69190613f5d565b610bb09190613f2c565b610bba9190613fb7565b905060008111610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690613a92565b60405180910390fd5b8060116000828254610c119190613ed6565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c5e573d6000803e3d6000fd5b505050565b6000610c6e82612160565b610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490613c72565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cf3826110df565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90613d12565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d836121cc565b73ffffffffffffffffffffffffffffffffffffffff161480610db25750610db181610dac6121cc565b611d5d565b5b610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de890613bb2565b60405180910390fd5b610dfb83836121d4565b505050565b600b60019054906101000a900460ff1681565b610e24610e1e6121cc565b8261228d565b610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90613d72565b60405180910390fd5b610e6e83838361236b565b505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b610e9b6121cc565b73ffffffffffffffffffffffffffffffffffffffff16610eb96114bf565b73ffffffffffffffffffffffffffffffffffffffff1614610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613cb2565b60405180910390fd5b600047905060006010546064601e6064610f299190613fb7565b60115460105486610f3a9190613ed6565b610f449190613ed6565b610f4e9190613f5d565b610f589190613f2c565b610f629190613fb7565b905060008111610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90613a92565b60405180910390fd5b8060106000828254610fb99190613ed6565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611006573d6000803e3d6000fd5b505050565b6110136121cc565b73ffffffffffffffffffffffffffffffffffffffff166110316114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613cb2565b60405180910390fd5b600b60029054906101000a900460ff1615600b60026101000a81548160ff021916908315150217905550565b6110ce83838360405180602001604052806000815250611a68565b505050565b60095481565b60115481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90613bf2565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b600780546111b1906140a1565b80601f01602080910402602001604051908101604052809291908181526020018280546111dd906140a1565b801561122a5780601f106111ff5761010080835404028352916020019161122a565b820191906000526020600020905b81548152906001019060200180831161120d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90613bd2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f26121cc565b73ffffffffffffffffffffffffffffffffffffffff166113106114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613cb2565b60405180910390fd5b61137060006125c7565b565b601e81565b600b60029054906101000a900460ff1681565b6113926121cc565b73ffffffffffffffffffffffffffffffffffffffff166113b06114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613cb2565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b61142b6121cc565b73ffffffffffffffffffffffffffffffffffffffff166114496114bf565b73ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613cb2565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b60105481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461151e906140a1565b80601f016020809104026020016040519081016040528092919081815260200182805461154a906140a1565b80156115975780601f1061156c57610100808354040283529160200191611597565b820191906000526020600020905b81548152906001019060200180831161157a57829003601f168201915b5050505050905090565b6115a96121cc565b73ffffffffffffffffffffffffffffffffffffffff166115c76114bf565b73ffffffffffffffffffffffffffffffffffffffff161461161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613cb2565b60405180910390fd5b60001515600660149054906101000a900460ff1615151461163d57600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60085481565b600d5481565b600b60029054906101000a900460ff16156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613d52565b60405180910390fd5b60001515600b60019054906101000a900460ff1615151461170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613cf2565b60405180910390fd5b600d548161171a9190613f5d565b341461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613d92565b60405180910390fd5b8060095460085461176c9190613fb7565b10156117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490613b92565b60405180910390fd5b600b60009054906101000a900460ff1661189757600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613c32565b60405180910390fd5b600f54811115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188990613af2565b60405180910390fd5b6118dd565b600e548111156118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613af2565b60405180910390fd5b5b80600860008282546118ef9190613fb7565b92505081905550611900338261268d565b50565b61190b6121cc565b73ffffffffffffffffffffffffffffffffffffffff166119296114bf565b73ffffffffffffffffffffffffffffffffffffffff161461197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690613cb2565b60405180910390fd5b60001515600660149054906101000a900460ff1615151461199f57600080fd5b80600790805190602001906119b5929190612e0d565b5050565b6119cb6119c46121cc565b83836126d4565b5050565b6119d76121cc565b73ffffffffffffffffffffffffffffffffffffffff166119f56114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613cb2565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b611a79611a736121cc565b8361228d565b611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613d72565b60405180910390fd5b611ac484848484612841565b50505050565b6060611ad582612160565b611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613c52565b60405180910390fd5b6000611b1e61289d565b905080611b2a8461292f565b604051602001611b3b92919061396f565b604051602081830303815290604052915050919050565b611b5a6121cc565b73ffffffffffffffffffffffffffffffffffffffff16611b786114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590613cb2565b60405180910390fd5b818190508484905014611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90613c92565b60405180910390fd5b60005b82829050811015611d4357828282818110611c3757611c3661420b565b5b905060200201356009541015611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613a72565b60405180910390fd5b611ccc858583818110611c9857611c9761420b565b5b9050602002016020810190611cad91906130a5565b848484818110611cc057611cbf61420b565b5b9050602002013561268d565b828282818110611cdf57611cde61420b565b5b9050602002013560096000828254611cf79190613fb7565b92505081905550828282818110611d1157611d1061420b565b5b9050602002013560086000828254611d299190613fb7565b925050819055508080611d3b90614104565b915050611c19565b5050505050565b600b60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611df96121cc565b73ffffffffffffffffffffffffffffffffffffffff16611e176114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490613cb2565b60405180910390fd5b60005b84849050811015611f0d576001600c6000878785818110611e9457611e9361420b565b5b9050602002016020810190611ea991906130a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f0590614104565b915050611e70565b5060005b82829050811015611fae576000600c6000858585818110611f3557611f3461420b565b5b9050602002016020810190611f4a91906130a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611fa690614104565b915050611f11565b507f9664270f0974d24d8c43232d9cd144776a2681af2d10368a8d1f694ce0d7044184848484604051611fe494939291906139fa565b60405180910390a150505050565b611ffa6121cc565b73ffffffffffffffffffffffffffffffffffffffff166120186114bf565b73ffffffffffffffffffffffffffffffffffffffff161461206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590613cb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613ad2565b60405180910390fd5b6120e7816125c7565b50565b600a5481565b600e5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612247836110df565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061229882612160565b6122d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ce90613b72565b60405180910390fd5b60006122e2836110df565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061235157508373ffffffffffffffffffffffffffffffffffffffff1661233984610c63565b73ffffffffffffffffffffffffffffffffffffffff16145b8061236257506123618185611d5d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661238b826110df565b73ffffffffffffffffffffffffffffffffffffffff16146123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890613cd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890613b32565b60405180910390fd5b61245c838383612a90565b6124676000826121d4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b79190613fb7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250e9190613ed6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156126cf576126a483600a54612a95565b600a60008154809291906126b790614104565b919050555080806126c790614104565b915050612690565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a90613b52565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128349190613a35565b60405180910390a3505050565b61284c84848461236b565b61285884848484612c63565b612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90613ab2565b60405180910390fd5b50505050565b6060600780546128ac906140a1565b80601f01602080910402602001604051908101604052809291908181526020018280546128d8906140a1565b80156129255780601f106128fa57610100808354040283529160200191612925565b820191906000526020600020905b81548152906001019060200180831161290857829003601f168201915b5050505050905090565b60606000821415612977576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a8b565b600082905060005b600082146129a957808061299290614104565b915050600a826129a29190613f2c565b915061297f565b60008167ffffffffffffffff8111156129c5576129c461423a565b5b6040519080825280601f01601f1916602001820160405280156129f75781602001600182028036833780820191505090505b5090505b60008514612a8457600182612a109190613fb7565b9150600a85612a1f919061414d565b6030612a2b9190613ed6565b60f81b818381518110612a4157612a4061420b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a7d9190613f2c565b94506129fb565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90613c12565b60405180910390fd5b612b0e81612160565b15612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4590613b12565b60405180910390fd5b612b5a60008383612a90565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612baa9190613ed6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612c848473ffffffffffffffffffffffffffffffffffffffff16612dfa565b15612ded578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cad6121cc565b8786866040518563ffffffff1660e01b8152600401612ccf94939291906139ae565b602060405180830381600087803b158015612ce957600080fd5b505af1925050508015612d1a57506040513d601f19601f82011682018060405250810190612d179190613397565b60015b612d9d573d8060008114612d4a576040519150601f19603f3d011682016040523d82523d6000602084013e612d4f565b606091505b50600081511415612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90613ab2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df2565b600190505b949350505050565b600080823b905060008111915050919050565b828054612e19906140a1565b90600052602060002090601f016020900481019282612e3b5760008555612e82565b82601f10612e5457805160ff1916838001178555612e82565b82800160010185558215612e82579182015b82811115612e81578251825591602001919060010190612e66565b5b509050612e8f9190612e93565b5090565b5b80821115612eac576000816000905550600101612e94565b5090565b6000612ec3612ebe84613df2565b613dcd565b905082815260208101848484011115612edf57612ede614278565b5b612eea84828561405f565b509392505050565b6000612f05612f0084613e23565b613dcd565b905082815260208101848484011115612f2157612f20614278565b5b612f2c84828561405f565b509392505050565b600081359050612f438161488a565b92915050565b60008083601f840112612f5f57612f5e61426e565b5b8235905067ffffffffffffffff811115612f7c57612f7b614269565b5b602083019150836020820283011115612f9857612f97614273565b5b9250929050565b60008083601f840112612fb557612fb461426e565b5b8235905067ffffffffffffffff811115612fd257612fd1614269565b5b602083019150836020820283011115612fee57612fed614273565b5b9250929050565b600081359050613004816148a1565b92915050565b600081359050613019816148b8565b92915050565b60008151905061302e816148b8565b92915050565b600082601f8301126130495761304861426e565b5b8135613059848260208601612eb0565b91505092915050565b600082601f8301126130775761307661426e565b5b8135613087848260208601612ef2565b91505092915050565b60008135905061309f816148cf565b92915050565b6000602082840312156130bb576130ba614282565b5b60006130c984828501612f34565b91505092915050565b600080604083850312156130e9576130e8614282565b5b60006130f785828601612f34565b925050602061310885828601612f34565b9150509250929050565b60008060006060848603121561312b5761312a614282565b5b600061313986828701612f34565b935050602061314a86828701612f34565b925050604061315b86828701613090565b9150509250925092565b6000806000806080858703121561317f5761317e614282565b5b600061318d87828801612f34565b945050602061319e87828801612f34565b93505060406131af87828801613090565b925050606085013567ffffffffffffffff8111156131d0576131cf61427d565b5b6131dc87828801613034565b91505092959194509250565b600080604083850312156131ff576131fe614282565b5b600061320d85828601612f34565b925050602061321e85828601612ff5565b9150509250929050565b6000806040838503121561323f5761323e614282565b5b600061324d85828601612f34565b925050602061325e85828601613090565b9150509250929050565b6000806000806040858703121561328257613281614282565b5b600085013567ffffffffffffffff8111156132a05761329f61427d565b5b6132ac87828801612f49565b9450945050602085013567ffffffffffffffff8111156132cf576132ce61427d565b5b6132db87828801612f49565b925092505092959194509250565b6000806000806040858703121561330357613302614282565b5b600085013567ffffffffffffffff8111156133215761332061427d565b5b61332d87828801612f49565b9450945050602085013567ffffffffffffffff8111156133505761334f61427d565b5b61335c87828801612f9f565b925092505092959194509250565b6000602082840312156133805761337f614282565b5b600061338e8482850161300a565b91505092915050565b6000602082840312156133ad576133ac614282565b5b60006133bb8482850161301f565b91505092915050565b6000602082840312156133da576133d9614282565b5b600082013567ffffffffffffffff8111156133f8576133f761427d565b5b61340484828501613062565b91505092915050565b60006020828403121561342357613422614282565b5b600061343184828501613090565b91505092915050565b60008060006060848603121561345357613452614282565b5b600061346186828701613090565b935050602061347286828701613090565b925050604061348386828701613090565b9150509250925092565b600061349983836134a5565b60208301905092915050565b6134ae81613feb565b82525050565b6134bd81613feb565b82525050565b60006134cf8385613e81565b93506134da82613e54565b8060005b85811015613513576134f08284613ebf565b6134fa888261348d565b975061350583613e74565b9250506001810190506134de565b5085925050509392505050565b61352981613ffd565b82525050565b600061353a82613e5e565b6135448185613e92565b935061355481856020860161406e565b61355d81614287565b840191505092915050565b600061357382613e69565b61357d8185613ea3565b935061358d81856020860161406e565b61359681614287565b840191505092915050565b60006135ac82613e69565b6135b68185613eb4565b93506135c681856020860161406e565b80840191505092915050565b60006135df601083613ea3565b91506135ea82614298565b602082019050919050565b6000613602601383613ea3565b915061360d826142c1565b602082019050919050565b6000613625603283613ea3565b9150613630826142ea565b604082019050919050565b6000613648602683613ea3565b915061365382614339565b604082019050919050565b600061366b600f83613ea3565b915061367682614388565b602082019050919050565b600061368e601c83613ea3565b9150613699826143b1565b602082019050919050565b60006136b1602483613ea3565b91506136bc826143da565b604082019050919050565b60006136d4601983613ea3565b91506136df82614429565b602082019050919050565b60006136f7602c83613ea3565b915061370282614452565b604082019050919050565b600061371a600f83613ea3565b9150613725826144a1565b602082019050919050565b600061373d603883613ea3565b9150613748826144ca565b604082019050919050565b6000613760602a83613ea3565b915061376b82614519565b604082019050919050565b6000613783602983613ea3565b915061378e82614568565b604082019050919050565b60006137a6602083613ea3565b91506137b1826145b7565b602082019050919050565b60006137c9601783613ea3565b91506137d4826145e0565b602082019050919050565b60006137ec603183613ea3565b91506137f782614609565b604082019050919050565b600061380f602c83613ea3565b915061381a82614658565b604082019050919050565b6000613832600a83613ea3565b915061383d826146a7565b602082019050919050565b6000613855602083613ea3565b9150613860826146d0565b602082019050919050565b6000613878602983613ea3565b9150613883826146f9565b604082019050919050565b600061389b600a83613ea3565b91506138a682614748565b602082019050919050565b60006138be602183613ea3565b91506138c982614771565b604082019050919050565b60006138e1601083613ea3565b91506138ec826147c0565b602082019050919050565b6000613904601b83613ea3565b915061390f826147e9565b602082019050919050565b6000613927603183613ea3565b915061393282614812565b604082019050919050565b600061394a601583613ea3565b915061395582614861565b602082019050919050565b61396981614055565b82525050565b600061397b82856135a1565b915061398782846135a1565b91508190509392505050565b60006020820190506139a860008301846134b4565b92915050565b60006080820190506139c360008301876134b4565b6139d060208301866134b4565b6139dd6040830185613960565b81810360608301526139ef818461352f565b905095945050505050565b60006040820190508181036000830152613a158186886134c3565b90508181036020830152613a2a8184866134c3565b905095945050505050565b6000602082019050613a4a6000830184613520565b92915050565b60006020820190508181036000830152613a6a8184613568565b905092915050565b60006020820190508181036000830152613a8b816135d2565b9050919050565b60006020820190508181036000830152613aab816135f5565b9050919050565b60006020820190508181036000830152613acb81613618565b9050919050565b60006020820190508181036000830152613aeb8161363b565b9050919050565b60006020820190508181036000830152613b0b8161365e565b9050919050565b60006020820190508181036000830152613b2b81613681565b9050919050565b60006020820190508181036000830152613b4b816136a4565b9050919050565b60006020820190508181036000830152613b6b816136c7565b9050919050565b60006020820190508181036000830152613b8b816136ea565b9050919050565b60006020820190508181036000830152613bab8161370d565b9050919050565b60006020820190508181036000830152613bcb81613730565b9050919050565b60006020820190508181036000830152613beb81613753565b9050919050565b60006020820190508181036000830152613c0b81613776565b9050919050565b60006020820190508181036000830152613c2b81613799565b9050919050565b60006020820190508181036000830152613c4b816137bc565b9050919050565b60006020820190508181036000830152613c6b816137df565b9050919050565b60006020820190508181036000830152613c8b81613802565b9050919050565b60006020820190508181036000830152613cab81613825565b9050919050565b60006020820190508181036000830152613ccb81613848565b9050919050565b60006020820190508181036000830152613ceb8161386b565b9050919050565b60006020820190508181036000830152613d0b8161388e565b9050919050565b60006020820190508181036000830152613d2b816138b1565b9050919050565b60006020820190508181036000830152613d4b816138d4565b9050919050565b60006020820190508181036000830152613d6b816138f7565b9050919050565b60006020820190508181036000830152613d8b8161391a565b9050919050565b60006020820190508181036000830152613dab8161393d565b9050919050565b6000602082019050613dc76000830184613960565b92915050565b6000613dd7613de8565b9050613de382826140d3565b919050565b6000604051905090565b600067ffffffffffffffff821115613e0d57613e0c61423a565b5b613e1682614287565b9050602081019050919050565b600067ffffffffffffffff821115613e3e57613e3d61423a565b5b613e4782614287565b9050602081019050919050565b6000819050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ece6020840184612f34565b905092915050565b6000613ee182614055565b9150613eec83614055565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2157613f2061417e565b5b828201905092915050565b6000613f3782614055565b9150613f4283614055565b925082613f5257613f516141ad565b5b828204905092915050565b6000613f6882614055565b9150613f7383614055565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fac57613fab61417e565b5b828202905092915050565b6000613fc282614055565b9150613fcd83614055565b925082821015613fe057613fdf61417e565b5b828203905092915050565b6000613ff682614035565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561408c578082015181840152602081019050614071565b8381111561409b576000848401525b50505050565b600060028204905060018216806140b957607f821691505b602082108114156140cd576140cc6141dc565b5b50919050565b6140dc82614287565b810181811067ffffffffffffffff821117156140fb576140fa61423a565b5b80604052505050565b600061410f82614055565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141425761414161417e565b5b600182019050919050565b600061415882614055565b915061416383614055565b925082614173576141726141ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265736572766520657863656564656400000000000000000000000000000000600082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f426164206c656e67746800000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79205368617265686f6c64657200000000000000000000000000000000600082015250565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b61489381613feb565b811461489e57600080fd5b50565b6148aa81613ffd565b81146148b557600080fd5b50565b6148c181614009565b81146148cc57600080fd5b50565b6148d881614055565b81146148e357600080fd5b5056fea2646970667358221220645c02ddea7ca2aecda10047455522578a6be0c2a31b00bc9e5c9a616854b0a264736f6c63430008070033

Deployed Bytecode

0x60806040526004361061025c5760003560e01c806382c6ee9f11610144578063a22cb465116100b6578063e580b2b01161007a578063e580b2b014610859578063e985e9c514610884578063f1489ecd146108c1578063f2fde38b146108ea578063f74f9bfd14610913578063f968adbe1461093e5761025c565b8063a22cb4651461078a578063a43be57b146107b3578063b88d4fde146107ca578063c87b56dd146107f3578063d8fa3168146108305761025c565b806395d89b411161010857806395d89b41146106ad578063989bdbb6146106d85780639f5215dd146106ef578063a035b1fe1461071a578063a0712d6814610745578063a0bcfc7f146107615761025c565b806382c6ee9f146105ec57806388dc04e7146106035780638a49148b1461062c5780638da5cb5b14610657578063943d40e7146106825761025c565b80633e53afc3116101dd57806369d2ceb1116101a157806369d2ceb1146104ec5780636c0360eb1461051757806370a0823114610542578063715018a61461057f57806373b9904a146105965780637e4831d3146105c15761025c565b80633e53afc31461041957806342842e0e1461043057806344d19d2b1461045957806347f1eae3146104845780636352211e146104af5761025c565b8063095ea7b311610224578063095ea7b314610348578063125e0af01461037157806323b872dd1461039c5780633af32abf146103c55780633ccfd60b146104025761025c565b806301ffc9a71461026157806306f9991c1461029e57806306fdde03146102c957806307a18413146102f4578063081812fc1461030b575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061336a565b610969565b6040516102959190613a35565b60405180910390f35b3480156102aa57600080fd5b506102b3610a4b565b6040516102c09190613db2565b60405180910390f35b3480156102d557600080fd5b506102de610a51565b6040516102eb9190613a50565b60405180910390f35b34801561030057600080fd5b50610309610ae3565b005b34801561031757600080fd5b50610332600480360381019061032d919061340d565b610c63565b60405161033f9190613993565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190613228565b610ce8565b005b34801561037d57600080fd5b50610386610e00565b6040516103939190613a35565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613112565b610e13565b005b3480156103d157600080fd5b506103ec60048036038101906103e791906130a5565b610e73565b6040516103f99190613a35565b60405180910390f35b34801561040e57600080fd5b50610417610e93565b005b34801561042557600080fd5b5061042e61100b565b005b34801561043c57600080fd5b5061045760048036038101906104529190613112565b6110b3565b005b34801561046557600080fd5b5061046e6110d3565b60405161047b9190613db2565b60405180910390f35b34801561049057600080fd5b506104996110d9565b6040516104a69190613db2565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061340d565b6110df565b6040516104e39190613993565b60405180910390f35b3480156104f857600080fd5b50610501611191565b60405161050e9190613a35565b60405180910390f35b34801561052357600080fd5b5061052c6111a4565b6040516105399190613a50565b60405180910390f35b34801561054e57600080fd5b50610569600480360381019061056491906130a5565b611232565b6040516105769190613db2565b60405180910390f35b34801561058b57600080fd5b506105946112ea565b005b3480156105a257600080fd5b506105ab611372565b6040516105b89190613db2565b60405180910390f35b3480156105cd57600080fd5b506105d6611377565b6040516105e39190613a35565b60405180910390f35b3480156105f857600080fd5b5061060161138a565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061343a565b611423565b005b34801561063857600080fd5b506106416114b9565b60405161064e9190613db2565b60405180910390f35b34801561066357600080fd5b5061066c6114bf565b6040516106799190613993565b60405180910390f35b34801561068e57600080fd5b506106976114e9565b6040516106a49190613993565b60405180910390f35b3480156106b957600080fd5b506106c261150f565b6040516106cf9190613a50565b60405180910390f35b3480156106e457600080fd5b506106ed6115a1565b005b3480156106fb57600080fd5b5061070461165a565b6040516107119190613db2565b60405180910390f35b34801561072657600080fd5b5061072f611660565b60405161073c9190613db2565b60405180910390f35b61075f600480360381019061075a919061340d565b611666565b005b34801561076d57600080fd5b50610788600480360381019061078391906133c4565b611903565b005b34801561079657600080fd5b506107b160048036038101906107ac91906131e8565b6119b9565b005b3480156107bf57600080fd5b506107c86119cf565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613165565b611a68565b005b3480156107ff57600080fd5b5061081a6004803603810190610815919061340d565b611aca565b6040516108279190613a50565b60405180910390f35b34801561083c57600080fd5b50610857600480360381019061085291906132e9565b611b52565b005b34801561086557600080fd5b5061086e611d4a565b60405161087b9190613a35565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a691906130d2565b611d5d565b6040516108b89190613a35565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613268565b611df1565b005b3480156108f657600080fd5b50610911600480360381019061090c91906130a5565b611ff2565b005b34801561091f57600080fd5b506109286120ea565b6040516109359190613db2565b60405180910390f35b34801561094a57600080fd5b506109536120f0565b6040516109609190613db2565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a445750610a43826120f6565b5b9050919050565b600f5481565b606060008054610a60906140a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c906140a1565b8015610ad95780601f10610aae57610100808354040283529160200191610ad9565b820191906000526020600020905b815481529060010190602001808311610abc57829003601f168201915b5050505050905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613d32565b60405180910390fd5b600047905060006011546064601e60115460105486610b929190613ed6565b610b9c9190613ed6565b610ba69190613f5d565b610bb09190613f2c565b610bba9190613fb7565b905060008111610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690613a92565b60405180910390fd5b8060116000828254610c119190613ed6565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c5e573d6000803e3d6000fd5b505050565b6000610c6e82612160565b610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca490613c72565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cf3826110df565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90613d12565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d836121cc565b73ffffffffffffffffffffffffffffffffffffffff161480610db25750610db181610dac6121cc565b611d5d565b5b610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de890613bb2565b60405180910390fd5b610dfb83836121d4565b505050565b600b60019054906101000a900460ff1681565b610e24610e1e6121cc565b8261228d565b610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90613d72565b60405180910390fd5b610e6e83838361236b565b505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b610e9b6121cc565b73ffffffffffffffffffffffffffffffffffffffff16610eb96114bf565b73ffffffffffffffffffffffffffffffffffffffff1614610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613cb2565b60405180910390fd5b600047905060006010546064601e6064610f299190613fb7565b60115460105486610f3a9190613ed6565b610f449190613ed6565b610f4e9190613f5d565b610f589190613f2c565b610f629190613fb7565b905060008111610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90613a92565b60405180910390fd5b8060106000828254610fb99190613ed6565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611006573d6000803e3d6000fd5b505050565b6110136121cc565b73ffffffffffffffffffffffffffffffffffffffff166110316114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613cb2565b60405180910390fd5b600b60029054906101000a900460ff1615600b60026101000a81548160ff021916908315150217905550565b6110ce83838360405180602001604052806000815250611a68565b505050565b60095481565b60115481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90613bf2565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b600780546111b1906140a1565b80601f01602080910402602001604051908101604052809291908181526020018280546111dd906140a1565b801561122a5780601f106111ff5761010080835404028352916020019161122a565b820191906000526020600020905b81548152906001019060200180831161120d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90613bd2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f26121cc565b73ffffffffffffffffffffffffffffffffffffffff166113106114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613cb2565b60405180910390fd5b61137060006125c7565b565b601e81565b600b60029054906101000a900460ff1681565b6113926121cc565b73ffffffffffffffffffffffffffffffffffffffff166113b06114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613cb2565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b61142b6121cc565b73ffffffffffffffffffffffffffffffffffffffff166114496114bf565b73ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613cb2565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b60105481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461151e906140a1565b80601f016020809104026020016040519081016040528092919081815260200182805461154a906140a1565b80156115975780601f1061156c57610100808354040283529160200191611597565b820191906000526020600020905b81548152906001019060200180831161157a57829003601f168201915b5050505050905090565b6115a96121cc565b73ffffffffffffffffffffffffffffffffffffffff166115c76114bf565b73ffffffffffffffffffffffffffffffffffffffff161461161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613cb2565b60405180910390fd5b60001515600660149054906101000a900460ff1615151461163d57600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60085481565b600d5481565b600b60029054906101000a900460ff16156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613d52565b60405180910390fd5b60001515600b60019054906101000a900460ff1615151461170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613cf2565b60405180910390fd5b600d548161171a9190613f5d565b341461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613d92565b60405180910390fd5b8060095460085461176c9190613fb7565b10156117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490613b92565b60405180910390fd5b600b60009054906101000a900460ff1661189757600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613c32565b60405180910390fd5b600f54811115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188990613af2565b60405180910390fd5b6118dd565b600e548111156118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613af2565b60405180910390fd5b5b80600860008282546118ef9190613fb7565b92505081905550611900338261268d565b50565b61190b6121cc565b73ffffffffffffffffffffffffffffffffffffffff166119296114bf565b73ffffffffffffffffffffffffffffffffffffffff161461197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690613cb2565b60405180910390fd5b60001515600660149054906101000a900460ff1615151461199f57600080fd5b80600790805190602001906119b5929190612e0d565b5050565b6119cb6119c46121cc565b83836126d4565b5050565b6119d76121cc565b73ffffffffffffffffffffffffffffffffffffffff166119f56114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290613cb2565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b611a79611a736121cc565b8361228d565b611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613d72565b60405180910390fd5b611ac484848484612841565b50505050565b6060611ad582612160565b611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613c52565b60405180910390fd5b6000611b1e61289d565b905080611b2a8461292f565b604051602001611b3b92919061396f565b604051602081830303815290604052915050919050565b611b5a6121cc565b73ffffffffffffffffffffffffffffffffffffffff16611b786114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590613cb2565b60405180910390fd5b818190508484905014611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90613c92565b60405180910390fd5b60005b82829050811015611d4357828282818110611c3757611c3661420b565b5b905060200201356009541015611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613a72565b60405180910390fd5b611ccc858583818110611c9857611c9761420b565b5b9050602002016020810190611cad91906130a5565b848484818110611cc057611cbf61420b565b5b9050602002013561268d565b828282818110611cdf57611cde61420b565b5b9050602002013560096000828254611cf79190613fb7565b92505081905550828282818110611d1157611d1061420b565b5b9050602002013560086000828254611d299190613fb7565b925050819055508080611d3b90614104565b915050611c19565b5050505050565b600b60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611df96121cc565b73ffffffffffffffffffffffffffffffffffffffff16611e176114bf565b73ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490613cb2565b60405180910390fd5b60005b84849050811015611f0d576001600c6000878785818110611e9457611e9361420b565b5b9050602002016020810190611ea991906130a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f0590614104565b915050611e70565b5060005b82829050811015611fae576000600c6000858585818110611f3557611f3461420b565b5b9050602002016020810190611f4a91906130a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611fa690614104565b915050611f11565b507f9664270f0974d24d8c43232d9cd144776a2681af2d10368a8d1f694ce0d7044184848484604051611fe494939291906139fa565b60405180910390a150505050565b611ffa6121cc565b73ffffffffffffffffffffffffffffffffffffffff166120186114bf565b73ffffffffffffffffffffffffffffffffffffffff161461206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590613cb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613ad2565b60405180910390fd5b6120e7816125c7565b50565b600a5481565b600e5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612247836110df565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061229882612160565b6122d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ce90613b72565b60405180910390fd5b60006122e2836110df565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061235157508373ffffffffffffffffffffffffffffffffffffffff1661233984610c63565b73ffffffffffffffffffffffffffffffffffffffff16145b8061236257506123618185611d5d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661238b826110df565b73ffffffffffffffffffffffffffffffffffffffff16146123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890613cd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890613b32565b60405180910390fd5b61245c838383612a90565b6124676000826121d4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b79190613fb7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250e9190613ed6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156126cf576126a483600a54612a95565b600a60008154809291906126b790614104565b919050555080806126c790614104565b915050612690565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a90613b52565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128349190613a35565b60405180910390a3505050565b61284c84848461236b565b61285884848484612c63565b612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90613ab2565b60405180910390fd5b50505050565b6060600780546128ac906140a1565b80601f01602080910402602001604051908101604052809291908181526020018280546128d8906140a1565b80156129255780601f106128fa57610100808354040283529160200191612925565b820191906000526020600020905b81548152906001019060200180831161290857829003601f168201915b5050505050905090565b60606000821415612977576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a8b565b600082905060005b600082146129a957808061299290614104565b915050600a826129a29190613f2c565b915061297f565b60008167ffffffffffffffff8111156129c5576129c461423a565b5b6040519080825280601f01601f1916602001820160405280156129f75781602001600182028036833780820191505090505b5090505b60008514612a8457600182612a109190613fb7565b9150600a85612a1f919061414d565b6030612a2b9190613ed6565b60f81b818381518110612a4157612a4061420b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a7d9190613f2c565b94506129fb565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90613c12565b60405180910390fd5b612b0e81612160565b15612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4590613b12565b60405180910390fd5b612b5a60008383612a90565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612baa9190613ed6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612c848473ffffffffffffffffffffffffffffffffffffffff16612dfa565b15612ded578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cad6121cc565b8786866040518563ffffffff1660e01b8152600401612ccf94939291906139ae565b602060405180830381600087803b158015612ce957600080fd5b505af1925050508015612d1a57506040513d601f19601f82011682018060405250810190612d179190613397565b60015b612d9d573d8060008114612d4a576040519150601f19603f3d011682016040523d82523d6000602084013e612d4f565b606091505b50600081511415612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90613ab2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df2565b600190505b949350505050565b600080823b905060008111915050919050565b828054612e19906140a1565b90600052602060002090601f016020900481019282612e3b5760008555612e82565b82601f10612e5457805160ff1916838001178555612e82565b82800160010185558215612e82579182015b82811115612e81578251825591602001919060010190612e66565b5b509050612e8f9190612e93565b5090565b5b80821115612eac576000816000905550600101612e94565b5090565b6000612ec3612ebe84613df2565b613dcd565b905082815260208101848484011115612edf57612ede614278565b5b612eea84828561405f565b509392505050565b6000612f05612f0084613e23565b613dcd565b905082815260208101848484011115612f2157612f20614278565b5b612f2c84828561405f565b509392505050565b600081359050612f438161488a565b92915050565b60008083601f840112612f5f57612f5e61426e565b5b8235905067ffffffffffffffff811115612f7c57612f7b614269565b5b602083019150836020820283011115612f9857612f97614273565b5b9250929050565b60008083601f840112612fb557612fb461426e565b5b8235905067ffffffffffffffff811115612fd257612fd1614269565b5b602083019150836020820283011115612fee57612fed614273565b5b9250929050565b600081359050613004816148a1565b92915050565b600081359050613019816148b8565b92915050565b60008151905061302e816148b8565b92915050565b600082601f8301126130495761304861426e565b5b8135613059848260208601612eb0565b91505092915050565b600082601f8301126130775761307661426e565b5b8135613087848260208601612ef2565b91505092915050565b60008135905061309f816148cf565b92915050565b6000602082840312156130bb576130ba614282565b5b60006130c984828501612f34565b91505092915050565b600080604083850312156130e9576130e8614282565b5b60006130f785828601612f34565b925050602061310885828601612f34565b9150509250929050565b60008060006060848603121561312b5761312a614282565b5b600061313986828701612f34565b935050602061314a86828701612f34565b925050604061315b86828701613090565b9150509250925092565b6000806000806080858703121561317f5761317e614282565b5b600061318d87828801612f34565b945050602061319e87828801612f34565b93505060406131af87828801613090565b925050606085013567ffffffffffffffff8111156131d0576131cf61427d565b5b6131dc87828801613034565b91505092959194509250565b600080604083850312156131ff576131fe614282565b5b600061320d85828601612f34565b925050602061321e85828601612ff5565b9150509250929050565b6000806040838503121561323f5761323e614282565b5b600061324d85828601612f34565b925050602061325e85828601613090565b9150509250929050565b6000806000806040858703121561328257613281614282565b5b600085013567ffffffffffffffff8111156132a05761329f61427d565b5b6132ac87828801612f49565b9450945050602085013567ffffffffffffffff8111156132cf576132ce61427d565b5b6132db87828801612f49565b925092505092959194509250565b6000806000806040858703121561330357613302614282565b5b600085013567ffffffffffffffff8111156133215761332061427d565b5b61332d87828801612f49565b9450945050602085013567ffffffffffffffff8111156133505761334f61427d565b5b61335c87828801612f9f565b925092505092959194509250565b6000602082840312156133805761337f614282565b5b600061338e8482850161300a565b91505092915050565b6000602082840312156133ad576133ac614282565b5b60006133bb8482850161301f565b91505092915050565b6000602082840312156133da576133d9614282565b5b600082013567ffffffffffffffff8111156133f8576133f761427d565b5b61340484828501613062565b91505092915050565b60006020828403121561342357613422614282565b5b600061343184828501613090565b91505092915050565b60008060006060848603121561345357613452614282565b5b600061346186828701613090565b935050602061347286828701613090565b925050604061348386828701613090565b9150509250925092565b600061349983836134a5565b60208301905092915050565b6134ae81613feb565b82525050565b6134bd81613feb565b82525050565b60006134cf8385613e81565b93506134da82613e54565b8060005b85811015613513576134f08284613ebf565b6134fa888261348d565b975061350583613e74565b9250506001810190506134de565b5085925050509392505050565b61352981613ffd565b82525050565b600061353a82613e5e565b6135448185613e92565b935061355481856020860161406e565b61355d81614287565b840191505092915050565b600061357382613e69565b61357d8185613ea3565b935061358d81856020860161406e565b61359681614287565b840191505092915050565b60006135ac82613e69565b6135b68185613eb4565b93506135c681856020860161406e565b80840191505092915050565b60006135df601083613ea3565b91506135ea82614298565b602082019050919050565b6000613602601383613ea3565b915061360d826142c1565b602082019050919050565b6000613625603283613ea3565b9150613630826142ea565b604082019050919050565b6000613648602683613ea3565b915061365382614339565b604082019050919050565b600061366b600f83613ea3565b915061367682614388565b602082019050919050565b600061368e601c83613ea3565b9150613699826143b1565b602082019050919050565b60006136b1602483613ea3565b91506136bc826143da565b604082019050919050565b60006136d4601983613ea3565b91506136df82614429565b602082019050919050565b60006136f7602c83613ea3565b915061370282614452565b604082019050919050565b600061371a600f83613ea3565b9150613725826144a1565b602082019050919050565b600061373d603883613ea3565b9150613748826144ca565b604082019050919050565b6000613760602a83613ea3565b915061376b82614519565b604082019050919050565b6000613783602983613ea3565b915061378e82614568565b604082019050919050565b60006137a6602083613ea3565b91506137b1826145b7565b602082019050919050565b60006137c9601783613ea3565b91506137d4826145e0565b602082019050919050565b60006137ec603183613ea3565b91506137f782614609565b604082019050919050565b600061380f602c83613ea3565b915061381a82614658565b604082019050919050565b6000613832600a83613ea3565b915061383d826146a7565b602082019050919050565b6000613855602083613ea3565b9150613860826146d0565b602082019050919050565b6000613878602983613ea3565b9150613883826146f9565b604082019050919050565b600061389b600a83613ea3565b91506138a682614748565b602082019050919050565b60006138be602183613ea3565b91506138c982614771565b604082019050919050565b60006138e1601083613ea3565b91506138ec826147c0565b602082019050919050565b6000613904601b83613ea3565b915061390f826147e9565b602082019050919050565b6000613927603183613ea3565b915061393282614812565b604082019050919050565b600061394a601583613ea3565b915061395582614861565b602082019050919050565b61396981614055565b82525050565b600061397b82856135a1565b915061398782846135a1565b91508190509392505050565b60006020820190506139a860008301846134b4565b92915050565b60006080820190506139c360008301876134b4565b6139d060208301866134b4565b6139dd6040830185613960565b81810360608301526139ef818461352f565b905095945050505050565b60006040820190508181036000830152613a158186886134c3565b90508181036020830152613a2a8184866134c3565b905095945050505050565b6000602082019050613a4a6000830184613520565b92915050565b60006020820190508181036000830152613a6a8184613568565b905092915050565b60006020820190508181036000830152613a8b816135d2565b9050919050565b60006020820190508181036000830152613aab816135f5565b9050919050565b60006020820190508181036000830152613acb81613618565b9050919050565b60006020820190508181036000830152613aeb8161363b565b9050919050565b60006020820190508181036000830152613b0b8161365e565b9050919050565b60006020820190508181036000830152613b2b81613681565b9050919050565b60006020820190508181036000830152613b4b816136a4565b9050919050565b60006020820190508181036000830152613b6b816136c7565b9050919050565b60006020820190508181036000830152613b8b816136ea565b9050919050565b60006020820190508181036000830152613bab8161370d565b9050919050565b60006020820190508181036000830152613bcb81613730565b9050919050565b60006020820190508181036000830152613beb81613753565b9050919050565b60006020820190508181036000830152613c0b81613776565b9050919050565b60006020820190508181036000830152613c2b81613799565b9050919050565b60006020820190508181036000830152613c4b816137bc565b9050919050565b60006020820190508181036000830152613c6b816137df565b9050919050565b60006020820190508181036000830152613c8b81613802565b9050919050565b60006020820190508181036000830152613cab81613825565b9050919050565b60006020820190508181036000830152613ccb81613848565b9050919050565b60006020820190508181036000830152613ceb8161386b565b9050919050565b60006020820190508181036000830152613d0b8161388e565b9050919050565b60006020820190508181036000830152613d2b816138b1565b9050919050565b60006020820190508181036000830152613d4b816138d4565b9050919050565b60006020820190508181036000830152613d6b816138f7565b9050919050565b60006020820190508181036000830152613d8b8161391a565b9050919050565b60006020820190508181036000830152613dab8161393d565b9050919050565b6000602082019050613dc76000830184613960565b92915050565b6000613dd7613de8565b9050613de382826140d3565b919050565b6000604051905090565b600067ffffffffffffffff821115613e0d57613e0c61423a565b5b613e1682614287565b9050602081019050919050565b600067ffffffffffffffff821115613e3e57613e3d61423a565b5b613e4782614287565b9050602081019050919050565b6000819050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ece6020840184612f34565b905092915050565b6000613ee182614055565b9150613eec83614055565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2157613f2061417e565b5b828201905092915050565b6000613f3782614055565b9150613f4283614055565b925082613f5257613f516141ad565b5b828204905092915050565b6000613f6882614055565b9150613f7383614055565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fac57613fab61417e565b5b828202905092915050565b6000613fc282614055565b9150613fcd83614055565b925082821015613fe057613fdf61417e565b5b828203905092915050565b6000613ff682614035565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561408c578082015181840152602081019050614071565b8381111561409b576000848401525b50505050565b600060028204905060018216806140b957607f821691505b602082108114156140cd576140cc6141dc565b5b50919050565b6140dc82614287565b810181811067ffffffffffffffff821117156140fb576140fa61423a565b5b80604052505050565b600061410f82614055565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141425761414161417e565b5b600182019050919050565b600061415882614055565b915061416383614055565b925082614173576141726141ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265736572766520657863656564656400000000000000000000000000000000600082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f426164206c656e67746800000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79205368617265686f6c64657200000000000000000000000000000000600082015250565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b61489381613feb565b811461489e57600080fd5b50565b6148aa81613ffd565b81146148b557600080fd5b50565b6148c181614009565b81146148cc57600080fd5b50565b6148d881614055565b81146148e357600080fd5b5056fea2646970667358221220645c02ddea7ca2aecda10047455522578a6be0c2a31b00bc9e5c9a616854b0a264736f6c63430008070033

Deployed Bytecode Sourcemap

113:6639:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1490:300:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;818:34:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2408:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6241:508:4;;;;;;;;;;;;;:::i;:::-;;3919:217:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3457:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;488:35:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4646:330:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;594:45:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5714:429;;;;;;;;;;;;;:::i;:::-;;2968:92;;;;;;;;;;;;;:::i;:::-;;5042:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;382:29:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;932:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2111:235:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;247:34:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;288:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1849:205:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:10;;;;;;;;;;;;;:::i;:::-;;1016:51:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;530:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2655:86;;;;;;;;;;;;;:::i;:::-;;3709:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;894:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;976:33:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2570:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1985:126:4;;;;;;;;;;;;;:::i;:::-;;349:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;727:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4895:727;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1762:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4203:153:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2820:79:4;;;;;;;;;;;;;:::i;:::-;;5287:320:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2186:305:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4351:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;449:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4422:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3183:435:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;418:24:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;784:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1490:300:3;1592:4;1642:25;1627:40;;;:11;:40;;;;:104;;;;1698:33;1683:48;;;:11;:48;;;;1627:104;:156;;;;1747:36;1771:11;1747:23;:36::i;:::-;1627:156;1608:175;;1490:300;;;:::o;818:34:4:-;;;;:::o;2408:98:3:-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;6241:508:4:-;6314:18;;;;;;;;;;;6300:32;;:10;:32;;;6292:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6366:15;6384:21;6366:39;;6416:27;6535:22;;6528:3;1065:2;6477:22;;6458:16;;6448:7;:26;;;;:::i;:::-;:51;;;;:::i;:::-;6447:78;;;;:::i;:::-;:84;;;;:::i;:::-;6446:111;;;;:::i;:::-;6416:141;;6598:1;6576:19;:23;6568:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;6660:19;6634:22;;:45;;;;;;;:::i;:::-;;;;;;;;6700:10;6692:28;;:49;6721:19;6692:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6281:468;;6241:508::o;3919:217:3:-;3995:7;4022:16;4030:7;4022;:16::i;:::-;4014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:15;:24;4121:7;4105:24;;;;;;;;;;;;;;;;;;;;;4098:31;;3919:217;;;:::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;3594:11;;:2;:11;;;;3586:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:5;3675:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3700:37;3717:5;3724:12;:10;:12::i;:::-;3700:16;:37::i;:::-;3675:62;3654:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;488:35:4:-;;;;;;;;;;;;;:::o;4646:330:3:-;4835:41;4854:12;:10;:12::i;:::-;4868:7;4835:18;:41::i;:::-;4827:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;:::-;4646:330;;;:::o;594:45:4:-;;;;;;;;;;;;;;;;;;;;;;:::o;5714:429::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5764:15:4::1;5782:21;5764:39;;5814:27;5941:16;;5934:3;1065:2;5902:3;:28;;;;:::i;:::-;5875:22;;5856:16;;5846:7;:26;;;;:::i;:::-;:51;;;;:::i;:::-;5845:86;;;;:::i;:::-;:92;;;;:::i;:::-;5844:113;;;;:::i;:::-;5814:143;;5998:1;5976:19;:23;5968:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;6054:19;6034:16;;:39;;;;;;;:::i;:::-;;;;;;;;6094:10;6086:28;;:49;6115:19;6086:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;5753:390;;5714:429::o:0;2968:92::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3042:10:4::1;;;;;;;;;;;3041:11;3028:10;;:24;;;;;;;;;;;;;;;;;;2968:92::o:0;5042:179:3:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;:::-;5042:179;;;:::o;382:29:4:-;;;;:::o;932:37::-;;;;:::o;2111:235:3:-;2183:7;2202:13;2218:7;:16;2226:7;2218:16;;;;;;;;;;;;;;;;;;;;;2202:32;;2269:1;2252:19;;:5;:19;;;;2244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2334:5;2327:12;;;2111:235;;;:::o;247:34:4:-;;;;;;;;;;;;;:::o;288:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1849:205:3:-;1921:7;1965:1;1948:19;;:5;:19;;;;1940:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2031:9;:16;2041:5;2031:16;;;;;;;;;;;;;;;;2024:23;;1849:205;;;:::o;1661:101:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1016:51:4:-;1065:2;1016:51;:::o;530:29::-;;;;;;;;;;;;;:::o;2655:86::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2729:4:4::1;2711:15;;:22;;;;;;;;;;;;;;;;;;2655:86::o:0;3709:213::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3832:6:4::1;3824:5;:14;;;;3860:9;3849:8;:20;;;;3898:16;3880:15;:34;;;;3709:213:::0;;;:::o;894:31::-;;;;:::o;1029:85:10:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;976:33:4:-;;;;;;;;;;;;;:::o;2570:102:3:-;2626:13;2658:7;2651:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:102;:::o;1985:126:4:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2065:5:4::1;2047:23;;:14;;;;;;;;;;;:23;;;2039:32;;;::::0;::::1;;2099:4;2082:14;;:21;;;;;;;;;;;;;;;;;;1985:126::o:0;349:26::-;;;;:::o;727:33::-;;;;:::o;4895:727::-;4958:10;;;;;;;;;;;4957:11;4949:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;5038:5;5019:24;;:15;;;;;;;;;;;:24;;;5011:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;5100:5;;5092;:13;;;;:::i;:::-;5079:9;:26;5071:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5182:5;5164:14;;5150:11;;:28;;;;:::i;:::-;:37;;5142:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;5225:12;;;;;;;;;;;5220:320;;5293:13;:25;5307:10;5293:25;;;;;;;;;;;;;;;;;;;;;;;;;5285:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;5378:15;;5369:5;:24;;5361:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;5220:320;;;5500:8;;5491:5;:17;;5483:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;5220:320;5567:5;5552:11;;:20;;;;;;;:::i;:::-;;;;;;;;5583:31;5596:10;5608:5;5583:12;:31::i;:::-;4895:727;:::o;1762:135::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1858:5:4::1;1840:23;;:14;;;;;;;;;;;:23;;;1832:32;;;::::0;::::1;;1885:4;1875:7;:14;;;;;;;;;;;;:::i;:::-;;1762:135:::0;:::o;4203:153:3:-;4297:52;4316:12;:10;:12::i;:::-;4330:8;4340;4297:18;:52::i;:::-;4203:153;;:::o;2820:79:4:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2887:4:4::1;2872:12;;:19;;;;;;;;;;;;;;;;;;2820:79::o:0;5287:320:3:-;5456:41;5475:12;:10;:12::i;:::-;5489:7;5456:18;:41::i;:::-;5448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;2186:305:4:-;2259:13;2293:16;2301:7;2293;:16::i;:::-;2285:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2384:18;2405:10;:8;:10::i;:::-;2384:31;;2457:4;2463:18;:7;:16;:18::i;:::-;2440:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2426:57;;;2186:305;;;:::o;4351:456::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4479:6:4::1;;:13;;4462:6;;:13;;:30;4454:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4534:9;4529:271;4553:6;;:13;;4549:1;:17;4529:271;;;4614:6;;4621:1;4614:9;;;;;;;:::i;:::-;;;;;;;;4596:14;;:27;;4588:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4673:34;4686:6;;4693:1;4686:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4697:6;;4704:1;4697:9;;;;;;;:::i;:::-;;;;;;;;4673:12;:34::i;:::-;4740:6;;4747:1;4740:9;;;;;;;:::i;:::-;;;;;;;;4722:14;;:27;;;;;;;:::i;:::-;;;;;;;;4779:6;;4786:1;4779:9;;;;;;;:::i;:::-;;;;;;;;4764:11;;:24;;;;;;;:::i;:::-;;;;;;;;4568:3;;;;;:::i;:::-;;;;4529:271;;;;4351:456:::0;;;;:::o;449:32::-;;;;;;;;;;;;;:::o;4422:162:3:-;4519:4;4542:18;:25;4561:5;4542:25;;;;;;;;;;;;;;;:35;4568:8;4542:35;;;;;;;;;;;;;;;;;;;;;;;;;4535:42;;4422:162;;;;:::o;3183:435:4:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3310:9:4::1;3305:114;3329:12;;:19;;3325:1;:23;3305:114;;;3403:4;3370:13;:30;3384:12;;3397:1;3384:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3370:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;3350:3;;;;;:::i;:::-;;;;3305:114;;;;3434:9;3429:121;3453:15;;:22;;3449:1;:26;3429:121;;;3533:5;3497:13;:33;3511:15;;3527:1;3511:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3497:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;3477:3;;;;;:::i;:::-;;;;3429:121;;;;3567:43;3580:12;;3594:15;;3567:43;;;;;;;;;:::i;:::-;;;;;;;;3183:435:::0;;;;:::o;1911:198:10:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;418:24:4:-;;;;:::o;784:27::-;;;;:::o;829:155:2:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7079:125:3:-;7144:4;7195:1;7167:30;;:7;:16;7175:7;7167:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7160:37;;7079:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;10930:171:3:-;11031:2;11004:15;:24;11020:7;11004:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11086:7;11082:2;11048:46;;11057:23;11072:7;11057:14;:23::i;:::-;11048:46;;;;;;;;;;;;10930:171;;:::o;7362:344::-;7455:4;7479:16;7487:7;7479;:16::i;:::-;7471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;7611:16;;:7;:16;;;:51;;;;7655:7;7631:31;;:20;7643:7;7631:11;:20::i;:::-;:31;;;7611:51;:87;;;;7666:32;7683:5;7690:7;7666:16;:32::i;:::-;7611:87;7603:96;;;7362:344;;;;:::o;10259:560::-;10413:4;10386:31;;:23;10401:7;10386:14;:23::i;:::-;:31;;;10378:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10495:1;10481:16;;:2;:16;;;;10473:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;10709:1;10690:9;:15;10700:4;10690:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10737:1;10720:9;:13;10730:2;10720:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10767:2;10748:7;:16;10756:7;10748:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10804:7;10800:2;10785:27;;10794:4;10785:27;;;;;;;;;;;;10259:560;;;:::o;2263:187:10:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;4080:185:4:-;4154:9;4149:109;4173:5;4169:1;:9;4149:109;;;4200:20;4206:2;4210:9;;4200:5;:20::i;:::-;4235:9;;:11;;;;;;;;;:::i;:::-;;;;;;4180:3;;;;;:::i;:::-;;;;4149:109;;;;4080:185;;:::o;11236:307:3:-;11386:8;11377:17;;:5;:17;;;;11369:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11472:8;11434:18;:25;11453:5;11434:25;;;;;;;;;;;;;;;:35;11460:8;11434:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11517:8;11495:41;;11510:5;11495:41;;;11527:8;11495:41;;;;;;:::i;:::-;;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:307;;;;:::o;1577:100:4:-;1629:13;1662:7;1655:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1577:100;:::o;328:703:11:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;13430:122:3:-;;;;:::o;8998:372::-;9091:1;9077:16;;:2;:16;;;;9069:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9149:16;9157:7;9149;:16::i;:::-;9148:17;9140:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;9282:1;9265:9;:13;9275:2;9265:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9312:2;9293:7;:16;9301:7;9293:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9355:7;9351:2;9330:33;;9347:1;9330:33;;;;;;;;;;;;8998:372;;:::o;12096:778::-;12246:4;12266:15;:2;:13;;;:15::i;:::-;12262:606;;;12317:2;12301:36;;;12338:12;:10;:12::i;:::-;12352:4;12358:7;12367:5;12301:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12557:1;12540:6;:13;:18;12536:266;;;12582:60;;;;;;;;;;:::i;:::-;;;;;;;;12536:266;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12433:41;;;12423:51;;;:6;:51;;;;12416:58;;;;;12262:606;12853:4;12846:11;;12096:778;;;;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:12:-;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;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:329::-;3518:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:119;;;3573:79;;:::i;:::-;3535:119;3693:1;3718:53;3763:7;3754:6;3743:9;3739:22;3718:53;:::i;:::-;3708:63;;3664:117;3459:329;;;;:::o;3794:474::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:53;4243:7;4234:6;4223:9;4219:22;4198:53;:::i;:::-;4188:63;;4143:118;3794:474;;;;;:::o;4274:619::-;4351:6;4359;4367;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4797:2;4823:53;4868:7;4859:6;4848:9;4844:22;4823:53;:::i;:::-;4813:63;;4768:118;4274:619;;;;;:::o;4899:943::-;4994:6;5002;5010;5018;5067:3;5055:9;5046:7;5042:23;5038:33;5035:120;;;5074:79;;:::i;:::-;5035:120;5194:1;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5165:117;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5449:2;5475:53;5520:7;5511:6;5500:9;5496:22;5475:53;:::i;:::-;5465:63;;5420:118;5605:2;5594:9;5590:18;5577:32;5636:18;5628:6;5625:30;5622:117;;;5658:79;;:::i;:::-;5622:117;5763:62;5817:7;5808:6;5797:9;5793:22;5763:62;:::i;:::-;5753:72;;5548:287;4899:943;;;;;;;:::o;5848:468::-;5913:6;5921;5970:2;5958:9;5949:7;5945:23;5941:32;5938:119;;;5976:79;;:::i;:::-;5938:119;6096:1;6121:53;6166:7;6157:6;6146:9;6142:22;6121:53;:::i;:::-;6111:63;;6067:117;6223:2;6249:50;6291:7;6282:6;6271:9;6267:22;6249:50;:::i;:::-;6239:60;;6194:115;5848:468;;;;;:::o;6322:474::-;6390:6;6398;6447:2;6435:9;6426:7;6422:23;6418:32;6415:119;;;6453:79;;:::i;:::-;6415:119;6573:1;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6544:117;6700:2;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6671:118;6322:474;;;;;:::o;6802:934::-;6924:6;6932;6940;6948;6997:2;6985:9;6976:7;6972:23;6968:32;6965:119;;;7003:79;;:::i;:::-;6965:119;7151:1;7140:9;7136:17;7123:31;7181:18;7173:6;7170:30;7167:117;;;7203:79;;:::i;:::-;7167:117;7316:80;7388:7;7379:6;7368:9;7364:22;7316:80;:::i;:::-;7298:98;;;;7094:312;7473:2;7462:9;7458:18;7445:32;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7639:80;7711:7;7702:6;7691:9;7687:22;7639:80;:::i;:::-;7621:98;;;;7416:313;6802:934;;;;;;;:::o;7742:::-;7864:6;7872;7880;7888;7937:2;7925:9;7916:7;7912:23;7908:32;7905:119;;;7943:79;;:::i;:::-;7905:119;8091:1;8080:9;8076:17;8063:31;8121:18;8113:6;8110:30;8107:117;;;8143:79;;:::i;:::-;8107:117;8256:80;8328:7;8319:6;8308:9;8304:22;8256:80;:::i;:::-;8238:98;;;;8034:312;8413:2;8402:9;8398:18;8385:32;8444:18;8436:6;8433:30;8430:117;;;8466:79;;:::i;:::-;8430:117;8579:80;8651:7;8642:6;8631:9;8627:22;8579:80;:::i;:::-;8561:98;;;;8356:313;7742:934;;;;;;;:::o;8682:327::-;8740:6;8789:2;8777:9;8768:7;8764:23;8760:32;8757:119;;;8795:79;;:::i;:::-;8757:119;8915:1;8940:52;8984:7;8975:6;8964:9;8960:22;8940:52;:::i;:::-;8930:62;;8886:116;8682:327;;;;:::o;9015:349::-;9084:6;9133:2;9121:9;9112:7;9108:23;9104:32;9101:119;;;9139:79;;:::i;:::-;9101:119;9259:1;9284:63;9339:7;9330:6;9319:9;9315:22;9284:63;:::i;:::-;9274:73;;9230:127;9015:349;;;;:::o;9370:509::-;9439:6;9488:2;9476:9;9467:7;9463:23;9459:32;9456:119;;;9494:79;;:::i;:::-;9456:119;9642:1;9631:9;9627:17;9614:31;9672:18;9664:6;9661:30;9658:117;;;9694:79;;:::i;:::-;9658:117;9799:63;9854:7;9845:6;9834:9;9830:22;9799:63;:::i;:::-;9789:73;;9585:287;9370:509;;;;:::o;9885:329::-;9944:6;9993:2;9981:9;9972:7;9968:23;9964:32;9961:119;;;9999:79;;:::i;:::-;9961:119;10119:1;10144:53;10189:7;10180:6;10169:9;10165:22;10144:53;:::i;:::-;10134:63;;10090:117;9885:329;;;;:::o;10220:619::-;10297:6;10305;10313;10362:2;10350:9;10341:7;10337:23;10333:32;10330:119;;;10368:79;;:::i;:::-;10330:119;10488:1;10513:53;10558:7;10549:6;10538:9;10534:22;10513:53;:::i;:::-;10503:63;;10459:117;10615:2;10641:53;10686:7;10677:6;10666:9;10662:22;10641:53;:::i;:::-;10631:63;;10586:118;10743:2;10769:53;10814:7;10805:6;10794:9;10790:22;10769:53;:::i;:::-;10759:63;;10714:118;10220:619;;;;;:::o;10845:179::-;10914:10;10935:46;10977:3;10969:6;10935:46;:::i;:::-;11013:4;11008:3;11004:14;10990:28;;10845:179;;;;:::o;11030:108::-;11107:24;11125:5;11107:24;:::i;:::-;11102:3;11095:37;11030:108;;:::o;11144:118::-;11231:24;11249:5;11231:24;:::i;:::-;11226:3;11219:37;11144:118;;:::o;11298:699::-;11427:3;11450:86;11529:6;11524:3;11450:86;:::i;:::-;11443:93;;11560:58;11612:5;11560:58;:::i;:::-;11641:7;11672:1;11657:315;11682:6;11679:1;11676:13;11657:315;;;11752:42;11787:6;11778:7;11752:42;:::i;:::-;11814:63;11873:3;11858:13;11814:63;:::i;:::-;11807:70;;11900:62;11955:6;11900:62;:::i;:::-;11890:72;;11717:255;11704:1;11701;11697:9;11692:14;;11657:315;;;11661:14;11988:3;11981:10;;11432:565;;11298:699;;;;;:::o;12003:109::-;12084:21;12099:5;12084:21;:::i;:::-;12079:3;12072:34;12003:109;;:::o;12118:360::-;12204:3;12232:38;12264:5;12232:38;:::i;:::-;12286:70;12349:6;12344:3;12286:70;:::i;:::-;12279:77;;12365:52;12410:6;12405:3;12398:4;12391:5;12387:16;12365:52;:::i;:::-;12442:29;12464:6;12442:29;:::i;:::-;12437:3;12433:39;12426:46;;12208:270;12118:360;;;;:::o;12484:364::-;12572:3;12600:39;12633:5;12600:39;:::i;:::-;12655:71;12719:6;12714:3;12655:71;:::i;:::-;12648:78;;12735:52;12780:6;12775:3;12768:4;12761:5;12757:16;12735:52;:::i;:::-;12812:29;12834:6;12812:29;:::i;:::-;12807:3;12803:39;12796:46;;12576:272;12484:364;;;;:::o;12854:377::-;12960:3;12988:39;13021:5;12988:39;:::i;:::-;13043:89;13125:6;13120:3;13043:89;:::i;:::-;13036:96;;13141:52;13186:6;13181:3;13174:4;13167:5;13163:16;13141:52;:::i;:::-;13218:6;13213:3;13209:16;13202:23;;12964:267;12854:377;;;;:::o;13237:366::-;13379:3;13400:67;13464:2;13459:3;13400:67;:::i;:::-;13393:74;;13476:93;13565:3;13476:93;:::i;:::-;13594:2;13589:3;13585:12;13578:19;;13237:366;;;:::o;13609:::-;13751:3;13772:67;13836:2;13831:3;13772:67;:::i;:::-;13765:74;;13848:93;13937:3;13848:93;:::i;:::-;13966:2;13961:3;13957:12;13950:19;;13609:366;;;:::o;13981:::-;14123:3;14144:67;14208:2;14203:3;14144:67;:::i;:::-;14137:74;;14220:93;14309:3;14220:93;:::i;:::-;14338:2;14333:3;14329:12;14322:19;;13981:366;;;:::o;14353:::-;14495:3;14516:67;14580:2;14575:3;14516:67;:::i;:::-;14509:74;;14592:93;14681:3;14592:93;:::i;:::-;14710:2;14705:3;14701:12;14694:19;;14353:366;;;:::o;14725:::-;14867:3;14888:67;14952:2;14947:3;14888:67;:::i;:::-;14881:74;;14964:93;15053:3;14964:93;:::i;:::-;15082:2;15077:3;15073:12;15066:19;;14725:366;;;:::o;15097:::-;15239:3;15260:67;15324:2;15319:3;15260:67;:::i;:::-;15253:74;;15336:93;15425:3;15336:93;:::i;:::-;15454:2;15449:3;15445:12;15438:19;;15097:366;;;:::o;15469:::-;15611:3;15632:67;15696:2;15691:3;15632:67;:::i;:::-;15625:74;;15708:93;15797:3;15708:93;:::i;:::-;15826:2;15821:3;15817:12;15810:19;;15469:366;;;:::o;15841:::-;15983:3;16004:67;16068:2;16063:3;16004:67;:::i;:::-;15997:74;;16080:93;16169:3;16080:93;:::i;:::-;16198:2;16193:3;16189:12;16182:19;;15841:366;;;:::o;16213:::-;16355:3;16376:67;16440:2;16435:3;16376:67;:::i;:::-;16369:74;;16452:93;16541:3;16452:93;:::i;:::-;16570:2;16565:3;16561:12;16554:19;;16213:366;;;:::o;16585:::-;16727:3;16748:67;16812:2;16807:3;16748:67;:::i;:::-;16741:74;;16824:93;16913:3;16824:93;:::i;:::-;16942:2;16937:3;16933:12;16926:19;;16585:366;;;:::o;16957:::-;17099:3;17120:67;17184:2;17179:3;17120:67;:::i;:::-;17113:74;;17196:93;17285:3;17196:93;:::i;:::-;17314:2;17309:3;17305:12;17298:19;;16957:366;;;:::o;17329:::-;17471:3;17492:67;17556:2;17551:3;17492:67;:::i;:::-;17485:74;;17568:93;17657:3;17568:93;:::i;:::-;17686:2;17681:3;17677:12;17670:19;;17329:366;;;:::o;17701:::-;17843:3;17864:67;17928:2;17923:3;17864:67;:::i;:::-;17857:74;;17940:93;18029:3;17940:93;:::i;:::-;18058:2;18053:3;18049:12;18042:19;;17701:366;;;:::o;18073:::-;18215:3;18236:67;18300:2;18295:3;18236:67;:::i;:::-;18229:74;;18312:93;18401:3;18312:93;:::i;:::-;18430:2;18425:3;18421:12;18414:19;;18073:366;;;:::o;18445:::-;18587:3;18608:67;18672:2;18667:3;18608:67;:::i;:::-;18601:74;;18684:93;18773:3;18684:93;:::i;:::-;18802:2;18797:3;18793:12;18786:19;;18445:366;;;:::o;18817:::-;18959:3;18980:67;19044:2;19039:3;18980:67;:::i;:::-;18973:74;;19056:93;19145:3;19056:93;:::i;:::-;19174:2;19169:3;19165:12;19158:19;;18817:366;;;:::o;19189:::-;19331:3;19352:67;19416:2;19411:3;19352:67;:::i;:::-;19345:74;;19428:93;19517:3;19428:93;:::i;:::-;19546:2;19541:3;19537:12;19530:19;;19189:366;;;:::o;19561:::-;19703:3;19724:67;19788:2;19783:3;19724:67;:::i;:::-;19717:74;;19800:93;19889:3;19800:93;:::i;:::-;19918:2;19913:3;19909:12;19902:19;;19561:366;;;:::o;19933:::-;20075:3;20096:67;20160:2;20155:3;20096:67;:::i;:::-;20089:74;;20172:93;20261:3;20172:93;:::i;:::-;20290:2;20285:3;20281:12;20274:19;;19933:366;;;:::o;20305:::-;20447:3;20468:67;20532:2;20527:3;20468:67;:::i;:::-;20461:74;;20544:93;20633:3;20544:93;:::i;:::-;20662:2;20657:3;20653:12;20646:19;;20305:366;;;:::o;20677:::-;20819:3;20840:67;20904:2;20899:3;20840:67;:::i;:::-;20833:74;;20916:93;21005:3;20916:93;:::i;:::-;21034:2;21029:3;21025:12;21018:19;;20677:366;;;:::o;21049:::-;21191:3;21212:67;21276:2;21271:3;21212:67;:::i;:::-;21205:74;;21288:93;21377:3;21288:93;:::i;:::-;21406:2;21401:3;21397:12;21390:19;;21049:366;;;:::o;21421:::-;21563:3;21584:67;21648:2;21643:3;21584:67;:::i;:::-;21577:74;;21660:93;21749:3;21660:93;:::i;:::-;21778:2;21773:3;21769:12;21762:19;;21421:366;;;:::o;21793:::-;21935:3;21956:67;22020:2;22015:3;21956:67;:::i;:::-;21949:74;;22032:93;22121:3;22032:93;:::i;:::-;22150:2;22145:3;22141:12;22134:19;;21793:366;;;:::o;22165:::-;22307:3;22328:67;22392:2;22387:3;22328:67;:::i;:::-;22321:74;;22404:93;22493:3;22404:93;:::i;:::-;22522:2;22517:3;22513:12;22506:19;;22165:366;;;:::o;22537:::-;22679:3;22700:67;22764:2;22759:3;22700:67;:::i;:::-;22693:74;;22776:93;22865:3;22776:93;:::i;:::-;22894:2;22889:3;22885:12;22878:19;;22537:366;;;:::o;22909:118::-;22996:24;23014:5;22996:24;:::i;:::-;22991:3;22984:37;22909:118;;:::o;23033:435::-;23213:3;23235:95;23326:3;23317:6;23235:95;:::i;:::-;23228:102;;23347:95;23438:3;23429:6;23347:95;:::i;:::-;23340:102;;23459:3;23452:10;;23033:435;;;;;:::o;23474:222::-;23567:4;23605:2;23594:9;23590:18;23582:26;;23618:71;23686:1;23675:9;23671:17;23662:6;23618:71;:::i;:::-;23474:222;;;;:::o;23702:640::-;23897:4;23935:3;23924:9;23920:19;23912:27;;23949:71;24017:1;24006:9;24002:17;23993:6;23949:71;:::i;:::-;24030:72;24098:2;24087:9;24083:18;24074:6;24030:72;:::i;:::-;24112;24180:2;24169:9;24165:18;24156:6;24112:72;:::i;:::-;24231:9;24225:4;24221:20;24216:2;24205:9;24201:18;24194:48;24259:76;24330:4;24321:6;24259:76;:::i;:::-;24251:84;;23702:640;;;;;;;:::o;24348:674::-;24589:4;24627:2;24616:9;24612:18;24604:26;;24676:9;24670:4;24666:20;24662:1;24651:9;24647:17;24640:47;24704:118;24817:4;24808:6;24800;24704:118;:::i;:::-;24696:126;;24869:9;24863:4;24859:20;24854:2;24843:9;24839:18;24832:48;24897:118;25010:4;25001:6;24993;24897:118;:::i;:::-;24889:126;;24348:674;;;;;;;:::o;25028:210::-;25115:4;25153:2;25142:9;25138:18;25130:26;;25166:65;25228:1;25217:9;25213:17;25204:6;25166:65;:::i;:::-;25028:210;;;;:::o;25244:313::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:78;25545:4;25536:6;25472:78;:::i;:::-;25464:86;;25244:313;;;;:::o;25563:419::-;25729:4;25767:2;25756:9;25752:18;25744:26;;25816:9;25810:4;25806:20;25802:1;25791:9;25787:17;25780:47;25844:131;25970:4;25844:131;:::i;:::-;25836:139;;25563:419;;;:::o;25988:::-;26154:4;26192:2;26181:9;26177:18;26169:26;;26241:9;26235:4;26231:20;26227:1;26216:9;26212:17;26205:47;26269:131;26395:4;26269:131;:::i;:::-;26261:139;;25988:419;;;:::o;26413:::-;26579:4;26617:2;26606:9;26602:18;26594:26;;26666:9;26660:4;26656:20;26652:1;26641:9;26637:17;26630:47;26694:131;26820:4;26694:131;:::i;:::-;26686:139;;26413:419;;;:::o;26838:::-;27004:4;27042:2;27031:9;27027:18;27019:26;;27091:9;27085:4;27081:20;27077:1;27066:9;27062:17;27055:47;27119:131;27245:4;27119:131;:::i;:::-;27111:139;;26838:419;;;:::o;27263:::-;27429:4;27467:2;27456:9;27452:18;27444:26;;27516:9;27510:4;27506:20;27502:1;27491:9;27487:17;27480:47;27544:131;27670:4;27544:131;:::i;:::-;27536:139;;27263:419;;;:::o;27688:::-;27854:4;27892:2;27881:9;27877:18;27869:26;;27941:9;27935:4;27931:20;27927:1;27916:9;27912:17;27905:47;27969:131;28095:4;27969:131;:::i;:::-;27961:139;;27688:419;;;:::o;28113:::-;28279:4;28317:2;28306:9;28302:18;28294:26;;28366:9;28360:4;28356:20;28352:1;28341:9;28337:17;28330:47;28394:131;28520:4;28394:131;:::i;:::-;28386:139;;28113:419;;;:::o;28538:::-;28704:4;28742:2;28731:9;28727:18;28719:26;;28791:9;28785:4;28781:20;28777:1;28766:9;28762:17;28755:47;28819:131;28945:4;28819:131;:::i;:::-;28811:139;;28538:419;;;:::o;28963:::-;29129:4;29167:2;29156:9;29152:18;29144:26;;29216:9;29210:4;29206:20;29202:1;29191:9;29187:17;29180:47;29244:131;29370:4;29244:131;:::i;:::-;29236:139;;28963:419;;;:::o;29388:::-;29554:4;29592:2;29581:9;29577:18;29569:26;;29641:9;29635:4;29631:20;29627:1;29616:9;29612:17;29605:47;29669:131;29795:4;29669:131;:::i;:::-;29661:139;;29388:419;;;:::o;29813:::-;29979:4;30017:2;30006:9;30002:18;29994:26;;30066:9;30060:4;30056:20;30052:1;30041:9;30037:17;30030:47;30094:131;30220:4;30094:131;:::i;:::-;30086:139;;29813:419;;;:::o;30238:::-;30404:4;30442:2;30431:9;30427:18;30419:26;;30491:9;30485:4;30481:20;30477:1;30466:9;30462:17;30455:47;30519:131;30645:4;30519:131;:::i;:::-;30511:139;;30238:419;;;:::o;30663:::-;30829:4;30867:2;30856:9;30852:18;30844:26;;30916:9;30910:4;30906:20;30902:1;30891:9;30887:17;30880:47;30944:131;31070:4;30944:131;:::i;:::-;30936:139;;30663:419;;;:::o;31088:::-;31254:4;31292:2;31281:9;31277:18;31269:26;;31341:9;31335:4;31331:20;31327:1;31316:9;31312:17;31305:47;31369:131;31495:4;31369:131;:::i;:::-;31361:139;;31088:419;;;:::o;31513:::-;31679:4;31717:2;31706:9;31702:18;31694:26;;31766:9;31760:4;31756:20;31752:1;31741:9;31737:17;31730:47;31794:131;31920:4;31794:131;:::i;:::-;31786:139;;31513:419;;;:::o;31938:::-;32104:4;32142:2;32131:9;32127:18;32119:26;;32191:9;32185:4;32181:20;32177:1;32166:9;32162:17;32155:47;32219:131;32345:4;32219:131;:::i;:::-;32211:139;;31938:419;;;:::o;32363:::-;32529:4;32567:2;32556:9;32552:18;32544:26;;32616:9;32610:4;32606:20;32602:1;32591:9;32587:17;32580:47;32644:131;32770:4;32644:131;:::i;:::-;32636:139;;32363:419;;;:::o;32788:::-;32954:4;32992:2;32981:9;32977:18;32969:26;;33041:9;33035:4;33031:20;33027:1;33016:9;33012:17;33005:47;33069:131;33195:4;33069:131;:::i;:::-;33061:139;;32788:419;;;:::o;33213:::-;33379:4;33417:2;33406:9;33402:18;33394:26;;33466:9;33460:4;33456:20;33452:1;33441:9;33437:17;33430:47;33494:131;33620:4;33494:131;:::i;:::-;33486:139;;33213:419;;;:::o;33638:::-;33804:4;33842:2;33831:9;33827:18;33819:26;;33891:9;33885:4;33881:20;33877:1;33866:9;33862:17;33855:47;33919:131;34045:4;33919:131;:::i;:::-;33911:139;;33638:419;;;:::o;34063:::-;34229:4;34267:2;34256:9;34252:18;34244:26;;34316:9;34310:4;34306:20;34302:1;34291:9;34287:17;34280:47;34344:131;34470:4;34344:131;:::i;:::-;34336:139;;34063:419;;;:::o;34488:::-;34654:4;34692:2;34681:9;34677:18;34669:26;;34741:9;34735:4;34731:20;34727:1;34716:9;34712:17;34705:47;34769:131;34895:4;34769:131;:::i;:::-;34761:139;;34488:419;;;:::o;34913:::-;35079:4;35117:2;35106:9;35102:18;35094:26;;35166:9;35160:4;35156:20;35152:1;35141:9;35137:17;35130:47;35194:131;35320:4;35194:131;:::i;:::-;35186:139;;34913:419;;;:::o;35338:::-;35504:4;35542:2;35531:9;35527:18;35519:26;;35591:9;35585:4;35581:20;35577:1;35566:9;35562:17;35555:47;35619:131;35745:4;35619:131;:::i;:::-;35611:139;;35338:419;;;:::o;35763:::-;35929:4;35967:2;35956:9;35952:18;35944:26;;36016:9;36010:4;36006:20;36002:1;35991:9;35987:17;35980:47;36044:131;36170:4;36044:131;:::i;:::-;36036:139;;35763:419;;;:::o;36188:::-;36354:4;36392:2;36381:9;36377:18;36369:26;;36441:9;36435:4;36431:20;36427:1;36416:9;36412:17;36405:47;36469:131;36595:4;36469:131;:::i;:::-;36461:139;;36188:419;;;:::o;36613:222::-;36706:4;36744:2;36733:9;36729:18;36721:26;;36757:71;36825:1;36814:9;36810:17;36801:6;36757:71;:::i;:::-;36613:222;;;;:::o;36841:129::-;36875:6;36902:20;;:::i;:::-;36892:30;;36931:33;36959:4;36951:6;36931:33;:::i;:::-;36841:129;;;:::o;36976:75::-;37009:6;37042:2;37036:9;37026:19;;36976:75;:::o;37057:307::-;37118:4;37208:18;37200:6;37197:30;37194:56;;;37230:18;;:::i;:::-;37194:56;37268:29;37290:6;37268:29;:::i;:::-;37260:37;;37352:4;37346;37342:15;37334:23;;37057:307;;;:::o;37370:308::-;37432:4;37522:18;37514:6;37511:30;37508:56;;;37544:18;;:::i;:::-;37508:56;37582:29;37604:6;37582:29;:::i;:::-;37574:37;;37666:4;37660;37656:15;37648:23;;37370:308;;;:::o;37684:102::-;37753:4;37776:3;37768:11;;37684:102;;;:::o;37792:98::-;37843:6;37877:5;37871:12;37861:22;;37792:98;;;:::o;37896:99::-;37948:6;37982:5;37976:12;37966:22;;37896:99;;;:::o;38001:115::-;38073:4;38105;38100:3;38096:14;38088:22;;38001:115;;;:::o;38122:184::-;38221:11;38255:6;38250:3;38243:19;38295:4;38290:3;38286:14;38271:29;;38122:184;;;;:::o;38312:168::-;38395:11;38429:6;38424:3;38417:19;38469:4;38464:3;38460:14;38445:29;;38312:168;;;;:::o;38486:169::-;38570:11;38604:6;38599:3;38592:19;38644:4;38639:3;38635:14;38620:29;;38486:169;;;;:::o;38661:148::-;38763:11;38800:3;38785:18;;38661:148;;;;:::o;38815:122::-;38867:5;38892:39;38927:2;38922:3;38918:12;38913:3;38892:39;:::i;:::-;38883:48;;38815:122;;;;:::o;38943:305::-;38983:3;39002:20;39020:1;39002:20;:::i;:::-;38997:25;;39036:20;39054:1;39036:20;:::i;:::-;39031:25;;39190:1;39122:66;39118:74;39115:1;39112:81;39109:107;;;39196:18;;:::i;:::-;39109:107;39240:1;39237;39233:9;39226:16;;38943:305;;;;:::o;39254:185::-;39294:1;39311:20;39329:1;39311:20;:::i;:::-;39306:25;;39345:20;39363:1;39345:20;:::i;:::-;39340:25;;39384:1;39374:35;;39389:18;;:::i;:::-;39374:35;39431:1;39428;39424:9;39419:14;;39254:185;;;;:::o;39445:348::-;39485:7;39508:20;39526:1;39508:20;:::i;:::-;39503:25;;39542:20;39560:1;39542:20;:::i;:::-;39537:25;;39730:1;39662:66;39658:74;39655:1;39652:81;39647:1;39640:9;39633:17;39629:105;39626:131;;;39737:18;;:::i;:::-;39626:131;39785:1;39782;39778:9;39767:20;;39445:348;;;;:::o;39799:191::-;39839:4;39859:20;39877:1;39859:20;:::i;:::-;39854:25;;39893:20;39911:1;39893:20;:::i;:::-;39888:25;;39932:1;39929;39926:8;39923:34;;;39937:18;;:::i;:::-;39923:34;39982:1;39979;39975:9;39967:17;;39799:191;;;;:::o;39996:96::-;40033:7;40062:24;40080:5;40062:24;:::i;:::-;40051:35;;39996:96;;;:::o;40098:90::-;40132:7;40175:5;40168:13;40161:21;40150:32;;40098:90;;;:::o;40194:149::-;40230:7;40270:66;40263:5;40259:78;40248:89;;40194:149;;;:::o;40349:126::-;40386:7;40426:42;40419:5;40415:54;40404:65;;40349:126;;;:::o;40481:77::-;40518:7;40547:5;40536:16;;40481:77;;;:::o;40564:154::-;40648:6;40643:3;40638;40625:30;40710:1;40701:6;40696:3;40692:16;40685:27;40564:154;;;:::o;40724:307::-;40792:1;40802:113;40816:6;40813:1;40810:13;40802:113;;;40901:1;40896:3;40892:11;40886:18;40882:1;40877:3;40873:11;40866:39;40838:2;40835:1;40831:10;40826:15;;40802:113;;;40933:6;40930:1;40927:13;40924:101;;;41013:1;41004:6;40999:3;40995:16;40988:27;40924:101;40773:258;40724:307;;;:::o;41037:320::-;41081:6;41118:1;41112:4;41108:12;41098:22;;41165:1;41159:4;41155:12;41186:18;41176:81;;41242:4;41234:6;41230:17;41220:27;;41176:81;41304:2;41296:6;41293:14;41273:18;41270:38;41267:84;;;41323:18;;:::i;:::-;41267:84;41088:269;41037:320;;;:::o;41363:281::-;41446:27;41468:4;41446:27;:::i;:::-;41438:6;41434:40;41576:6;41564:10;41561:22;41540:18;41528:10;41525:34;41522:62;41519:88;;;41587:18;;:::i;:::-;41519:88;41627:10;41623:2;41616:22;41406:238;41363:281;;:::o;41650:233::-;41689:3;41712:24;41730:5;41712:24;:::i;:::-;41703:33;;41758:66;41751:5;41748:77;41745:103;;;41828:18;;:::i;:::-;41745:103;41875:1;41868:5;41864:13;41857:20;;41650:233;;;:::o;41889:176::-;41921:1;41938:20;41956:1;41938:20;:::i;:::-;41933:25;;41972:20;41990:1;41972:20;:::i;:::-;41967:25;;42011:1;42001:35;;42016:18;;:::i;:::-;42001:35;42057:1;42054;42050:9;42045:14;;41889:176;;;;:::o;42071:180::-;42119:77;42116:1;42109:88;42216:4;42213:1;42206:15;42240:4;42237:1;42230:15;42257:180;42305:77;42302:1;42295:88;42402:4;42399:1;42392:15;42426:4;42423:1;42416:15;42443:180;42491:77;42488:1;42481:88;42588:4;42585:1;42578:15;42612:4;42609:1;42602:15;42629:180;42677:77;42674:1;42667:88;42774:4;42771:1;42764:15;42798:4;42795:1;42788:15;42815:180;42863:77;42860:1;42853:88;42960:4;42957:1;42950:15;42984:4;42981:1;42974:15;43001:117;43110:1;43107;43100:12;43124:117;43233:1;43230;43223:12;43247:117;43356:1;43353;43346:12;43370:117;43479:1;43476;43469:12;43493:117;43602:1;43599;43592:12;43616:117;43725:1;43722;43715:12;43739:102;43780:6;43831:2;43827:7;43822:2;43815:5;43811:14;43807:28;43797:38;;43739:102;;;:::o;43847:166::-;43987:18;43983:1;43975:6;43971:14;43964:42;43847:166;:::o;44019:169::-;44159:21;44155:1;44147:6;44143:14;44136:45;44019:169;:::o;44194:237::-;44334:34;44330:1;44322:6;44318:14;44311:58;44403:20;44398:2;44390:6;44386:15;44379:45;44194:237;:::o;44437:225::-;44577:34;44573:1;44565:6;44561:14;44554:58;44646:8;44641:2;44633:6;44629:15;44622:33;44437:225;:::o;44668:165::-;44808:17;44804:1;44796:6;44792:14;44785:41;44668:165;:::o;44839:178::-;44979:30;44975:1;44967:6;44963:14;44956:54;44839:178;:::o;45023:223::-;45163:34;45159:1;45151:6;45147:14;45140:58;45232:6;45227:2;45219:6;45215:15;45208:31;45023:223;:::o;45252:175::-;45392:27;45388:1;45380:6;45376:14;45369:51;45252:175;:::o;45433:231::-;45573:34;45569:1;45561:6;45557:14;45550:58;45642:14;45637:2;45629:6;45625:15;45618:39;45433:231;:::o;45670:165::-;45810:17;45806:1;45798:6;45794:14;45787:41;45670:165;:::o;45841:243::-;45981:34;45977:1;45969:6;45965:14;45958:58;46050:26;46045:2;46037:6;46033:15;46026:51;45841:243;:::o;46090:229::-;46230:34;46226:1;46218:6;46214:14;46207:58;46299:12;46294:2;46286:6;46282:15;46275:37;46090:229;:::o;46325:228::-;46465:34;46461:1;46453:6;46449:14;46442:58;46534:11;46529:2;46521:6;46517:15;46510:36;46325:228;:::o;46559:182::-;46699:34;46695:1;46687:6;46683:14;46676:58;46559:182;:::o;46747:173::-;46887:25;46883:1;46875:6;46871:14;46864:49;46747:173;:::o;46926:236::-;47066:34;47062:1;47054:6;47050:14;47043:58;47135:19;47130:2;47122:6;47118:15;47111:44;46926:236;:::o;47168:231::-;47308:34;47304:1;47296:6;47292:14;47285:58;47377:14;47372:2;47364:6;47360:15;47353:39;47168:231;:::o;47405:160::-;47545:12;47541:1;47533:6;47529:14;47522:36;47405:160;:::o;47571:182::-;47711:34;47707:1;47699:6;47695:14;47688:58;47571:182;:::o;47759:228::-;47899:34;47895:1;47887:6;47883:14;47876:58;47968:11;47963:2;47955:6;47951:15;47944:36;47759:228;:::o;47993:160::-;48133:12;48129:1;48121:6;48117:14;48110:36;47993:160;:::o;48159:220::-;48299:34;48295:1;48287:6;48283:14;48276:58;48368:3;48363:2;48355:6;48351:15;48344:28;48159:220;:::o;48385:166::-;48525:18;48521:1;48513:6;48509:14;48502:42;48385:166;:::o;48557:177::-;48697:29;48693:1;48685:6;48681:14;48674:53;48557:177;:::o;48740:236::-;48880:34;48876:1;48868:6;48864:14;48857:58;48949:19;48944:2;48936:6;48932:15;48925:44;48740:236;:::o;48982:171::-;49122:23;49118:1;49110:6;49106:14;49099:47;48982:171;:::o;49159:122::-;49232:24;49250:5;49232:24;:::i;:::-;49225:5;49222:35;49212:63;;49271:1;49268;49261:12;49212:63;49159:122;:::o;49287:116::-;49357:21;49372:5;49357:21;:::i;:::-;49350:5;49347:32;49337:60;;49393:1;49390;49383:12;49337:60;49287:116;:::o;49409:120::-;49481:23;49498:5;49481:23;:::i;:::-;49474:5;49471:34;49461:62;;49519:1;49516;49509:12;49461:62;49409:120;:::o;49535:122::-;49608:24;49626:5;49608:24;:::i;:::-;49601:5;49598:35;49588:63;;49647:1;49644;49637:12;49588:63;49535:122;:::o

Swarm Source

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