ETH Price: $3,466.16 (-0.60%)

Token

Bunny AI Founder NFTs (BUNAI)
 

Overview

Max Total Supply

100 BUNAI

Holders

77

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BUNAI
0x7ba0466d68174a8d8959996c4b4455b29a2ce482
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:
BUNAI

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-22
*/

//SPDX-License-Identifier: MIT
// File: contracts/IOperatorFilterRegistry.sol

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

// File: contracts/OperatorFilterer.sol

pragma solidity ^0.8.13;

/**
 * @title  OperatorFilterer
 * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
 *         registrant's entries in the OperatorFilterRegistry.
 * @dev    This smart contract is meant to be inherited by token contracts so they can use the following:
 *         - onlyAllowedOperator modifier for transferFrom and safeTransferFrom methods.
 *         - onlyAllowedOperatorApproval modifier for approve and setApprovalForAll methods.
 */
abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        // Allow spending tokens from addresses with balance
        // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
        // from an EOA.
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }

    function _checkFilterOperator(address operator) internal view virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}

// File: contracts/DefaultOperatorFilterer.sol

pragma solidity ^0.8.13;

/**
 * @title  DefaultOperatorFilterer
 * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.
 */
abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}





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

pragma solidity ^0.8.0;


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

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

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

pragma solidity ^0.8.0;


