Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
2
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
BBFC
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-21 */ /** *Submitted for verification at Etherscan.io on 2022-05-21 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.0; /** * @dev ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721 { /** * @dev Emits when ownership of any NFT changes by any mechanism. This event emits when NFTs are * created (`from` == 0) and destroyed (`to` == 0). Exception: during contract creation, any * number of NFTs may be created and assigned without emitting Transfer. At the time of any * transfer, the approved address for that NFT (if any) is reset to none. */ event Transfer( address indexed _from, address indexed _to, uint256 indexed _tokenId ); /** * @dev This emits when the approved address for an NFT is changed or reaffirmed. The zero * address indicates there is no approved address. When a Transfer event emits, this also * indicates that the approved address for that NFT (if any) is reset to none. */ event Approval( address indexed _owner, address indexed _approved, uint256 indexed _tokenId ); /** * @dev This emits when an operator is enabled or disabled for an owner. The operator can manage * all NFTs of the owner. */ event ApprovalForAll( address indexed _owner, address indexed _operator, bool _approved ); /** * @dev Transfers the ownership of an NFT from one address to another address. * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this * function checks if `_to` is a smart contract (code size > 0). If so, it calls * `onERC721Received` on `_to` and throws if the return value is not * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes calldata _data ) external; /** * @dev Transfers the ownership of an NFT from one address to another address. * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "" * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) external; /** * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero * address. Throws if `_tokenId` is not a valid NFT. * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function transferFrom( address _from, address _to, uint256 _tokenId ) external; /** * @dev Set or reaffirm the approved address for an NFT. * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is * the current NFT owner, or an authorized operator of the current owner. * @param _approved The new approved NFT controller. * @param _tokenId The NFT to approve. */ function approve( address _approved, uint256 _tokenId ) external; /** * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @notice The contract MUST allow multiple operators per owner. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external; /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external view returns (uint256); /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external view returns (address); /** * @dev Get the approved address for a single NFT. * @notice Throws if `_tokenId` is not a valid NFT. * @param _tokenId The NFT to find the approved address for. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external view returns (address); /** * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external view returns (bool); } /** * @dev Optional metadata extension for ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721Metadata { /** * @dev Returns a descriptive name for a collection of NFTs in this contract. * @return _name Representing name. */ function name() external view returns (string memory _name); /** * @dev Returns a abbreviated name for a collection of NFTs in this contract. * @return _symbol Representing symbol. */ function symbol() external view returns (string memory _symbol); /** * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file * that conforms to the "ERC721 Metadata JSON Schema". * @return URI of _tokenId. */ function tokenURI(uint256 _tokenId) external view returns (string memory); } /** * @dev Utility library of inline functions on addresses. * @notice Based on: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol * Requires EIP-1052. */ library AddressUtils { /** * @dev Returns whether the target address is a contract. * @param _addr Address to check. * @return addressCheck True if _addr is a contract, false if not. */ function isContract( address _addr ) internal view returns (bool addressCheck) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(_addr) } // solhint-disable-line addressCheck = (codehash != 0x0 && codehash != accountHash); } } /** * @dev A standard for detecting smart contract interfaces. * See: https://eips.ethereum.org/EIPS/eip-165. */ interface ERC165 { /** * @dev Checks if the smart contract includes a specific interface. * This function uses less than 30,000 gas. * @param _interfaceID The interface identifier, as specified in ERC-165. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external view returns (bool); } /** * @dev ERC-721 interface for accepting safe transfers. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721TokenReceiver { /** * @dev Handle the receipt of a NFT. The ERC721 smart contract calls this function on the * recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return * of other than the magic value MUST result in the transaction being reverted. * Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` unless throwing. * @notice The contract address is always the message sender. A wallet/broker/auction application * MUST implement the wallet interface if it will accept safe transfers. * @param _operator The address which called `safeTransferFrom` function. * @param _from The address which previously owned the token. * @param _tokenId The NFT identifier which is being transferred. * @param _data Additional data with no specified format. * @return Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes calldata _data ) external returns(bytes4); } /** * @dev Implementation of standard for detect smart contract interfaces. */ contract SupportsInterface is ERC165 { /** * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true. */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x01ffc9a7] = true; // ERC165 } /** * @dev Function to check which interfaces are suported by this contract. * @param _interfaceID Id of the interface. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external override view returns (bool) { return supportedInterfaces[_interfaceID]; } } /** * @dev Implementation of ERC-721 non-fungible token standard. */ contract NFToken is ERC721, SupportsInterface { using AddressUtils for address; /** * @dev List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant ZERO_ADDRESS = "003001"; string constant NOT_VALID_NFT = "003002"; string constant NOT_OWNER_OR_OPERATOR = "003003"; string constant NOT_OWNER_APPROVED_OR_OPERATOR = "003004"; string constant NOT_ABLE_TO_RECEIVE_NFT = "003005"; string constant NFT_ALREADY_EXISTS = "003006"; string constant NOT_OWNER = "003007"; string constant IS_OWNER = "003008"; /** * @dev Magic value of a smart contract that can receive NFT. * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")). */ bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02; /** * @dev A mapping from NFT ID to the address that owns it. */ mapping (uint256 => address) internal idToOwner; /** * @dev Mapping from NFT ID to approved address. */ mapping (uint256 => address) internal idToApproval; /** * @dev Mapping from owner address to count of their tokens. */ mapping (address => uint256) private ownerToNFTokenCount; /** * @dev Mapping from owner address to mapping of operator addresses. */ mapping (address => mapping (address => bool)) internal ownerToOperators; /** * @dev Guarantees that the msg.sender is an owner or operator of the given NFT. * @param _tokenId ID of the NFT to validate. */ modifier canOperate( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_OR_OPERATOR ); _; } /** * @dev Guarantees that the msg.sender is allowed to transfer NFT. * @param _tokenId ID of the NFT to transfer. */ modifier canTransfer( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || idToApproval[_tokenId] == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_APPROVED_OR_OPERATOR ); _; } /** * @dev Guarantees that _tokenId is a valid Token. * @param _tokenId ID of the NFT to validate. */ modifier validNFToken( uint256 _tokenId ) { require(idToOwner[_tokenId] != address(0), NOT_VALID_NFT); _; } /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x80ac58cd] = true; // ERC721 } /** * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this * function checks if `_to` is a smart contract (code size > 0). If so, it calls * `onERC721Received` on `_to` and throws if the return value is not * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes calldata _data ) external override { _safeTransferFrom(_from, _to, _tokenId, _data); } /** * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "" * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) external override { _safeTransferFrom(_from, _to, _tokenId, ""); } /** * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero * address. Throws if `_tokenId` is not a valid NFT. This function can be changed to payable. * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function transferFrom( address _from, address _to, uint256 _tokenId ) external override canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); } /** * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable. * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is * the current NFT owner, or an authorized operator of the current owner. * @param _approved Address to be approved for the given NFT ID. * @param _tokenId ID of the token to be approved. */ function approve( address _approved, uint256 _tokenId ) external override canOperate(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(_approved != tokenOwner, IS_OWNER); idToApproval[_tokenId] = _approved; emit Approval(tokenOwner, _approved, _tokenId); } /** * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @notice This works even if sender doesn't own any tokens at the time. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external override { ownerToOperators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external override view returns (uint256) { require(_owner != address(0), ZERO_ADDRESS); return _getOwnerNFTCount(_owner); } /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return _owner Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external override view returns (address _owner) { _owner = idToOwner[_tokenId]; require(_owner != address(0), NOT_VALID_NFT); } /** * @dev Get the approved address for a single NFT. * @notice Throws if `_tokenId` is not a valid NFT. * @param _tokenId ID of the NFT to query the approval of. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (address) { return idToApproval[_tokenId]; } /** * @dev Checks if `_operator` is an approved operator for `_owner`. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external override view returns (bool) { return ownerToOperators[_owner][_operator]; } /** * @dev Actually performs the transfer. * @notice Does NO checks. * @param _to Address of a new owner. * @param _tokenId The NFT that is being transferred. */ function _transfer( address _to, uint256 _tokenId ) internal { address from = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(from, _tokenId); _addNFToken(_to, _tokenId); emit Transfer(from, _to, _tokenId); } /** * @dev Mints a new NFT. * @notice This is an internal function which should be called from user-implemented external * mint function. Its purpose is to show and properly initialize data structures when using this * implementation. * @param _to The address that will own the minted NFT. * @param _tokenId of the NFT to be minted by the msg.sender. */ function _mint( address _to, uint256 _tokenId ) internal virtual { require(_to != address(0), ZERO_ADDRESS); require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); _addNFToken(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @dev Burns a NFT. * @notice This is an internal function which should be called from user-implemented external burn * function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal virtual validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(tokenOwner, _tokenId); emit Transfer(tokenOwner, address(0), _tokenId); } /** * @dev Removes a NFT from owner. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _from Address from which we want to remove the NFT. * @param _tokenId Which NFT we want to remove. */ function _removeNFToken( address _from, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == _from, NOT_OWNER); ownerToNFTokenCount[_from] -= 1; delete idToOwner[_tokenId]; } /** * @dev Assigns a new NFT to owner. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _to Address to which we want to add the NFT. * @param _tokenId Which NFT we want to add. */ function _addNFToken( address _to, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); idToOwner[_tokenId] = _to; ownerToNFTokenCount[_to] += 1; } /** * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable * extension to remove double storage (gas optimization) of owner NFT count. * @param _owner Address for whom to query the count. * @return Number of _owner NFTs. */ function _getOwnerNFTCount( address _owner ) internal virtual view returns (uint256) { return ownerToNFTokenCount[_owner]; } /** * @dev Actually perform the safeTransferFrom. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function _safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes memory _data ) private canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); if (_to.isContract()) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data); require(retval == MAGIC_ON_ERC721_RECEIVED, NOT_ABLE_TO_RECEIVE_NFT); } } /** * @dev Clears the current approval of a given NFT ID. * @param _tokenId ID of the NFT to be transferred. */ function _clearApproval( uint256 _tokenId ) private { delete idToApproval[_tokenId]; } } /** * @dev Optional metadata implementation for ERC-721 non-fungible token standard. */ contract NFTokenMetadata is NFToken, ERC721Metadata { /** * @dev A descriptive name for a collection of NFTs. */ string internal nftName; /** * @dev An abbreviated name for NFTokens. */ string internal nftSymbol; /** * @dev Mapping from NFT ID to metadata uri. */ mapping (uint256 => string) internal idToUri; /** * @dev Contract constructor. * @notice When implementing this contract don't forget to set nftName and nftSymbol. */ constructor() { supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata } /** * @dev Returns a descriptive name for a collection of NFTokens. * @return _name Representing name. */ function name() external override view returns (string memory _name) { _name = nftName; } /** * @dev Returns an abbreviated name for NFTokens. * @return _symbol Representing symbol. */ function symbol() external override view returns (string memory _symbol) { _symbol = nftSymbol; } /** * @dev A distinct URI (RFC 3986) for a given NFT. * @param _tokenId Id for which we want uri. * @return URI of _tokenId. */ function tokenURI( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (string memory) { return idToUri[_tokenId]; } /** * @dev Burns a NFT. * @notice This is an internal function which should be called from user-implemented external * burn function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal override virtual { super._burn(_tokenId); delete idToUri[_tokenId]; } /** * @dev Set a distinct URI (RFC 3986) for a given NFT ID. * @notice This is an internal function which should be called from user-implemented external * function. Its purpose is to show and properly initialize data structures when using this * implementation. * @param _tokenId Id for which we want URI. * @param _uri String representing RFC 3986 URI. */ function _setTokenUri( uint256 _tokenId, string memory _uri ) internal validNFToken(_tokenId) { idToUri[_tokenId] = _uri; } } /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { /** * @dev Error constants. */ string public constant NOT_CURRENT_OWNER = "018001"; string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002"; /** * @dev Current owner address. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The constructor sets the original `owner` of the contract to the sender account. */ constructor() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, NOT_CURRENT_OWNER); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership( address _newOwner ) public onlyOwner { require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract utils{ function strConcat(string memory _a, string memory _b) internal pure returns (string memory){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); string memory ret = new string(_ba.length + _bb.length); bytes memory bret = bytes(ret); uint k = 0; for (uint i = 0; i < _ba.length; i++)bret[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) { bret[k++] = _bb[i]; } return string(ret); } function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } contract BBFC is NFTokenMetadata, Ownable, utils { //0.18eth uint256 public price = 180000000 * 10 ** 9; uint256 public tokenId = 1; uint256 public minMint = 1; string baseUri = "https://boringbearfortuneclub.mypinata.cloud/ipfs/QmVrKn1ZFEvhPJKtbJUvHByws5geiGdgH7SyXzYcbhHTNb/"; constructor() { nftName = "BoringBearFortuneClub"; nftSymbol = "BBFC"; } address payable public payAddress = payable(0x4F867ad863E3FC714792480A3F53f90C4259aAA7); function mint(uint256 tokenQuantity) payable public{ require(msg.value * tokenQuantity >= price, "price too little"); require(tokenId <= totalSupply(), "too many"); require(tokenQuantity >= minMint && tokenQuantity <= 10, "amount false"); for (uint256 i = 0; i < tokenQuantity; i++) { super._mint(msg.sender, tokenId); super._setTokenUri(tokenId, strConcat(baseUri, toString(tokenId))); tokenId ++; } payAddress.transfer(msg.value); } function setPrice(uint256 _target) external onlyOwner{ price = _target * 10 ** 9; } function setMinAmount(uint256 _target) external onlyOwner{ minMint = _target; } function totalSupply() public pure returns (uint256) { return 3333; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"setMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"setPrice","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":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
67027f7d0bdb9200006009556001600a819055600b55610120604052606160808181529062001fed60a03980516200004091600c9160209091019062000198565b50600d80546001600160a01b031916734f867ad863e3fc714792480a3f53f90c4259aaa71790553480156200007457600080fd5b50600060208181527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff1990811660019081179092557ff7815fccbf112960a73756e185887fedcb9fc64ca0a16cc5923b7960ed7808008054821683179055635b5e139f60e01b9093527f9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df805490931617909155600880546001600160a01b031916331790556040805180820190915260158082527f426f72696e6742656172466f7274756e65436c756200000000000000000000009190920190815262000163916005919062000198565b50604080518082019091526004808252634242464360e01b6020909201918252620001919160069162000198565b506200027b565b828054620001a6906200023e565b90600052602060002090601f016020900481019282620001ca576000855562000215565b82601f10620001e557805160ff191683800117855562000215565b8280016001018555821562000215579182015b8281111562000215578251825591602001919060010190620001f8565b506200022392915062000227565b5090565b5b8082111562000223576000815560010162000228565b6002810460018216806200025357607f821691505b602082108114156200027557634e487b7160e01b600052602260045260246000fd5b50919050565b611d62806200028b6000396000f3fe6080604052600436106101665760003560e01c8063860d248a116100d1578063a0712d681161008a578063c87b56dd11610064578063c87b56dd146103da578063e985e9c5146103fa578063f2fde38b1461041a578063f3fe3bc31461043a57610166565b8063a0712d6814610387578063a22cb4651461039a578063b88d4fde146103ba57610166565b8063860d248a146102f3578063897b0637146103085780638da5cb5b1461032857806391b7f5ed1461033d57806395d89b411461035d578063a035b1fe1461037257610166565b806323b872dd1161012357806323b872dd14610249578063294bfa8e1461026957806342842e0e1461027e5780636352211e1461029e57806370a08231146102be5780638376112a146102de57610166565b806301ffc9a71461016b57806306fdde03146101a1578063081812fc146101c3578063095ea7b3146101f057806317d70f7c1461021257806318160ddd14610234575b600080fd5b34801561017757600080fd5b5061018b610186366004611a9c565b61044f565b6040516101989190611b88565b60405180910390f35b3480156101ad57600080fd5b506101b6610472565b6040516101989190611b93565b3480156101cf57600080fd5b506101e36101de366004611ad4565b610504565b6040516101989190611b37565b3480156101fc57600080fd5b5061021061020b366004611a73565b610586565b005b34801561021e57600080fd5b50610227610728565b6040516101989190611c18565b34801561024057600080fd5b5061022761072e565b34801561025557600080fd5b50610210610264366004611968565b610734565b34801561027557600080fd5b506101e36108ef565b34801561028a57600080fd5b50610210610299366004611968565b6108fe565b3480156102aa57600080fd5b506101e36102b9366004611ad4565b61091e565b3480156102ca57600080fd5b506102276102d9366004611915565b610976565b3480156102ea57600080fd5b506102276109cd565b3480156102ff57600080fd5b506101b66109d3565b34801561031457600080fd5b50610210610323366004611ad4565b6109f5565b34801561033457600080fd5b506101e3610a44565b34801561034957600080fd5b50610210610358366004611ad4565b610a53565b34801561036957600080fd5b506101b6610ab1565b34801561037e57600080fd5b50610227610ac0565b610210610395366004611ad4565b610ac6565b3480156103a657600080fd5b506102106103b5366004611a39565b610c6f565b3480156103c657600080fd5b506102106103d53660046119a3565b610cde565b3480156103e657600080fd5b506101b66103f5366004611ad4565b610d27565b34801561040657600080fd5b5061018b610415366004611936565b610e22565b34801561042657600080fd5b50610210610435366004611915565b610e50565b34801561044657600080fd5b506101b6610f3b565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60606005805461048190611c83565b80601f01602080910402602001604051908101604052809291908181526020018280546104ad90611c83565b80156104fa5780601f106104cf576101008083540402835291602001916104fa565b820191906000526020600020905b8154815290600101906020018083116104dd57829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b03166105645760405162461bcd60e51b815260040161055b9190611b93565b60405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b0316338114806105d157506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020016530303330303360d01b8152509061060e5760405162461bcd60e51b815260040161055b9190611b93565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166106685760405162461bcd60e51b815260040161055b9190611b93565b50600084815260016020908152604091829020548251808401909352600683526506060666060760d31b918301919091526001600160a01b03908116919087168214156106c85760405162461bcd60e51b815260040161055b9190611b93565b5060008581526002602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b600a5481565b610d0590565b60008181526001602052604090205481906001600160a01b03163381148061077257506000828152600260205260409020546001600160a01b031633145b806107a057506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906107dd5760405162461bcd60e51b815260040161055b9190611b93565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166108375760405162461bcd60e51b815260040161055b9190611b93565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146108965760405162461bcd60e51b815260040161055b9190611b93565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0387166108db5760405162461bcd60e51b815260040161055b9190611b93565b506108e68686610f5d565b50505050505050565b600d546001600160a01b031681565b61091983838360405180602001604052806000815250610fd8565b505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b031690816105805760405162461bcd60e51b815260040161055b9190611b93565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b0383166109bd5760405162461bcd60e51b815260040161055b9190611b93565b506109c782611286565b92915050565b600b5481565b6040518060400160405280600681526020016518189c18181960d11b81525081565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610a3e5760405162461bcd60e51b815260040161055b9190611b93565b50600b55565b6008546001600160a01b031681565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610a9c5760405162461bcd60e51b815260040161055b9190611b93565b50610aab81633b9aca00611c4d565b60095550565b60606006805461048190611c83565b60095481565b600954610ad38234611c4d565b1015610af15760405162461bcd60e51b815260040161055b90611bcc565b610af961072e565b600a541115610b1a5760405162461bcd60e51b815260040161055b90611bf6565b600b548110158015610b2d5750600a8111155b610b495760405162461bcd60e51b815260040161055b90611ba6565b60005b81811015610c3157610b6033600a546112a1565b610c09600a54610c04600c8054610b7690611c83565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba290611c83565b8015610bef5780601f10610bc457610100808354040283529160200191610bef565b820191906000526020600020905b815481529060010190602001808311610bd257829003601f168201915b5050505050610bff600a54611384565b6114a7565b611640565b600a8054906000610c1983611cb8565b91905055508080610c2990611cb8565b915050610b4c565b50600d546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610c6b573d6000803e3d6000fd5b5050565b3360008181526004602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610cd2908590611b88565b60405180910390a35050565b610d2085858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fd892505050565b5050505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b0316610d825760405162461bcd60e51b815260040161055b9190611b93565b5060008381526007602052604090208054610d9c90611c83565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc890611c83565b8015610e155780601f10610dea57610100808354040283529160200191610e15565b820191906000526020600020905b815481529060010190602001808311610df857829003601f168201915b5050505050915050919050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610e995760405162461bcd60e51b815260040161055b9190611b93565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b038216610ede5760405162461bcd60e51b815260040161055b9190611b93565b506008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b6000818152600160205260409020546001600160a01b0316610f7e826116bf565b610f8881836116dd565b610f928383611786565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008281526001602052604090205482906001600160a01b03163381148061101657506000828152600260205260409020546001600160a01b031633145b8061104457506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906110815760405162461bcd60e51b815260040161055b9190611b93565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b03166110db5760405162461bcd60e51b815260040161055b9190611b93565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b0390811691908916821461113a5760405162461bcd60e51b815260040161055b9190611b93565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b03881661117f5760405162461bcd60e51b815260040161055b9190611b93565b5061118a8787610f5d565b61119c876001600160a01b031661182e565b1561127c57604051630a85bd0160e11b81526000906001600160a01b0389169063150b7a02906111d69033908d908c908c90600401611b4b565b602060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112289190611ab8565b60408051808201909152600681526530303330303560d01b60208201529091506001600160e01b03198216630a85bd0160e11b146112795760405162461bcd60e51b815260040161055b9190611b93565b50505b5050505050505050565b6001600160a01b031660009081526003602052604090205490565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b0383166112e55760405162461bcd60e51b815260040161055b9190611b93565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561133d5760405162461bcd60e51b815260040161055b9190611b93565b506113488282611786565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060816113a957506040805180820190915260018152600360fc1b602082015261046d565b8160005b81156113d357806113bd81611cb8565b91506113cc9050600a83611c39565b91506113ad565b60008167ffffffffffffffff8111156113fc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611426576020820181803683370190505b5090505b841561149f5761143b600183611c6c565b9150611448600a86611cd3565b611453906030611c21565b60f81b81838151811061147657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611498600a86611c39565b945061142a565b949350505050565b80518251606091849184916000916114bf9190611c21565b67ffffffffffffffff8111156114e557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561150f576020820181803683370190505b509050806000805b85518110156115a35785818151811061154057634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b031916838361155a81611cb8565b94508151811061157a57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053508061159b81611cb8565b915050611517565b5060005b8451811015611633578481815181106115d057634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b03191683836115ea81611cb8565b94508151811061160a57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053508061162b81611cb8565b9150506115a7565b5091979650505050505050565b600082815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528391906001600160a01b03166116995760405162461bcd60e51b815260040161055b9190611b93565b50600083815260076020908152604090912083516116b992850190611865565b50505050565b600090815260026020526040902080546001600160a01b0319169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b038481169116146117385760405162461bcd60e51b815260040161055b9190611b93565b506001600160a01b0382166000908152600360205260408120805460019290611762908490611c6c565b9091555050600090815260016020526040902080546001600160a01b031916905550565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b0316156117dd5760405162461bcd60e51b815260040161055b9190611b93565b50600081815260016020818152604080842080546001600160a01b0319166001600160a01b038816908117909155845260039091528220805491929091611825908490611c21565b90915550505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061149f5750141592915050565b82805461187190611c83565b90600052602060002090601f01602090048101928261189357600085556118d9565b82601f106118ac57805160ff19168380011785556118d9565b828001600101855582156118d9579182015b828111156118d95782518255916020019190600101906118be565b506118e59291506118e9565b5090565b5b808211156118e557600081556001016118ea565b80356001600160a01b038116811461046d57600080fd5b600060208284031215611926578081fd5b61192f826118fe565b9392505050565b60008060408385031215611948578081fd5b611951836118fe565b915061195f602084016118fe565b90509250929050565b60008060006060848603121561197c578081fd5b611985846118fe565b9250611993602085016118fe565b9150604084013590509250925092565b6000806000806000608086880312156119ba578081fd5b6119c3866118fe565b94506119d1602087016118fe565b935060408601359250606086013567ffffffffffffffff808211156119f4578283fd5b818801915088601f830112611a07578283fd5b813581811115611a15578384fd5b896020828501011115611a26578384fd5b9699959850939650602001949392505050565b60008060408385031215611a4b578182fd5b611a54836118fe565b915060208301358015158114611a68578182fd5b809150509250929050565b60008060408385031215611a85578182fd5b611a8e836118fe565b946020939093013593505050565b600060208284031215611aad578081fd5b813561192f81611d13565b600060208284031215611ac9578081fd5b815161192f81611d13565b600060208284031215611ae5578081fd5b5035919050565b60008151808452815b81811015611b1157602081850181015186830182015201611af5565b81811115611b225782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b7e90830184611aec565b9695505050505050565b901515815260200190565b60006020825261192f6020830184611aec565b6020808252600c908201526b616d6f756e742066616c736560a01b604082015260600190565b60208082526010908201526f707269636520746f6f206c6974746c6560801b604082015260600190565b602080825260089082015267746f6f206d616e7960c01b604082015260600190565b90815260200190565b60008219821115611c3457611c34611ce7565b500190565b600082611c4857611c48611cfd565b500490565b6000816000190483118215151615611c6757611c67611ce7565b500290565b600082821015611c7e57611c7e611ce7565b500390565b600281046001821680611c9757607f821691505b6020821081141561058057634e487b7160e01b600052602260045260246000fd5b6000600019821415611ccc57611ccc611ce7565b5060010190565b600082611ce257611ce2611cfd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160e01b031981168114611d2957600080fd5b5056fea2646970667358221220ac5e78bb686354d7a2d4bf754bc3ed9b4b58b34b775f59ed7fe9ec1c20ce2e5464736f6c6343000800003368747470733a2f2f626f72696e6762656172666f7274756e65636c75622e6d7970696e6174612e636c6f75642f697066732f516d56724b6e315a46457668504a4b74624a557648427977733567656947646748375379587a5963626848544e622f
Deployed Bytecode
0x6080604052600436106101665760003560e01c8063860d248a116100d1578063a0712d681161008a578063c87b56dd11610064578063c87b56dd146103da578063e985e9c5146103fa578063f2fde38b1461041a578063f3fe3bc31461043a57610166565b8063a0712d6814610387578063a22cb4651461039a578063b88d4fde146103ba57610166565b8063860d248a146102f3578063897b0637146103085780638da5cb5b1461032857806391b7f5ed1461033d57806395d89b411461035d578063a035b1fe1461037257610166565b806323b872dd1161012357806323b872dd14610249578063294bfa8e1461026957806342842e0e1461027e5780636352211e1461029e57806370a08231146102be5780638376112a146102de57610166565b806301ffc9a71461016b57806306fdde03146101a1578063081812fc146101c3578063095ea7b3146101f057806317d70f7c1461021257806318160ddd14610234575b600080fd5b34801561017757600080fd5b5061018b610186366004611a9c565b61044f565b6040516101989190611b88565b60405180910390f35b3480156101ad57600080fd5b506101b6610472565b6040516101989190611b93565b3480156101cf57600080fd5b506101e36101de366004611ad4565b610504565b6040516101989190611b37565b3480156101fc57600080fd5b5061021061020b366004611a73565b610586565b005b34801561021e57600080fd5b50610227610728565b6040516101989190611c18565b34801561024057600080fd5b5061022761072e565b34801561025557600080fd5b50610210610264366004611968565b610734565b34801561027557600080fd5b506101e36108ef565b34801561028a57600080fd5b50610210610299366004611968565b6108fe565b3480156102aa57600080fd5b506101e36102b9366004611ad4565b61091e565b3480156102ca57600080fd5b506102276102d9366004611915565b610976565b3480156102ea57600080fd5b506102276109cd565b3480156102ff57600080fd5b506101b66109d3565b34801561031457600080fd5b50610210610323366004611ad4565b6109f5565b34801561033457600080fd5b506101e3610a44565b34801561034957600080fd5b50610210610358366004611ad4565b610a53565b34801561036957600080fd5b506101b6610ab1565b34801561037e57600080fd5b50610227610ac0565b610210610395366004611ad4565b610ac6565b3480156103a657600080fd5b506102106103b5366004611a39565b610c6f565b3480156103c657600080fd5b506102106103d53660046119a3565b610cde565b3480156103e657600080fd5b506101b66103f5366004611ad4565b610d27565b34801561040657600080fd5b5061018b610415366004611936565b610e22565b34801561042657600080fd5b50610210610435366004611915565b610e50565b34801561044657600080fd5b506101b6610f3b565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60606005805461048190611c83565b80601f01602080910402602001604051908101604052809291908181526020018280546104ad90611c83565b80156104fa5780601f106104cf576101008083540402835291602001916104fa565b820191906000526020600020905b8154815290600101906020018083116104dd57829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b03166105645760405162461bcd60e51b815260040161055b9190611b93565b60405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b0316338114806105d157506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020016530303330303360d01b8152509061060e5760405162461bcd60e51b815260040161055b9190611b93565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166106685760405162461bcd60e51b815260040161055b9190611b93565b50600084815260016020908152604091829020548251808401909352600683526506060666060760d31b918301919091526001600160a01b03908116919087168214156106c85760405162461bcd60e51b815260040161055b9190611b93565b5060008581526002602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b600a5481565b610d0590565b60008181526001602052604090205481906001600160a01b03163381148061077257506000828152600260205260409020546001600160a01b031633145b806107a057506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906107dd5760405162461bcd60e51b815260040161055b9190611b93565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166108375760405162461bcd60e51b815260040161055b9190611b93565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146108965760405162461bcd60e51b815260040161055b9190611b93565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0387166108db5760405162461bcd60e51b815260040161055b9190611b93565b506108e68686610f5d565b50505050505050565b600d546001600160a01b031681565b61091983838360405180602001604052806000815250610fd8565b505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b031690816105805760405162461bcd60e51b815260040161055b9190611b93565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b0383166109bd5760405162461bcd60e51b815260040161055b9190611b93565b506109c782611286565b92915050565b600b5481565b6040518060400160405280600681526020016518189c18181960d11b81525081565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610a3e5760405162461bcd60e51b815260040161055b9190611b93565b50600b55565b6008546001600160a01b031681565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610a9c5760405162461bcd60e51b815260040161055b9190611b93565b50610aab81633b9aca00611c4d565b60095550565b60606006805461048190611c83565b60095481565b600954610ad38234611c4d565b1015610af15760405162461bcd60e51b815260040161055b90611bcc565b610af961072e565b600a541115610b1a5760405162461bcd60e51b815260040161055b90611bf6565b600b548110158015610b2d5750600a8111155b610b495760405162461bcd60e51b815260040161055b90611ba6565b60005b81811015610c3157610b6033600a546112a1565b610c09600a54610c04600c8054610b7690611c83565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba290611c83565b8015610bef5780601f10610bc457610100808354040283529160200191610bef565b820191906000526020600020905b815481529060010190602001808311610bd257829003601f168201915b5050505050610bff600a54611384565b6114a7565b611640565b600a8054906000610c1983611cb8565b91905055508080610c2990611cb8565b915050610b4c565b50600d546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610c6b573d6000803e3d6000fd5b5050565b3360008181526004602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610cd2908590611b88565b60405180910390a35050565b610d2085858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fd892505050565b5050505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b0316610d825760405162461bcd60e51b815260040161055b9190611b93565b5060008381526007602052604090208054610d9c90611c83565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc890611c83565b8015610e155780601f10610dea57610100808354040283529160200191610e15565b820191906000526020600020905b815481529060010190602001808311610df857829003601f168201915b5050505050915050919050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610e995760405162461bcd60e51b815260040161055b9190611b93565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b038216610ede5760405162461bcd60e51b815260040161055b9190611b93565b506008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b6000818152600160205260409020546001600160a01b0316610f7e826116bf565b610f8881836116dd565b610f928383611786565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008281526001602052604090205482906001600160a01b03163381148061101657506000828152600260205260409020546001600160a01b031633145b8061104457506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906110815760405162461bcd60e51b815260040161055b9190611b93565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b03166110db5760405162461bcd60e51b815260040161055b9190611b93565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b0390811691908916821461113a5760405162461bcd60e51b815260040161055b9190611b93565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b03881661117f5760405162461bcd60e51b815260040161055b9190611b93565b5061118a8787610f5d565b61119c876001600160a01b031661182e565b1561127c57604051630a85bd0160e11b81526000906001600160a01b0389169063150b7a02906111d69033908d908c908c90600401611b4b565b602060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112289190611ab8565b60408051808201909152600681526530303330303560d01b60208201529091506001600160e01b03198216630a85bd0160e11b146112795760405162461bcd60e51b815260040161055b9190611b93565b50505b5050505050505050565b6001600160a01b031660009081526003602052604090205490565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b0383166112e55760405162461bcd60e51b815260040161055b9190611b93565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561133d5760405162461bcd60e51b815260040161055b9190611b93565b506113488282611786565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060816113a957506040805180820190915260018152600360fc1b602082015261046d565b8160005b81156113d357806113bd81611cb8565b91506113cc9050600a83611c39565b91506113ad565b60008167ffffffffffffffff8111156113fc57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611426576020820181803683370190505b5090505b841561149f5761143b600183611c6c565b9150611448600a86611cd3565b611453906030611c21565b60f81b81838151811061147657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611498600a86611c39565b945061142a565b949350505050565b80518251606091849184916000916114bf9190611c21565b67ffffffffffffffff8111156114e557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561150f576020820181803683370190505b509050806000805b85518110156115a35785818151811061154057634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b031916838361155a81611cb8565b94508151811061157a57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053508061159b81611cb8565b915050611517565b5060005b8451811015611633578481815181106115d057634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b03191683836115ea81611cb8565b94508151811061160a57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053508061162b81611cb8565b9150506115a7565b5091979650505050505050565b600082815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528391906001600160a01b03166116995760405162461bcd60e51b815260040161055b9190611b93565b50600083815260076020908152604090912083516116b992850190611865565b50505050565b600090815260026020526040902080546001600160a01b0319169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b038481169116146117385760405162461bcd60e51b815260040161055b9190611b93565b506001600160a01b0382166000908152600360205260408120805460019290611762908490611c6c565b9091555050600090815260016020526040902080546001600160a01b031916905550565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b0316156117dd5760405162461bcd60e51b815260040161055b9190611b93565b50600081815260016020818152604080842080546001600160a01b0319166001600160a01b038816908117909155845260039091528220805491929091611825908490611c21565b90915550505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061149f5750141592915050565b82805461187190611c83565b90600052602060002090601f01602090048101928261189357600085556118d9565b82601f106118ac57805160ff19168380011785556118d9565b828001600101855582156118d9579182015b828111156118d95782518255916020019190600101906118be565b506118e59291506118e9565b5090565b5b808211156118e557600081556001016118ea565b80356001600160a01b038116811461046d57600080fd5b600060208284031215611926578081fd5b61192f826118fe565b9392505050565b60008060408385031215611948578081fd5b611951836118fe565b915061195f602084016118fe565b90509250929050565b60008060006060848603121561197c578081fd5b611985846118fe565b9250611993602085016118fe565b9150604084013590509250925092565b6000806000806000608086880312156119ba578081fd5b6119c3866118fe565b94506119d1602087016118fe565b935060408601359250606086013567ffffffffffffffff808211156119f4578283fd5b818801915088601f830112611a07578283fd5b813581811115611a15578384fd5b896020828501011115611a26578384fd5b9699959850939650602001949392505050565b60008060408385031215611a4b578182fd5b611a54836118fe565b915060208301358015158114611a68578182fd5b809150509250929050565b60008060408385031215611a85578182fd5b611a8e836118fe565b946020939093013593505050565b600060208284031215611aad578081fd5b813561192f81611d13565b600060208284031215611ac9578081fd5b815161192f81611d13565b600060208284031215611ae5578081fd5b5035919050565b60008151808452815b81811015611b1157602081850181015186830182015201611af5565b81811115611b225782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b7e90830184611aec565b9695505050505050565b901515815260200190565b60006020825261192f6020830184611aec565b6020808252600c908201526b616d6f756e742066616c736560a01b604082015260600190565b60208082526010908201526f707269636520746f6f206c6974746c6560801b604082015260600190565b602080825260089082015267746f6f206d616e7960c01b604082015260600190565b90815260200190565b60008219821115611c3457611c34611ce7565b500190565b600082611c4857611c48611cfd565b500490565b6000816000190483118215151615611c6757611c67611ce7565b500290565b600082821015611c7e57611c7e611ce7565b500390565b600281046001821680611c9757607f821691505b6020821081141561058057634e487b7160e01b600052602260045260246000fd5b6000600019821415611ccc57611ccc611ce7565b5060010190565b600082611ce257611ce2611cfd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160e01b031981168114611d2957600080fd5b5056fea2646970667358221220ac5e78bb686354d7a2d4bf754bc3ed9b4b58b34b775f59ed7fe9ec1c20ce2e5464736f6c63430008000033
Deployed Bytecode Sourcemap
31677:1343:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10603:172;;;;;;;;;;-1:-1:-1;10603:172:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24639:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18750:183::-;;;;;;;;;;-1:-1:-1;18750:183:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16535:352::-;;;;;;;;;;-1:-1:-1;16535:352:0;;;;;:::i;:::-;;:::i;:::-;;31799:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32934:83::-;;;;;;;;;;;;;:::i;15761:353::-;;;;;;;;;;-1:-1:-1;15761:353:0;;;;;:::i;:::-;;:::i;32102:87::-;;;;;;;;;;;;;:::i;15006:179::-;;;;;;;;;;-1:-1:-1;15006:179:0;;;;;:::i;:::-;;:::i;18298:208::-;;;;;;;;;;-1:-1:-1;18298:208:0;;;;;:::i;:::-;;:::i;17824:204::-;;;;;;;;;;-1:-1:-1;17824:204:0;;;;;:::i;:::-;;:::i;31838:26::-;;;;;;;;;;;;;:::i;26881:65::-;;;;;;;;;;;;;:::i;32833:93::-;;;;;;;;;;-1:-1:-1;32833:93:0;;;;;:::i;:::-;;:::i;27001:20::-;;;;;;;;;;;;;:::i;32728:97::-;;;;;;;;;;-1:-1:-1;32728:97:0;;;;;:::i;:::-;;:::i;24875:128::-;;;;;;;;;;;;;:::i;31750:42::-;;;;;;;;;;;;;:::i;32198:522::-;;;;;;:::i;:::-;;:::i;17298:232::-;;;;;;;;;;-1:-1:-1;17298:232:0;;;;;:::i;:::-;;:::i;14387:209::-;;;;;;;;;;-1:-1:-1;14387:209:0;;;;;:::i;:::-;;:::i;25156:181::-;;;;;;;;;;-1:-1:-1;25156:181:0;;;;;:::i;:::-;;:::i;19202:192::-;;;;;;;;;;-1:-1:-1;19202:192:0;;;;;:::i;:::-;;:::i;27826:238::-;;;;;;;;;;-1:-1:-1;27826:238:0;;;;;:::i;:::-;;:::i;26825:51::-;;;;;;;;;;;;;:::i;10603:172::-;-1:-1:-1;;;;;;10736:33:0;;10713:4;10736:33;;;;;;;;;;;;;10603:172;;;;:::o;24639:120::-;24707:19;24746:7;24738:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24639:120;:::o;18750:183::-;18879:7;13319:19;;;:9;:19;;;;;;;;;13354:13;;;;;;;;;;;-1:-1:-1;;;13354:13:0;;;;;;;18855:8;;-1:-1:-1;;;;;13319:19:0;13311:57;;;;-1:-1:-1;;;13311:57:0;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;18905:22:0::1;::::0;;;:12:::1;:22;::::0;;;;;-1:-1:-1;;;;;18905:22:0::1;::::0;-1:-1:-1;13375:1:0::1;18750:183:::0;;;;:::o;16535:352::-;12503:18;12524:19;;;:9;:19;;;;;;16648:8;;-1:-1:-1;;;;;12524:19:0;12580:10;12566:24;;;:68;;-1:-1:-1;;;;;;12594:28:0;;;;;;:16;:28;;;;;;;;12623:10;12594:40;;;;;;;;;;12566:68;12643:21;;;;;;;;;;;;;-1:-1:-1;;;12643:21:0;;;12550:121;;;;;-1:-1:-1;;;12550:121:0;;;;;;;;:::i;:::-;-1:-1:-1;13350:1:0::1;13319:19:::0;;;:9:::1;:19;::::0;;;;;;;;;13354:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;13354:13:0;;::::1;::::0;;;;16676:8;;13354:13;-1:-1:-1;;;;;13319:19:0::1;13311:57;;;;-1:-1:-1::0;;;13311:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;16696:18:0::2;16717:19:::0;;;:9:::2;:19;::::0;;;;;;;;;16776:8;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;16776:8:0;;::::2;::::0;;;;-1:-1:-1;;;;;16717:19:0;;::::2;::::0;16776:8;16751:23;::::2;::::0;::::2;;16743:42;;;;-1:-1:-1::0;;;16743:42:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;16794:22:0::2;::::0;;;:12:::2;:22;::::0;;;;;:34;;-1:-1:-1;;;;;;16794:34:0::2;-1:-1:-1::0;;;;;16794:34:0;;::::2;::::0;;::::2;::::0;;;16840:41;;16794:22;;16840:41;;::::2;::::0;::::2;::::0;::::2;13375:1;12678::::1;16535:352:::0;;;;:::o;31799:26::-;;;;:::o;32934:83::-;33005:4;32934:83;:::o;15761:353::-;12883:18;12904:19;;;:9;:19;;;;;;15894:8;;-1:-1:-1;;;;;12904:19:0;12960:10;12946:24;;;:71;;-1:-1:-1;12981:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;12981:22:0;13007:10;12981:36;12946:71;:122;;;-1:-1:-1;;;;;;13028:28:0;;;;;;:16;:28;;;;;;;;13057:10;13028:40;;;;;;;;;;12946:122;13077:30;;;;;;;;;;;;;-1:-1:-1;;;13077:30:0;;;12930:184;;;;;-1:-1:-1;;;12930:184:0;;;;;;;;:::i;:::-;-1:-1:-1;13350:1:0::1;13319:19:::0;;;:9:::1;:19;::::0;;;;;;;;;13354:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;13354:13:0;;::::1;::::0;;;;15922:8;;13354:13;-1:-1:-1;;;;;13319:19:0::1;13311:57;;;;-1:-1:-1::0;;;13311:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;15942:18:0::2;15963:19:::0;;;:9:::2;:19;::::0;;;;;;;;;16018:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;16018:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;15963:19:0;;::::2;::::0;16018:9;15997:19;::::2;::::0;::::2;15989:39;;;;-1:-1:-1::0;;;15989:39:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;16062:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;16062:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;16043:17:0;::::2;16035:40;;;;-1:-1:-1::0;;;16035:40:0::2;;;;;;;;:::i;:::-;;16084:24;16094:3;16099:8;16084:9;:24::i;:::-;13375:1;13121::::1;15761:353:::0;;;;;:::o;32102:87::-;;;-1:-1:-1;;;;;32102:87:0;;:::o;15006:179::-;15136:43;15154:5;15161:3;15166:8;15136:43;;;;;;;;;;;;:17;:43::i;:::-;15006:179;;;:::o;18298:208::-;18395:14;18430:19;;;:9;:19;;;;;;;;;;18486:13;;;;;;;;;;;-1:-1:-1;;;18486:13:0;;;;;;;-1:-1:-1;;;;;18430:19:0;;18464:20;18456:44;;;;-1:-1:-1;;;18456:44:0;;;;;;;;:::i;17824:204::-;17970:12;;;;;;;;;;;;-1:-1:-1;;;17970:12:0;;;;17921:7;;-1:-1:-1;;;;;17948:20:0;;17940:43;;;;-1:-1:-1;;;17940:43:0;;;;;;;;:::i;:::-;;17997:25;18015:6;17997:17;:25::i;:::-;17990:32;17824:204;-1:-1:-1;;17824:204:0:o;31838:26::-;;;;:::o;26881:65::-;;;;;;;;;;;;;;-1:-1:-1;;;26881:65:0;;;;:::o;32833:93::-;27619:5;;27626:17;;;;;;;;;;;;-1:-1:-1;;;27626:17:0;;;;;-1:-1:-1;;;;;27619:5:0;27605:10;:19;27597:47;;;;-1:-1:-1;;;27597:47:0;;;;;;;;:::i;:::-;-1:-1:-1;32901:7:0::1;:17:::0;32833:93::o;27001:20::-;;;-1:-1:-1;;;;;27001:20:0;;:::o;32728:97::-;27619:5;;27626:17;;;;;;;;;;;;-1:-1:-1;;;27626:17:0;;;;;-1:-1:-1;;;;;27619:5:0;27605:10;:19;27597:47;;;;-1:-1:-1;;;27597:47:0;;;;;;;;:::i;:::-;-1:-1:-1;32800:17:0::1;:7:::0;32810::::1;32800:17;:::i;:::-;32792:5;:25:::0;-1:-1:-1;32728:97:0:o;24875:128::-;24945:21;24988:9;24978:19;;;;;:::i;31750:42::-;;;;:::o;32198:522::-;32295:5;;32266:25;32278:13;32266:9;:25;:::i;:::-;:34;;32258:63;;;;-1:-1:-1;;;32258:63:0;;;;;;;:::i;:::-;32349:13;:11;:13::i;:::-;32338:7;;:24;;32330:45;;;;-1:-1:-1;;;32330:45:0;;;;;;;:::i;:::-;32409:7;;32392:13;:24;;:47;;;;;32437:2;32420:13;:19;;32392:47;32384:72;;;;-1:-1:-1;;;32384:72:0;;;;;;;:::i;:::-;32470:9;32465:201;32489:13;32485:1;:17;32465:201;;;32522:32;32534:10;32546:7;;32522:11;:32::i;:::-;32567:66;32586:7;;32595:37;32605:7;32595:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32614:17;32623:7;;32614:8;:17::i;:::-;32595:9;:37::i;:::-;32567:18;:66::i;:::-;32646:7;:10;;;:7;:10;;;:::i;:::-;;;;;;32504:3;;;;;:::i;:::-;;;;32465:201;;;-1:-1:-1;32674:10:0;;:30;;-1:-1:-1;;;;;32674:10:0;;;;32694:9;32674:30;;;;;:10;:30;:10;:30;32694:9;32674:10;:30;;;;;;;;;;;;;;;;;;;;;32198:522;:::o;17298:232::-;17430:10;17413:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;17413:39:0;;;;;;;;;;;:51;;-1:-1:-1;;17413:51:0;;;;;;;17476:48;;17413:39;;17430:10;17476:48;;;;17413:51;;17476:48;:::i;:::-;;;;;;;;17298:232;;:::o;14387:209::-;14544:46;14562:5;14569:3;14574:8;14584:5;;14544:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14544:17:0;;-1:-1:-1;;;14544:46:0:i;:::-;14387:209;;;;;:::o;25156:181::-;13350:1;13319:19;;;:9;:19;;;;;;;;;;13354:13;;;;;;;;;;;-1:-1:-1;;;13354:13:0;;;;;;;25282;;25258:8;;-1:-1:-1;;;;;13319:19:0;13311:57;;;;-1:-1:-1;;;13311:57:0;;;;;;;;:::i;:::-;-1:-1:-1;25314:17:0::1;::::0;;;:7:::1;:17;::::0;;;;25307:24;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25156:181:::0;;;;:::o;19202:192::-;-1:-1:-1;;;;;19353:24:0;;;19330:4;19353:24;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;;;19202:192::o;27826:238::-;27619:5;;27626:17;;;;;;;;;;;;-1:-1:-1;;;27626:17:0;;;;;-1:-1:-1;;;;;27619:5:0;27605:10;:19;27597:47;;;;-1:-1:-1;;;27597:47:0;;;;;;;;:::i;:::-;-1:-1:-1;27952:31:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;27952:31:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;27927:23:0;::::1;27919:65;;;;-1:-1:-1::0;;;27919:65:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;28017:5:0::1;::::0;27996:38:::1;::::0;-1:-1:-1;;;;;27996:38:0;;::::1;::::0;28017:5:::1;::::0;27996:38:::1;::::0;28017:5:::1;::::0;27996:38:::1;28041:5;:17:::0;;-1:-1:-1;;;;;;28041:17:0::1;-1:-1:-1::0;;;;;28041:17:0;;;::::1;::::0;;;::::1;::::0;;27826:238::o;26825:51::-;;;;;;;;;;;;;;-1:-1:-1;;;26825:51:0;;;;:::o;19585:275::-;19674:12;19689:19;;;:9;:19;;;;;;-1:-1:-1;;;;;19689:19:0;19715:24;19699:8;19715:14;:24::i;:::-;19748:30;19763:4;19769:8;19748:14;:30::i;:::-;19785:26;19797:3;19802:8;19785:11;:26::i;:::-;19845:8;19840:3;-1:-1:-1;;;;;19825:29:0;19834:4;-1:-1:-1;;;;;19825:29:0;;;;;;;;;;;19585:275;;;:::o;22987:590::-;12883:18;12904:19;;;:9;:19;;;;;;23135:8;;-1:-1:-1;;;;;12904:19:0;12960:10;12946:24;;;:71;;-1:-1:-1;12981:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;12981:22:0;13007:10;12981:36;12946:71;:122;;;-1:-1:-1;;;;;;13028:28:0;;;;;;:16;:28;;;;;;;;13057:10;13028:40;;;;;;;;;;12946:122;13077:30;;;;;;;;;;;;;-1:-1:-1;;;13077:30:0;;;12930:184;;;;;-1:-1:-1;;;12930:184:0;;;;;;;;:::i;:::-;-1:-1:-1;13350:1:0::1;13319:19:::0;;;:9:::1;:19;::::0;;;;;;;;;13354:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;13354:13:0;;::::1;::::0;;;;23163:8;;13354:13;-1:-1:-1;;;;;13319:19:0::1;13311:57;;;;-1:-1:-1::0;;;13311:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;23183:18:0::2;23204:19:::0;;;:9:::2;:19;::::0;;;;;;;;;23259:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;23259:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;23204:19:0;;::::2;::::0;23259:9;23238:19;::::2;::::0;::::2;23230:39;;;;-1:-1:-1::0;;;23230:39:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;23303:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;23303:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;23284:17:0;::::2;23276:40;;;;-1:-1:-1::0;;;23276:40:0::2;;;;;;;;:::i;:::-;;23325:24;23335:3;23340:8;23325:9;:24::i;:::-;23362:16;:3;-1:-1:-1::0;;;;;23362:14:0::2;;:16::i;:::-;23358:214;;;23410:77;::::0;-1:-1:-1;;;23410:77:0;;23394:13:::2;::::0;-1:-1:-1;;;;;23410:41:0;::::2;::::0;::::2;::::0;:77:::2;::::0;23452:10:::2;::::0;23464:5;;23471:8;;23481:5;;23410:77:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23540:23;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;23540:23:0::2;::::0;::::2;::::0;23394:93;;-1:-1:-1;;;;;;;23504:34:0;::::2;-1:-1:-1::0;;;23504:34:0::2;23496:68;;;;-1:-1:-1::0;;;23496:68:0::2;;;;;;;;:::i;:::-;;23358:214;;13375:1;13121::::1;22987:590:::0;;;;;;:::o;22546:163::-;-1:-1:-1;;;;;22676:27:0;22650:7;22676:27;;;:19;:27;;;;;;;22546:163::o;20251:297::-;20376:12;;;;;;;;;;;;-1:-1:-1;;;20376:12:0;;;;-1:-1:-1;;;;;20357:17:0;;20349:40;;;;-1:-1:-1;;;20349:40:0;;;;;;;;:::i;:::-;-1:-1:-1;20435:1:0;20404:19;;;:9;:19;;;;;;;;;;20439:18;;;;;;;;;;;-1:-1:-1;;;20439:18:0;;;;;;;-1:-1:-1;;;;;20404:19:0;:33;20396:62;;;;-1:-1:-1;;;20396:62:0;;;;;;;;:::i;:::-;;20467:26;20479:3;20484:8;20467:11;:26::i;:::-;20507:35;;20533:8;;-1:-1:-1;;;;;20507:35:0;;;20524:1;;20507:35;;20524:1;;20507:35;20251:297;;:::o;28573:530::-;28629:13;28659:10;28655:53;;-1:-1:-1;28686:10:0;;;;;;;;;;;;-1:-1:-1;;;28686:10:0;;;;;;28655:53;28733:5;28718:12;28774:78;28781:9;;28774:78;;28807:8;;;;:::i;:::-;;-1:-1:-1;28830:10:0;;-1:-1:-1;28838:2:0;28830:10;;:::i;:::-;;;28774:78;;;28862:19;28894:6;28884:17;;;;;;-1:-1:-1;;;28884:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28884:17:0;;28862:39;;28912:154;28919:10;;28912:154;;28946:11;28956:1;28946:11;;:::i;:::-;;-1:-1:-1;29015:10:0;29023:2;29015:5;:10;:::i;:::-;29002:24;;:2;:24;:::i;:::-;28989:39;;28972:6;28979;28972:14;;;;;;-1:-1:-1;;;28972:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;28972:56:0;;;;;;;;-1:-1:-1;29043:11:0;29052:2;29043:11;;:::i;:::-;;;28912:154;;;29090:6;28573:530;-1:-1:-1;;;;28573:530:0:o;28095:472::-;28311:10;;28298;;28173:13;;28220:2;;28256;;28195:16;;28298:23;;28311:10;28298:23;:::i;:::-;28287:35;;;;;;-1:-1:-1;;;28287:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28287:35:0;-1:-1:-1;28267:55:0;-1:-1:-1;28267:55:0;28330:17;;28386:55;28407:3;:10;28403:1;:14;28386:55;;;28435:3;28439:1;28435:6;;;;;;-1:-1:-1;;;28435:6:0;;;;;;;;;;;;;-1:-1:-1;;;;;;28435:6:0;28423:4;28428:3;;;;:::i;:::-;;;28423:9;;;;;;-1:-1:-1;;;28423:9:0;;;;;;;;;;;;:18;-1:-1:-1;;;;;28423:18:0;;;;;;;;-1:-1:-1;28419:3:0;;;;:::i;:::-;;;;28386:55;;;;28454:6;28449:88;28470:3;:10;28466:1;:14;28449:88;;;28511:3;28515:1;28511:6;;;;;;-1:-1:-1;;;28511:6:0;;;;;;;;;;;;;-1:-1:-1;;;;;;28511:6:0;28499:4;28504:3;;;;:::i;:::-;;;28499:9;;;;;;-1:-1:-1;;;28499:9:0;;;;;;;;;;;;:18;-1:-1:-1;;;;;28499:18:0;;;;;;;;-1:-1:-1;28482:3:0;;;;:::i;:::-;;;;28449:88;;;-1:-1:-1;28558:3:0;;28095:472;-1:-1:-1;;;;;;;28095:472:0:o;26289:157::-;13350:1;13319:19;;;:9;:19;;;;;;;;;;13354:13;;;;;;;;;;;-1:-1:-1;;;13354:13:0;;;;;;;26396:8;;13354:13;-1:-1:-1;;;;;13319:19:0;13311:57;;;;-1:-1:-1;;;13311:57:0;;;;;;;;:::i;:::-;-1:-1:-1;26416:17:0::1;::::0;;;:7:::1;:17;::::0;;;;;;;:24;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;26289:157:::0;;;:::o;23710:110::-;23792:22;;;;:12;:22;;;;;23785:29;;-1:-1:-1;;;;;;23785:29:0;;;23710:110::o;21508:234::-;21625:19;;;;:9;:19;;;;;;;;;;21655:9;;;;;;;;;;;-1:-1:-1;;;21655:9:0;;;;;;;-1:-1:-1;;;;;21625:28:0;;;:19;;:28;21617:48;;;;-1:-1:-1;;;21617:48:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21672:26:0;;;;;;:19;:26;;;;;:31;;21702:1;;21672:26;:31;;21702:1;;21672:31;:::i;:::-;;;;-1:-1:-1;;21717:19:0;;;;:9;:19;;;;;21710:26;;-1:-1:-1;;;;;;21710:26:0;;;-1:-1:-1;21508:234:0:o;22009:242::-;22152:1;22121:19;;;:9;:19;;;;;;;;;;22156:18;;;;;;;;;;;-1:-1:-1;;;22156:18:0;;;;;;;-1:-1:-1;;;;;22121:19:0;:33;22113:62;;;;-1:-1:-1;;;22113:62:0;;;;;;;;:::i;:::-;-1:-1:-1;22184:19:0;;;;:9;:19;;;;;;;;:25;;-1:-1:-1;;;;;;22184:25:0;-1:-1:-1;;;;;22184:25:0;;;;;;;;22216:24;;:19;:24;;;;;:29;;22184:9;;22216:24;;:29;;22184:9;;22216:29;:::i;:::-;;;;-1:-1:-1;;;;22009:242:0:o;7374:780::-;7457:17;8039:18;;7943:66;8105:15;;;;;:42;;-1:-1:-1;8124:23:0;;;8089:59;-1:-1:-1;;7374:780:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:175:1;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;:::-;345:41;264:128;-1:-1:-1;;;264:128:1:o;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:862::-;;;;;;1205:3;1193:9;1184:7;1180:23;1176:33;1173:2;;;1227:6;1219;1212:22;1173:2;1255:31;1276:9;1255:31;:::i;:::-;1245:41;;1305:40;1341:2;1330:9;1326:18;1305:40;:::i;:::-;1295:50;;1392:2;1381:9;1377:18;1364:32;1354:42;;1447:2;1436:9;1432:18;1419:32;1470:18;1511:2;1503:6;1500:14;1497:2;;;1532:6;1524;1517:22;1497:2;1575:6;1564:9;1560:22;1550:32;;1620:7;1613:4;1609:2;1605:13;1601:27;1591:2;;1647:6;1639;1632:22;1591:2;1692;1679:16;1718:2;1710:6;1707:14;1704:2;;;1739:6;1731;1724:22;1704:2;1789:7;1784:2;1775:6;1771:2;1767:15;1763:24;1760:37;1757:2;;;1815:6;1807;1800:22;1757:2;1163:722;;;;-1:-1:-1;1163:722:1;;-1:-1:-1;1851:2:1;1843:11;;1873:6;1163:722;-1:-1:-1;;;1163:722:1:o;1890:369::-;;;2016:2;2004:9;1995:7;1991:23;1987:32;1984:2;;;2037:6;2029;2022:22;1984:2;2065:31;2086:9;2065:31;:::i;:::-;2055:41;;2146:2;2135:9;2131:18;2118:32;2193:5;2186:13;2179:21;2172:5;2169:32;2159:2;;2220:6;2212;2205:22;2159:2;2248:5;2238:15;;;1974:285;;;;;:::o;2264:266::-;;;2393:2;2381:9;2372:7;2368:23;2364:32;2361:2;;;2414:6;2406;2399:22;2361:2;2442:31;2463:9;2442:31;:::i;:::-;2432:41;2520:2;2505:18;;;;2492:32;;-1:-1:-1;;;2351:179:1:o;2535:257::-;;2646:2;2634:9;2625:7;2621:23;2617:32;2614:2;;;2667:6;2659;2652:22;2614:2;2711:9;2698:23;2730:32;2756:5;2730:32;:::i;2797:261::-;;2919:2;2907:9;2898:7;2894:23;2890:32;2887:2;;;2940:6;2932;2925:22;2887:2;2977:9;2971:16;2996:32;3022:5;2996:32;:::i;3063:190::-;;3175:2;3163:9;3154:7;3150:23;3146:32;3143:2;;;3196:6;3188;3181:22;3143:2;-1:-1:-1;3224:23:1;;3133:120;-1:-1:-1;3133:120:1:o;3258:477::-;;3339:5;3333:12;3366:6;3361:3;3354:19;3391:3;3403:162;3417:6;3414:1;3411:13;3403:162;;;3479:4;3535:13;;;3531:22;;3525:29;3507:11;;;3503:20;;3496:59;3432:12;3403:162;;;3583:6;3580:1;3577:13;3574:2;;;3649:3;3642:4;3633:6;3628:3;3624:16;3620:27;3613:40;3574:2;-1:-1:-1;3717:2:1;3696:15;-1:-1:-1;;3692:29:1;3683:39;;;;3724:4;3679:50;;3309:426;-1:-1:-1;;3309:426:1:o;3740:203::-;-1:-1:-1;;;;;3904:32:1;;;;3886:51;;3874:2;3859:18;;3841:102::o;4172:490::-;-1:-1:-1;;;;;4441:15:1;;;4423:34;;4493:15;;4488:2;4473:18;;4466:43;4540:2;4525:18;;4518:34;;;4588:3;4583:2;4568:18;;4561:31;;;4172:490;;4609:47;;4636:19;;4628:6;4609:47;:::i;:::-;4601:55;4375:287;-1:-1:-1;;;;;;4375:287:1:o;4667:187::-;4832:14;;4825:22;4807:41;;4795:2;4780:18;;4762:92::o;4859:221::-;;5008:2;4997:9;4990:21;5028:46;5070:2;5059:9;5055:18;5047:6;5028:46;:::i;5085:336::-;5287:2;5269:21;;;5326:2;5306:18;;;5299:30;-1:-1:-1;;;5360:2:1;5345:18;;5338:42;5412:2;5397:18;;5259:162::o;5426:340::-;5628:2;5610:21;;;5667:2;5647:18;;;5640:30;-1:-1:-1;;;5701:2:1;5686:18;;5679:46;5757:2;5742:18;;5600:166::o;5771:331::-;5973:2;5955:21;;;6012:1;5992:18;;;5985:29;-1:-1:-1;;;6045:2:1;6030:18;;6023:38;6093:2;6078:18;;5945:157::o;6107:177::-;6253:25;;;6241:2;6226:18;;6208:76::o;6289:128::-;;6360:1;6356:6;6353:1;6350:13;6347:2;;;6366:18;;:::i;:::-;-1:-1:-1;6402:9:1;;6337:80::o;6422:120::-;;6488:1;6478:2;;6493:18;;:::i;:::-;-1:-1:-1;6527:9:1;;6468:74::o;6547:168::-;;6653:1;6649;6645:6;6641:14;6638:1;6635:21;6630:1;6623:9;6616:17;6612:45;6609:2;;;6660:18;;:::i;:::-;-1:-1:-1;6700:9:1;;6599:116::o;6720:125::-;;6788:1;6785;6782:8;6779:2;;;6793:18;;:::i;:::-;-1:-1:-1;6830:9:1;;6769:76::o;6850:380::-;6935:1;6925:12;;6982:1;6972:12;;;6993:2;;7047:4;7039:6;7035:17;7025:27;;6993:2;7100;7092:6;7089:14;7069:18;7066:38;7063:2;;;7146:10;7141:3;7137:20;7134:1;7127:31;7181:4;7178:1;7171:15;7209:4;7206:1;7199:15;7235:135;;-1:-1:-1;;7295:17:1;;7292:2;;;7315:18;;:::i;:::-;-1:-1:-1;7362:1:1;7351:13;;7282:88::o;7375:112::-;;7433:1;7423:2;;7438:18;;:::i;:::-;-1:-1:-1;7472:9:1;;7413:74::o;7492:127::-;7553:10;7548:3;7544:20;7541:1;7534:31;7584:4;7581:1;7574:15;7608:4;7605:1;7598:15;7624:127;7685:10;7680:3;7676:20;7673:1;7666:31;7716:4;7713:1;7706:15;7740:4;7737:1;7730:15;7756:133;-1:-1:-1;;;;;;7832:32:1;;7822:43;;7812:2;;7879:1;7876;7869:12;7812:2;7802:87;:::o
Swarm Source
ipfs://ac5e78bb686354d7a2d4bf754bc3ed9b4b58b34b775f59ed7fe9ec1c20ce2e54
Loading...
Loading
Loading...
Loading
[ 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.