ERC-1155
Overview
Max Total Supply
295 GANG
Holders
293
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GangPass
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.11; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract OwnableDelegateProxy {} contract OpenSeaProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract GangPass is ERC1155Supply, Ownable { using ECDSA for bytes32; address private whitelistSigner = 0xb1A7559274Bc1e92c355C7244255DC291AFEDB00; address private withdrawalAddress = 0x80c74C907071482Ec7E52d6C11185DAeAFE084Ab; address private proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1; bool public saleIsActive; bool public publicSaleIsActive; uint[4] public maxSupplies = [0, 650, 200, 100]; //number of max supplies for each tokenId uint[4] public reservedTiers = [0, 30, 15, 4]; //number of reserved tiers for each tokenId. They are not included in max supplies uint[4] public prices = [0, 0.099 ether, 0.19 ether, 0.29 ether]; string public name = "Gang Pass"; string public symbol = "GANG"; bytes32 private DOMAIN_SEPARATOR; bytes32 private constant TYPEHASH = keccak256("mintToken(address to,uint tokenId)"); mapping(address => bool) public isMinted; mapping(uint => uint) public mintedReservedTiers; //number of minted reserved tiers for each tokenId modifier onlyAddress() { require(msg.sender == tx.origin, "No transaction from smart contracts!"); _; } constructor() ERC1155("https://ipfs.io/ipfs/QmYx2UKvLsMBBhknwm35Ai7jESe5Yu2v6GZua9k1bcBbaz/{id}.json") { uint256 chainId; assembly { chainId := chainid() } DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ), keccak256(bytes("Gang Pass")), keccak256(bytes("1")), chainId, address(this) ) ); } function mintToken(uint tokenId, bytes calldata signature) external payable onlyAddress { uint currentSupply = totalSupply(tokenId) - mintedReservedTiers[tokenId]; //excluding minted reserved tiers require(whitelistSigner != address(0), "Whitelist signer is not set yet"); require(saleIsActive, "Sale is not active yet"); require(!isMinted[msg.sender], "You already minted NFT"); require(currentSupply < maxSupplies[tokenId], "Exceeds max supply for the corresponding tier"); require(msg.value >= prices[tokenId], "Not enough ETH for transaction"); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256(abi.encode(TYPEHASH, msg.sender, tokenId)) ) ); address signer = digest.recover(signature); require(signer == whitelistSigner, "Invalid signature"); isMinted[msg.sender] = true; _mint(msg.sender, tokenId, 1, ""); } function publicMint(uint tokenId) external payable onlyAddress { uint currentSupply = totalSupply(tokenId) - mintedReservedTiers[tokenId]; //excluding minted reserved tiers require(publicSaleIsActive, "Public sale is not active yet"); require(tokenId == 1 || tokenId == 2 || tokenId == 3, "Not allowed"); require(!isMinted[msg.sender], "You already minted NFT"); require(currentSupply < maxSupplies[tokenId], "Exceeds max supply for the corresponding tier"); require(msg.value >= prices[tokenId], "Not enough ETH for transaction"); isMinted[msg.sender] = true; _mint(msg.sender, tokenId, 1, ""); } function giveAway(address to, uint tokenId) external onlyOwner { require(!isMinted[to], "Receiver address already minted NFT"); require(balanceOf(to, tokenId) == 0, "Receiver address already has corresponding tier"); require(tokenId == 1 || tokenId == 2 || tokenId == 3, "Only Tier1, Tier2 and Tier3"); require(mintedReservedTiers[tokenId] < reservedTiers[tokenId], "All reserved NFTs for the corresponding tier are minted"); mintedReservedTiers[tokenId] += 1; _mint(to, tokenId, 1, ""); } function setURI(string memory _newuri) external onlyOwner { _setURI(_newuri); } function setWhitelistSigner(address _newWhitelistSigner) external onlyOwner { whitelistSigner = _newWhitelistSigner; } function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner { proxyRegistryAddress = _proxyRegistryAddress; } function setWithdrawalAddress(address _withdrawalAddress) external onlyOwner { withdrawalAddress = _withdrawalAddress; } function setSaleState() external onlyOwner { saleIsActive = !saleIsActive; } function setPublicSaleState() external onlyOwner { publicSaleIsActive = !publicSaleIsActive; } function setMaxSupplies(uint t1, uint t2, uint t3) external onlyOwner { maxSupplies = [0, t1, t2, t3]; } function setPrices(uint256 price_t1, uint256 price_t2, uint256 price_t3) external onlyOwner { prices = [0, price_t1, price_t2, price_t3]; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Balance is not sufficient"); _withdraw(withdrawalAddress, balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } //@dev - allow gasless OpenSea listing function isApprovedForAll(address owner, address operator) public view override returns (bool) { OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress); if(address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; import "../ERC1155.sol"; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./extensions/IERC1155MetadataURI.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @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, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "../IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @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); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"isMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupplies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintedReservedTiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"uint256"}],"name":"prices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reservedTiers","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"t1","type":"uint256"},{"internalType":"uint256","name":"t2","type":"uint256"},{"internalType":"uint256","name":"t3","type":"uint256"}],"name":"setMaxSupplies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_t1","type":"uint256"},{"internalType":"uint256","name":"price_t2","type":"uint256"},{"internalType":"uint256","name":"price_t3","type":"uint256"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWhitelistSigner","type":"address"}],"name":"setWhitelistSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawalAddress","type":"address"}],"name":"setWithdrawalAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600580546001600160a01b031990811673b1a7559274bc1e92c355c7244255dc291afedb00179091556006805482167380c74c907071482ec7e52d6c11185daeafe084ab1790556007805490911673a5409ec958c83c3f309868babaca7c86dcb077c11790556101006040526000608090815261028a60a05260c860c052606460e05262000092906008906004620002f5565b506040805160808101825260008152601e6020820152600f91810191909152600460608201819052620000c891600c916200033e565b50604080516080810182526000815267015fb7f9b8c3800060208201526702a303fe4b530000918101919091526704064976a8dd000060608201526200011390601090600462000374565b506040805180820190915260098082526847616e67205061737360b81b60209092019182526200014691601491620003b0565b506040805180820190915260048082526347414e4760e01b60209092019182526200017491601591620003b0565b503480156200018257600080fd5b506040518060800160405280604d8152602001620033af604d9139620001a8816200028a565b50620001b433620002a3565b604080518082018252600981526847616e67205061737360b81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fa50c7701992ed8a17247cd3d979199d5bc70a579eb818ae659cf818f77da2244818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012060165562000481565b80516200029f906002906020840190620003b0565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82600481019282156200032c579160200282015b828111156200032c578251829061ffff1690559160200191906001019062000309565b506200033a9291506200042d565b5090565b82600481019282156200032c579160200282015b828111156200032c578251829060ff1690559160200191906001019062000352565b82600481019282156200032c579160200282015b828111156200032c57825182906001600160401b031690559160200191906001019062000388565b828054620003be9062000444565b90600052602060002090601f016020900481019282620003e257600085556200032c565b82601f10620003fd57805160ff19168380011785556200032c565b828001600101855582156200032c579182015b828111156200032c57825182559160200191906001019062000410565b5b808211156200033a57600081556001016200042e565b600181811c908216806200045957607f821691505b602082108114156200047b57634e487b7160e01b600052602260045260246000fd5b50919050565b612f1e80620004916000396000f3fe6080604052600436106101f85760003560e01c8063715018a61161010d578063ca800144116100a0578063e985e9c51161006f578063e985e9c5146105b2578063eb8d2444146105d2578063f242432a146105f3578063f2fde38b14610613578063f9f2a7ce1461063357600080fd5b8063ca80014414610532578063d26ea6c014610552578063d338143814610572578063e1baf0901461059257600080fd5b8063a22cb465116100dc578063a22cb465146104a5578063a88fe42d146104c5578063bc31c1c1146104e5578063bd85b0391461050557600080fd5b8063715018a61461043357806387962dcc146104485780638da5cb5b1461046857806395d89b411461049057600080fd5b80631ed40559116101905780632eb2c2d61161015f5780632eb2c2d61461038d5780633ccfd60b146103ad57806345487dc3146103c25780634e1273f4146103d75780634f558e791461040457600080fd5b80631ed405591461032557806321b8092e1461033a57806327962edc1461035a5780632db115441461037a57600080fd5b80630e89341c116101cc5780630e89341c146102a45780630f30cde0146102c45780630fcf2e75146102d75780631c2de1a3146102f857600080fd5b8062fdd58e146101fd57806301ffc9a71461023057806302fe53051461026057806306fdde0314610282575b600080fd5b34801561020957600080fd5b5061021d6102183660046124f2565b610663565b6040519081526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b366004612534565b6106fd565b6040519015158152602001610227565b34801561026c57600080fd5b5061028061027b3660046125f9565b61074d565b005b34801561028e57600080fd5b50610297610783565b604051610227919061268f565b3480156102b057600080fd5b506102976102bf3660046126a2565b610811565b6102806102d23660046126bb565b6108a5565b3480156102e357600080fd5b5060075461025090600160a81b900460ff1681565b34801561030457600080fd5b5061021d6103133660046126a2565b60186020526000908152604090205481565b34801561033157600080fd5b50610280610bf4565b34801561034657600080fd5b50610280610355366004612737565b610c3f565b34801561036657600080fd5b5061021d6103753660046126a2565b610c8b565b6102806103883660046126a2565b610ca2565b34801561039957600080fd5b506102806103a8366004612809565b610ec0565b3480156103b957600080fd5b50610280610f57565b3480156103ce57600080fd5b50610280610fe5565b3480156103e357600080fd5b506103f76103f23660046128b7565b611030565b60405161022791906129bf565b34801561041057600080fd5b5061025061041f3660046126a2565b600090815260036020526040902054151590565b34801561043f57600080fd5b5061028061115a565b34801561045457600080fd5b5061021d6104633660046126a2565b611190565b34801561047457600080fd5b506004546040516001600160a01b039091168152602001610227565b34801561049c57600080fd5b506102976111a0565b3480156104b157600080fd5b506102806104c03660046129d2565b6111ad565b3480156104d157600080fd5b506102806104e0366004612a10565b6111b8565b3480156104f157600080fd5b5061021d6105003660046126a2565b61121a565b34801561051157600080fd5b5061021d6105203660046126a2565b60009081526003602052604090205490565b34801561053e57600080fd5b5061028061054d3660046124f2565b61122a565b34801561055e57600080fd5b5061028061056d366004612737565b611477565b34801561057e57600080fd5b5061028061058d366004612737565b6114c3565b34801561059e57600080fd5b506102806105ad366004612a10565b61150f565b3480156105be57600080fd5b506102506105cd366004612a3c565b61156b565b3480156105de57600080fd5b5060075461025090600160a01b900460ff1681565b3480156105ff57600080fd5b5061028061060e366004612a6a565b61162c565b34801561061f57600080fd5b5061028061062e366004612737565b6116b3565b34801561063f57600080fd5b5061025061064e366004612737565b60176020526000908152604090205460ff1681565b60006001600160a01b0383166106d45760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061072e57506001600160e01b031982166303a24d0760e21b145b806106f757506301ffc9a760e01b6001600160e01b03198316146106f7565b6004546001600160a01b031633146107775760405162461bcd60e51b81526004016106cb90612ad3565b6107808161174b565b50565b6014805461079090612b08565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90612b08565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b505050505081565b60606002805461082090612b08565b80601f016020809104026020016040519081016040528092919081815260200182805461084c90612b08565b80156108995780601f1061086e57610100808354040283529160200191610899565b820191906000526020600020905b81548152906001019060200180831161087c57829003601f168201915b50505050509050919050565b3332146108c45760405162461bcd60e51b81526004016106cb90612b43565b60008381526018602090815260408083205460039092528220546108e89190612b9d565b6005549091506001600160a01b03166109435760405162461bcd60e51b815260206004820152601f60248201527f57686974656c697374207369676e6572206973206e6f7420736574207965740060448201526064016106cb565b600754600160a01b900460ff166109955760405162461bcd60e51b815260206004820152601660248201527514d85b19481a5cc81b9bdd081858dd1a5d99481e595d60521b60448201526064016106cb565b3360009081526017602052604090205460ff16156109ee5760405162461bcd60e51b8152602060048201526016602482015275165bdd48185b1c9958591e481b5a5b9d19590813919560521b60448201526064016106cb565b60088460048110610a0157610a01612bb4565b01548110610a215760405162461bcd60e51b81526004016106cb90612bca565b60108460048110610a3457610a34612bb4565b0154341015610a855760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e000060448201526064016106cb565b601654604080517f8836308731de00c79c0e3a0e2cefcd148ce6faaa6785dc62f4107917b4e530b860208201523391810191909152606081018690526000919060800160405160208183030381529060405280519060200120604051602001610b0592919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000610b6185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061175e9050565b6005549091506001600160a01b03808316911614610bb55760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016106cb565b336000818152601760209081526040808320805460ff191660019081179091558151928301909152918152610bec9291899161177a565b505050505050565b6004546001600160a01b03163314610c1e5760405162461bcd60e51b81526004016106cb90612ad3565b6007805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6004546001600160a01b03163314610c695760405162461bcd60e51b81526004016106cb90612ad3565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600c8160048110610c9b57600080fd5b0154905081565b333214610cc15760405162461bcd60e51b81526004016106cb90612b43565b6000818152601860209081526040808320546003909252822054610ce59190612b9d565b600754909150600160a81b900460ff16610d415760405162461bcd60e51b815260206004820152601d60248201527f5075626c69632073616c65206973206e6f74206163746976652079657400000060448201526064016106cb565b8160011480610d505750816002145b80610d5b5750816003145b610d955760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016106cb565b3360009081526017602052604090205460ff1615610dee5760405162461bcd60e51b8152602060048201526016602482015275165bdd48185b1c9958591e481b5a5b9d19590813919560521b60448201526064016106cb565b60088260048110610e0157610e01612bb4565b01548110610e215760405162461bcd60e51b81526004016106cb90612bca565b60108260048110610e3457610e34612bb4565b0154341015610e855760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e000060448201526064016106cb565b336000818152601760209081526040808320805460ff191660019081179091558151928301909152918152610ebc9291859161177a565b5050565b6001600160a01b038516331480610edc5750610edc853361156b565b610f435760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016106cb565b610f50858585858561188a565b5050505050565b6004546001600160a01b03163314610f815760405162461bcd60e51b81526004016106cb90612ad3565b4780610fcf5760405162461bcd60e51b815260206004820152601960248201527f42616c616e6365206973206e6f742073756666696369656e740000000000000060448201526064016106cb565b600654610780906001600160a01b031682611a6d565b6004546001600160a01b0316331461100f5760405162461bcd60e51b81526004016106cb90612ad3565b6007805460ff60a81b198116600160a81b9182900460ff1615909102179055565b606081518351146110955760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016106cb565b6000835167ffffffffffffffff8111156110b1576110b1612558565b6040519080825280602002602001820160405280156110da578160200160208202803683370190505b50905060005b8451811015611152576111258582815181106110fe576110fe612bb4565b602002602001015185838151811061111857611118612bb4565b6020026020010151610663565b82828151811061113757611137612bb4565b602090810291909101015261114b81612c17565b90506110e0565b509392505050565b6004546001600160a01b031633146111845760405162461bcd60e51b81526004016106cb90612ad3565b61118e6000611b08565b565b60088160048110610c9b57600080fd5b6015805461079090612b08565b610ebc338383611b5a565b6004546001600160a01b031633146111e25760405162461bcd60e51b81526004016106cb90612ad3565b604051806080016040528060008152602001848152602001838152602001828152506010906004611214929190612417565b50505050565b60108160048110610c9b57600080fd5b6004546001600160a01b031633146112545760405162461bcd60e51b81526004016106cb90612ad3565b6001600160a01b03821660009081526017602052604090205460ff16156112c95760405162461bcd60e51b815260206004820152602360248201527f5265636569766572206164647265737320616c7265616479206d696e7465642060448201526213919560ea1b60648201526084016106cb565b6112d38282610663565b156113385760405162461bcd60e51b815260206004820152602f60248201527f5265636569766572206164647265737320616c72656164792068617320636f7260448201526e3932b9b837b73234b733903a34b2b960891b60648201526084016106cb565b80600114806113475750806002145b806113525750806003145b61139e5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792054696572312c20546965723220616e64205469657233000000000060448201526064016106cb565b600c81600481106113b1576113b1612bb4565b0154600082815260186020526040902054106114355760405162461bcd60e51b815260206004820152603760248201527f416c6c207265736572766564204e46547320666f722074686520636f7272657360448201527f706f6e64696e67207469657220617265206d696e74656400000000000000000060648201526084016106cb565b6000818152601860205260408120805460019290611454908490612c32565b92505081905550610ebc828260016040518060200160405280600081525061177a565b6004546001600160a01b031633146114a15760405162461bcd60e51b81526004016106cb90612ad3565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031633146114ed5760405162461bcd60e51b81526004016106cb90612ad3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031633146115395760405162461bcd60e51b81526004016106cb90612ad3565b604051806080016040528060008152602001848152602001838152602001828152506008906004611214929190612417565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c455279190602401602060405180830381865afa1580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e19190612c4a565b6001600160a01b031614156115fa5760019150506106f7565b6001600160a01b0380851660009081526001602090815260408083209387168352929052205460ff165b949350505050565b6001600160a01b0385163314806116485750611648853361156b565b6116a65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016106cb565b610f508585858585611c3b565b6004546001600160a01b031633146116dd5760405162461bcd60e51b81526004016106cb90612ad3565b6001600160a01b0381166117425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106cb565b61078081611b08565b8051610ebc906002906020840190612455565b600080600061176d8585611d58565b9150915061115281611dc8565b6001600160a01b0384166117da5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106cb565b336117fa816000876117eb88611f83565b6117f488611f83565b87611fce565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061182a908490612c32565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f50816000878787876120da565b81518351146118ec5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016106cb565b6001600160a01b0384166119125760405162461bcd60e51b81526004016106cb90612c67565b33611921818787878787611fce565b60005b8451811015611a0757600085828151811061194157611941612bb4565b60200260200101519050600085838151811061195f5761195f612bb4565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156119af5760405162461bcd60e51b81526004016106cb90612cac565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906119ec908490612c32565b9250508190555050505080611a0090612c17565b9050611924565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a57929190612cf6565b60405180910390a4610bec818787878787612236565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611aba576040519150601f19603f3d011682016040523d82523d6000602084013e611abf565b606091505b5050905080611b035760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016106cb565b505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611bce5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016106cb565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416611c615760405162461bcd60e51b81526004016106cb90612c67565b33611c718187876117eb88611f83565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611cb25760405162461bcd60e51b81526004016106cb90612cac565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611cef908490612c32565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611d4f8288888888886120da565b50505050505050565b600080825160411415611d8f5760208301516040840151606085015160001a611d83878285856122f1565b94509450505050611dc1565b825160401415611db95760208301516040840151611dae8683836123de565b935093505050611dc1565b506000905060025b9250929050565b6000816004811115611ddc57611ddc612d24565b1415611de55750565b6001816004811115611df957611df9612d24565b1415611e475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106cb565b6002816004811115611e5b57611e5b612d24565b1415611ea95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106cb565b6003816004811115611ebd57611ebd612d24565b1415611f165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106cb565b6004816004811115611f2a57611f2a612d24565b14156107805760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106cb565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611fbd57611fbd612bb4565b602090810291909101015292915050565b6001600160a01b0385166120555760005b835181101561205357828181518110611ffa57611ffa612bb4565b60200260200101516003600086848151811061201857612018612bb4565b60200260200101518152602001908152602001600020600082825461203d9190612c32565b9091555061204c905081612c17565b9050611fdf565b505b6001600160a01b038416610bec5760005b8351811015611d4f5782818151811061208157612081612bb4565b60200260200101516003600086848151811061209f5761209f612bb4565b6020026020010151815260200190815260200160002060008282546120c49190612b9d565b909155506120d3905081612c17565b9050612066565b6001600160a01b0384163b15610bec5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061211e9089908990889088908890600401612d3a565b6020604051808303816000875af1925050508015612159575060408051601f3d908101601f1916820190925261215691810190612d7f565b60015b61220657612165612d9c565b806308c379a0141561219f575061217a612db8565b8061218557506121a1565b8060405162461bcd60e51b81526004016106cb919061268f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016106cb565b6001600160e01b0319811663f23a6e6160e01b14611d4f5760405162461bcd60e51b81526004016106cb90612e42565b6001600160a01b0384163b15610bec5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061227a9089908990889088908890600401612e8a565b6020604051808303816000875af19250505080156122b5575060408051601f3d908101601f191682019092526122b291810190612d7f565b60015b6122c157612165612d9c565b6001600160e01b0319811663bc197c8160e01b14611d4f5760405162461bcd60e51b81526004016106cb90612e42565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561232857506000905060036123d5565b8460ff16601b1415801561234057508460ff16601c14155b1561235157506000905060046123d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156123a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166123ce576000600192509250506123d5565b9150600090505b94509492505050565b6000806001600160ff1b038316816123fb60ff86901c601b612c32565b9050612409878288856122f1565b935093505050935093915050565b8260048101928215612445579160200282015b8281111561244557825182559160200191906001019061242a565b506124519291506124c8565b5090565b82805461246190612b08565b90600052602060002090601f0160209004810192826124835760008555612445565b82601f1061249c57805160ff1916838001178555612445565b82800160010185558215612445579182018281111561244557825182559160200191906001019061242a565b5b8082111561245157600081556001016124c9565b6001600160a01b038116811461078057600080fd5b6000806040838503121561250557600080fd5b8235612510816124dd565b946020939093013593505050565b6001600160e01b03198116811461078057600080fd5b60006020828403121561254657600080fd5b81356125518161251e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561259457612594612558565b6040525050565b600067ffffffffffffffff8311156125b5576125b5612558565b6040516125cc601f8501601f19166020018261256e565b8091508381528484840111156125e157600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561260b57600080fd5b813567ffffffffffffffff81111561262257600080fd5b8201601f8101841361263357600080fd5b6116248482356020840161259b565b6000815180845260005b818110156126685760208185018101518683018201520161264c565b8181111561267a576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006125516020830184612642565b6000602082840312156126b457600080fd5b5035919050565b6000806000604084860312156126d057600080fd5b83359250602084013567ffffffffffffffff808211156126ef57600080fd5b818601915086601f83011261270357600080fd5b81358181111561271257600080fd5b87602082850101111561272457600080fd5b6020830194508093505050509250925092565b60006020828403121561274957600080fd5b8135612551816124dd565b600067ffffffffffffffff82111561276e5761276e612558565b5060051b60200190565b600082601f83011261278957600080fd5b8135602061279682612754565b6040516127a3828261256e565b83815260059390931b85018201928281019150868411156127c357600080fd5b8286015b848110156127de57803583529183019183016127c7565b509695505050505050565b600082601f8301126127fa57600080fd5b6125518383356020850161259b565b600080600080600060a0868803121561282157600080fd5b853561282c816124dd565b9450602086013561283c816124dd565b9350604086013567ffffffffffffffff8082111561285957600080fd5b61286589838a01612778565b9450606088013591508082111561287b57600080fd5b61288789838a01612778565b9350608088013591508082111561289d57600080fd5b506128aa888289016127e9565b9150509295509295909350565b600080604083850312156128ca57600080fd5b823567ffffffffffffffff808211156128e257600080fd5b818501915085601f8301126128f657600080fd5b8135602061290382612754565b604051612910828261256e565b83815260059390931b850182019282810191508984111561293057600080fd5b948201945b83861015612957578535612948816124dd565b82529482019490820190612935565b9650508601359250508082111561296d57600080fd5b5061297a85828601612778565b9150509250929050565b600081518084526020808501945080840160005b838110156129b457815187529582019590820190600101612998565b509495945050505050565b6020815260006125516020830184612984565b600080604083850312156129e557600080fd5b82356129f0816124dd565b915060208301358015158114612a0557600080fd5b809150509250929050565b600080600060608486031215612a2557600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a4f57600080fd5b8235612a5a816124dd565b91506020830135612a05816124dd565b600080600080600060a08688031215612a8257600080fd5b8535612a8d816124dd565b94506020860135612a9d816124dd565b93506040860135925060608601359150608086013567ffffffffffffffff811115612ac757600080fd5b6128aa888289016127e9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b1c57607f821691505b60208210811415612b3d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4e6f207472616e73616374696f6e2066726f6d20736d61727420636f6e7472616040820152636374732160e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015612baf57612baf612b87565b500390565b634e487b7160e01b600052603260045260246000fd5b6020808252602d908201527f45786365656473206d617820737570706c7920666f722074686520636f72726560408201526c39b837b73234b733903a34b2b960991b606082015260800190565b6000600019821415612c2b57612c2b612b87565b5060010190565b60008219821115612c4557612c45612b87565b500190565b600060208284031215612c5c57600080fd5b8151612551816124dd565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612d096040830185612984565b8281036020840152612d1b8185612984565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612d7490830184612642565b979650505050505050565b600060208284031215612d9157600080fd5b81516125518161251e565b600060033d1115612db55760046000803e5060005160e01c5b90565b600060443d1015612dc65790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612df657505050505090565b8285019150815181811115612e0e5750505050505090565b843d8701016020828501011115612e285750505050505090565b612e376020828601018761256e565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090612eb690830186612984565b8281036060840152612ec88186612984565b90508281036080840152612edc8185612642565b9897505050505050505056fea26469706673582212201bb7ab443a0f779d26b4f4c483092d97291f86e87fd406a1a2dafd4502b5e44964736f6c634300080b003368747470733a2f2f697066732e696f2f697066732f516d597832554b764c734d4242686b6e776d33354169376a455365355975327636475a7561396b3162634262617a2f7b69647d2e6a736f6e
Deployed Bytecode
0x6080604052600436106101f85760003560e01c8063715018a61161010d578063ca800144116100a0578063e985e9c51161006f578063e985e9c5146105b2578063eb8d2444146105d2578063f242432a146105f3578063f2fde38b14610613578063f9f2a7ce1461063357600080fd5b8063ca80014414610532578063d26ea6c014610552578063d338143814610572578063e1baf0901461059257600080fd5b8063a22cb465116100dc578063a22cb465146104a5578063a88fe42d146104c5578063bc31c1c1146104e5578063bd85b0391461050557600080fd5b8063715018a61461043357806387962dcc146104485780638da5cb5b1461046857806395d89b411461049057600080fd5b80631ed40559116101905780632eb2c2d61161015f5780632eb2c2d61461038d5780633ccfd60b146103ad57806345487dc3146103c25780634e1273f4146103d75780634f558e791461040457600080fd5b80631ed405591461032557806321b8092e1461033a57806327962edc1461035a5780632db115441461037a57600080fd5b80630e89341c116101cc5780630e89341c146102a45780630f30cde0146102c45780630fcf2e75146102d75780631c2de1a3146102f857600080fd5b8062fdd58e146101fd57806301ffc9a71461023057806302fe53051461026057806306fdde0314610282575b600080fd5b34801561020957600080fd5b5061021d6102183660046124f2565b610663565b6040519081526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b366004612534565b6106fd565b6040519015158152602001610227565b34801561026c57600080fd5b5061028061027b3660046125f9565b61074d565b005b34801561028e57600080fd5b50610297610783565b604051610227919061268f565b3480156102b057600080fd5b506102976102bf3660046126a2565b610811565b6102806102d23660046126bb565b6108a5565b3480156102e357600080fd5b5060075461025090600160a81b900460ff1681565b34801561030457600080fd5b5061021d6103133660046126a2565b60186020526000908152604090205481565b34801561033157600080fd5b50610280610bf4565b34801561034657600080fd5b50610280610355366004612737565b610c3f565b34801561036657600080fd5b5061021d6103753660046126a2565b610c8b565b6102806103883660046126a2565b610ca2565b34801561039957600080fd5b506102806103a8366004612809565b610ec0565b3480156103b957600080fd5b50610280610f57565b3480156103ce57600080fd5b50610280610fe5565b3480156103e357600080fd5b506103f76103f23660046128b7565b611030565b60405161022791906129bf565b34801561041057600080fd5b5061025061041f3660046126a2565b600090815260036020526040902054151590565b34801561043f57600080fd5b5061028061115a565b34801561045457600080fd5b5061021d6104633660046126a2565b611190565b34801561047457600080fd5b506004546040516001600160a01b039091168152602001610227565b34801561049c57600080fd5b506102976111a0565b3480156104b157600080fd5b506102806104c03660046129d2565b6111ad565b3480156104d157600080fd5b506102806104e0366004612a10565b6111b8565b3480156104f157600080fd5b5061021d6105003660046126a2565b61121a565b34801561051157600080fd5b5061021d6105203660046126a2565b60009081526003602052604090205490565b34801561053e57600080fd5b5061028061054d3660046124f2565b61122a565b34801561055e57600080fd5b5061028061056d366004612737565b611477565b34801561057e57600080fd5b5061028061058d366004612737565b6114c3565b34801561059e57600080fd5b506102806105ad366004612a10565b61150f565b3480156105be57600080fd5b506102506105cd366004612a3c565b61156b565b3480156105de57600080fd5b5060075461025090600160a01b900460ff1681565b3480156105ff57600080fd5b5061028061060e366004612a6a565b61162c565b34801561061f57600080fd5b5061028061062e366004612737565b6116b3565b34801561063f57600080fd5b5061025061064e366004612737565b60176020526000908152604090205460ff1681565b60006001600160a01b0383166106d45760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061072e57506001600160e01b031982166303a24d0760e21b145b806106f757506301ffc9a760e01b6001600160e01b03198316146106f7565b6004546001600160a01b031633146107775760405162461bcd60e51b81526004016106cb90612ad3565b6107808161174b565b50565b6014805461079090612b08565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90612b08565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b505050505081565b60606002805461082090612b08565b80601f016020809104026020016040519081016040528092919081815260200182805461084c90612b08565b80156108995780601f1061086e57610100808354040283529160200191610899565b820191906000526020600020905b81548152906001019060200180831161087c57829003601f168201915b50505050509050919050565b3332146108c45760405162461bcd60e51b81526004016106cb90612b43565b60008381526018602090815260408083205460039092528220546108e89190612b9d565b6005549091506001600160a01b03166109435760405162461bcd60e51b815260206004820152601f60248201527f57686974656c697374207369676e6572206973206e6f7420736574207965740060448201526064016106cb565b600754600160a01b900460ff166109955760405162461bcd60e51b815260206004820152601660248201527514d85b19481a5cc81b9bdd081858dd1a5d99481e595d60521b60448201526064016106cb565b3360009081526017602052604090205460ff16156109ee5760405162461bcd60e51b8152602060048201526016602482015275165bdd48185b1c9958591e481b5a5b9d19590813919560521b60448201526064016106cb565b60088460048110610a0157610a01612bb4565b01548110610a215760405162461bcd60e51b81526004016106cb90612bca565b60108460048110610a3457610a34612bb4565b0154341015610a855760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e000060448201526064016106cb565b601654604080517f8836308731de00c79c0e3a0e2cefcd148ce6faaa6785dc62f4107917b4e530b860208201523391810191909152606081018690526000919060800160405160208183030381529060405280519060200120604051602001610b0592919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000610b6185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061175e9050565b6005549091506001600160a01b03808316911614610bb55760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016106cb565b336000818152601760209081526040808320805460ff191660019081179091558151928301909152918152610bec9291899161177a565b505050505050565b6004546001600160a01b03163314610c1e5760405162461bcd60e51b81526004016106cb90612ad3565b6007805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6004546001600160a01b03163314610c695760405162461bcd60e51b81526004016106cb90612ad3565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600c8160048110610c9b57600080fd5b0154905081565b333214610cc15760405162461bcd60e51b81526004016106cb90612b43565b6000818152601860209081526040808320546003909252822054610ce59190612b9d565b600754909150600160a81b900460ff16610d415760405162461bcd60e51b815260206004820152601d60248201527f5075626c69632073616c65206973206e6f74206163746976652079657400000060448201526064016106cb565b8160011480610d505750816002145b80610d5b5750816003145b610d955760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016106cb565b3360009081526017602052604090205460ff1615610dee5760405162461bcd60e51b8152602060048201526016602482015275165bdd48185b1c9958591e481b5a5b9d19590813919560521b60448201526064016106cb565b60088260048110610e0157610e01612bb4565b01548110610e215760405162461bcd60e51b81526004016106cb90612bca565b60108260048110610e3457610e34612bb4565b0154341015610e855760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e000060448201526064016106cb565b336000818152601760209081526040808320805460ff191660019081179091558151928301909152918152610ebc9291859161177a565b5050565b6001600160a01b038516331480610edc5750610edc853361156b565b610f435760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016106cb565b610f50858585858561188a565b5050505050565b6004546001600160a01b03163314610f815760405162461bcd60e51b81526004016106cb90612ad3565b4780610fcf5760405162461bcd60e51b815260206004820152601960248201527f42616c616e6365206973206e6f742073756666696369656e740000000000000060448201526064016106cb565b600654610780906001600160a01b031682611a6d565b6004546001600160a01b0316331461100f5760405162461bcd60e51b81526004016106cb90612ad3565b6007805460ff60a81b198116600160a81b9182900460ff1615909102179055565b606081518351146110955760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016106cb565b6000835167ffffffffffffffff8111156110b1576110b1612558565b6040519080825280602002602001820160405280156110da578160200160208202803683370190505b50905060005b8451811015611152576111258582815181106110fe576110fe612bb4565b602002602001015185838151811061111857611118612bb4565b6020026020010151610663565b82828151811061113757611137612bb4565b602090810291909101015261114b81612c17565b90506110e0565b509392505050565b6004546001600160a01b031633146111845760405162461bcd60e51b81526004016106cb90612ad3565b61118e6000611b08565b565b60088160048110610c9b57600080fd5b6015805461079090612b08565b610ebc338383611b5a565b6004546001600160a01b031633146111e25760405162461bcd60e51b81526004016106cb90612ad3565b604051806080016040528060008152602001848152602001838152602001828152506010906004611214929190612417565b50505050565b60108160048110610c9b57600080fd5b6004546001600160a01b031633146112545760405162461bcd60e51b81526004016106cb90612ad3565b6001600160a01b03821660009081526017602052604090205460ff16156112c95760405162461bcd60e51b815260206004820152602360248201527f5265636569766572206164647265737320616c7265616479206d696e7465642060448201526213919560ea1b60648201526084016106cb565b6112d38282610663565b156113385760405162461bcd60e51b815260206004820152602f60248201527f5265636569766572206164647265737320616c72656164792068617320636f7260448201526e3932b9b837b73234b733903a34b2b960891b60648201526084016106cb565b80600114806113475750806002145b806113525750806003145b61139e5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792054696572312c20546965723220616e64205469657233000000000060448201526064016106cb565b600c81600481106113b1576113b1612bb4565b0154600082815260186020526040902054106114355760405162461bcd60e51b815260206004820152603760248201527f416c6c207265736572766564204e46547320666f722074686520636f7272657360448201527f706f6e64696e67207469657220617265206d696e74656400000000000000000060648201526084016106cb565b6000818152601860205260408120805460019290611454908490612c32565b92505081905550610ebc828260016040518060200160405280600081525061177a565b6004546001600160a01b031633146114a15760405162461bcd60e51b81526004016106cb90612ad3565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031633146114ed5760405162461bcd60e51b81526004016106cb90612ad3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031633146115395760405162461bcd60e51b81526004016106cb90612ad3565b604051806080016040528060008152602001848152602001838152602001828152506008906004611214929190612417565b60075460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c455279190602401602060405180830381865afa1580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e19190612c4a565b6001600160a01b031614156115fa5760019150506106f7565b6001600160a01b0380851660009081526001602090815260408083209387168352929052205460ff165b949350505050565b6001600160a01b0385163314806116485750611648853361156b565b6116a65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016106cb565b610f508585858585611c3b565b6004546001600160a01b031633146116dd5760405162461bcd60e51b81526004016106cb90612ad3565b6001600160a01b0381166117425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106cb565b61078081611b08565b8051610ebc906002906020840190612455565b600080600061176d8585611d58565b9150915061115281611dc8565b6001600160a01b0384166117da5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106cb565b336117fa816000876117eb88611f83565b6117f488611f83565b87611fce565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061182a908490612c32565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f50816000878787876120da565b81518351146118ec5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016106cb565b6001600160a01b0384166119125760405162461bcd60e51b81526004016106cb90612c67565b33611921818787878787611fce565b60005b8451811015611a0757600085828151811061194157611941612bb4565b60200260200101519050600085838151811061195f5761195f612bb4565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156119af5760405162461bcd60e51b81526004016106cb90612cac565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906119ec908490612c32565b9250508190555050505080611a0090612c17565b9050611924565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a57929190612cf6565b60405180910390a4610bec818787878787612236565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611aba576040519150601f19603f3d011682016040523d82523d6000602084013e611abf565b606091505b5050905080611b035760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016106cb565b505050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611bce5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016106cb565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416611c615760405162461bcd60e51b81526004016106cb90612c67565b33611c718187876117eb88611f83565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611cb25760405162461bcd60e51b81526004016106cb90612cac565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611cef908490612c32565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611d4f8288888888886120da565b50505050505050565b600080825160411415611d8f5760208301516040840151606085015160001a611d83878285856122f1565b94509450505050611dc1565b825160401415611db95760208301516040840151611dae8683836123de565b935093505050611dc1565b506000905060025b9250929050565b6000816004811115611ddc57611ddc612d24565b1415611de55750565b6001816004811115611df957611df9612d24565b1415611e475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106cb565b6002816004811115611e5b57611e5b612d24565b1415611ea95760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106cb565b6003816004811115611ebd57611ebd612d24565b1415611f165760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106cb565b6004816004811115611f2a57611f2a612d24565b14156107805760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016106cb565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611fbd57611fbd612bb4565b602090810291909101015292915050565b6001600160a01b0385166120555760005b835181101561205357828181518110611ffa57611ffa612bb4565b60200260200101516003600086848151811061201857612018612bb4565b60200260200101518152602001908152602001600020600082825461203d9190612c32565b9091555061204c905081612c17565b9050611fdf565b505b6001600160a01b038416610bec5760005b8351811015611d4f5782818151811061208157612081612bb4565b60200260200101516003600086848151811061209f5761209f612bb4565b6020026020010151815260200190815260200160002060008282546120c49190612b9d565b909155506120d3905081612c17565b9050612066565b6001600160a01b0384163b15610bec5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061211e9089908990889088908890600401612d3a565b6020604051808303816000875af1925050508015612159575060408051601f3d908101601f1916820190925261215691810190612d7f565b60015b61220657612165612d9c565b806308c379a0141561219f575061217a612db8565b8061218557506121a1565b8060405162461bcd60e51b81526004016106cb919061268f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016106cb565b6001600160e01b0319811663f23a6e6160e01b14611d4f5760405162461bcd60e51b81526004016106cb90612e42565b6001600160a01b0384163b15610bec5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061227a9089908990889088908890600401612e8a565b6020604051808303816000875af19250505080156122b5575060408051601f3d908101601f191682019092526122b291810190612d7f565b60015b6122c157612165612d9c565b6001600160e01b0319811663bc197c8160e01b14611d4f5760405162461bcd60e51b81526004016106cb90612e42565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561232857506000905060036123d5565b8460ff16601b1415801561234057508460ff16601c14155b1561235157506000905060046123d5565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156123a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166123ce576000600192509250506123d5565b9150600090505b94509492505050565b6000806001600160ff1b038316816123fb60ff86901c601b612c32565b9050612409878288856122f1565b935093505050935093915050565b8260048101928215612445579160200282015b8281111561244557825182559160200191906001019061242a565b506124519291506124c8565b5090565b82805461246190612b08565b90600052602060002090601f0160209004810192826124835760008555612445565b82601f1061249c57805160ff1916838001178555612445565b82800160010185558215612445579182018281111561244557825182559160200191906001019061242a565b5b8082111561245157600081556001016124c9565b6001600160a01b038116811461078057600080fd5b6000806040838503121561250557600080fd5b8235612510816124dd565b946020939093013593505050565b6001600160e01b03198116811461078057600080fd5b60006020828403121561254657600080fd5b81356125518161251e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561259457612594612558565b6040525050565b600067ffffffffffffffff8311156125b5576125b5612558565b6040516125cc601f8501601f19166020018261256e565b8091508381528484840111156125e157600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561260b57600080fd5b813567ffffffffffffffff81111561262257600080fd5b8201601f8101841361263357600080fd5b6116248482356020840161259b565b6000815180845260005b818110156126685760208185018101518683018201520161264c565b8181111561267a576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006125516020830184612642565b6000602082840312156126b457600080fd5b5035919050565b6000806000604084860312156126d057600080fd5b83359250602084013567ffffffffffffffff808211156126ef57600080fd5b818601915086601f83011261270357600080fd5b81358181111561271257600080fd5b87602082850101111561272457600080fd5b6020830194508093505050509250925092565b60006020828403121561274957600080fd5b8135612551816124dd565b600067ffffffffffffffff82111561276e5761276e612558565b5060051b60200190565b600082601f83011261278957600080fd5b8135602061279682612754565b6040516127a3828261256e565b83815260059390931b85018201928281019150868411156127c357600080fd5b8286015b848110156127de57803583529183019183016127c7565b509695505050505050565b600082601f8301126127fa57600080fd5b6125518383356020850161259b565b600080600080600060a0868803121561282157600080fd5b853561282c816124dd565b9450602086013561283c816124dd565b9350604086013567ffffffffffffffff8082111561285957600080fd5b61286589838a01612778565b9450606088013591508082111561287b57600080fd5b61288789838a01612778565b9350608088013591508082111561289d57600080fd5b506128aa888289016127e9565b9150509295509295909350565b600080604083850312156128ca57600080fd5b823567ffffffffffffffff808211156128e257600080fd5b818501915085601f8301126128f657600080fd5b8135602061290382612754565b604051612910828261256e565b83815260059390931b850182019282810191508984111561293057600080fd5b948201945b83861015612957578535612948816124dd565b82529482019490820190612935565b9650508601359250508082111561296d57600080fd5b5061297a85828601612778565b9150509250929050565b600081518084526020808501945080840160005b838110156129b457815187529582019590820190600101612998565b509495945050505050565b6020815260006125516020830184612984565b600080604083850312156129e557600080fd5b82356129f0816124dd565b915060208301358015158114612a0557600080fd5b809150509250929050565b600080600060608486031215612a2557600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a4f57600080fd5b8235612a5a816124dd565b91506020830135612a05816124dd565b600080600080600060a08688031215612a8257600080fd5b8535612a8d816124dd565b94506020860135612a9d816124dd565b93506040860135925060608601359150608086013567ffffffffffffffff811115612ac757600080fd5b6128aa888289016127e9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b1c57607f821691505b60208210811415612b3d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4e6f207472616e73616374696f6e2066726f6d20736d61727420636f6e7472616040820152636374732160e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015612baf57612baf612b87565b500390565b634e487b7160e01b600052603260045260246000fd5b6020808252602d908201527f45786365656473206d617820737570706c7920666f722074686520636f72726560408201526c39b837b73234b733903a34b2b960991b606082015260800190565b6000600019821415612c2b57612c2b612b87565b5060010190565b60008219821115612c4557612c45612b87565b500190565b600060208284031215612c5c57600080fd5b8151612551816124dd565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612d096040830185612984565b8281036020840152612d1b8185612984565b95945050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612d7490830184612642565b979650505050505050565b600060208284031215612d9157600080fd5b81516125518161251e565b600060033d1115612db55760046000803e5060005160e01c5b90565b600060443d1015612dc65790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612df657505050505090565b8285019150815181811115612e0e5750505050505090565b843d8701016020828501011115612e285750505050505090565b612e376020828601018761256e565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090612eb690830186612984565b8281036060840152612ec88186612984565b90508281036080840152612edc8185612642565b9897505050505050505056fea26469706673582212201bb7ab443a0f779d26b4f4c483092d97291f86e87fd406a1a2dafd4502b5e44964736f6c634300080b0033
Deployed Bytecode Sourcemap
394:5928:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:228:1;;;;;;;;;;-1:-1:-1;2170:228:1;;;;;:::i;:::-;;:::i;:::-;;;616:25:13;;;604:2;589:18;2170:228:1;;;;;;;;1221:305;;;;;;;;;;-1:-1:-1;1221:305:1;;;;;:::i;:::-;;:::i;:::-;;;1203:14:13;;1196:22;1178:41;;1166:2;1151:18;1221:305:1;1038:187:13;4484:93:12;;;;;;;;;;-1:-1:-1;4484:93:12;;;;;:::i;:::-;;:::i;:::-;;1111:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1925:103:1:-;;;;;;;;;;-1:-1:-1;1925:103:1;;;;;:::i;:::-;;:::i;2182:1047:12:-;;;;;;:::i;:::-;;:::i;766:30::-;;;;;;;;;;-1:-1:-1;766:30:12;;;;-1:-1:-1;;;766:30:12;;;;;;1366:48;;;;;;;;;;-1:-1:-1;1366:48:12;;;;;:::i;:::-;;;;;;;;;;;;;;5021:90;;;;;;;;;;;;;:::i;4879:134::-;;;;;;;;;;-1:-1:-1;4879:134:12;;;;;:::i;:::-;;:::i;901:45::-;;;;;;;;;;-1:-1:-1;901:45:12;;;;;:::i;:::-;;:::i;3237:679::-;;;;;;:::i;:::-;;:::i;4045:430:1:-;;;;;;;;;;-1:-1:-1;4045:430:1;;;;;:::i;:::-;;:::i;5522:205:12:-;;;;;;;;;;;;;:::i;5119:108::-;;;;;;;;;;;;;:::i;2555:508:1:-;;;;;;;;;;-1:-1:-1;2555:508:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;886:120:4:-;;;;;;;;;;-1:-1:-1;886:120:4;;;;;:::i;:::-;943:4;770:16;;;:12;:16;;;;;;-1:-1:-1;;;886:120:4;1668:101:0;;;;;;;;;;;;;:::i;805:47:12:-;;;;;;;;;;-1:-1:-1;805:47:12;;;;;:::i;:::-;;:::i;1036:85:0:-;;;;;;;;;;-1:-1:-1;1108:6:0;;1036:85;;-1:-1:-1;;;;;1108:6:0;;;8702:51:13;;8690:2;8675:18;1036:85:0;8556:203:13;1150:29:12;;;;;;;;;;;;;:::i;3131:153:1:-;;;;;;;;;;-1:-1:-1;3131:153:1;;;;;:::i;:::-;;:::i;5361::12:-;;;;;;;;;;-1:-1:-1;5361:153:12;;;;;:::i;:::-;;:::i;1038:64::-;;;;;;;;;;-1:-1:-1;1038:64:12;;;;;:::i;:::-;;:::i;682:111:4:-;;;;;;;;;;-1:-1:-1;682:111:4;;;;;:::i;:::-;744:7;770:16;;;:12;:16;;;;;;;682:111;3924:552:12;;;;;;;;;;-1:-1:-1;3924:552:12;;;;;:::i;:::-;;:::i;4725:146::-;;;;;;;;;;-1:-1:-1;4725:146:12;;;;;:::i;:::-;;:::i;4585:132::-;;;;;;;;;;-1:-1:-1;4585:132:12;;;;;:::i;:::-;;:::i;5235:118::-;;;;;;;;;;-1:-1:-1;5235:118:12;;;;;:::i;:::-;;:::i;5967:352::-;;;;;;;;;;-1:-1:-1;5967:352:12;;;;;:::i;:::-;;:::i;735:24::-;;;;;;;;;;-1:-1:-1;735:24:12;;;;-1:-1:-1;;;735:24:12;;;;;;3584:389:1;;;;;;;;;;-1:-1:-1;3584:389:1;;;;;:::i;:::-;;:::i;1918:198:0:-;;;;;;;;;;-1:-1:-1;1918:198:0;;;;;:::i;:::-;;:::i;1319:40:12:-;;;;;;;;;;-1:-1:-1;1319:40:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;2170:228:1;2256:7;-1:-1:-1;;;;;2283:21:1;;2275:77;;;;-1:-1:-1;;;2275:77:1;;10840:2:13;2275:77:1;;;10822:21:13;10879:2;10859:18;;;10852:30;10918:34;10898:18;;;10891:62;-1:-1:-1;;;10969:18:13;;;10962:41;11020:19;;2275:77:1;;;;;;;;;-1:-1:-1;2369:9:1;:13;;;;;;;;;;;-1:-1:-1;;;;;2369:22:1;;;;;;;;;;2170:228;;;;;:::o;1221:305::-;1323:4;-1:-1:-1;;;;;;1358:41:1;;-1:-1:-1;;;1358:41:1;;:109;;-1:-1:-1;;;;;;;1415:52:1;;-1:-1:-1;;;1415:52:1;1358:109;:161;;;-1:-1:-1;;;;;;;;;;937:40:10;;;1483:36:1;829:155:10;4484:93:12;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;4553:16:12::1;4561:7;4553;:16::i;:::-;4484:93:::0;:::o;1111:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1925:103:1:-;1985:13;2017:4;2010:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:103;;;:::o;2182:1047:12:-;1517:10;1531:9;1517:23;1509:72;;;;-1:-1:-1;;;1509:72:12;;;;;;;:::i;:::-;2281:18:::1;2325:28:::0;;;:19:::1;:28;::::0;;;;;;;;770:12:4;:16;;;;;;2302:51:12::1;;;;:::i;:::-;2408:15;::::0;2281:72;;-1:-1:-1;;;;;;2408:15:12::1;2400:73;;;::::0;-1:-1:-1;;;2400:73:12;;12665:2:13;2400:73:12::1;::::0;::::1;12647:21:13::0;12704:2;12684:18;;;12677:30;12743:33;12723:18;;;12716:61;12794:18;;2400:73:12::1;12463:355:13::0;2400:73:12::1;2492:12;::::0;-1:-1:-1;;;2492:12:12;::::1;;;2484:47;;;::::0;-1:-1:-1;;;2484:47:12;;13025:2:13;2484:47:12::1;::::0;::::1;13007:21:13::0;13064:2;13044:18;;;13037:30;-1:-1:-1;;;13083:18:13;;;13076:52;13145:18;;2484:47:12::1;12823:346:13::0;2484:47:12::1;2560:10;2551:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;2550:21;2542:56;;;::::0;-1:-1:-1;;;2542:56:12;;13376:2:13;2542:56:12::1;::::0;::::1;13358:21:13::0;13415:2;13395:18;;;13388:30;-1:-1:-1;;;13434:18:13;;;13427:52;13496:18;;2542:56:12::1;13174:346:13::0;2542:56:12::1;2633:11;2645:7;2633:20;;;;;;;:::i;:::-;;;2617:13;:36;2609:94;;;;-1:-1:-1::0;;;2609:94:12::1;;;;;;;:::i;:::-;2735:6;2742:7;2735:15;;;;;;;:::i;:::-;;;2722:9;:28;;2714:71;;;::::0;-1:-1:-1;;;2714:71:12;;14273:2:13;2714:71:12::1;::::0;::::1;14255:21:13::0;14312:2;14292:18;;;14285:30;14351:32;14331:18;;;14324:60;14401:18;;2714:71:12::1;14071:354:13::0;2714:71:12::1;2895:16;::::0;2936:41:::1;::::0;;1263:47:::1;2936:41;::::0;::::1;14632:25:13::0;2957:10:12::1;14673:18:13::0;;;14666:60;;;;14742:18;;;14735:34;;;2798:14:12::1;::::0;2895:16;14605:18:13;;2936:41:12::1;;;;;;;;;;;;2926:52;;;;;;2839:154;;;;;;;;-1:-1:-1::0;;;15038:27:13;;15090:1;15081:11;;15074:27;;;;15126:2;15117:12;;15110:28;15163:2;15154:12;;14780:392;2839:154:12::1;;;;;;;;;;;;;2815:189;;;;;;2798:206;;3025:14;3042:25;3057:9;;3042:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;3042:6:12;;:25;-1:-1:-1;;3042:14:12::1;:25:::0;-1:-1:-1;3042:25:12:i:1;:::-;3098:15;::::0;3025:42;;-1:-1:-1;;;;;;3088:25:12;;::::1;3098:15:::0;::::1;3088:25;3080:55;;;::::0;-1:-1:-1;;;3080:55:12;;15379:2:13;3080:55:12::1;::::0;::::1;15361:21:13::0;15418:2;15398:18;;;15391:30;-1:-1:-1;;;15437:18:13;;;15430:47;15494:18;;3080:55:12::1;15177:341:13::0;3080:55:12::1;3157:10;3148:20;::::0;;;:8:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;3148:27:12::1;3171:4;3148:27:::0;;::::1;::::0;;;3188:33;;;;::::1;::::0;;;;;;::::1;::::0;3157:10;3206:7;;3188:5:::1;:33::i;:::-;2270:959;;;2182:1047:::0;;;:::o;5021:90::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;5091:12:12::1;::::0;;-1:-1:-1;;;;5075:28:12;::::1;-1:-1:-1::0;;;5091:12:12;;;::::1;;;5090:13;5075:28:::0;;::::1;;::::0;;5021:90::o;4879:134::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;4967:17:12::1;:38:::0;;-1:-1:-1;;;;;;4967:38:12::1;-1:-1:-1::0;;;;;4967:38:12;;;::::1;::::0;;;::::1;::::0;;4879:134::o;901:45::-;;;;;;;;;;;;;;;-1:-1:-1;901:45:12;:::o;3237:679::-;1517:10;1531:9;1517:23;1509:72;;;;-1:-1:-1;;;1509:72:12;;;;;;;:::i;:::-;3311:18:::1;3355:28:::0;;;:19:::1;:28;::::0;;;;;;;;770:12:4;:16;;;;;;3332:51:12::1;;;;:::i;:::-;3437:18;::::0;3311:72;;-1:-1:-1;;;;3437:18:12;::::1;;;3429:60;;;::::0;-1:-1:-1;;;3429:60:12;;15725:2:13;3429:60:12::1;::::0;::::1;15707:21:13::0;15764:2;15744:18;;;15737:30;15803:31;15783:18;;;15776:59;15852:18;;3429:60:12::1;15523:353:13::0;3429:60:12::1;3508:7;3519:1;3508:12;:28;;;;3524:7;3535:1;3524:12;3508:28;:44;;;;3540:7;3551:1;3540:12;3508:44;3500:68;;;::::0;-1:-1:-1;;;3500:68:12;;16083:2:13;3500:68:12::1;::::0;::::1;16065:21:13::0;16122:2;16102:18;;;16095:30;-1:-1:-1;;;16141:18:13;;;16134:41;16192:18;;3500:68:12::1;15881:335:13::0;3500:68:12::1;3597:10;3588:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;3587:21;3579:56;;;::::0;-1:-1:-1;;;3579:56:12;;13376:2:13;3579:56:12::1;::::0;::::1;13358:21:13::0;13415:2;13395:18;;;13388:30;-1:-1:-1;;;13434:18:13;;;13427:52;13496:18;;3579:56:12::1;13174:346:13::0;3579:56:12::1;3670:11;3682:7;3670:20;;;;;;;:::i;:::-;;;3654:13;:36;3646:94;;;;-1:-1:-1::0;;;3646:94:12::1;;;;;;;:::i;:::-;3772:6;3779:7;3772:15;;;;;;;:::i;:::-;;;3759:9;:28;;3751:71;;;::::0;-1:-1:-1;;;3751:71:12;;14273:2:13;3751:71:12::1;::::0;::::1;14255:21:13::0;14312:2;14292:18;;;14285:30;14351:32;14331:18;;;14324:60;14401:18;;3751:71:12::1;14071:354:13::0;3751:71:12::1;3844:10;3835:20;::::0;;;:8:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;3835:27:12::1;3858:4;3835:27:::0;;::::1;::::0;;;3875:33;;;;::::1;::::0;;;;;;::::1;::::0;3844:10;3893:7;;3875:5:::1;:33::i;:::-;3300:616;3237:679:::0;:::o;4045:430:1:-;-1:-1:-1;;;;;4270:20:1;;719:10:7;4270:20:1;;:60;;-1:-1:-1;4294:36:1;4311:4;719:10:7;5967:352:12;:::i;4294:36:1:-;4249:157;;;;-1:-1:-1;;;4249:157:1;;16423:2:13;4249:157:1;;;16405:21:13;16462:2;16442:18;;;16435:30;16501:34;16481:18;;;16474:62;-1:-1:-1;;;16552:18:13;;;16545:48;16610:19;;4249:157:1;16221:414:13;4249:157:1;4416:52;4439:4;4445:2;4449:3;4454:7;4463:4;4416:22;:52::i;:::-;4045:430;;;;;:::o;5522:205:12:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;5590:21:12::1;5630:11:::0;5622:49:::1;;;::::0;-1:-1:-1;;;5622:49:12;;16842:2:13;5622:49:12::1;::::0;::::1;16824:21:13::0;16881:2;16861:18;;;16854:30;16920:27;16900:18;;;16893:55;16965:18;;5622:49:12::1;16640:349:13::0;5622:49:12::1;5692:17;::::0;5682:37:::1;::::0;-1:-1:-1;;;;;5692:17:12::1;5711:7:::0;5682:9:::1;:37::i;5119:108::-:0;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;5201:18:12::1;::::0;;-1:-1:-1;;;;5179:40:12;::::1;-1:-1:-1::0;;;5201:18:12;;;::::1;;;5200:19;5179:40:::0;;::::1;;::::0;;5119:108::o;2555:508:1:-;2706:16;2765:3;:10;2746:8;:15;:29;2738:83;;;;-1:-1:-1;;;2738:83:1;;17196:2:13;2738:83:1;;;17178:21:13;17235:2;17215:18;;;17208:30;17274:34;17254:18;;;17247:62;-1:-1:-1;;;17325:18:13;;;17318:39;17374:19;;2738:83:1;16994:405:13;2738:83:1;2832:30;2879:8;:15;2865:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2865:30:1;;2832:63;;2911:9;2906:120;2930:8;:15;2926:1;:19;2906:120;;;2985:30;2995:8;3004:1;2995:11;;;;;;;;:::i;:::-;;;;;;;3008:3;3012:1;3008:6;;;;;;;;:::i;:::-;;;;;;;2985:9;:30::i;:::-;2966:13;2980:1;2966:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2947:3;;;:::i;:::-;;;2906:120;;;-1:-1:-1;3043:13:1;2555:508;-1:-1:-1;;;2555:508:1:o;1668:101:0:-;1108:6;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;805:47:12:-;;;;;;;;;;;1150:29;;;;;;;:::i;3131:153:1:-;3225:52;719:10:7;3258:8:1;3268;3225:18;:52::i;5361:153:12:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;5464:42:12::1;;;;;;;;5474:1;5464:42;;;;5477:8;5464:42;;;;5487:8;5464:42;;;;5497:8;5464:42;;::::0;:6:::1;:42;;;;;;;:::i;:::-;;5361:153:::0;;;:::o;1038:64::-;;;;;;;;;;;3924:552;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4007:12:12;::::1;;::::0;;;:8:::1;:12;::::0;;;;;::::1;;4006:13;3998:61;;;::::0;-1:-1:-1;;;3998:61:12;;17746:2:13;3998:61:12::1;::::0;::::1;17728:21:13::0;17785:2;17765:18;;;17758:30;17824:34;17804:18;;;17797:62;-1:-1:-1;;;17875:18:13;;;17868:33;17918:19;;3998:61:12::1;17544:399:13::0;3998:61:12::1;4078:22;4088:2;4092:7;4078:9;:22::i;:::-;:27:::0;4070:87:::1;;;::::0;-1:-1:-1;;;4070:87:12;;18150:2:13;4070:87:12::1;::::0;::::1;18132:21:13::0;18189:2;18169:18;;;18162:30;18228:34;18208:18;;;18201:62;-1:-1:-1;;;18279:18:13;;;18272:45;18334:19;;4070:87:12::1;17948:411:13::0;4070:87:12::1;4176:7;4187:1;4176:12;:28;;;;4192:7;4203:1;4192:12;4176:28;:44;;;;4208:7;4219:1;4208:12;4176:44;4168:84;;;::::0;-1:-1:-1;;;4168:84:12;;18566:2:13;4168:84:12::1;::::0;::::1;18548:21:13::0;18605:2;18585:18;;;18578:30;18644:29;18624:18;;;18617:57;18691:18;;4168:84:12::1;18364:351:13::0;4168:84:12::1;4302:13;4316:7;4302:22;;;;;;;:::i;:::-;;::::0;4271:28:::1;::::0;;;:19:::1;:28;::::0;;;;;:53:::1;4263:121;;;::::0;-1:-1:-1;;;4263:121:12;;18922:2:13;4263:121:12::1;::::0;::::1;18904:21:13::0;18961:2;18941:18;;;18934:30;19000:34;18980:18;;;18973:62;19071:25;19051:18;;;19044:53;19114:19;;4263:121:12::1;18720:419:13::0;4263:121:12::1;4397:28;::::0;;;:19:::1;:28;::::0;;;;:33;;4429:1:::1;::::0;4397:28;:33:::1;::::0;4429:1;;4397:33:::1;:::i;:::-;;;;;;;;4443:25;4449:2;4453:7;4462:1;4443:25;;;;;;;;;;;::::0;:5:::1;:25::i;4725:146::-:0;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;4819:20:12::1;:44:::0;;-1:-1:-1;;;;;;4819:44:12::1;-1:-1:-1::0;;;;;4819:44:12;;;::::1;::::0;;;::::1;::::0;;4725:146::o;4585:132::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;4672:15:12::1;:37:::0;;-1:-1:-1;;;;;;4672:37:12::1;-1:-1:-1::0;;;;;4672:37:12;;;::::1;::::0;;;::::1;::::0;;4585:132::o;5235:118::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;5316:29:12::1;;;;;;;;5331:1;5316:29;;;;5334:2;5316:29;;;;5338:2;5316:29;;;;5342:2;5316:29;;::::0;:11:::1;:29;;;;;;;:::i;5967:352::-:0;6131:20;;6174:28;;-1:-1:-1;;;6174:28:12;;-1:-1:-1;;;;;8720:32:13;;;6174:28:12;;;8702:51:13;6056:4:12;;6131:20;;;6166:49;;;;6131:20;;6174:21;;8675:18:13;;6174:28:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6166:49:12;;6163:92;;;6239:4;6232:11;;;;;6163:92;-1:-1:-1;;;;;3473:27:1;;;3450:4;3473:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;6272:39:12;6265:46;5967:352;-1:-1:-1;;;;5967:352:12:o;3584:389:1:-;-1:-1:-1;;;;;3784:20:1;;719:10:7;3784:20:1;;:60;;-1:-1:-1;3808:36:1;3825:4;719:10:7;5967:352:12;:::i;3808:36:1:-;3763:148;;;;-1:-1:-1;;;3763:148:1;;19764:2:13;3763:148:1;;;19746:21:13;19803:2;19783:18;;;19776:30;19842:34;19822:18;;;19815:62;-1:-1:-1;;;19893:18:13;;;19886:39;19942:19;;3763:148:1;19562:405:13;3763:148:1;3921:45;3939:4;3945:2;3949;3953:6;3961:4;3921:17;:45::i;1918:198:0:-;1108:6;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2006:22:0;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:0;;20174:2:13;1998:73:0::1;::::0;::::1;20156:21:13::0;20213:2;20193:18;;;20186:30;20252:34;20232:18;;;20225:62;-1:-1:-1;;;20303:18:13;;;20296:36;20349:19;;1998:73:0::1;19972:402:13::0;1998:73:0::1;2081:28;2100:8;2081:18;:28::i;7936:86:1:-:0;8002:13;;;;:4;;:13;;;;;:::i;4308:227:9:-;4386:7;4406:17;4425:18;4447:27;4458:4;4464:9;4447:10;:27::i;:::-;4405:69;;;;4484:18;4496:5;4484:11;:18::i;8395:553:1:-;-1:-1:-1;;;;;8542:16:1;;8534:62;;;;-1:-1:-1;;;8534:62:1;;20581:2:13;8534:62:1;;;20563:21:13;20620:2;20600:18;;;20593:30;20659:34;20639:18;;;20632:62;-1:-1:-1;;;20710:18:13;;;20703:31;20751:19;;8534:62:1;20379:397:13;8534:62:1;719:10:7;8649:102:1;719:10:7;8607:16:1;8692:2;8696:21;8714:2;8696:17;:21::i;:::-;8719:25;8737:6;8719:17;:25::i;:::-;8746:4;8649:20;:102::i;:::-;8762:9;:13;;;;;;;;;;;-1:-1:-1;;;;;8762:17:1;;;;;;;;;:27;;8783:6;;8762:9;:27;;8783:6;;8762:27;:::i;:::-;;;;-1:-1:-1;;8804:52:1;;;20955:25:13;;;21011:2;20996:18;;20989:34;;;-1:-1:-1;;;;;8804:52:1;;;;8837:1;;8804:52;;;;;;20928:18:13;8804:52:1;;;;;;;8867:74;8898:8;8916:1;8920:2;8924;8928:6;8936:4;8867:30;:74::i;6068:1045::-;6288:7;:14;6274:3;:10;:28;6266:81;;;;-1:-1:-1;;;6266:81:1;;21236:2:13;6266:81:1;;;21218:21:13;21275:2;21255:18;;;21248:30;21314:34;21294:18;;;21287:62;-1:-1:-1;;;21365:18:13;;;21358:38;21413:19;;6266:81:1;21034:404:13;6266:81:1;-1:-1:-1;;;;;6365:16:1;;6357:66;;;;-1:-1:-1;;;6357:66:1;;;;;;;:::i;:::-;719:10:7;6476:60:1;719:10:7;6507:4:1;6513:2;6517:3;6522:7;6531:4;6476:20;:60::i;:::-;6552:9;6547:411;6571:3;:10;6567:1;:14;6547:411;;;6602:10;6615:3;6619:1;6615:6;;;;;;;;:::i;:::-;;;;;;;6602:19;;6635:14;6652:7;6660:1;6652:10;;;;;;;;:::i;:::-;;;;;;;;;;;;6677:19;6699:13;;;;;;;;;;-1:-1:-1;;;;;6699:19:1;;;;;;;;;;;;6652:10;;-1:-1:-1;6740:21:1;;;;6732:76;;;;-1:-1:-1;;;6732:76:1;;;;;;;:::i;:::-;6850:9;:13;;;;;;;;;;;-1:-1:-1;;;;;6850:19:1;;;;;;;;;;6872:20;;;6850:42;;6920:17;;;;;;;:27;;6872:20;;6850:9;6920:27;;6872:20;;6920:27;:::i;:::-;;;;;;;;6588:370;;;6583:3;;;;:::i;:::-;;;6547:411;;;;7003:2;-1:-1:-1;;;;;6973:47:1;6997:4;-1:-1:-1;;;;;6973:47:1;6987:8;-1:-1:-1;;;;;6973:47:1;;7007:3;7012:7;6973:47;;;;;;;:::i;:::-;;;;;;;;7031:75;7067:8;7077:4;7083:2;7087:3;7092:7;7101:4;7031:35;:75::i;5735:180:12:-;5809:12;5827:8;-1:-1:-1;;;;;5827:13:12;5848:7;5827:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5808:52;;;5879:7;5871:36;;;;-1:-1:-1;;;5871:36:12;;23142:2:13;5871:36:12;;;23124:21:13;23181:2;23161:18;;;23154:30;-1:-1:-1;;;23200:18:13;;;23193:46;23256:18;;5871:36:12;22940:340:13;5871:36:12;5797:118;5735:180;;:::o;2270:187:0:-;2362:6;;;-1:-1:-1;;;;;2378:17:0;;;-1:-1:-1;;;;;;2378:17:0;;;;;;;2410:40;;2362:6;;;2378:17;2362:6;;2410:40;;2343:16;;2410:40;2333:124;2270:187;:::o;12074:323:1:-;12224:8;-1:-1:-1;;;;;12215:17:1;:5;-1:-1:-1;;;;;12215:17:1;;;12207:71;;;;-1:-1:-1;;;12207:71:1;;23487:2:13;12207:71:1;;;23469:21:13;23526:2;23506:18;;;23499:30;23565:34;23545:18;;;23538:62;-1:-1:-1;;;23616:18:13;;;23609:39;23665:19;;12207:71:1;23285:405:13;12207:71:1;-1:-1:-1;;;;;12288:25:1;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;12288:46:1;;;;;;;;;;12349:41;;1178::13;;;12349::1;;1151:18:13;12349:41:1;;;;;;;12074:323;;;:::o;4925:797::-;-1:-1:-1;;;;;5106:16:1;;5098:66;;;;-1:-1:-1;;;5098:66:1;;;;;;;:::i;:::-;719:10:7;5217:96:1;719:10:7;5248:4:1;5254:2;5258:21;5276:2;5258:17;:21::i;5217:96::-;5324:19;5346:13;;;;;;;;;;;-1:-1:-1;;;;;5346:19:1;;;;;;;;;;5383:21;;;;5375:76;;;;-1:-1:-1;;;5375:76:1;;;;;;;:::i;:::-;5485:9;:13;;;;;;;;;;;-1:-1:-1;;;;;5485:19:1;;;;;;;;;;5507:20;;;5485:42;;5547:17;;;;;;;:27;;5507:20;;5485:9;5547:27;;5507:20;;5547:27;:::i;:::-;;;;-1:-1:-1;;5590:46:1;;;20955:25:13;;;21011:2;20996:18;;20989:34;;;-1:-1:-1;;;;;5590:46:1;;;;;;;;;;;;;;20928:18:13;5590:46:1;;;;;;;5647:68;5678:8;5688:4;5694:2;5698;5702:6;5710:4;5647:30;:68::i;:::-;5088:634;;4925:797;;;;;:::o;2243:1279:9:-;2324:7;2333:12;2554:9;:16;2574:2;2554:22;2550:966;;;2843:4;2828:20;;2822:27;2892:4;2877:20;;2871:27;2949:4;2934:20;;2928:27;2592:9;2920:36;2990:25;3001:4;2920:36;2822:27;2871;2990:10;:25::i;:::-;2983:32;;;;;;;;;2550:966;3036:9;:16;3056:2;3036:22;3032:484;;;3305:4;3290:20;;3284:27;3355:4;3340:20;;3334:27;3395:23;3406:4;3284:27;3334;3395:10;:23::i;:::-;3388:30;;;;;;;;3032:484;-1:-1:-1;3465:1:9;;-1:-1:-1;3469:35:9;3032:484;2243:1279;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:9;;24029:2:13;766:34:9;;;24011:21:13;24068:2;24048:18;;;24041:30;24107:26;24087:18;;;24080:54;24151:18;;766:34:9;23827:348:13;708:465:9;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:9;;24382:2:13;881:41:9;;;24364:21:13;24421:2;24401:18;;;24394:30;24460:33;24440:18;;;24433:61;24511:18;;881:41:9;24180:355:13;817:356:9;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:9;;24742:2:13;998:44:9;;;24724:21:13;24781:2;24761:18;;;24754:30;24820:34;24800:18;;;24793:62;-1:-1:-1;;;24871:18:13;;;24864:32;24913:19;;998:44:9;24540:398:13;939:234:9;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:9;;25145:2:13;1118:44:9;;;25127:21:13;25184:2;25164:18;;;25157:30;25223:34;25203:18;;;25196:62;-1:-1:-1;;;25274:18:13;;;25267:32;25316:19;;1118:44:9;24943:398:13;15080:193:1;15199:16;;;15213:1;15199:16;;;;;;;;;15146;;15174:22;;15199:16;;;;;;;;;;;;-1:-1:-1;15199:16:1;15174:41;;15236:7;15225:5;15231:1;15225:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;15261:5;15080:193;-1:-1:-1;;15080:193:1:o;1076:634:4:-;-1:-1:-1;;;;;1388:18:4;;1384:156;;1427:9;1422:108;1446:3;:10;1442:1;:14;1422:108;;;1505:7;1513:1;1505:10;;;;;;;;:::i;:::-;;;;;;;1481:12;:20;1494:3;1498:1;1494:6;;;;;;;;:::i;:::-;;;;;;;1481:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;1458:3:4;;-1:-1:-1;1458:3:4;;:::i;:::-;;;1422:108;;;;1384:156;-1:-1:-1;;;;;1554:16:4;;1550:154;;1591:9;1586:108;1610:3;:10;1606:1;:14;1586:108;;;1669:7;1677:1;1669:10;;;;;;;;:::i;:::-;;;;;;;1645:12;:20;1658:3;1662:1;1658:6;;;;;;;;:::i;:::-;;;;;;;1645:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;1622:3:4;;-1:-1:-1;1622:3:4;;:::i;:::-;;;1586:108;;13551:725:1;-1:-1:-1;;;;;13758:13:1;;1465:19:6;:23;13754:516:1;;13793:72;;-1:-1:-1;;;13793:72:1;;-1:-1:-1;;;;;13793:38:1;;;;;:72;;13832:8;;13842:4;;13848:2;;13852:6;;13860:4;;13793:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13793:72:1;;;;;;;;-1:-1:-1;;13793:72:1;;;;;;;;;;;;:::i;:::-;;;13789:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14136:6;14129:14;;-1:-1:-1;;;14129:14:1;;;;;;;;:::i;13789:471::-;;;14183:62;;-1:-1:-1;;;14183:62:1;;27228:2:13;14183:62:1;;;27210:21:13;27267:2;27247:18;;;27240:30;27306:34;27286:18;;;27279:62;-1:-1:-1;;;27357:18:13;;;27350:50;27417:19;;14183:62:1;27026:416:13;13789:471:1;-1:-1:-1;;;;;;13914:55:1;;-1:-1:-1;;;13914:55:1;13910:152;;13993:50;;-1:-1:-1;;;13993:50:1;;;;;;;:::i;14282:792::-;-1:-1:-1;;;;;14514:13:1;;1465:19:6;:23;14510:558:1;;14549:79;;-1:-1:-1;;;14549:79:1;;-1:-1:-1;;;;;14549:43:1;;;;;:79;;14593:8;;14603:4;;14609:3;;14614:7;;14623:4;;14549:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14549:79:1;;;;;;;;-1:-1:-1;;14549:79:1;;;;;;;;;;;;:::i;:::-;;;14545:513;;;;:::i;:::-;-1:-1:-1;;;;;;14707:60:1;;-1:-1:-1;;;14707:60:1;14703:157;;14791:50;;-1:-1:-1;;;14791:50:1;;;;;;;:::i;5716:1603:9:-;5842:7;;6766:66;6753:79;;6749:161;;;-1:-1:-1;6864:1:9;;-1:-1:-1;6868:30:9;6848:51;;6749:161;6923:1;:7;;6928:2;6923:7;;:18;;;;;6934:1;:7;;6939:2;6934:7;;6923:18;6919:100;;;-1:-1:-1;6973:1:9;;-1:-1:-1;6977:30:9;6957:51;;6919:100;7130:24;;;7113:14;7130:24;;;;;;;;;28915:25:13;;;28988:4;28976:17;;28956:18;;;28949:45;;;;29010:18;;;29003:34;;;29053:18;;;29046:34;;;7130:24:9;;28887:19:13;;7130:24:9;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7130:24:9;;-1:-1:-1;;7130:24:9;;;-1:-1:-1;;;;;;;7168:20:9;;7164:101;;7220:1;7224:29;7204:50;;;;;;;7164:101;7283:6;-1:-1:-1;7291:20:9;;-1:-1:-1;5716:1603:9;;;;;;;;:::o;4789:336::-;4899:7;;-1:-1:-1;;;;;4944:80:9;;4899:7;5050:25;5066:3;5051:18;;;5073:2;5050:25;:::i;:::-;5034:42;;5093:25;5104:4;5110:1;5113;5116;5093:10;:25::i;:::-;5086:32;;;;;;4789:336;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:13;-1:-1:-1;;;;;89:31:13;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:13:o;652:131::-;-1:-1:-1;;;;;;726:32:13;;716:43;;706:71;;773:1;770;763:12;788:245;846:6;899:2;887:9;878:7;874:23;870:32;867:52;;;915:1;912;905:12;867:52;954:9;941:23;973:30;997:5;973:30;:::i;:::-;1022:5;788:245;-1:-1:-1;;;788:245:13:o;1230:127::-;1291:10;1286:3;1282:20;1279:1;1272:31;1322:4;1319:1;1312:15;1346:4;1343:1;1336:15;1362:249;1472:2;1453:13;;-1:-1:-1;;1449:27:13;1437:40;;1507:18;1492:34;;1528:22;;;1489:62;1486:88;;;1554:18;;:::i;:::-;1590:2;1583:22;-1:-1:-1;;1362:249:13:o;1616:469::-;1681:5;1715:18;1707:6;1704:30;1701:56;;;1737:18;;:::i;:::-;1786:2;1780:9;1798:69;1855:2;1834:15;;-1:-1:-1;;1830:29:13;1861:4;1826:40;1780:9;1798:69;:::i;:::-;1885:6;1876:15;;1915:6;1907;1900:22;1955:3;1946:6;1941:3;1937:16;1934:25;1931:45;;;1972:1;1969;1962:12;1931:45;2022:6;2017:3;2010:4;2002:6;1998:17;1985:44;2077:1;2070:4;2061:6;2053;2049:19;2045:30;2038:41;;1616:469;;;;;:::o;2090:451::-;2159:6;2212:2;2200:9;2191:7;2187:23;2183:32;2180:52;;;2228:1;2225;2218:12;2180:52;2268:9;2255:23;2301:18;2293:6;2290:30;2287:50;;;2333:1;2330;2323:12;2287:50;2356:22;;2409:4;2401:13;;2397:27;-1:-1:-1;2387:55:13;;2438:1;2435;2428:12;2387:55;2461:74;2527:7;2522:2;2509:16;2504:2;2500;2496:11;2461:74;:::i;2546:472::-;2588:3;2626:5;2620:12;2653:6;2648:3;2641:19;2678:1;2688:162;2702:6;2699:1;2696:13;2688:162;;;2764:4;2820:13;;;2816:22;;2810:29;2792:11;;;2788:20;;2781:59;2717:12;2688:162;;;2868:6;2865:1;2862:13;2859:87;;;2934:1;2927:4;2918:6;2913:3;2909:16;2905:27;2898:38;2859:87;-1:-1:-1;3000:2:13;2979:15;-1:-1:-1;;2975:29:13;2966:39;;;;3007:4;2962:50;;2546:472;-1:-1:-1;;2546:472:13:o;3023:220::-;3172:2;3161:9;3154:21;3135:4;3192:45;3233:2;3222:9;3218:18;3210:6;3192:45;:::i;3248:180::-;3307:6;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;-1:-1:-1;3399:23:13;;3248:180;-1:-1:-1;3248:180:13:o;3433:659::-;3512:6;3520;3528;3581:2;3569:9;3560:7;3556:23;3552:32;3549:52;;;3597:1;3594;3587:12;3549:52;3633:9;3620:23;3610:33;;3694:2;3683:9;3679:18;3666:32;3717:18;3758:2;3750:6;3747:14;3744:34;;;3774:1;3771;3764:12;3744:34;3812:6;3801:9;3797:22;3787:32;;3857:7;3850:4;3846:2;3842:13;3838:27;3828:55;;3879:1;3876;3869:12;3828:55;3919:2;3906:16;3945:2;3937:6;3934:14;3931:34;;;3961:1;3958;3951:12;3931:34;4006:7;4001:2;3992:6;3988:2;3984:15;3980:24;3977:37;3974:57;;;4027:1;4024;4017:12;3974:57;4058:2;4054;4050:11;4040:21;;4080:6;4070:16;;;;;3433:659;;;;;:::o;4097:247::-;4156:6;4209:2;4197:9;4188:7;4184:23;4180:32;4177:52;;;4225:1;4222;4215:12;4177:52;4264:9;4251:23;4283:31;4308:5;4283:31;:::i;4349:183::-;4409:4;4442:18;4434:6;4431:30;4428:56;;;4464:18;;:::i;:::-;-1:-1:-1;4509:1:13;4505:14;4521:4;4501:25;;4349:183::o;4537:724::-;4591:5;4644:3;4637:4;4629:6;4625:17;4621:27;4611:55;;4662:1;4659;4652:12;4611:55;4698:6;4685:20;4724:4;4747:43;4787:2;4747:43;:::i;:::-;4819:2;4813:9;4831:31;4859:2;4851:6;4831:31;:::i;:::-;4897:18;;;4989:1;4985:10;;;;4973:23;;4969:32;;;4931:15;;;;-1:-1:-1;5013:15:13;;;5010:35;;;5041:1;5038;5031:12;5010:35;5077:2;5069:6;5065:15;5089:142;5105:6;5100:3;5097:15;5089:142;;;5171:17;;5159:30;;5209:12;;;;5122;;5089:142;;;-1:-1:-1;5249:6:13;4537:724;-1:-1:-1;;;;;;4537:724:13:o;5266:221::-;5308:5;5361:3;5354:4;5346:6;5342:17;5338:27;5328:55;;5379:1;5376;5369:12;5328:55;5401:80;5477:3;5468:6;5455:20;5448:4;5440:6;5436:17;5401:80;:::i;5492:1071::-;5646:6;5654;5662;5670;5678;5731:3;5719:9;5710:7;5706:23;5702:33;5699:53;;;5748:1;5745;5738:12;5699:53;5787:9;5774:23;5806:31;5831:5;5806:31;:::i;:::-;5856:5;-1:-1:-1;5913:2:13;5898:18;;5885:32;5926:33;5885:32;5926:33;:::i;:::-;5978:7;-1:-1:-1;6036:2:13;6021:18;;6008:32;6059:18;6089:14;;;6086:34;;;6116:1;6113;6106:12;6086:34;6139:61;6192:7;6183:6;6172:9;6168:22;6139:61;:::i;:::-;6129:71;;6253:2;6242:9;6238:18;6225:32;6209:48;;6282:2;6272:8;6269:16;6266:36;;;6298:1;6295;6288:12;6266:36;6321:63;6376:7;6365:8;6354:9;6350:24;6321:63;:::i;:::-;6311:73;;6437:3;6426:9;6422:19;6409:33;6393:49;;6467:2;6457:8;6454:16;6451:36;;;6483:1;6480;6473:12;6451:36;;6506:51;6549:7;6538:8;6527:9;6523:24;6506:51;:::i;:::-;6496:61;;;5492:1071;;;;;;;;:::o;6568:1277::-;6686:6;6694;6747:2;6735:9;6726:7;6722:23;6718:32;6715:52;;;6763:1;6760;6753:12;6715:52;6803:9;6790:23;6832:18;6873:2;6865:6;6862:14;6859:34;;;6889:1;6886;6879:12;6859:34;6927:6;6916:9;6912:22;6902:32;;6972:7;6965:4;6961:2;6957:13;6953:27;6943:55;;6994:1;6991;6984:12;6943:55;7030:2;7017:16;7052:4;7075:43;7115:2;7075:43;:::i;:::-;7147:2;7141:9;7159:31;7187:2;7179:6;7159:31;:::i;:::-;7225:18;;;7313:1;7309:10;;;;7301:19;;7297:28;;;7259:15;;;;-1:-1:-1;7337:19:13;;;7334:39;;;7369:1;7366;7359:12;7334:39;7393:11;;;;7413:217;7429:6;7424:3;7421:15;7413:217;;;7509:3;7496:17;7526:31;7551:5;7526:31;:::i;:::-;7570:18;;7446:12;;;;7608;;;;7413:217;;;7649:6;-1:-1:-1;;7693:18:13;;7680:32;;-1:-1:-1;;7724:16:13;;;7721:36;;;7753:1;7750;7743:12;7721:36;;7776:63;7831:7;7820:8;7809:9;7805:24;7776:63;:::i;:::-;7766:73;;;6568:1277;;;;;:::o;7850:435::-;7903:3;7941:5;7935:12;7968:6;7963:3;7956:19;7994:4;8023:2;8018:3;8014:12;8007:19;;8060:2;8053:5;8049:14;8081:1;8091:169;8105:6;8102:1;8099:13;8091:169;;;8166:13;;8154:26;;8200:12;;;;8235:15;;;;8127:1;8120:9;8091:169;;;-1:-1:-1;8276:3:13;;7850:435;-1:-1:-1;;;;;7850:435:13:o;8290:261::-;8469:2;8458:9;8451:21;8432:4;8489:56;8541:2;8530:9;8526:18;8518:6;8489:56;:::i;8764:416::-;8829:6;8837;8890:2;8878:9;8869:7;8865:23;8861:32;8858:52;;;8906:1;8903;8896:12;8858:52;8945:9;8932:23;8964:31;8989:5;8964:31;:::i;:::-;9014:5;-1:-1:-1;9071:2:13;9056:18;;9043:32;9113:15;;9106:23;9094:36;;9084:64;;9144:1;9141;9134:12;9084:64;9167:7;9157:17;;;8764:416;;;;;:::o;9185:316::-;9262:6;9270;9278;9331:2;9319:9;9310:7;9306:23;9302:32;9299:52;;;9347:1;9344;9337:12;9299:52;-1:-1:-1;;9370:23:13;;;9440:2;9425:18;;9412:32;;-1:-1:-1;9491:2:13;9476:18;;;9463:32;;9185:316;-1:-1:-1;9185:316:13:o;9506:388::-;9574:6;9582;9635:2;9623:9;9614:7;9610:23;9606:32;9603:52;;;9651:1;9648;9641:12;9603:52;9690:9;9677:23;9709:31;9734:5;9709:31;:::i;:::-;9759:5;-1:-1:-1;9816:2:13;9801:18;;9788:32;9829:33;9788:32;9829:33;:::i;9899:734::-;10003:6;10011;10019;10027;10035;10088:3;10076:9;10067:7;10063:23;10059:33;10056:53;;;10105:1;10102;10095:12;10056:53;10144:9;10131:23;10163:31;10188:5;10163:31;:::i;:::-;10213:5;-1:-1:-1;10270:2:13;10255:18;;10242:32;10283:33;10242:32;10283:33;:::i;:::-;10335:7;-1:-1:-1;10389:2:13;10374:18;;10361:32;;-1:-1:-1;10440:2:13;10425:18;;10412:32;;-1:-1:-1;10495:3:13;10480:19;;10467:33;10523:18;10512:30;;10509:50;;;10555:1;10552;10545:12;10509:50;10578:49;10619:7;10610:6;10599:9;10595:22;10578:49;:::i;11050:356::-;11252:2;11234:21;;;11271:18;;;11264:30;11330:34;11325:2;11310:18;;11303:62;11397:2;11382:18;;11050:356::o;11411:380::-;11490:1;11486:12;;;;11533;;;11554:61;;11608:4;11600:6;11596:17;11586:27;;11554:61;11661:2;11653:6;11650:14;11630:18;11627:38;11624:161;;;11707:10;11702:3;11698:20;11695:1;11688:31;11742:4;11739:1;11732:15;11770:4;11767:1;11760:15;11624:161;;11411:380;;;:::o;11796:400::-;11998:2;11980:21;;;12037:2;12017:18;;;12010:30;12076:34;12071:2;12056:18;;12049:62;-1:-1:-1;;;12142:2:13;12127:18;;12120:34;12186:3;12171:19;;11796:400::o;12201:127::-;12262:10;12257:3;12253:20;12250:1;12243:31;12293:4;12290:1;12283:15;12317:4;12314:1;12307:15;12333:125;12373:4;12401:1;12398;12395:8;12392:34;;;12406:18;;:::i;:::-;-1:-1:-1;12443:9:13;;12333:125::o;13525:127::-;13586:10;13581:3;13577:20;13574:1;13567:31;13617:4;13614:1;13607:15;13641:4;13638:1;13631:15;13657:409;13859:2;13841:21;;;13898:2;13878:18;;;13871:30;13937:34;13932:2;13917:18;;13910:62;-1:-1:-1;;;14003:2:13;13988:18;;13981:43;14056:3;14041:19;;13657:409::o;17404:135::-;17443:3;-1:-1:-1;;17464:17:13;;17461:43;;;17484:18;;:::i;:::-;-1:-1:-1;17531:1:13;17520:13;;17404:135::o;19144:128::-;19184:3;19215:1;19211:6;19208:1;19205:13;19202:39;;;19221:18;;:::i;:::-;-1:-1:-1;19257:9:13;;19144:128::o;19277:280::-;19376:6;19429:2;19417:9;19408:7;19404:23;19400:32;19397:52;;;19445:1;19442;19435:12;19397:52;19477:9;19471:16;19496:31;19521:5;19496:31;:::i;21443:401::-;21645:2;21627:21;;;21684:2;21664:18;;;21657:30;21723:34;21718:2;21703:18;;21696:62;-1:-1:-1;;;21789:2:13;21774:18;;21767:35;21834:3;21819:19;;21443:401::o;21849:406::-;22051:2;22033:21;;;22090:2;22070:18;;;22063:30;22129:34;22124:2;22109:18;;22102:62;-1:-1:-1;;;22195:2:13;22180:18;;22173:40;22245:3;22230:19;;21849:406::o;22260:465::-;22517:2;22506:9;22499:21;22480:4;22543:56;22595:2;22584:9;22580:18;22572:6;22543:56;:::i;:::-;22647:9;22639:6;22635:22;22630:2;22619:9;22615:18;22608:50;22675:44;22712:6;22704;22675:44;:::i;:::-;22667:52;22260:465;-1:-1:-1;;;;;22260:465:13:o;23695:127::-;23756:10;23751:3;23747:20;23744:1;23737:31;23787:4;23784:1;23777:15;23811:4;23808:1;23801:15;25346:561;-1:-1:-1;;;;;25643:15:13;;;25625:34;;25695:15;;25690:2;25675:18;;25668:43;25742:2;25727:18;;25720:34;;;25785:2;25770:18;;25763:34;;;25605:3;25828;25813:19;;25806:32;;;25568:4;;25855:46;;25881:19;;25873:6;25855:46;:::i;:::-;25847:54;25346:561;-1:-1:-1;;;;;;;25346:561:13:o;25912:249::-;25981:6;26034:2;26022:9;26013:7;26009:23;26005:32;26002:52;;;26050:1;26047;26040:12;26002:52;26082:9;26076:16;26101:30;26125:5;26101:30;:::i;26166:179::-;26201:3;26243:1;26225:16;26222:23;26219:120;;;26289:1;26286;26283;26268:23;-1:-1:-1;26326:1:13;26320:8;26315:3;26311:18;26219:120;26166:179;:::o;26350:671::-;26389:3;26431:4;26413:16;26410:26;26407:39;;;26350:671;:::o;26407:39::-;26473:2;26467:9;-1:-1:-1;;26538:16:13;26534:25;;26531:1;26467:9;26510:50;26589:4;26583:11;26613:16;26648:18;26719:2;26712:4;26704:6;26700:17;26697:25;26692:2;26684:6;26681:14;26678:45;26675:58;;;26726:5;;;;;26350:671;:::o;26675:58::-;26763:6;26757:4;26753:17;26742:28;;26799:3;26793:10;26826:2;26818:6;26815:14;26812:27;;;26832:5;;;;;;26350:671;:::o;26812:27::-;26916:2;26897:16;26891:4;26887:27;26883:36;26876:4;26867:6;26862:3;26858:16;26854:27;26851:69;26848:82;;;26923:5;;;;;;26350:671;:::o;26848:82::-;26939:57;26990:4;26981:6;26973;26969:19;26965:30;26959:4;26939:57;:::i;:::-;-1:-1:-1;27012:3:13;;26350:671;-1:-1:-1;;;;;26350:671:13:o;27447:404::-;27649:2;27631:21;;;27688:2;27668:18;;;27661:30;27727:34;27722:2;27707:18;;27700:62;-1:-1:-1;;;27793:2:13;27778:18;;27771:38;27841:3;27826:19;;27447:404::o;27856:827::-;-1:-1:-1;;;;;28253:15:13;;;28235:34;;28305:15;;28300:2;28285:18;;28278:43;28215:3;28352:2;28337:18;;28330:31;;;28178:4;;28384:57;;28421:19;;28413:6;28384:57;:::i;:::-;28489:9;28481:6;28477:22;28472:2;28461:9;28457:18;28450:50;28523:44;28560:6;28552;28523:44;:::i;:::-;28509:58;;28616:9;28608:6;28604:22;28598:3;28587:9;28583:19;28576:51;28644:33;28670:6;28662;28644:33;:::i;:::-;28636:41;27856:827;-1:-1:-1;;;;;;;;27856:827:13:o
Swarm Source
ipfs://1bb7ab443a0f779d26b4f4c483092d97291f86e87fd406a1a2dafd4502b5e449
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.