library Address {
    
    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;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.8.0;


interface IERC20 {
    
    function totalSupply() external view returns (uint256);

    
    function balanceOf(address account) external view returns (uint256);

    
    function transfer(address recipient, uint256 amount) external returns (bool);

    
    function allowance(address owner, address spender) external view returns (uint256);

    
    function approve(address spender, uint256 amount) external returns (bool);

    
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    
    event Transfer(address indexed from, address indexed to, uint256 value);

    
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;


library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;


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

    
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

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

pragma solidity ^0.8.0;


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

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

    
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: contracts/ERC721.sol

pragma solidity >=0.8.0;

abstract contract ERC721 {
    

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    

    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    

    function approve(address spender, uint256 id) public virtual {
        address owner = ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            balanceOf[from]--;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            balanceOf[to]++;
        }

        ownerOf[id] = to;

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

    function _burn(uint256 id) internal virtual {
        address owner = ownerOf[id];

        require(ownerOf[id] != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            balanceOf[owner]--;
        }

        delete ownerOf[id];

        delete getApproved[id];

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

    

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
	interface ERC721TokenReceiver {
		function onERC721Received(
			address operator,
			address from,
			uint256 id,
			bytes calldata data
		) external returns (bytes4);
	}


pragma solidity >=0.8.4;

contract BUNAI is ERC721 , DefaultOperatorFilterer {
    uint256 public totalSupply;
    uint256 public cost = 0.1 ether;
    uint256 public maxMints = 5;
    address public owner = msg.sender;
    address private lmnft = 0x9E6865DAEeeDD093ea4A4f6c9bFbBB0cE6Bc8b17;
    uint256 public wlMaxMints = 1;
    uint256 public whitelistCost = 0.05 ether;
    bytes32 private merkleRoot;
    bool public whitelistActive = true;
    string baseURI;

    mapping(address => uint256) internal userMints;

    error SoldOut();
    error InsufficientFunds();
    error MintLimit();
    error NotOwner();
    
    error MintNotEnabled();
    error URIAlreadySet();
    
    
    error WhitelistActive();
    error InvalidProof();
    error WhitelistDisabled();
    

    event Minted(
        address indexed owner,
        string tokenURI,
        uint256 indexed mintTime
    );

    constructor()
        ERC721("Bunny AI Founder NFTs", "BUNAI")
    {}

    function mint() external payable {
        if (whitelistActive) revert WhitelistActive();
        if (userMints[msg.sender] >= maxMints) revert MintLimit();
        if (totalSupply + 1 > 100) revert SoldOut();
        if (msg.value < cost) revert InsufficientFunds();
        if (bytes(baseURI).length == 0) revert MintNotEnabled();
        userMints[msg.sender]++;
        totalSupply++;
        _safeMint(msg.sender, totalSupply);
        payable(lmnft).transfer(msg.value / 40);
        payable(owner).transfer(msg.value - (msg.value / 40));
        emit Minted(msg.sender, tokenURI(totalSupply), block.timestamp);
    }

    
    function setBaseURI(string memory _uri) external {
        if (bytes(baseURI).length > 0) revert URIAlreadySet();
        if (msg.sender != owner) revert NotOwner();
        baseURI = _uri;
    }
    

    function setCost(uint256 _cost) external {
        if (msg.sender != owner) revert NotOwner();
        cost = _cost;
    }

    function setMaxMints(uint256 _limit) external {
        if (msg.sender != owner) revert NotOwner();
        maxMints = _limit;
    }

    
    function whitelistedMint(bytes32[] calldata _merkleProof) external payable {
        if (!whitelistActive) revert WhitelistDisabled();
        if (userMints[msg.sender] >= wlMaxMints) revert MintLimit();
        if (totalSupply + 1 > 100) revert SoldOut();
        if (msg.value < whitelistCost) revert InsufficientFunds();
        if (bytes(baseURI).length == 0) revert MintNotEnabled();

        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));

        if (!MerkleProof.verify(_merkleProof, merkleRoot, leaf))
            revert InvalidProof();

        userMints[msg.sender]++;
        totalSupply++;
        _safeMint(msg.sender, totalSupply);
        payable(lmnft).transfer(msg.value / 40);
        payable(owner).transfer(msg.value - (msg.value / 40));
        emit Minted(msg.sender, tokenURI(totalSupply), block.timestamp);
    }

    function setWhitelist(bytes32 _merkleRoot) external {
		if (msg.sender != owner) revert NotOwner();
        merkleRoot = _merkleRoot;
    }

    function removeWhitelist() external {
        if (msg.sender != owner) revert NotOwner();
        if (!whitelistActive) revert WhitelistDisabled();
        whitelistActive = false;
    }

    function setWLCost(uint256 _whiteListCost) external {
        if (msg.sender != owner) revert NotOwner();
        whitelistCost = _whiteListCost;
    }

    function setWLMaxMints(uint256 _limit) external {
        if (msg.sender != owner) revert NotOwner();
        wlMaxMints = _limit;
    }
    

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721)
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(baseURI, Strings.toString(tokenId), ".json")
            );
    }

    function withdraw() external  {
        if (msg.sender != owner) revert NotOwner();
        (bool success, ) = payable(owner).call{value: address(this).balance}("");
        require(success);
    }
    
    function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) {
        super.setApprovalForAll(operator, approved);
    }

    function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) {
        super.approve(operator, tokenId);
    }

    function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
        public
        override
        onlyAllowedOperator(from)
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[],"name":"MintLimit","type":"error"},{"inputs":[],"name":"MintNotEnabled","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"SoldOut","type":"error"},{"inputs":[],"name":"URIAlreadySet","type":"error"},{"inputs":[],"name":"WhitelistActive","type":"error"},{"inputs":[],"name":"WhitelistDisabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"owner","type":"address"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"},{"indexed":true,"internalType":"uint256","name":"mintTime","type":"uint256"}],"name":"Minted","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","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":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whiteListCost","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setWLMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistedMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlMaxMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405267016345785d8a00006007556005600855600980546001600160a01b03199081163317909155600a8054909116739e6865daeeedd093ea4a4f6c9bfbbb0ce6bc8b171790556001600b81905566b1a2bc2ec50000600c55600e805460ff191690911790553480156200007557600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601581526020017f42756e6e7920414920466f756e646572204e46547300000000000000000000008152506040518060400160405280600581526020016442554e414960d81b8152508160009081620000f29190620002e3565b506001620001018282620002e3565b5050506daaeb6d7670e522a718067333cd4e3b15620002365780156200019057604051633e9f1edf60e11b81526daaeb6d7670e522a718067333cd4e90637d3e3dbe90620001569030908690600401620003af565b600060405180830381600087803b1580156200017157600080fd5b505af115801562000186573d6000803e3d6000fd5b5050505062000236565b6001600160a01b03821615620001d55760405163a0af290360e01b81526daaeb6d7670e522a718067333cd4e9063a0af290390620001569030908690600401620003af565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200021c57600080fd5b505af115801562000231573d6000803e3d6000fd5b505050505b5050620003c9565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026957607f821691505b6020821081036200028a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002de57600081815260208120601f850160051c81016020861015620002b95750805b601f850160051c820191505b81811015620002da57828155600101620002c5565b5050505b505050565b81516001600160401b03811115620002ff57620002ff6200023e565b620003178162000310845462000254565b8462000290565b602080601f8311600181146200034f5760008415620003365750858301515b600019600386901b1c1916600185901b178555620002da565b600085815260208120601f198616915b8281101562000380578886015182559484019460019091019084016200035f565b50858210156200039f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0392831681529116602082015260400190565b611dbe80620003d96000396000f3fe6080604052600436106101685760003560e01c806301ffc9a71461016d57806302ce5813146101a257806306fdde03146101bc578063081812fc146101de578063095ea7b3146102215780631249c58b1461024357806313faede61461024b57806317f708fb1461026f57806318160ddd1461028457806319ccaf051461029a57806323b872dd146102ba5780632fe8a993146102da5780633ccfd60b146102f057806341f434341461030557806342842e0e14610327578063440bc7f31461034757806344a0d68a1461036757806355f804b3146103875780636352211e146103a757806370a08231146103dd57806375a6f85a1461040a57806379c9cb7b1461041d5780638da5cb5b1461043d57806395d89b411461045d578063a22cb46514610472578063b6b6f0c314610492578063b88d4fde146104a8578063c87b56dd146104c8578063d1d19213146104e8578063e7b99ec714610508578063e985e9c51461051e575b600080fd5b34801561017957600080fd5b5061018d6101883660046115fe565b610559565b60405190151581526020015b60405180910390f35b3480156101ae57600080fd5b50600e5461018d9060ff1681565b3480156101c857600080fd5b506101d16105ab565b604051610199919061167a565b3480156101ea57600080fd5b506102146101f936600461168d565b6004602052600090815260409020546001600160a01b031681565b60405161019991906116a6565b34801561022d57600080fd5b5061024161023c3660046116d6565b610639565b005b610241610652565b34801561025757600080fd5b5061026160075481565b604051908152602001610199565b34801561027b57600080fd5b50610241610836565b34801561029057600080fd5b5061026160065481565b3480156102a657600080fd5b506102416102b536600461168d565b610890565b3480156102c657600080fd5b506102416102d5366004611700565b6108c0565b3480156102e657600080fd5b50610261600b5481565b3480156102fc57600080fd5b506102416108eb565b34801561031157600080fd5b506102146daaeb6d7670e522a718067333cd4e81565b34801561033357600080fd5b50610241610342366004611700565b610979565b34801561035357600080fd5b5061024161036236600461168d565b61099e565b34801561037357600080fd5b5061024161038236600461168d565b6109ce565b34801561039357600080fd5b506102416103a23660046117c7565b6109fe565b3480156103b357600080fd5b506102146103c236600461168d565b6003602052600090815260409020546001600160a01b031681565b3480156103e957600080fd5b506102616103f836600461180f565b60026020526000908152604090205481565b61024161041836600461182a565b610a69565b34801561042957600080fd5b5061024161043836600461168d565b610ce1565b34801561044957600080fd5b50600954610214906001600160a01b031681565b34801561046957600080fd5b506101d1610d11565b34801561047e57600080fd5b5061024161048d3660046118ac565b610d1e565b34801561049e57600080fd5b5061026160085481565b3480156104b457600080fd5b506102416104c33660046118e3565b610d32565b3480156104d457600080fd5b506101d16104e336600461168d565b610d5f565b3480156104f457600080fd5b5061024161050336600461168d565b610d93565b34801561051457600080fd5b50610261600c5481565b34801561052a57600080fd5b5061018d61053936600461195e565b600560209081526000928352604080842090915290825290205460ff1681565b60006301ffc9a760e01b6001600160e01b03198316148061058a57506380ac58cd60e01b6001600160e01b03198316145b806105a55750635b5e139f60e01b6001600160e01b03198316145b92915050565b600080546105b890611991565b80601f01602080910402602001604051908101604052809291908181526020018280546105e490611991565b80156106315780601f1061060657610100808354040283529160200191610631565b820191906000526020600020905b81548152906001019060200180831161061457829003601f168201915b505050505081565b8161064381610dc3565b61064d8383610e7c565b505050565b600e5460ff1615610676576040516316e5d37d60e11b815260040160405180910390fd5b60085433600090815260106020526040902054106106a75760405163ec8e6a6360e01b815260040160405180910390fd5b606460065460016106b891906119e1565b11156106d7576040516352df9fe560e01b815260040160405180910390fd5b6007543410156106fa5760405163356680b760e01b815260040160405180910390fd5b600f805461070790611991565b90506000036107295760405163447691f760e01b815260040160405180910390fd5b336000908152601060205260408120805491610744836119f9565b909155505060068054906000610759836119f9565b919050555061076a33600654610f3d565b600a546001600160a01b03166108fc610784602834611a28565b6040518115909202916000818181858888f193505050501580156107ac573d6000803e3d6000fd5b506009546001600160a01b03166108fc6107c7602834611a28565b6107d19034611a3c565b6040518115909202916000818181858888f193505050501580156107f9573d6000803e3d6000fd5b5042336001600160a01b0316600080516020611d6983398151915261081f600654610d5f565b60405161082c919061167a565b60405180910390a3565b6009546001600160a01b03163314610861576040516330cd747160e01b815260040160405180910390fd5b600e5460ff166108845760405163212c6e1d60e01b815260040160405180910390fd5b600e805460ff19169055565b6009546001600160a01b031633146108bb576040516330cd747160e01b815260040160405180910390fd5b600b55565b826001600160a01b03811633146108da576108da33610dc3565b6108e5848484610ff7565b50505050565b6009546001600160a01b03163314610916576040516330cd747160e01b815260040160405180910390fd5b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610963576040519150601f19603f3d011682016040523d82523d6000602084013e610968565b606091505b505090508061097657600080fd5b50565b826001600160a01b03811633146109935761099333610dc3565b6108e5848484611167565b6009546001600160a01b031633146109c9576040516330cd747160e01b815260040160405180910390fd5b600d55565b6009546001600160a01b031633146109f9576040516330cd747160e01b815260040160405180910390fd5b600755565b6000600f8054610a0d90611991565b90501115610a2e576040516341666d6560e11b815260040160405180910390fd5b6009546001600160a01b03163314610a59576040516330cd747160e01b815260040160405180910390fd5b600f610a658282611aa1565b5050565b600e5460ff16610a8c5760405163212c6e1d60e01b815260040160405180910390fd5b600b543360009081526010602052604090205410610abd5760405163ec8e6a6360e01b815260040160405180910390fd5b60646006546001610ace91906119e1565b1115610aed576040516352df9fe560e01b815260040160405180910390fd5b600c54341015610b105760405163356680b760e01b815260040160405180910390fd5b600f8054610b1d90611991565b9050600003610b3f5760405163447691f760e01b815260040160405180910390fd5b6040516001600160601b03193360601b166020820152600090603401604051602081830303815290604052805190602001209050610bb483838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600d549150849050611221565b610bd1576040516309bde33960e01b815260040160405180910390fd5b336000908152601060205260408120805491610bec836119f9565b909155505060068054906000610c01836119f9565b9190505550610c1233600654610f3d565b600a546001600160a01b03166108fc610c2c602834611a28565b6040518115909202916000818181858888f19350505050158015610c54573d6000803e3d6000fd5b506009546001600160a01b03166108fc610c6f602834611a28565b610c799034611a3c565b6040518115909202916000818181858888f19350505050158015610ca1573d6000803e3d6000fd5b5042336001600160a01b0316600080516020611d69833981519152610cc7600654610d5f565b604051610cd4919061167a565b60405180910390a3505050565b6009546001600160a01b03163314610d0c576040516330cd747160e01b815260040160405180910390fd5b600855565b600180546105b890611991565b81610d2881610dc3565b61064d8383611237565b836001600160a01b0381163314610d4c57610d4c33610dc3565b610d58858585856112a3565b5050505050565b6060600f610d6c8361135f565b604051602001610d7d929190611b60565b6040516020818303038152906040529050919050565b6009546001600160a01b03163314610dbe576040516330cd747160e01b815260040160405180910390fd5b600c55565b6daaeb6d7670e522a718067333cd4e3b1561097657604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e549190611bf7565b6109765780604051633b79c77360e21b8152600401610e7391906116a6565b60405180910390fd5b6000818152600360205260409020546001600160a01b031633811480610ec557506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610ee15760405162461bcd60e51b8152600401610e7390611c14565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610f478282611467565b6001600160a01b0382163b1580610fdb5750604051630a85bd0160e11b808252906001600160a01b0384169063150b7a0290610f8c9033906000908790600401611c3c565b6020604051808303816000875af1158015610fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcf9190611c6f565b6001600160e01b031916145b610a655760405162461bcd60e51b8152600401610e7390611c8c565b6000818152600360205260409020546001600160a01b0384811691161461104d5760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610e73565b6001600160a01b0382166110735760405162461bcd60e51b8152600401610e7390611cb6565b336001600160a01b03841614806110a057506000818152600460205260409020546001600160a01b031633145b806110ce57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b6110ea5760405162461bcd60e51b8152600401610e7390611c14565b6001600160a01b0380841660008181526002602090815260408083208054600019019055938616808352848320805460010190558583526003825284832080546001600160a01b0319908116831790915560049092528483208054909216909155925184939291600080516020611d4983398151915291a4505050565b6111728383836108c0565b6001600160a01b0382163b15806112055750604051630a85bd0160e11b808252906001600160a01b0384169063150b7a02906111b690339088908790600401611c3c565b6020604051808303816000875af11580156111d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f99190611c6f565b6001600160e01b031916145b61064d5760405162461bcd60e51b8152600401610e7390611c8c565b60008261122e858461153c565b14949350505050565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ae8484846108c0565b6001600160a01b0383163b15806113435750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906112f4903390899088908890600401611ce1565b6020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113379190611c6f565b6001600160e01b031916145b6108e55760405162461bcd60e51b8152600401610e7390611c8c565b6060816000036113865750506040805180820190915260018152600360fc1b602082015290565b8160005b81156113b0578061139a816119f9565b91506113a99050600a83611a28565b915061138a565b6000816001600160401b038111156113ca576113ca61173c565b6040519080825280601f01601f1916602001820160405280156113f4576020820181803683370190505b5090505b841561145f57611409600183611a3c565b9150611416600a86611d1e565b6114219060306119e1565b60f81b81838151811061143657611436611d32565b60200101906001600160f81b031916908160001a905350611458600a86611a28565b94506113f8565b949350505050565b6001600160a01b03821661148d5760405162461bcd60e51b8152600401610e7390611cb6565b6000818152600360205260409020546001600160a01b0316156114e35760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610e73565b6001600160a01b038216600081815260026020908152604080832080546001019055848352600390915280822080546001600160a01b031916841790555183929190600080516020611d49833981519152908290a45050565b600081815b84518110156115e057600085828151811061155e5761155e611d32565b602002602001015190508083116115a05760408051602081018590529081018290526060016040516020818303038152906040528051906020012092506115cd565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806115d8816119f9565b915050611541565b509392505050565b6001600160e01b03198116811461097657600080fd5b60006020828403121561161057600080fd5b813561161b816115e8565b9392505050565b60005b8381101561163d578181015183820152602001611625565b838111156108e55750506000910152565b60008151808452611666816020860160208601611622565b601f01601f19169290920160200192915050565b60208152600061161b602083018461164e565b60006020828403121561169f57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146116d157600080fd5b919050565b600080604083850312156116e957600080fd5b6116f2836116ba565b946020939093013593505050565b60008060006060848603121561171557600080fd5b61171e846116ba565b925061172c602085016116ba565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561176c5761176c61173c565b604051601f8501601f19908116603f011681019082821181831017156117945761179461173c565b816040528093508581528686860111156117ad57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156117d957600080fd5b81356001600160401b038111156117ef57600080fd5b8201601f8101841361180057600080fd5b61145f84823560208401611752565b60006020828403121561182157600080fd5b61161b826116ba565b6000806020838503121561183d57600080fd5b82356001600160401b038082111561185457600080fd5b818501915085601f83011261186857600080fd5b81358181111561187757600080fd5b8660208260051b850101111561188c57600080fd5b60209290920196919550909350505050565b801515811461097657600080fd5b600080604083850312156118bf57600080fd5b6118c8836116ba565b915060208301356118d88161189e565b809150509250929050565b600080600080608085870312156118f957600080fd5b611902856116ba565b9350611910602086016116ba565b92506040850135915060608501356001600160401b0381111561193257600080fd5b8501601f8101871361194357600080fd5b61195287823560208401611752565b91505092959194509250565b6000806040838503121561197157600080fd5b61197a836116ba565b9150611988602084016116ba565b90509250929050565b600181811c908216806119a557607f821691505b6020821081036119c557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156119f4576119f46119cb565b500190565b600060018201611a0b57611a0b6119cb565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611a3757611a37611a12565b500490565b600082821015611a4e57611a4e6119cb565b500390565b601f82111561064d57600081815260208120601f850160051c81016020861015611a7a5750805b601f850160051c820191505b81811015611a9957828155600101611a86565b505050505050565b81516001600160401b03811115611aba57611aba61173c565b611ace81611ac88454611991565b84611a53565b602080601f831160018114611b035760008415611aeb5750858301515b600019600386901b1c1916600185901b178555611a99565b600085815260208120601f198616915b82811015611b3257888601518255948401946001909101908401611b13565b5085821015611b505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611b6e81611991565b60018281168015611b865760018114611b9b57611bca565b60ff1984168752821515830287019450611bca565b8860005260208060002060005b85811015611bc15781548a820152908401908201611ba8565b50505082870194505b505050508351611bde818360208801611622565b64173539b7b760d91b9101908152600501949350505050565b600060208284031215611c0957600080fd5b815161161b8161189e565b6020808252600e908201526d1393d517d055551213d49256915160921b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260806060820181905260009082015260a00190565b600060208284031215611c8157600080fd5b815161161b816115e8565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b6020808252601190820152701253959053125117d49150d25412515395607a1b604082015260600190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d149083018461164e565b9695505050505050565b600082611d2d57611d2d611a12565b500690565b634e487b7160e01b600052603260045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe678c8da3d2d6082f140bbbaa1ee822f0c7072ab604536db4a3e0315f8a92776a2646970667358221220116dbeb24b3641e5222cb6a04199101da5c20c036f99656e658ced13e7f2e86a64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106101685760003560e01c806301ffc9a71461016d57806302ce5813146101a257806306fdde03146101bc578063081812fc146101de578063095ea7b3146102215780631249c58b1461024357806313faede61461024b57806317f708fb1461026f57806318160ddd1461028457806319ccaf051461029a57806323b872dd146102ba5780632fe8a993146102da5780633ccfd60b146102f057806341f434341461030557806342842e0e14610327578063440bc7f31461034757806344a0d68a1461036757806355f804b3146103875780636352211e146103a757806370a08231146103dd57806375a6f85a1461040a57806379c9cb7b1461041d5780638da5cb5b1461043d57806395d89b411461045d578063a22cb46514610472578063b6b6f0c314610492578063b88d4fde146104a8578063c87b56dd146104c8578063d1d19213146104e8578063e7b99ec714610508578063e985e9c51461051e575b600080fd5b34801561017957600080fd5b5061018d6101883660046115fe565b610559565b60405190151581526020015b60405180910390f35b3480156101ae57600080fd5b50600e5461018d9060ff1681565b3480156101c857600080fd5b506101d16105ab565b604051610199919061167a565b3480156101ea57600080fd5b506102146101f936600461168d565b6004602052600090815260409020546001600160a01b031681565b60405161019991906116a6565b34801561022d57600080fd5b5061024161023c3660046116d6565b610639565b005b610241610652565b34801561025757600080fd5b5061026160075481565b604051908152602001610199565b34801561027b57600080fd5b50610241610836565b34801561029057600080fd5b5061026160065481565b3480156102a657600080fd5b506102416102b536600461168d565b610890565b3480156102c657600080fd5b506102416102d5366004611700565b6108c0565b3480156102e657600080fd5b50610261600b5481565b3480156102fc57600080fd5b506102416108eb565b34801561031157600080fd5b506102146daaeb6d7670e522a718067333cd4e81565b34801561033357600080fd5b50610241610342366004611700565b610979565b34801561035357600080fd5b5061024161036236600461168d565b61099e565b34801561037357600080fd5b5061024161038236600461168d565b6109ce565b34801561039357600080fd5b506102416103a23660046117c7565b6109fe565b3480156103b357600080fd5b506102146103c236600461168d565b6003602052600090815260409020546001600160a01b031681565b3480156103e957600080fd5b506102616103f836600461180f565b60026020526000908152604090205481565b61024161041836600461182a565b610a69565b34801561042957600080fd5b5061024161043836600461168d565b610ce1565b34801561044957600080fd5b50600954610214906001600160a01b031681565b34801561046957600080fd5b506101d1610d11565b34801561047e57600080fd5b5061024161048d3660046118ac565b610d1e565b34801561049e57600080fd5b5061026160085481565b3480156104b457600080fd5b506102416104c33660046118e3565b610d32565b3480156104d457600080fd5b506101d16104e336600461168d565b610d5f565b3480156104f457600080fd5b5061024161050336600461168d565b610d93565b34801561051457600080fd5b50610261600c5481565b34801561052a57600080fd5b5061018d61053936600461195e565b600560209081526000928352604080842090915290825290205460ff1681565b60006301ffc9a760e01b6001600160e01b03198316148061058a57506380ac58cd60e01b6001600160e01b03198316145b806105a55750635b5e139f60e01b6001600160e01b03198316145b92915050565b600080546105b890611991565b80601f01602080910402602001604051908101604052809291908181526020018280546105e490611991565b80156106315780601f1061060657610100808354040283529160200191610631565b820191906000526020600020905b81548152906001019060200180831161061457829003601f168201915b505050505081565b8161064381610dc3565b61064d8383610e7c565b505050565b600e5460ff1615610676576040516316e5d37d60e11b815260040160405180910390fd5b60085433600090815260106020526040902054106106a75760405163ec8e6a6360e01b815260040160405180910390fd5b606460065460016106b891906119e1565b11156106d7576040516352df9fe560e01b815260040160405180910390fd5b6007543410156106fa5760405163356680b760e01b815260040160405180910390fd5b600f805461070790611991565b90506000036107295760405163447691f760e01b815260040160405180910390fd5b336000908152601060205260408120805491610744836119f9565b909155505060068054906000610759836119f9565b919050555061076a33600654610f3d565b600a546001600160a01b03166108fc610784602834611a28565b6040518115909202916000818181858888f193505050501580156107ac573d6000803e3d6000fd5b506009546001600160a01b03166108fc6107c7602834611a28565b6107d19034611a3c565b6040518115909202916000818181858888f193505050501580156107f9573d6000803e3d6000fd5b5042336001600160a01b0316600080516020611d6983398151915261081f600654610d5f565b60405161082c919061167a565b60405180910390a3565b6009546001600160a01b03163314610861576040516330cd747160e01b815260040160405180910390fd5b600e5460ff166108845760405163212c6e1d60e01b815260040160405180910390fd5b600e805460ff19169055565b6009546001600160a01b031633146108bb576040516330cd747160e01b815260040160405180910390fd5b600b55565b826001600160a01b03811633146108da576108da33610dc3565b6108e5848484610ff7565b50505050565b6009546001600160a01b03163314610916576040516330cd747160e01b815260040160405180910390fd5b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610963576040519150601f19603f3d011682016040523d82523d6000602084013e610968565b606091505b505090508061097657600080fd5b50565b826001600160a01b03811633146109935761099333610dc3565b6108e5848484611167565b6009546001600160a01b031633146109c9576040516330cd747160e01b815260040160405180910390fd5b600d55565b6009546001600160a01b031633146109f9576040516330cd747160e01b815260040160405180910390fd5b600755565b6000600f8054610a0d90611991565b90501115610a2e576040516341666d6560e11b815260040160405180910390fd5b6009546001600160a01b03163314610a59576040516330cd747160e01b815260040160405180910390fd5b600f610a658282611aa1565b5050565b600e5460ff16610a8c5760405163212c6e1d60e01b815260040160405180910390fd5b600b543360009081526010602052604090205410610abd5760405163ec8e6a6360e01b815260040160405180910390fd5b60646006546001610ace91906119e1565b1115610aed576040516352df9fe560e01b815260040160405180910390fd5b600c54341015610b105760405163356680b760e01b815260040160405180910390fd5b600f8054610b1d90611991565b9050600003610b3f5760405163447691f760e01b815260040160405180910390fd5b6040516001600160601b03193360601b166020820152600090603401604051602081830303815290604052805190602001209050610bb483838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600d549150849050611221565b610bd1576040516309bde33960e01b815260040160405180910390fd5b336000908152601060205260408120805491610bec836119f9565b909155505060068054906000610c01836119f9565b9190505550610c1233600654610f3d565b600a546001600160a01b03166108fc610c2c602834611a28565b6040518115909202916000818181858888f19350505050158015610c54573d6000803e3d6000fd5b506009546001600160a01b03166108fc610c6f602834611a28565b610c799034611a3c565b6040518115909202916000818181858888f19350505050158015610ca1573d6000803e3d6000fd5b5042336001600160a01b0316600080516020611d69833981519152610cc7600654610d5f565b604051610cd4919061167a565b60405180910390a3505050565b6009546001600160a01b03163314610d0c576040516330cd747160e01b815260040160405180910390fd5b600855565b600180546105b890611991565b81610d2881610dc3565b61064d8383611237565b836001600160a01b0381163314610d4c57610d4c33610dc3565b610d58858585856112a3565b5050505050565b6060600f610d6c8361135f565b604051602001610d7d929190611b60565b6040516020818303038152906040529050919050565b6009546001600160a01b03163314610dbe576040516330cd747160e01b815260040160405180910390fd5b600c55565b6daaeb6d7670e522a718067333cd4e3b1561097657604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e549190611bf7565b6109765780604051633b79c77360e21b8152600401610e7391906116a6565b60405180910390fd5b6000818152600360205260409020546001600160a01b031633811480610ec557506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610ee15760405162461bcd60e51b8152600401610e7390611c14565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610f478282611467565b6001600160a01b0382163b1580610fdb5750604051630a85bd0160e11b808252906001600160a01b0384169063150b7a0290610f8c9033906000908790600401611c3c565b6020604051808303816000875af1158015610fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcf9190611c6f565b6001600160e01b031916145b610a655760405162461bcd60e51b8152600401610e7390611c8c565b6000818152600360205260409020546001600160a01b0384811691161461104d5760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610e73565b6001600160a01b0382166110735760405162461bcd60e51b8152600401610e7390611cb6565b336001600160a01b03841614806110a057506000818152600460205260409020546001600160a01b031633145b806110ce57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b6110ea5760405162461bcd60e51b8152600401610e7390611c14565b6001600160a01b0380841660008181526002602090815260408083208054600019019055938616808352848320805460010190558583526003825284832080546001600160a01b0319908116831790915560049092528483208054909216909155925184939291600080516020611d4983398151915291a4505050565b6111728383836108c0565b6001600160a01b0382163b15806112055750604051630a85bd0160e11b808252906001600160a01b0384169063150b7a02906111b690339088908790600401611c3c565b6020604051808303816000875af11580156111d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f99190611c6f565b6001600160e01b031916145b61064d5760405162461bcd60e51b8152600401610e7390611c8c565b60008261122e858461153c565b14949350505050565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ae8484846108c0565b6001600160a01b0383163b15806113435750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906112f4903390899088908890600401611ce1565b6020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113379190611c6f565b6001600160e01b031916145b6108e55760405162461bcd60e51b8152600401610e7390611c8c565b6060816000036113865750506040805180820190915260018152600360fc1b602082015290565b8160005b81156113b0578061139a816119f9565b91506113a99050600a83611a28565b915061138a565b6000816001600160401b038111156113ca576113ca61173c565b6040519080825280601f01601f1916602001820160405280156113f4576020820181803683370190505b5090505b841561145f57611409600183611a3c565b9150611416600a86611d1e565b6114219060306119e1565b60f81b81838151811061143657611436611d32565b60200101906001600160f81b031916908160001a905350611458600a86611a28565b94506113f8565b949350505050565b6001600160a01b03821661148d5760405162461bcd60e51b8152600401610e7390611cb6565b6000818152600360205260409020546001600160a01b0316156114e35760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610e73565b6001600160a01b038216600081815260026020908152604080832080546001019055848352600390915280822080546001600160a01b031916841790555183929190600080516020611d49833981519152908290a45050565b600081815b84518110156115e057600085828151811061155e5761155e611d32565b602002602001015190508083116115a05760408051602081018590529081018290526060016040516020818303038152906040528051906020012092506115cd565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806115d8816119f9565b915050611541565b509392505050565b6001600160e01b03198116811461097657600080fd5b60006020828403121561161057600080fd5b813561161b816115e8565b9392505050565b60005b8381101561163d578181015183820152602001611625565b838111156108e55750506000910152565b60008151808452611666816020860160208601611622565b601f01601f19169290920160200192915050565b60208152600061161b602083018461164e565b60006020828403121561169f57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146116d157600080fd5b919050565b600080604083850312156116e957600080fd5b6116f2836116ba565b946020939093013593505050565b60008060006060848603121561171557600080fd5b61171e846116ba565b925061172c602085016116ba565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561176c5761176c61173c565b604051601f8501601f19908116603f011681019082821181831017156117945761179461173c565b816040528093508581528686860111156117ad57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156117d957600080fd5b81356001600160401b038111156117ef57600080fd5b8201601f8101841361180057600080fd5b61145f84823560208401611752565b60006020828403121561182157600080fd5b61161b826116ba565b6000806020838503121561183d57600080fd5b82356001600160401b038082111561185457600080fd5b818501915085601f83011261186857600080fd5b81358181111561187757600080fd5b8660208260051b850101111561188c57600080fd5b60209290920196919550909350505050565b801515811461097657600080fd5b600080604083850312156118bf57600080fd5b6118c8836116ba565b915060208301356118d88161189e565b809150509250929050565b600080600080608085870312156118f957600080fd5b611902856116ba565b9350611910602086016116ba565b92506040850135915060608501356001600160401b0381111561193257600080fd5b8501601f8101871361194357600080fd5b61195287823560208401611752565b91505092959194509250565b6000806040838503121561197157600080fd5b61197a836116ba565b9150611988602084016116ba565b90509250929050565b600181811c908216806119a557607f821691505b6020821081036119c557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156119f4576119f46119cb565b500190565b600060018201611a0b57611a0b6119cb565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611a3757611a37611a12565b500490565b600082821015611a4e57611a4e6119cb565b500390565b601f82111561064d57600081815260208120601f850160051c81016020861015611a7a5750805b601f850160051c820191505b81811015611a9957828155600101611a86565b505050505050565b81516001600160401b03811115611aba57611aba61173c565b611ace81611ac88454611991565b84611a53565b602080601f831160018114611b035760008415611aeb5750858301515b600019600386901b1c1916600185901b178555611a99565b600085815260208120601f198616915b82811015611b3257888601518255948401946001909101908401611b13565b5085821015611b505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454611b6e81611991565b60018281168015611b865760018114611b9b57611bca565b60ff1984168752821515830287019450611bca565b8860005260208060002060005b85811015611bc15781548a820152908401908201611ba8565b50505082870194505b505050508351611bde818360208801611622565b64173539b7b760d91b9101908152600501949350505050565b600060208284031215611c0957600080fd5b815161161b8161189e565b6020808252600e908201526d1393d517d055551213d49256915160921b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260806060820181905260009082015260a00190565b600060208284031215611c8157600080fd5b815161161b816115e8565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b6020808252601190820152701253959053125117d49150d25412515395607a1b604082015260600190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d149083018461164e565b9695505050505050565b600082611d2d57611d2d611a12565b500690565b634e487b7160e01b600052603260045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe678c8da3d2d6082f140bbbaa1ee822f0c7072ab604536db4a3e0315f8a92776a2646970667358221220116dbeb24b3641e5222cb6a04199101da5c20c036f99656e658ced13e7f2e86a64736f6c634300080f0033

Deployed Bytecode Sourcemap

21721:5090:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19410:340;;;;;;;;;;-1:-1:-1;19410:340:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;19410:340:0;;;;;;;;22114:34;;;;;;;;;;-1:-1:-1;22114:34:0;;;;;;;;16734:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16984:46::-;;;;;;;;;;-1:-1:-1;16984:46:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;16984:46:0;;;;;;;;;;:::i;26059:157::-;;;;;;;;;;-1:-1:-1;26059:157:0;;;;;:::i;:::-;;:::i;:::-;;22706:635;;;:::i;21812:31::-;;;;;;;;;;;;;;;;;;;2319:25:1;;;2307:2;2292:18;21812:31:0;2173:177:1;24872:190:0;;;;;;;;;;;;;:::i;21779:26::-;;;;;;;;;;;;;;;;25232:139;;;;;;;;;;-1:-1:-1;25232:139:0;;;;;:::i;:::-;;:::i;26224:163::-;;;;;;;;;;-1:-1:-1;26224:163:0;;;;;:::i;:::-;;:::i;21997:29::-;;;;;;;;;;;;;;;;25662:201;;;;;;;;;;;;;:::i;2903:143::-;;;;;;;;;;;;3003:42;2903:143;;26395:171;;;;;;;;;;-1:-1:-1;26395:171:0;;;;;:::i;:::-;;:::i;24722:142::-;;;;;;;;;;-1:-1:-1;24722:142:0;;;;;:::i;:::-;;:::i;23568:125::-;;;;;;;;;;-1:-1:-1;23568:125:0;;;;;:::i;:::-;;:::i;23355:199::-;;;;;;;;;;-1:-1:-1;23355:199:0;;;;;:::i;:::-;;:::i;16933:42::-;;;;;;;;;;-1:-1:-1;16933:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;16933:42:0;;;16880:44;;;;;;;;;;-1:-1:-1;16880:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;23850:864;;;;;;:::i;:::-;;:::i;23701:135::-;;;;;;;;;;-1:-1:-1;23701:135:0;;;;;:::i;:::-;;:::i;21884:33::-;;;;;;;;;;-1:-1:-1;21884:33:0;;;;-1:-1:-1;;;;;21884:33:0;;;16761:20;;;;;;;;;;;;;:::i;25875:176::-;;;;;;;;;;-1:-1:-1;25875:176:0;;;;;:::i;:::-;;:::i;21850:27::-;;;;;;;;;;;;;;;;26574:228;;;;;;;;;;-1:-1:-1;26574:228:0;;;;;:::i;:::-;;:::i;25385:269::-;;;;;;;;;;-1:-1:-1;25385:269:0;;;;;:::i;:::-;;:::i;25070:154::-;;;;;;;;;;-1:-1:-1;25070:154:0;;;;;:::i;:::-;;:::i;22033:41::-;;;;;;;;;;;;;;;;17039:68;;;;;;;;;;-1:-1:-1;17039:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19410:340;19486:4;-1:-1:-1;;;;;;;;;19523:25:0;;;;:101;;-1:-1:-1;;;;;;;;;;19599:25:0;;;19523:101;:177;;;-1:-1:-1;;;;;;;;;;19675:25:0;;;19523:177;19503:197;19410:340;-1:-1:-1;;19410:340:0:o;16734:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26059:157::-;26155:8;4424:30;4445:8;4424:20;:30::i;:::-;26176:32:::1;26190:8;26200:7;26176:13;:32::i;:::-;26059:157:::0;;;:::o;22706:635::-;22754:15;;;;22750:45;;;22778:17;;-1:-1:-1;;;22778:17:0;;;;;;;;;;;22750:45;22835:8;;22820:10;22810:21;;;;:9;:21;;;;;;:33;22806:57;;22852:11;;-1:-1:-1;;;22852:11:0;;;;;;;;;;;22806:57;22896:3;22878:11;;22892:1;22878:15;;;;:::i;:::-;:21;22874:43;;;22908:9;;-1:-1:-1;;;22908:9:0;;;;;;;;;;;22874:43;22944:4;;22932:9;:16;22928:48;;;22957:19;;-1:-1:-1;;;22957:19:0;;;;;;;;;;;22928:48;22997:7;22991:21;;;;;:::i;:::-;;;23016:1;22991:26;22987:55;;23026:16;;-1:-1:-1;;;23026:16:0;;;;;;;;;;;22987:55;23063:10;23053:21;;;;:9;:21;;;;;:23;;;;;;:::i;:::-;;;;-1:-1:-1;;23087:11:0;:13;;;:11;:13;;;:::i;:::-;;;;;;23111:34;23121:10;23133:11;;23111:9;:34::i;:::-;23164:5;;-1:-1:-1;;;;;23164:5:0;23156:39;23180:14;23192:2;23180:9;:14;:::i;:::-;23156:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23214:5:0;;-1:-1:-1;;;;;23214:5:0;23206:53;23243:14;23255:2;23243:9;:14;:::i;:::-;23230:28;;:9;:28;:::i;:::-;23206:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23317:15;23282:10;-1:-1:-1;;;;;23275:58:0;-1:-1:-1;;;;;;;;;;;23294:21:0;23303:11;;23294:8;:21::i;:::-;23275:58;;;;;;:::i;:::-;;;;;;;;22706:635::o;24872:190::-;24937:5;;-1:-1:-1;;;;;24937:5:0;24923:10;:19;24919:42;;24951:10;;-1:-1:-1;;;24951:10:0;;;;;;;;;;;24919:42;24977:15;;;;24972:48;;25001:19;;-1:-1:-1;;;25001:19:0;;;;;;;;;;;24972:48;25031:15;:23;;-1:-1:-1;;25031:23:0;;;24872:190::o;25232:139::-;25309:5;;-1:-1:-1;;;;;25309:5:0;25295:10;:19;25291:42;;25323:10;;-1:-1:-1;;;25323:10:0;;;;;;;;;;;25291:42;25344:10;:19;25232:139::o;26224:163::-;26325:4;-1:-1:-1;;;;;4244:18:0;;4252:10;4244:18;4240:83;;4279:32;4300:10;4279:20;:32::i;:::-;26342:37:::1;26361:4;26367:2;26371:7;26342:18;:37::i;:::-;26224:163:::0;;;;:::o;25662:201::-;25721:5;;-1:-1:-1;;;;;25721:5:0;25707:10;:19;25703:42;;25735:10;;-1:-1:-1;;;25735:10:0;;;;;;;;;;;25703:42;25783:5;;25775:53;;25757:12;;-1:-1:-1;;;;;25783:5:0;;25802:21;;25757:12;25775:53;25757:12;25775:53;25802:21;25783:5;25775:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25756:72;;;25847:7;25839:16;;;;;;25692:171;25662:201::o;26395:171::-;26500:4;-1:-1:-1;;;;;4244:18:0;;4252:10;4244:18;4240:83;;4279:32;4300:10;4279:20;:32::i;:::-;26517:41:::1;26540:4;26546:2;26550:7;26517:22;:41::i;24722:142::-:0;24797:5;;-1:-1:-1;;;;;24797:5:0;24783:10;:19;24779:42;;24811:10;;-1:-1:-1;;;24811:10:0;;;;;;;;;;;24779:42;24832:10;:24;24722:142::o;23568:125::-;23638:5;;-1:-1:-1;;;;;23638:5:0;23624:10;:19;23620:42;;23652:10;;-1:-1:-1;;;23652:10:0;;;;;;;;;;;23620:42;23673:4;:12;23568:125::o;23355:199::-;23443:1;23425:7;23419:21;;;;;:::i;:::-;;;:25;23415:53;;;23453:15;;-1:-1:-1;;;23453:15:0;;;;;;;;;;;23415:53;23497:5;;-1:-1:-1;;;;;23497:5:0;23483:10;:19;23479:42;;23511:10;;-1:-1:-1;;;23511:10:0;;;;;;;;;;;23479:42;23532:7;:14;23542:4;23532:7;:14;:::i;:::-;;23355:199;:::o;23850:864::-;23941:15;;;;23936:48;;23965:19;;-1:-1:-1;;;23965:19:0;;;;;;;;;;;23936:48;24024:10;;24009;23999:21;;;;:9;:21;;;;;;:35;23995:59;;24043:11;;-1:-1:-1;;;24043:11:0;;;;;;;;;;;23995:59;24087:3;24069:11;;24083:1;24069:15;;;;:::i;:::-;:21;24065:43;;;24099:9;;-1:-1:-1;;;24099:9:0;;;;;;;;;;;24065:43;24135:13;;24123:9;:25;24119:57;;;24157:19;;-1:-1:-1;;;24157:19:0;;;;;;;;;;;24119:57;24197:7;24191:21;;;;;:::i;:::-;;;24216:1;24191:26;24187:55;;24226:16;;-1:-1:-1;;;24226:16:0;;;;;;;;;;;24187:55;24280:28;;-1:-1:-1;;;;;;24297:10:0;10293:2:1;10264:15;10260:45;24280:28:0;;;10248:58:1;24255:12:0;;10322::1;;24280:28:0;;;;;;;;;;;;24270:39;;;;;;24255:54;;24327:50;24346:12;;24327:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24360:10:0;;;-1:-1:-1;24372:4:0;;-1:-1:-1;24327:18:0;:50::i;:::-;24322:91;;24399:14;;-1:-1:-1;;;24399:14:0;;;;;;;;;;;24322:91;24436:10;24426:21;;;;:9;:21;;;;;:23;;;;;;:::i;:::-;;;;-1:-1:-1;;24460:11:0;:13;;;:11;:13;;;:::i;:::-;;;;;;24484:34;24494:10;24506:11;;24484:9;:34::i;:::-;24537:5;;-1:-1:-1;;;;;24537:5:0;24529:39;24553:14;24565:2;24553:9;:14;:::i;:::-;24529:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24587:5:0;;-1:-1:-1;;;;;24587:5:0;24579:53;24616:14;24628:2;24616:9;:14;:::i;:::-;24603:28;;:9;:28;:::i;:::-;24579:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24690:15;24655:10;-1:-1:-1;;;;;24648:58:0;-1:-1:-1;;;;;;;;;;;24667:21:0;24676:11;;24667:8;:21::i;:::-;24648:58;;;;;;:::i;:::-;;;;;;;;23925:789;23850:864;;:::o;23701:135::-;23776:5;;-1:-1:-1;;;;;23776:5:0;23762:10;:19;23758:42;;23790:10;;-1:-1:-1;;;23790:10:0;;;;;;;;;;;23758:42;23811:8;:17;23701:135::o;16761:20::-;;;;;;;:::i;25875:176::-;25979:8;4424:30;4445:8;4424:20;:30::i;:::-;26000:43:::1;26024:8;26034;26000:23;:43::i;26574:228::-:0;26725:4;-1:-1:-1;;;;;4244:18:0;;4252:10;4244:18;4240:83;;4279:32;4300:10;4279:20;:32::i;:::-;26747:47:::1;26770:4;26776:2;26780:7;26789:4;26747:22;:47::i;:::-;26574:228:::0;;;;;:::o;25385:269::-;25494:13;25587:7;25596:25;25613:7;25596:16;:25::i;:::-;25570:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25525:121;;25385:269;;;:::o;25070:154::-;25151:5;;-1:-1:-1;;;;;25151:5:0;25137:10;:19;25133:42;;25165:10;;-1:-1:-1;;;25165:10:0;;;;;;;;;;;25133:42;25186:13;:30;25070:154::o;4482:419::-;3003:42;4673:45;:49;4669:225;;4744:67;;-1:-1:-1;;;4744:67:0;;4795:4;4744:67;;;11736:34:1;-1:-1:-1;;;;;11806:15:1;;11786:18;;;11779:43;3003:42:0;;4744;;11671:18:1;;4744:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4739:144;;4858:8;4839:28;;-1:-1:-1;;;4839:28:0;;;;;;;;:::i;:::-;;;;;;;;17254:289;17326:13;17342:11;;;:7;:11;;;;;;-1:-1:-1;;;;;17342:11:0;17374:10;:19;;;:58;;-1:-1:-1;;;;;;17397:23:0;;;;;;:16;:23;;;;;;;;17421:10;17397:35;;;;;;;;;;17374:58;17366:85;;;;-1:-1:-1;;;17366:85:0;;;;;;;:::i;:::-;17464:15;;;;:11;:15;;;;;;:25;;-1:-1:-1;;;;;;17464:25:0;-1:-1:-1;;;;;17464:25:0;;;;;;;;;17507:28;;17464:15;;17507:28;;;;;;;17315:228;17254:289;;:::o;20560:349::-;20631:13;20637:2;20641;20631:5;:13::i;:::-;-1:-1:-1;;;;;20679:14:0;;;:19;;:178;;-1:-1:-1;20719:72:0;;-1:-1:-1;;;20719:72:0;;;20812:45;-1:-1:-1;;;;;20719:40:0;;;20812:45;;20719:72;;20760:10;;20780:1;;20784:2;;20719:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;20719:138:0;;20679:178;20657:244;;;;-1:-1:-1;;;20657:244:0;;;;;;;:::i;17766:764::-;17902:11;;;;:7;:11;;;;;;-1:-1:-1;;;;;17894:19:0;;;17902:11;;17894:19;17886:42;;;;-1:-1:-1;;;17886:42:0;;13787:2:1;17886:42:0;;;13769:21:1;13826:2;13806:18;;;13799:30;-1:-1:-1;;;13845:18:1;;;13838:40;13895:18;;17886:42:0;13585:334:1;17886:42:0;-1:-1:-1;;;;;17949:16:0;;17941:46;;;;-1:-1:-1;;;17941:46:0;;;;;;;:::i;:::-;18022:10;-1:-1:-1;;;;;18022:18:0;;;;:51;;-1:-1:-1;18058:15:0;;;;:11;:15;;;;;;-1:-1:-1;;;;;18058:15:0;18044:10;:29;18022:51;:89;;;-1:-1:-1;;;;;;18077:22:0;;;;;;:16;:22;;;;;;;;18100:10;18077:34;;;;;;;;;;18022:89;18000:153;;;;-1:-1:-1;;;18000:153:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18358:15:0;;;;;;;:9;:15;;;;;;;;:17;;-1:-1:-1;;18358:17:0;;;18392:13;;;;;;;;;:15;;18358:17;18392:15;;;18431:11;;;:7;:11;;;;;:16;;-1:-1:-1;;;;;;18431:16:0;;;;;;;;18467:11;:15;;;;;;18460:22;;;;;;;;18500;;18439:2;;18392:13;18358:15;-1:-1:-1;;;;;;;;;;;18500:22:0;;17766:764;;;:::o;18538:409::-;18662:26;18675:4;18681:2;18685;18662:12;:26::i;:::-;-1:-1:-1;;;;;18723:14:0;;;:19;;:172;;-1:-1:-1;18763:66:0;;-1:-1:-1;;;18763:66:0;;;18850:45;-1:-1:-1;;;;;18763:40:0;;;18850:45;;18763:66;;18804:10;;18816:4;;18822:2;;18763:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;18763:132:0;;18723:172;18701:238;;;;-1:-1:-1;;;18701:238:0;;;;;;;:::i;13716:190::-;13841:4;13894;13865:25;13878:5;13885:4;13865:12;:25::i;:::-;:33;;13716:190;-1:-1:-1;;;;13716:190:0:o;17551:207::-;17654:10;17637:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;17637:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;17637:49:0;;;;;;;;;;17704:46;;540:41:1;;;17637:38:0;;17654:10;17704:46;;513:18:1;17704:46:0;;;;;;;17551:207;;:::o;18955:439::-;19107:26;19120:4;19126:2;19130;19107:12;:26::i;:::-;-1:-1:-1;;;;;19168:14:0;;;:19;;:174;;-1:-1:-1;19208:68:0;;-1:-1:-1;;;19208:68:0;;;19297:45;-1:-1:-1;;;;;19208:40:0;;;19297:45;;19208:68;;19249:10;;19261:4;;19267:2;;19271:4;;19208:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;19208:134:0;;19168:174;19146:240;;;;-1:-1:-1;;;19146:240:0;;;;;;;:::i;14807:723::-;14863:13;15084:5;15093:1;15084:10;15080:53;;-1:-1:-1;;15111:10:0;;;;;;;;;;;;-1:-1:-1;;;15111:10:0;;;;;14807:723::o;15080:53::-;15158:5;15143:12;15199:78;15206:9;;15199:78;;15232:8;;;;:::i;:::-;;-1:-1:-1;15255:10:0;;-1:-1:-1;15263:2:0;15255:10;;:::i;:::-;;;15199:78;;;15287:19;15319:6;-1:-1:-1;;;;;15309:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15309:17:0;;15287:39;;15337:154;15344:10;;15337:154;;15371:11;15381:1;15371:11;;:::i;:::-;;-1:-1:-1;15440:10:0;15448:2;15440:5;:10;:::i;:::-;15427:24;;:2;:24;:::i;:::-;15414:39;;15397:6;15404;15397:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;15397:56:0;;;;;;;;-1:-1:-1;15468:11:0;15477:2;15468:11;;:::i;:::-;;;15337:154;;;15515:6;14807:723;-1:-1:-1;;;;14807:723:0:o;19766:381::-;-1:-1:-1;;;;;19841:16:0;;19833:46;;;;-1:-1:-1;;;19833:46:0;;;;;;;:::i;:::-;19923:1;19900:11;;;:7;:11;;;;;;-1:-1:-1;;;;;19900:11:0;:25;19892:52;;;;-1:-1:-1;;;19892:52:0;;15215:2:1;19892:52:0;;;15197:21:1;15254:2;15234:18;;;15227:30;-1:-1:-1;;;15273:18:1;;;15266:44;15327:18;;19892:52:0;15013:338:1;19892:52:0;-1:-1:-1;;;;;20038:13:0;;;;;;:9;:13;;;;;;;;:15;;;;;;20077:11;;;:7;:11;;;;;;:16;;-1:-1:-1;;;;;;20077:16:0;;;;;20111:28;20085:2;;20038:13;;-1:-1:-1;;;;;;;;;;;20111:28:0;20038:13;;20111:28;19766:381;;:::o;13920:701::-;14003:7;14046:4;14003:7;14061:523;14085:5;:12;14081:1;:16;14061:523;;;14119:20;14142:5;14148:1;14142:8;;;;;;;;:::i;:::-;;;;;;;14119:31;;14185:12;14169;:28;14165:408;;14322:44;;;;;;15513:19:1;;;15548:12;;;15541:28;;;15585:12;;14322:44:0;;;;;;;;;;;;14312:55;;;;;;14297:70;;14165:408;;;14512:44;;;;;;15513:19:1;;;15548:12;;;15541:28;;;15585:12;;14512:44:0;;;;;;;;;;;;14502:55;;;;;;14487:70;;14165:408;-1:-1:-1;14099:3:0;;;;:::i;:::-;;;;14061:523;;;-1:-1:-1;14601:12:0;13920:701;-1:-1:-1;;;13920:701:0:o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1528:203::-;-1:-1:-1;;;;;1692:32:1;;;;1674:51;;1662:2;1647:18;;1528:203::o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;3112:127::-;3173:10;3168:3;3164:20;3161:1;3154:31;3204:4;3201:1;3194:15;3228:4;3225:1;3218:15;3244:632;3309:5;-1:-1:-1;;;;;3369:14:1;;;3366:40;;;3386:18;;:::i;:::-;3461:2;3455:9;3429:2;3515:15;;-1:-1:-1;;3511:24:1;;;3537:2;3507:33;3503:42;3491:55;;;3561:18;;;3581:22;;;3558:46;3555:72;;;3607:18;;:::i;:::-;3647:10;3643:2;3636:22;3676:6;3667:15;;3706:6;3698;3691:22;3746:3;3737:6;3732:3;3728:16;3725:25;3722:45;;;3763:1;3760;3753:12;3722:45;3813:6;3808:3;3801:4;3793:6;3789:17;3776:44;3868:1;3861:4;3852:6;3844;3840:19;3836:30;3829:41;;;;3244:632;;;;;:::o;3881:451::-;3950:6;4003:2;3991:9;3982:7;3978:23;3974:32;3971:52;;;4019:1;4016;4009:12;3971:52;4046:23;;-1:-1:-1;;;;;4081:30:1;;4078:50;;;4124:1;4121;4114:12;4078:50;4147:22;;4200:4;4192:13;;4188:27;-1:-1:-1;4178:55:1;;4229:1;4226;4219:12;4178:55;4252:74;4318:7;4313:2;4300:16;4295:2;4291;4287:11;4252:74;:::i;4337:186::-;4396:6;4449:2;4437:9;4428:7;4424:23;4420:32;4417:52;;;4465:1;4462;4455:12;4417:52;4488:29;4507:9;4488:29;:::i;4528:615::-;4614:6;4622;4675:2;4663:9;4654:7;4650:23;4646:32;4643:52;;;4691:1;4688;4681:12;4643:52;4718:23;;-1:-1:-1;;;;;4790:14:1;;;4787:34;;;4817:1;4814;4807:12;4787:34;4855:6;4844:9;4840:22;4830:32;;4900:7;4893:4;4889:2;4885:13;4881:27;4871:55;;4922:1;4919;4912:12;4871:55;4962:2;4949:16;4988:2;4980:6;4977:14;4974:34;;;5004:1;5001;4994:12;4974:34;5057:7;5052:2;5042:6;5039:1;5035:14;5031:2;5027:23;5023:32;5020:45;5017:65;;;5078:1;5075;5068:12;5017:65;5109:2;5101:11;;;;;5131:6;;-1:-1:-1;4528:615:1;;-1:-1:-1;;;;4528:615:1:o;5148:118::-;5234:5;5227:13;5220:21;5213:5;5210:32;5200:60;;5256:1;5253;5246:12;5271:315;5336:6;5344;5397:2;5385:9;5376:7;5372:23;5368:32;5365:52;;;5413:1;5410;5403:12;5365:52;5436:29;5455:9;5436:29;:::i;:::-;5426:39;;5515:2;5504:9;5500:18;5487:32;5528:28;5550:5;5528:28;:::i;:::-;5575:5;5565:15;;;5271:315;;;;;:::o;5591:667::-;5686:6;5694;5702;5710;5763:3;5751:9;5742:7;5738:23;5734:33;5731:53;;;5780:1;5777;5770:12;5731:53;5803:29;5822:9;5803:29;:::i;:::-;5793:39;;5851:38;5885:2;5874:9;5870:18;5851:38;:::i;:::-;5841:48;-1:-1:-1;5936:2:1;5921:18;;5908:32;;-1:-1:-1;5991:2:1;5976:18;;5963:32;-1:-1:-1;;;;;6007:30:1;;6004:50;;;6050:1;6047;6040:12;6004:50;6073:22;;6126:4;6118:13;;6114:27;-1:-1:-1;6104:55:1;;6155:1;6152;6145:12;6104:55;6178:74;6244:7;6239:2;6226:16;6221:2;6217;6213:11;6178:74;:::i;:::-;6168:84;;;5591:667;;;;;;;:::o;6263:260::-;6331:6;6339;6392:2;6380:9;6371:7;6367:23;6363:32;6360:52;;;6408:1;6405;6398:12;6360:52;6431:29;6450:9;6431:29;:::i;:::-;6421:39;;6479:38;6513:2;6502:9;6498:18;6479:38;:::i;:::-;6469:48;;6263:260;;;;;:::o;6528:380::-;6607:1;6603:12;;;;6650;;;6671:61;;6725:4;6717:6;6713:17;6703:27;;6671:61;6778:2;6770:6;6767:14;6747:18;6744:38;6741:161;;6824:10;6819:3;6815:20;6812:1;6805:31;6859:4;6856:1;6849:15;6887:4;6884:1;6877:15;6741:161;;6528:380;;;:::o;6913:127::-;6974:10;6969:3;6965:20;6962:1;6955:31;7005:4;7002:1;6995:15;7029:4;7026:1;7019:15;7045:128;7085:3;7116:1;7112:6;7109:1;7106:13;7103:39;;;7122:18;;:::i;:::-;-1:-1:-1;7158:9:1;;7045:128::o;7178:135::-;7217:3;7238:17;;;7235:43;;7258:18;;:::i;:::-;-1:-1:-1;7305:1:1;7294:13;;7178:135::o;7318:127::-;7379:10;7374:3;7370:20;7367:1;7360:31;7410:4;7407:1;7400:15;7434:4;7431:1;7424:15;7450:120;7490:1;7516;7506:35;;7521:18;;:::i;:::-;-1:-1:-1;7555:9:1;;7450:120::o;7575:125::-;7615:4;7643:1;7640;7637:8;7634:34;;;7648:18;;:::i;:::-;-1:-1:-1;7685:9:1;;7575:125::o;8041:545::-;8143:2;8138:3;8135:11;8132:448;;;8179:1;8204:5;8200:2;8193:17;8249:4;8245:2;8235:19;8319:2;8307:10;8303:19;8300:1;8296:27;8290:4;8286:38;8355:4;8343:10;8340:20;8337:47;;;-1:-1:-1;8378:4:1;8337:47;8433:2;8428:3;8424:12;8421:1;8417:20;8411:4;8407:31;8397:41;;8488:82;8506:2;8499:5;8496:13;8488:82;;;8551:17;;;8532:1;8521:13;8488:82;;;8492:3;;;8041:545;;;:::o;8762:1352::-;8882:10;;-1:-1:-1;;;;;8904:30:1;;8901:56;;;8937:18;;:::i;:::-;8966:97;9056:6;9016:38;9048:4;9042:11;9016:38;:::i;:::-;9010:4;8966:97;:::i;:::-;9118:4;;9182:2;9171:14;;9199:1;9194:663;;;;9901:1;9918:6;9915:89;;;-1:-1:-1;9970:19:1;;;9964:26;9915:89;-1:-1:-1;;8719:1:1;8715:11;;;8711:24;8707:29;8697:40;8743:1;8739:11;;;8694:57;10017:81;;9164:944;;9194:663;7988:1;7981:14;;;8025:4;8012:18;;-1:-1:-1;;9230:20:1;;;9348:236;9362:7;9359:1;9356:14;9348:236;;;9451:19;;;9445:26;9430:42;;9543:27;;;;9511:1;9499:14;;;;9378:19;;9348:236;;;9352:3;9612:6;9603:7;9600:19;9597:201;;;9673:19;;;9667:26;-1:-1:-1;;9756:1:1;9752:14;;;9768:3;9748:24;9744:37;9740:42;9725:58;9710:74;;9597:201;-1:-1:-1;;;;;9844:1:1;9828:14;;;9824:22;9811:36;;-1:-1:-1;8762:1352:1:o;10345:1174::-;10622:3;10651:1;10684:6;10678:13;10714:36;10740:9;10714:36;:::i;:::-;10769:1;10786:18;;;10813:133;;;;10960:1;10955:356;;;;10779:532;;10813:133;-1:-1:-1;;10846:24:1;;10834:37;;10919:14;;10912:22;10900:35;;10891:45;;;-1:-1:-1;10813:133:1;;10955:356;10986:6;10983:1;10976:17;11016:4;11061:2;11058:1;11048:16;11086:1;11100:165;11114:6;11111:1;11108:13;11100:165;;;11192:14;;11179:11;;;11172:35;11235:16;;;;11129:10;;11100:165;;;11104:3;;;11294:6;11289:3;11285:16;11278:23;;10779:532;;;;;11342:6;11336:13;11358:55;11404:8;11399:3;11392:4;11384:6;11380:17;11358:55;:::i;:::-;-1:-1:-1;;;11435:18:1;;11462:22;;;11511:1;11500:13;;10345:1174;-1:-1:-1;;;;10345:1174:1:o;11833:245::-;11900:6;11953:2;11941:9;11932:7;11928:23;11924:32;11921:52;;;11969:1;11966;11959:12;11921:52;12001:9;11995:16;12020:28;12042:5;12020:28;:::i;12083:338::-;12285:2;12267:21;;;12324:2;12304:18;;;12297:30;-1:-1:-1;;;12358:2:1;12343:18;;12336:44;12412:2;12397:18;;12083:338::o;12426:555::-;-1:-1:-1;;;;;12749:15:1;;;12731:34;;12801:15;;;;12796:2;12781:18;;12774:43;12848:2;12833:18;;12826:34;;;;12896:3;12891:2;12876:18;;12869:31;;;12674:4;12916:19;;;12909:30;12711:3;12956:19;;12426:555::o;12986:249::-;13055:6;13108:2;13096:9;13087:7;13083:23;13079:32;13076:52;;;13124:1;13121;13114:12;13076:52;13156:9;13150:16;13175:30;13199:5;13175:30;:::i;13240:340::-;13442:2;13424:21;;;13481:2;13461:18;;;13454:30;-1:-1:-1;;;13515:2:1;13500:18;;13493:46;13571:2;13556:18;;13240:340::o;13924:341::-;14126:2;14108:21;;;14165:2;14145:18;;;14138:30;-1:-1:-1;;;14199:2:1;14184:18;;14177:47;14256:2;14241:18;;13924:341::o;14270:489::-;-1:-1:-1;;;;;14539:15:1;;;14521:34;;14591:15;;14586:2;14571:18;;14564:43;14638:2;14623:18;;14616:34;;;14686:3;14681:2;14666:18;;14659:31;;;14464:4;;14707:46;;14733:19;;14725:6;14707:46;:::i;:::-;14699:54;14270:489;-1:-1:-1;;;;;;14270:489:1:o;14764:112::-;14796:1;14822;14812:35;;14827:18;;:::i;:::-;-1:-1:-1;14861:9:1;;14764:112::o;14881:127::-;14942:10;14937:3;14933:20;14930:1;14923:31;14973:4;14970:1;14963:15;14997:4;14994:1;14987:15

Swarm Source

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