Contract 0xebba467ecb6b21239178033189ceae27ca12eadf 8

 

Contract Overview

Treasure DAO: Treasures
Balance:
0 ETH

ETH Value:
$0.00
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x26700fcaa5637c0d098b91f6a5d09217a3ce217ef5ac9f9463f4c51e3fd73fd6Set Approval For...590234612023-02-08 6:46:311 hr 26 mins ago0x76ea289c8dc50446ea604b89cbbfaf6086fd38a6 IN  Treasure DAO: Treasures0 ETH0.00004425
0x508acfedced1d84f251e58839cf05796403f2b79c1d8d8a0753742a96c996751Set Approval For...590199142023-02-08 6:30:381 hr 42 mins ago0xfec36af66ec12f215a182af4975df7194452e2d1 IN  Treasure DAO: Treasures0 ETH0.00004119
0x630ee74d7bc53c8d9b26f93c6f6a39214dba8ab7ccb2bc32d25ddd16f1256857Set Approval For...590177402023-02-08 6:20:521 hr 52 mins ago0x4f234ae48179a51e02b0566e885fcc8a1487db02 IN  Treasure DAO: Treasures0 ETH0.00004274
0x732c86eca068b32c4299ab34e2e01612594dc90d4b58fc1049fe3a07ca877c7bSet Approval For...589981292023-02-08 4:51:353 hrs 21 mins ago0x8c8c2f81f9eff8b39a3cc3a74b2d6d8400a7ce5c IN  Treasure DAO: Treasures0 ETH0.00004572
0x935f62c2a9818a3a24fc4d25f81c52fb3ad511cd8229660d34f48cef36d4b9baSet Approval For...589800952023-02-08 3:27:494 hrs 45 mins ago0x80d5a1f895022262caf87a2ffd87d37b1a4c5963 IN  Treasure DAO: Treasures0 ETH0.00005214
0xd28db1329411aae84018ed4935cccbc3084d7271f64675bf5c4d0b2b6b46198fSet Approval For...589734662023-02-08 2:57:485 hrs 15 mins ago0xbad858a0cf09f210fcf35cbf83569178879b47f2 IN  Treasure DAO: Treasures0 ETH0.00005565
0x7d91ac7c00ee61b5f27852a8e0b2a443b2633d5ade4cfc746c2773345c00e360Set Approval For...589665892023-02-08 2:24:145 hrs 48 mins ago0x4f6f32e1692566d335e7498a1ff9a1c1af43106b IN  Treasure DAO: Treasures0 ETH0.00006206
0x7f692545d8e3d3522a582b6f60f0747990bca54e595507de571a58118297298eSet Approval For...589576192023-02-08 1:36:556 hrs 36 mins ago0x6e5539df0da3760f4f906c910ca75af67063ebbc IN  Treasure DAO: Treasures0 ETH0.00006366
0xbe47ca418355a59e2032cc4bb4f902c988a099d4e85fe64d74b115eaf9a3c296Set Approval For...589481302023-02-08 0:43:507 hrs 29 mins ago0x996da5b9f392d0506d9a21a8704dd27a95c82e34 IN  Treasure DAO: Treasures0 ETH0.00005875
0x955f20188d787e6ea1e2ad9e447e988a6c6920a4e56ab46d467aa6f086538455Set Approval For...589480722023-02-08 0:43:317 hrs 29 mins ago0x996da5b9f392d0506d9a21a8704dd27a95c82e34 IN  Treasure DAO: Treasures0 ETH0.00005875
0x692d4e3de60301ae685a20e921e71bbf535943594f6d7dd6a23fc682a3f19e3cSet Approval For...589480592023-02-08 0:43:267 hrs 29 mins ago0x996da5b9f392d0506d9a21a8704dd27a95c82e34 IN  Treasure DAO: Treasures0 ETH0.00005875
0xb712a31ce80d85be54ec037abaa58d5ed61e4dfb3cd3a041d11db1cbd4795892Set Approval For...589480442023-02-08 0:43:217 hrs 29 mins ago0x996da5b9f392d0506d9a21a8704dd27a95c82e34 IN  Treasure DAO: Treasures0 ETH0.00005875
0xe4d012614b7d6ba9cf8441239afd9f6b203ecbedbfb20c76823fd1836c56f901Set Approval For...589480292023-02-08 0:43:167 hrs 29 mins ago0x996da5b9f392d0506d9a21a8704dd27a95c82e34 IN  Treasure DAO: Treasures0 ETH0.00005875
0xfc8c693d6adb669b737a949e986cac3ff5481c8762564bee2faa53aae442ac80Set Approval For...589140772023-02-07 21:47:5410 hrs 25 mins ago0x99066c5fa8f44eef3fcdee1811fcd90c2d45ddf5 IN  Treasure DAO: Treasures0 ETH0.00007989
0x83dfc6cdfaeaf1af678682cea81ab84f59a15700b0c054edf6f6a3674aad70afSet Approval For...589085022023-02-07 21:21:3510 hrs 51 mins ago0x68c33ab30aa3265b218d2d24e9144c2461339de0 IN  Treasure DAO: Treasures0 ETH0.00005466
0xfb9c62a1ed681b817f8916235dc845dce43e3db65374ba7701542d5b0e606bbdSet Approval For...589082152023-02-07 21:20:1410 hrs 52 mins ago0x9ed0680c26cb3ecc18a5240dbb319730ed1d4d8c IN  Treasure DAO: Treasures0 ETH0.00005466
0x3333e4ee60a37fdeedbdc652d4f610f4812f52b000815698a32778610827dcf7Set Approval For...589034692023-02-07 20:59:0211 hrs 14 mins ago0xb6ea791ee66c6813798743a5e5f11aff170a1eda IN  Treasure DAO: Treasures0 ETH0.00006005
0xa124042790cc44bc6b9b24ad51521afe9f35a76073ec30ebc597ffbcec895be8Set Approval For...589034182023-02-07 20:58:4911 hrs 14 mins ago0xb6ea791ee66c6813798743a5e5f11aff170a1eda IN  Treasure DAO: Treasures0 ETH0.00006204
0x6783b0cd9ed22ce9c200fd21128e5f1b855d36ea0a6d543b5a8a7bc33f970fd7Set Approval For...589010132023-02-07 20:47:1611 hrs 25 mins ago0xb37287e045646fb6a40fc7424cbb48e9feccaa64 IN  Treasure DAO: Treasures0 ETH0.00006212
0x7f36dfd0b4d2ef244210f1b7fa2477240bf2c07943cd3cadbe21ebac8e710f4dSet Approval For...589009202023-02-07 20:46:4611 hrs 26 mins ago0xb37287e045646fb6a40fc7424cbb48e9feccaa64 IN  Treasure DAO: Treasures0 ETH0.00006411
0xc4d6d55865cc848ca59b87ff1ea04f2f60978f65c0c2bcac368829725d6c4e13Set Approval For...588802312023-02-07 19:04:4313 hrs 8 mins ago0x0f0939a3b40f5186c8e8aa998e815e9976c7a540 IN  Treasure DAO: Treasures0 ETH0.00009046
0x66fd1409f753adc5b4df6c5d9e77f9e06307cb32a059d6292886204f9878a527Set Approval For...588783662023-02-07 18:55:3913 hrs 17 mins ago0xa9f82e4048f76e501524e3b857495363add2396b IN  Treasure DAO: Treasures0 ETH0.0000886
0xb8696cee494694dde9053f1a4b2a21cafcbdd3d15f607631d9cd038cf0f8c1feSet Approval For...588780532023-02-07 18:54:0513 hrs 19 mins ago0xa5cf9d9e6ad3d6eeb2fe1597acf37c94a1a20908 IN  Treasure DAO: Treasures0 ETH0.0000886
0xdc0d9ef6c8b1e82fdc87c87273d6d23453e8df6652d843421f1b5ee6de08ff88Set Approval For...588643712023-02-07 17:54:0114 hrs 19 mins ago0x1a900b5df58d5c4cc63088687a0194237228b7ad IN  Treasure DAO: Treasures0 ETH0.00003337
0x00108062688d01e683689a8c15c301f52f97d0b4104f0308000881af3c7c57cdSet Approval For...588641152023-02-07 17:52:5514 hrs 20 mins ago0xf4ee5e2c63eceeb455dd77631c3ebe47d6d4ec48 IN  Treasure DAO: Treasures0 ETH0.00003337
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xdf39e25c88bf0a87548baefcb06ad22822fd2e05e4e1579d4479179a87dcdab0590434492023-02-08 8:12:587 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xdf39e25c88bf0a87548baefcb06ad22822fd2e05e4e1579d4479179a87dcdab0590434492023-02-08 8:12:587 secs ago 0x737eaf14061fe68f04ff4ca8205acf538555fcc8 Treasure DAO: Treasures0 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0xf9e197aa9fa7c3b27a1a1313cad5851b55f2fd710 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0xf9e197aa9fa7c3b27a1a1313cad5851b55f2fd710 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0xf9e197aa9fa7c3b27a1a1313cad5851b55f2fd710 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0xf9e197aa9fa7c3b27a1a1313cad5851b55f2fd710 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0xf9e197aa9fa7c3b27a1a1313cad5851b55f2fd710 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0xf9e197aa9fa7c3b27a1a1313cad5851b55f2fd710 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbd4876b5d10dd23fff1e79ac80fb4abe05cc985255c180d37ee3f7c27fa70d0f590434012023-02-08 8:12:4619 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbf7953133bf2113f2d7ad204b594f4b7700e780498aa20a51084390bd76b2aa5590433632023-02-08 8:12:3629 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbf7953133bf2113f2d7ad204b594f4b7700e780498aa20a51084390bd76b2aa5590433632023-02-08 8:12:3629 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbf7953133bf2113f2d7ad204b594f4b7700e780498aa20a51084390bd76b2aa5590433632023-02-08 8:12:3629 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
0xbf7953133bf2113f2d7ad204b594f4b7700e780498aa20a51084390bd76b2aa5590433632023-02-08 8:12:3629 secs ago 0xb9c9ed651eb173ca7fbc3a094da9ce33ec145a29 Treasure DAO: Treasures0 ETH
0xbf7953133bf2113f2d7ad204b594f4b7700e780498aa20a51084390bd76b2aa5590433632023-02-08 8:12:3629 secs ago Treasure DAO: Treasures 0x19d0cd1ebe1d93e352e49a0c126e1365081266220 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CardsProxy

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 24 : CardsProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import '@solidstate/contracts/introspection/ERC165Storage.sol';
import '@solidstate/contracts/proxy/diamond/Diamond.sol';
import '@solidstate/contracts/token/ERC1155/IERC1155.sol';
import '@solidstate/contracts/token/ERC1155/metadata/ERC1155MetadataStorage.sol';

import './CardsMintStorage.sol';

contract CardsProxy is Diamond {
    using ERC165Storage for ERC165Storage.Layout;

    constructor(address merkleProofClaim, string memory baseURI) {
        ERC165Storage.layout().setSupportedInterface(
            type(IERC1155).interfaceId,
            true
        );
        CardsMintStorage.layout().minters[merkleProofClaim] = true;
        ERC1155MetadataStorage.layout().baseURI = baseURI;
    }
}

File 2 of 24 : ERC165Storage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library ERC165Storage {
    struct Layout {
        mapping(bytes4 => bool) supportedInterfaces;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.ERC165');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function isSupportedInterface(Layout storage l, bytes4 interfaceId)
        internal
        view
        returns (bool)
    {
        return l.supportedInterfaces[interfaceId];
    }

    function setSupportedInterface(
        Layout storage l,
        bytes4 interfaceId,
        bool status
    ) internal {
        require(interfaceId != 0xffffffff, 'ERC165: invalid interface id');
        l.supportedInterfaces[interfaceId] = status;
    }
}

File 3 of 24 : Diamond.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { SafeOwnable, OwnableStorage, Ownable } from '../../access/SafeOwnable.sol';
import { IERC173 } from '../../access/IERC173.sol';
import { ERC165, IERC165, ERC165Storage } from '../../introspection/ERC165.sol';
import { DiamondBase, DiamondBaseStorage } from './DiamondBase.sol';
import { DiamondCuttable, IDiamondCuttable } from './DiamondCuttable.sol';
import { DiamondLoupe, IDiamondLoupe } from './DiamondLoupe.sol';

/**
 * @notice SolidState "Diamond" proxy reference implementation
 */
abstract contract Diamond is
    DiamondBase,
    DiamondCuttable,
    DiamondLoupe,
    SafeOwnable,
    ERC165
{
    using DiamondBaseStorage for DiamondBaseStorage.Layout;
    using ERC165Storage for ERC165Storage.Layout;
    using OwnableStorage for OwnableStorage.Layout;

    constructor() {
        ERC165Storage.Layout storage erc165 = ERC165Storage.layout();
        bytes4[] memory selectors = new bytes4[](12);

        // register DiamondCuttable

        selectors[0] = IDiamondCuttable.diamondCut.selector;

        erc165.setSupportedInterface(type(IDiamondCuttable).interfaceId, true);

        // register DiamondLoupe

        selectors[1] = IDiamondLoupe.facets.selector;
        selectors[2] = IDiamondLoupe.facetFunctionSelectors.selector;
        selectors[3] = IDiamondLoupe.facetAddresses.selector;
        selectors[4] = IDiamondLoupe.facetAddress.selector;

        erc165.setSupportedInterface(type(IDiamondLoupe).interfaceId, true);

        // register ERC165

        selectors[5] = IERC165.supportsInterface.selector;

        erc165.setSupportedInterface(type(IERC165).interfaceId, true);

        // register SafeOwnable

        selectors[6] = Ownable.owner.selector;
        selectors[7] = SafeOwnable.nomineeOwner.selector;
        selectors[8] = SafeOwnable.transferOwnership.selector;
        selectors[9] = SafeOwnable.acceptOwnership.selector;

        erc165.setSupportedInterface(type(IERC173).interfaceId, true);

        // register Diamond

        selectors[10] = Diamond.getFallbackAddress.selector;
        selectors[11] = Diamond.setFallbackAddress.selector;

        // diamond cut

        FacetCut[] memory facetCuts = new FacetCut[](1);

        facetCuts[0] = FacetCut({
            target: address(this),
            action: IDiamondCuttable.FacetCutAction.ADD,
            selectors: selectors
        });

        DiamondBaseStorage.layout().diamondCut(facetCuts, address(0), '');

        // set owner

        OwnableStorage.layout().setOwner(msg.sender);
    }

    receive() external payable {}

    /**
     * @notice get the address of the fallback contract
     * @return fallback address
     */
    function getFallbackAddress() external view returns (address) {
        return DiamondBaseStorage.layout().fallbackAddress;
    }

    /**
     * @notice set the address of the fallback contract
     * @param fallbackAddress fallback address
     */
    function setFallbackAddress(address fallbackAddress) external onlyOwner {
        DiamondBaseStorage.layout().fallbackAddress = fallbackAddress;
    }
}

File 4 of 24 : IERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC1155Internal } from './IERC1155Internal.sol';
import { IERC165 } from '../../introspection/IERC165.sol';

/**
 * @notice ERC1155 interface
 * @dev see https://github.com/ethereum/EIPs/issues/1155
 */
interface IERC1155 is IERC1155Internal, IERC165 {
    /**
     * @notice query the balance of given token held by given address
     * @param account address to query
     * @param id token to query
     * @return token balance
     */
    function balanceOf(address account, uint256 id)
        external
        view
        returns (uint256);

    /**
     * @notice query the balances of given tokens held by given addresses
     * @param accounts addresss to query
     * @param ids tokens to query
     * @return token balances
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @notice query approval status of given operator with respect to given address
     * @param account address to query for approval granted
     * @param operator address to query for approval received
     * @return whether operator is approved to spend tokens held by account
     */
    function isApprovedForAll(address account, address operator)
        external
        view
        returns (bool);

    /**
     * @notice grant approval to or revoke approval from given operator to spend held tokens
     * @param operator address whose approval status to update
     * @param status whether operator should be considered approved
     */
    function setApprovalForAll(address operator, bool status) external;

    /**
     * @notice transfer tokens between given addresses, checking for ERC1155Receiver implementation if applicable
     * @param from sender of tokens
     * @param to receiver of tokens
     * @param id token ID
     * @param amount quantity of tokens to transfer
     * @param data data payload
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @notice transfer batch of tokens between given addresses, checking for ERC1155Receiver implementation if applicable
     * @param from sender of tokens
     * @param to receiver of tokens
     * @param ids list of token IDs
     * @param amounts list of quantities of tokens to transfer
     * @param data data payload
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 5 of 24 : ERC1155MetadataStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @notice ERC1155 metadata extensions
 */
library ERC1155MetadataStorage {
    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.ERC1155Metadata');

    struct Layout {
        string baseURI;
        mapping(uint256 => string) tokenURIs;
    }

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }
}

File 6 of 24 : CardsMintStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library CardsMintStorage {
    struct Layout {
        mapping(address => bool) minters;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('treasure.contracts.storage.CardsMint');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }
}

File 7 of 24 : SafeOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { Ownable, OwnableStorage } from './Ownable.sol';
import { SafeOwnableInternal } from './SafeOwnableInternal.sol';
import { SafeOwnableStorage } from './SafeOwnableStorage.sol';

/**
 * @title Ownership access control based on ERC173 with ownership transfer safety check
 */
abstract contract SafeOwnable is Ownable, SafeOwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;
    using SafeOwnableStorage for SafeOwnableStorage.Layout;

    function nomineeOwner() public view virtual returns (address) {
        return SafeOwnableStorage.layout().nomineeOwner;
    }

    /**
     * @inheritdoc Ownable
     * @dev ownership transfer must be accepted by beneficiary before transfer is complete
     */
    function transferOwnership(address account)
        public
        virtual
        override
        onlyOwner
    {
        SafeOwnableStorage.layout().setNomineeOwner(account);
    }

    /**
     * @notice accept transfer of contract ownership
     */
    function acceptOwnership() public virtual onlyNomineeOwner {
        OwnableStorage.Layout storage l = OwnableStorage.layout();
        emit OwnershipTransferred(l.owner, msg.sender);
        l.setOwner(msg.sender);
        SafeOwnableStorage.layout().setNomineeOwner(address(0));
    }
}

File 8 of 24 : IERC173.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Contract ownership standard interface
 * @dev see https://eips.ethereum.org/EIPS/eip-173
 */
interface IERC173 {
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @notice get the ERC173 contract owner
     * @return conract owner
     */
    function owner() external view returns (address);

    /**
     * @notice transfer contract ownership to new account
     * @param account address of new owner
     */
    function transferOwnership(address account) external;
}

File 9 of 24 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC165 } from './IERC165.sol';
import { ERC165Storage } from './ERC165Storage.sol';

/**
 * @title ERC165 implementation
 */
abstract contract ERC165 is IERC165 {
    using ERC165Storage for ERC165Storage.Layout;

    /**
     * @inheritdoc IERC165
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        override
        returns (bool)
    {
        return ERC165Storage.layout().isSupportedInterface(interfaceId);
    }
}

File 10 of 24 : DiamondBase.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { Proxy } from '../Proxy.sol';
import { DiamondBaseStorage } from './DiamondBaseStorage.sol';
import { IDiamondLoupe } from './IDiamondLoupe.sol';
import { IDiamondCuttable } from './IDiamondCuttable.sol';

/**
 * @title EIP-2535 "Diamond" proxy base contract
 * @dev see https://eips.ethereum.org/EIPS/eip-2535
 */
abstract contract DiamondBase is Proxy {
    /**
     * @inheritdoc Proxy
     */
    function _getImplementation() internal view override returns (address) {
        // inline storage layout retrieval uses less gas
        DiamondBaseStorage.Layout storage l;
        bytes32 slot = DiamondBaseStorage.STORAGE_SLOT;
        assembly {
            l.slot := slot
        }

        address implementation = address(bytes20(l.facets[msg.sig]));

        if (implementation == address(0)) {
            implementation = l.fallbackAddress;
            require(
                implementation != address(0),
                'DiamondBase: no facet found for function signature'
            );
        }

        return implementation;
    }
}

File 11 of 24 : DiamondCuttable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { OwnableInternal } from '../../access/OwnableInternal.sol';
import { IDiamondCuttable } from './IDiamondCuttable.sol';
import { DiamondBaseStorage } from './DiamondBaseStorage.sol';

/**
 * @title EIP-2535 "Diamond" proxy update contract
 */
abstract contract DiamondCuttable is IDiamondCuttable, OwnableInternal {
    using DiamondBaseStorage for DiamondBaseStorage.Layout;

    /**
     * @notice update functions callable on Diamond proxy
     * @param facetCuts array of structured Diamond facet update data
     * @param target optional recipient of initialization delegatecall
     * @param data optional initialization call data
     */
    function diamondCut(
        FacetCut[] calldata facetCuts,
        address target,
        bytes calldata data
    ) external override onlyOwner {
        DiamondBaseStorage.layout().diamondCut(facetCuts, target, data);
    }
}

File 12 of 24 : DiamondLoupe.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { DiamondBaseStorage } from './DiamondBaseStorage.sol';
import { IDiamondLoupe } from './IDiamondLoupe.sol';

/**
 * @title EIP-2535 "Diamond" proxy introspection contract
 * @dev derived from https://github.com/mudgen/diamond-2 (MIT license)
 */
abstract contract DiamondLoupe is IDiamondLoupe {
    /**
     * @inheritdoc IDiamondLoupe
     */
    function facets()
        external
        view
        override
        returns (Facet[] memory diamondFacets)
    {
        DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout();

        diamondFacets = new Facet[](l.selectorCount);

        uint8[] memory numFacetSelectors = new uint8[](l.selectorCount);
        uint256 numFacets;
        uint256 selectorIndex;

        // loop through function selectors
        for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) {
            bytes32 slot = l.selectorSlots[slotIndex];

            for (
                uint256 selectorSlotIndex;
                selectorSlotIndex < 8;
                selectorSlotIndex++
            ) {
                selectorIndex++;

                if (selectorIndex > l.selectorCount) {
                    break;
                }

                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));
                address facet = address(bytes20(l.facets[selector]));

                bool continueLoop;

                for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
                    if (diamondFacets[facetIndex].target == facet) {
                        diamondFacets[facetIndex].selectors[
                            numFacetSelectors[facetIndex]
                        ] = selector;
                        // probably will never have more than 256 functions from one facet contract
                        require(numFacetSelectors[facetIndex] < 255);
                        numFacetSelectors[facetIndex]++;
                        continueLoop = true;
                        break;
                    }
                }

                if (continueLoop) {
                    continue;
                }

                diamondFacets[numFacets].target = facet;
                diamondFacets[numFacets].selectors = new bytes4[](
                    l.selectorCount
                );
                diamondFacets[numFacets].selectors[0] = selector;
                numFacetSelectors[numFacets] = 1;
                numFacets++;
            }
        }

        for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
            uint256 numSelectors = numFacetSelectors[facetIndex];
            bytes4[] memory selectors = diamondFacets[facetIndex].selectors;

            // setting the number of selectors
            assembly {
                mstore(selectors, numSelectors)
            }
        }

        // setting the number of facets
        assembly {
            mstore(diamondFacets, numFacets)
        }
    }

    /**
     * @inheritdoc IDiamondLoupe
     */
    function facetFunctionSelectors(address facet)
        external
        view
        override
        returns (bytes4[] memory selectors)
    {
        DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout();

        selectors = new bytes4[](l.selectorCount);

        uint256 numSelectors;
        uint256 selectorIndex;

        // loop through function selectors
        for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) {
            bytes32 slot = l.selectorSlots[slotIndex];

            for (
                uint256 selectorSlotIndex;
                selectorSlotIndex < 8;
                selectorSlotIndex++
            ) {
                selectorIndex++;

                if (selectorIndex > l.selectorCount) {
                    break;
                }

                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));

                if (facet == address(bytes20(l.facets[selector]))) {
                    selectors[numSelectors] = selector;
                    numSelectors++;
                }
            }
        }

        // set the number of selectors in the array
        assembly {
            mstore(selectors, numSelectors)
        }
    }

    /**
     * @inheritdoc IDiamondLoupe
     */
    function facetAddresses()
        external
        view
        override
        returns (address[] memory addresses)
    {
        DiamondBaseStorage.Layout storage l = DiamondBaseStorage.layout();

        addresses = new address[](l.selectorCount);
        uint256 numFacets;
        uint256 selectorIndex;

        for (uint256 slotIndex; selectorIndex < l.selectorCount; slotIndex++) {
            bytes32 slot = l.selectorSlots[slotIndex];

            for (
                uint256 selectorSlotIndex;
                selectorSlotIndex < 8;
                selectorSlotIndex++
            ) {
                selectorIndex++;

                if (selectorIndex > l.selectorCount) {
                    break;
                }

                bytes4 selector = bytes4(slot << (selectorSlotIndex << 5));
                address facet = address(bytes20(l.facets[selector]));

                bool continueLoop;

                for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) {
                    if (facet == addresses[facetIndex]) {
                        continueLoop = true;
                        break;
                    }
                }

                if (continueLoop) {
                    continue;
                }

                addresses[numFacets] = facet;
                numFacets++;
            }
        }

        // set the number of facet addresses in the array
        assembly {
            mstore(addresses, numFacets)
        }
    }

    /**
     * @inheritdoc IDiamondLoupe
     */
    function facetAddress(bytes4 selector)
        external
        view
        override
        returns (address facet)
    {
        facet = address(bytes20(DiamondBaseStorage.layout().facets[selector]));
    }
}

File 13 of 24 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC173 } from './IERC173.sol';
import { OwnableInternal } from './OwnableInternal.sol';
import { OwnableStorage } from './OwnableStorage.sol';

/**
 * @title Ownership access control based on ERC173
 */
abstract contract Ownable is IERC173, OwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;

    /**
     * @inheritdoc IERC173
     */
    function owner() public view virtual override returns (address) {
        return OwnableStorage.layout().owner;
    }

    /**
     * @inheritdoc IERC173
     */
    function transferOwnership(address account)
        public
        virtual
        override
        onlyOwner
    {
        OwnableStorage.layout().setOwner(account);
        emit OwnershipTransferred(msg.sender, account);
    }
}

File 14 of 24 : SafeOwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { SafeOwnableStorage } from './SafeOwnableStorage.sol';

abstract contract SafeOwnableInternal {
    using SafeOwnableStorage for SafeOwnableStorage.Layout;

    modifier onlyNomineeOwner() {
        require(
            msg.sender == SafeOwnableStorage.layout().nomineeOwner,
            'SafeOwnable: sender must be nominee owner'
        );
        _;
    }
}

File 15 of 24 : SafeOwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library SafeOwnableStorage {
    struct Layout {
        address nomineeOwner;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.SafeOwnable');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setNomineeOwner(Layout storage l, address nomineeOwner) internal {
        l.nomineeOwner = nomineeOwner;
    }
}

File 16 of 24 : OwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { OwnableStorage } from './OwnableStorage.sol';

abstract contract OwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;

    modifier onlyOwner() {
        require(
            msg.sender == OwnableStorage.layout().owner,
            'Ownable: sender must be owner'
        );
        _;
    }
}

File 17 of 24 : OwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library OwnableStorage {
    struct Layout {
        address owner;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.Ownable');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setOwner(Layout storage l, address owner) internal {
        l.owner = owner;
    }
}

File 18 of 24 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC165 interface registration interface
 * @dev see https://eips.ethereum.org/EIPS/eip-165
 */
interface IERC165 {
    /**
     * @notice query whether contract has registered support for given interface
     * @param interfaceId interface id
     * @return bool whether interface is supported
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 19 of 24 : Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { AddressUtils } from '../utils/AddressUtils.sol';

/**
 * @title Base proxy contract
 */
abstract contract Proxy {
    using AddressUtils for address;

    /**
     * @notice delegate all calls to implementation contract
     * @dev reverts if implementation address contains no code, for compatibility with metamorphic contracts
     * @dev memory location in use by assembly may be unsafe in other contexts
     */
    fallback() external payable virtual {
        address implementation = _getImplementation();

        require(
            implementation.isContract(),
            'Proxy: implementation must be contract'
        );

        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(
                gas(),
                implementation,
                0,
                calldatasize(),
                0,
                0
            )
            returndatacopy(0, 0, returndatasize())

            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @notice get logic implementation address
     * @return implementation address
     */
    function _getImplementation() internal virtual returns (address);
}

File 20 of 24 : DiamondBaseStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { AddressUtils } from '../../utils/AddressUtils.sol';
import { IDiamondCuttable } from './IDiamondCuttable.sol';

/**
 * @dev derived from https://github.com/mudgen/diamond-2 (MIT license)
 */
library DiamondBaseStorage {
    using AddressUtils for address;
    using DiamondBaseStorage for DiamondBaseStorage.Layout;

    struct Layout {
        // function selector => (facet address, selector slot position)
        mapping(bytes4 => bytes32) facets;
        // total number of selectors registered
        uint16 selectorCount;
        // array of selector slots with 8 selectors per slot
        mapping(uint256 => bytes32) selectorSlots;
        address fallbackAddress;
    }

    bytes32 constant CLEAR_ADDRESS_MASK =
        bytes32(uint256(0xffffffffffffffffffffffff));
    bytes32 constant CLEAR_SELECTOR_MASK = bytes32(uint256(0xffffffff << 224));

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.DiamondBase');

    event DiamondCut(
        IDiamondCuttable.FacetCut[] facetCuts,
        address target,
        bytes data
    );

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    /**
     * @notice update functions callable on Diamond proxy
     * @param l storage layout
     * @param facetCuts array of structured Diamond facet update data
     * @param target optional recipient of initialization delegatecall
     * @param data optional initialization call data
     */
    function diamondCut(
        Layout storage l,
        IDiamondCuttable.FacetCut[] memory facetCuts,
        address target,
        bytes memory data
    ) internal {
        unchecked {
            uint256 originalSelectorCount = l.selectorCount;
            uint256 selectorCount = originalSelectorCount;
            bytes32 selectorSlot;

            // Check if last selector slot is not full
            if (selectorCount & 7 > 0) {
                // get last selectorSlot
                selectorSlot = l.selectorSlots[selectorCount >> 3];
            }

            for (uint256 i; i < facetCuts.length; i++) {
                IDiamondCuttable.FacetCut memory facetCut = facetCuts[i];
                IDiamondCuttable.FacetCutAction action = facetCut.action;

                require(
                    facetCut.selectors.length > 0,
                    'DiamondBase: no selectors specified'
                );

                if (action == IDiamondCuttable.FacetCutAction.ADD) {
                    (selectorCount, selectorSlot) = l.addFacetSelectors(
                        selectorCount,
                        selectorSlot,
                        facetCut
                    );
                } else if (action == IDiamondCuttable.FacetCutAction.REMOVE) {
                    (selectorCount, selectorSlot) = l.removeFacetSelectors(
                        selectorCount,
                        selectorSlot,
                        facetCut
                    );
                } else if (action == IDiamondCuttable.FacetCutAction.REPLACE) {
                    l.replaceFacetSelectors(facetCut);
                }
            }

            if (selectorCount != originalSelectorCount) {
                l.selectorCount = uint16(selectorCount);
            }

            // If last selector slot is not full
            if (selectorCount & 7 > 0) {
                l.selectorSlots[selectorCount >> 3] = selectorSlot;
            }

            emit DiamondCut(facetCuts, target, data);
            initialize(target, data);
        }
    }

    function addFacetSelectors(
        Layout storage l,
        uint256 selectorCount,
        bytes32 selectorSlot,
        IDiamondCuttable.FacetCut memory facetCut
    ) internal returns (uint256, bytes32) {
        unchecked {
            require(
                facetCut.target == address(this) ||
                    facetCut.target.isContract(),
                'DiamondBase: ADD target has no code'
            );

            for (uint256 i; i < facetCut.selectors.length; i++) {
                bytes4 selector = facetCut.selectors[i];
                bytes32 oldFacet = l.facets[selector];

                require(
                    address(bytes20(oldFacet)) == address(0),
                    'DiamondBase: selector already added'
                );

                // add facet for selector
                l.facets[selector] =
                    bytes20(facetCut.target) |
                    bytes32(selectorCount);
                uint256 selectorInSlotPosition = (selectorCount & 7) << 5;

                // clear selector position in slot and add selector
                selectorSlot =
                    (selectorSlot &
                        ~(CLEAR_SELECTOR_MASK >> selectorInSlotPosition)) |
                    (bytes32(selector) >> selectorInSlotPosition);

                // if slot is full then write it to storage
                if (selectorInSlotPosition == 224) {
                    l.selectorSlots[selectorCount >> 3] = selectorSlot;
                    selectorSlot = 0;
                }

                selectorCount++;
            }

            return (selectorCount, selectorSlot);
        }
    }

    function removeFacetSelectors(
        Layout storage l,
        uint256 selectorCount,
        bytes32 selectorSlot,
        IDiamondCuttable.FacetCut memory facetCut
    ) internal returns (uint256, bytes32) {
        unchecked {
            require(
                facetCut.target == address(0),
                'DiamondBase: REMOVE target must be zero address'
            );

            uint256 selectorSlotCount = selectorCount >> 3;
            uint256 selectorInSlotIndex = selectorCount & 7;

            for (uint256 i; i < facetCut.selectors.length; i++) {
                bytes4 selector = facetCut.selectors[i];
                bytes32 oldFacet = l.facets[selector];

                require(
                    address(bytes20(oldFacet)) != address(0),
                    'DiamondBase: selector not found'
                );

                require(
                    address(bytes20(oldFacet)) != address(this),
                    'DiamondBase: selector is immutable'
                );

                if (selectorSlot == 0) {
                    selectorSlotCount--;
                    selectorSlot = l.selectorSlots[selectorSlotCount];
                    selectorInSlotIndex = 7;
                } else {
                    selectorInSlotIndex--;
                }

                bytes4 lastSelector;
                uint256 oldSelectorsSlotCount;
                uint256 oldSelectorInSlotPosition;

                // adding a block here prevents stack too deep error
                {
                    // replace selector with last selector in l.facets
                    lastSelector = bytes4(
                        selectorSlot << (selectorInSlotIndex << 5)
                    );

                    if (lastSelector != selector) {
                        // update last selector slot position info
                        l.facets[lastSelector] =
                            (oldFacet & CLEAR_ADDRESS_MASK) |
                            bytes20(l.facets[lastSelector]);
                    }

                    delete l.facets[selector];
                    uint256 oldSelectorCount = uint16(uint256(oldFacet));
                    oldSelectorsSlotCount = oldSelectorCount >> 3;
                    oldSelectorInSlotPosition = (oldSelectorCount & 7) << 5;
                }

                if (oldSelectorsSlotCount != selectorSlotCount) {
                    bytes32 oldSelectorSlot = l.selectorSlots[
                        oldSelectorsSlotCount
                    ];

                    // clears the selector we are deleting and puts the last selector in its place.
                    oldSelectorSlot =
                        (oldSelectorSlot &
                            ~(CLEAR_SELECTOR_MASK >>
                                oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);

                    // update storage with the modified slot
                    l.selectorSlots[oldSelectorsSlotCount] = oldSelectorSlot;
                } else {
                    // clears the selector we are deleting and puts the last selector in its place.
                    selectorSlot =
                        (selectorSlot &
                            ~(CLEAR_SELECTOR_MASK >>
                                oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);
                }

                if (selectorInSlotIndex == 0) {
                    delete l.selectorSlots[selectorSlotCount];
                    selectorSlot = 0;
                }
            }

            selectorCount = (selectorSlotCount << 3) | selectorInSlotIndex;

            return (selectorCount, selectorSlot);
        }
    }

    function replaceFacetSelectors(
        Layout storage l,
        IDiamondCuttable.FacetCut memory facetCut
    ) internal {
        unchecked {
            require(
                facetCut.target.isContract(),
                'DiamondBase: REPLACE target has no code'
            );

            for (uint256 i; i < facetCut.selectors.length; i++) {
                bytes4 selector = facetCut.selectors[i];
                bytes32 oldFacet = l.facets[selector];
                address oldFacetAddress = address(bytes20(oldFacet));

                require(
                    oldFacetAddress != address(0),
                    'DiamondBase: selector not found'
                );

                require(
                    oldFacetAddress != address(this),
                    'DiamondBase: selector is immutable'
                );

                require(
                    oldFacetAddress != facetCut.target,
                    'DiamondBase: REPLACE target is identical'
                );

                // replace old facet address
                l.facets[selector] =
                    (oldFacet & CLEAR_ADDRESS_MASK) |
                    bytes20(facetCut.target);
            }
        }
    }

    function initialize(address target, bytes memory data) private {
        require(
            (target == address(0)) == (data.length == 0),
            'DiamondBase: invalid initialization parameters'
        );

        if (target != address(0)) {
            if (target != address(this)) {
                require(
                    target.isContract(),
                    'DiamondBase: initialization target has no code'
                );
            }

            (bool success, ) = target.delegatecall(data);

            if (!success) {
                assembly {
                    returndatacopy(0, 0, returndatasize())
                    revert(0, returndatasize())
                }
            }
        }
    }
}

File 21 of 24 : IDiamondLoupe.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Diamond proxy introspection interface
 * @dev see https://eips.ethereum.org/EIPS/eip-2535
 */
interface IDiamondLoupe {
    struct Facet {
        address target;
        bytes4[] selectors;
    }

    /**
     * @notice get all facets and their selectors
     * @return diamondFacets array of structured facet data
     */
    function facets() external view returns (Facet[] memory diamondFacets);

    /**
     * @notice get all selectors for given facet address
     * @param facet address of facet to query
     * @return selectors array of function selectors
     */
    function facetFunctionSelectors(address facet)
        external
        view
        returns (bytes4[] memory selectors);

    /**
     * @notice get addresses of all facets used by diamond
     * @return addresses array of facet addresses
     */
    function facetAddresses()
        external
        view
        returns (address[] memory addresses);

    /**
     * @notice get the address of the facet associated with given selector
     * @param selector function selector to query
     * @return facet facet address (zero address if not found)
     */
    function facetAddress(bytes4 selector)
        external
        view
        returns (address facet);
}

File 22 of 24 : IDiamondCuttable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Diamond proxy upgrade interface
 * @dev see https://eips.ethereum.org/EIPS/eip-2535
 */
interface IDiamondCuttable {
    enum FacetCutAction {
        ADD,
        REPLACE,
        REMOVE
    }

    event DiamondCut(FacetCut[] facetCuts, address target, bytes data);

    struct FacetCut {
        address target;
        FacetCutAction action;
        bytes4[] selectors;
    }

    /**
     * @notice update diamond facets and optionally execute arbitrary initialization function
     * @param facetCuts facet addresses, actions, and function selectors
     * @param target initialization function target
     * @param data initialization function call data
     */
    function diamondCut(
        FacetCut[] calldata facetCuts,
        address target,
        bytes calldata data
    ) external;
}

File 23 of 24 : AddressUtils.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library AddressUtils {
    function toString(address account) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(uint160(account)));
        bytes memory alphabet = '0123456789abcdef';
        bytes memory chars = new bytes(42);

        chars[0] = '0';
        chars[1] = 'x';

        for (uint256 i = 0; i < 20; i++) {
            chars[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];
            chars[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];
        }

        return string(chars);
    }

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable account, uint256 amount) internal {
        (bool success, ) = account.call{ value: amount }('');
        require(success, 'AddressUtils: failed to send value');
    }

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory error
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            'AddressUtils: insufficient balance for call'
        );
        return _functionCallWithValue(target, data, value, error);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory error
    ) private returns (bytes memory) {
        require(
            isContract(target),
            'AddressUtils: function call to non-contract'
        );

        (bool success, bytes memory returnData) = target.call{ value: value }(
            data
        );

        if (success) {
            return returnData;
        } else if (returnData.length > 0) {
            assembly {
                let returnData_size := mload(returnData)
                revert(add(32, returnData), returnData_size)
            }
        } else {
            revert(error);
        }
    }
}

File 24 of 24 : IERC1155Internal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC165 } from '../../introspection/IERC165.sol';

/**
 * @notice Partial ERC1155 interface needed by internal functions
 */
interface IERC1155Internal {
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    event ApprovalForAll(
        address indexed account,
        address indexed operator,
        bool approved
    );
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"merkleProofClaim","type":"address"},{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondCuttable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCuttable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DiamondCut","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondCuttable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondCuttable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"diamondFacets","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nomineeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackAddress","type":"address"}],"name":"setFallbackAddress","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":[{"internalType":"address","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162003630380380620036308339810160408190526200003491620012c5565b60006200004b620005e060201b62000ebe1760201c565b60408051600c8082526101a08201909252919250600091906020820161018080368337019050509050631f931c1c60e01b816000815181106200009e57634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101820152620000d89083906307e4c70760e21b9060019062000ee262000604821b17901c565b637a0ed62760e01b816001815181106200010257634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b90829060029081106200014857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060039081106200018e57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b9082906004908110620001d457634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091018201526200020e9083906348e2b09360e01b9060019062000ee262000604821b17901c565b6301ffc9a760e01b816005815181106200023857634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101820152620002729083906301ffc9a760e01b9060019062000ee262000604821b17901c565b638da5cb5b60e01b816006815181106200029c57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910190910152805163455a8a8560e11b9082906007908110620002e257634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910190910152805163f2fde38b60e01b90829060089081106200032857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516379ba509760e01b90829060099081106200036e57634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101820152620003a89083906307f5828d60e41b9060019062000ee262000604821b17901c565b632c40805960e01b81600a81518110620003d257634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051639142376560e01b908290600b9081106200041857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199290921660209283029190910190910152604080516001808252818301909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816200044957905050604080516060810190915230815290915060208101600081526020018381525081600081518110620004bb57634e487b7160e01b600052603260045260246000fd5b60200260200101819052506200050881600060405180602001604052806000815250620004f26200069260201b62000f6a1760201c565b620006b660201b62000f8e17909392919060201c565b6200053633620005226200090960201b6200119a1760201c565b6200092d60201b620011be1790919060201c565b50505062000571636cdb3d1360e11b60016200055c620005e060201b62000ebe1760201c565b6200060460201b62000ee2179092919060201c565b6001620005886200094a60201b620011db1760201c565b6001600160a01b0384166000908152602091825260409020805460ff1916921515929092179091558190620005c6906200096e811b620011ff17901c565b8151620005d792602001906200121f565b50505062001570565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083161415620006645760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615620006e75750600381901c60009081526002870160205260409020545b60005b8651811015620008775760008782815181106200071757634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816020015190506000826040015151116200078d5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b60648201526084016200065b565b6000816002811115620007b057634e487b7160e01b600052602160045260246000fd5b1415620007e057620007d58585848d6200099260201b6200122317909392919060201c565b90955093506200086c565b60028160028111156200080357634e487b7160e01b600052602160045260246000fd5b14156200082857620007d58585848d62000b7060201b620013e417909392919060201c565b60018160028111156200084b57634e487b7160e01b600052602160045260246000fd5b14156200086c576200086c828b62000e4460201b620016841790919060201c565b5050600101620006ea565b50828214620008945760018701805461ffff191661ffff84161790555b6007821615620008b757600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686604051620008ec93929190620013e7565b60405180910390a16200090085856200108a565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b7fd2fbe59115f79ec89cbdaf04053fefb85afb13a14fbcf6290cded23dd019d01d90565b7f4281b61aefbe70b3d3f684b428efca5f33077bc240e76f2808f9177c307617f490565b805160009081906001600160a01b0316301480620009ce5750620009ce83600001516001600160a01b03166200121960201b620003a41760201c565b62000a285760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b60648201526084016200065b565b60005b83604001515181101562000b635760008460400151828151811062000a6057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c1562000ae95760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b60648201526084016200065b565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c1999909916179781141562000b5357600389901c600090815260028b0160205260408120989098555b5050506001958601950162000a2b565b5093959294509192505050565b805160009081906001600160a01b03161562000be75760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b60648201526084016200065b565b600385901c6007861660005b85604001515181101562000e305760008660400151828151811062000c2857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c62000ca45760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e640060448201526064016200065b565b606081901c30141562000cf45760405162461bcd60e51b81526020600482015260226024820152600080516020620036108339815191526044820152616c6560f01b60648201526084016200065b565b8862000d1e57600019909401600081815260028c0160205260409020549850936007935062000d26565b600019909301925b600584901b89901b6000806001600160e01b03198084169086161462000d79576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166001600160601b0386161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821462000dde57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c17905562000e02565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8662000e1e57600088815260028f01602052604081208190559b505b50506001909301925062000bf3915050565b5060039190911b1796939550929350505050565b62000e6781600001516001600160a01b03166200121960201b620003a41760201c565b62000ec55760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b60648201526084016200065b565b60005b816040015151811015620010855760008260400151828151811062000efd57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8062000f7a5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e640060448201526064016200065b565b6001600160a01b03811630141562000fcf5760405162461bcd60e51b81526020600482015260226024820152600080516020620036108339815191526044820152616c6560f01b60648201526084016200065b565b84516001600160a01b03828116911614156200103f5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b60648201526084016200065b565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166001600160601b039190911617905560010162000ec8565b505050565b8051156001600160a01b0383161514620010fe5760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b60648201526084016200065b565b6001600160a01b0382161562001215576001600160a01b0382163014620011a3576200113e826001600160a01b03166200121960201b620003a41760201c565b620011a35760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b60648201526084016200065b565b6000826001600160a01b031682604051620011bf9190620013c9565b600060405180830381855af49150503d8060008114620011fc576040519150601f19603f3d011682016040523d82523d6000602084013e62001201565b606091505b505090508062001085573d6000803e3d6000fd5b5050565b3b151590565b8280546200122d906200151d565b90600052602060002090601f0160209004810192826200125157600085556200129c565b82601f106200126c57805160ff19168380011785556200129c565b828001600101855582156200129c579182015b828111156200129c5782518255916020019190600101906200127f565b50620012aa929150620012ae565b5090565b5b80821115620012aa5760008155600101620012af565b60008060408385031215620012d8578182fd5b82516001600160a01b0381168114620012ef578283fd5b60208401519092506001600160401b03808211156200130c578283fd5b818501915085601f83011262001320578283fd5b8151818111156200133557620013356200155a565b604051601f8201601f19908116603f011681019083821181831017156200136057620013606200155a565b8160405282815288602084870101111562001379578586fd5b6200138c836020830160208801620014ea565b80955050505050509250929050565b60008151808452620013b5816020860160208601620014ea565b601f01601f19169290920160200192915050565b60008251620013dd818460208701620014ea565b9190910192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b01875b84811015620014b857898403607f19018652815180516001600160a01b031685528381015189860190600381106200145557634e487b7160e01b8c52602160045260248cfd5b868601526040918201519186018a9052815190819052908401908a90898701905b80831015620014a25783516001600160e01b031916825292860192600192909201919086019062001476565b509785019795505050908201906001016200140f565b50506001600160a01b038a16908801528681036040880152620014dc81896200139b565b9a9950505050505050505050565b60005b8381101562001507578181015183820152602001620014ed565b8381111562001517576000848401525b50505050565b600181811c908216806200153257607f821691505b602082108114156200155457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61209080620015806000396000f3fe6080604052600436106100ab5760003560e01c80638ab5150a116100645780638ab5150a1461022a5780638da5cb5b1461023f5780639142376514610254578063adfca15e14610274578063cdffacc6146102a1578063f2fde38b146102c1576100b2565b806301ffc9a71461014d5780631f931c1c146101825780632c408059146101a457806352ef6b2c146101d157806379ba5097146101f35780637a0ed62714610208576100b2565b366100b257005b60006100bc6102e1565b90506001600160a01b0381163b6101295760405162461bcd60e51b815260206004820152602660248201527f50726f78793a20696d706c656d656e746174696f6e206d75737420626520636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610148573d6000f35b3d6000fd5b34801561015957600080fd5b5061016d610168366004611b34565b6103aa565b60405190151581526020015b60405180910390f35b34801561018e57600080fd5b506101a261019d366004611a88565b6103df565b005b3480156101b057600080fd5b506101b961046c565b6040516001600160a01b039091168152602001610179565b3480156101dd57600080fd5b506101e6610488565b6040516101799190611bda565b3480156101ff57600080fd5b506101a261065c565b34801561021457600080fd5b5061021d610743565b6040516101799190611d00565b34801561023657600080fd5b506101b9610c52565b34801561024b57600080fd5b506101b9610c73565b34801561026057600080fd5b506101a261026f366004611a6e565b610c7d565b34801561028057600080fd5b5061029461028f366004611a6e565b610cda565b6040516101799190611c27565b3480156102ad57600080fd5b506101b96102bc366004611b34565b610e49565b3480156102cd57600080fd5b506101a26102dc366004611a6e565b610e76565b600080356001600160e01b03191681527f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9360208190526040822054819060601c8061039d575060038201546001600160a01b03168061039d5760405162461bcd60e51b815260206004820152603260248201527f4469616d6f6e64426173653a206e6f20666163657420666f756e6420666f722060448201527166756e6374696f6e207369676e617475726560701b6064820152608401610120565b9392505050565b3b151590565b60006103d9826103b8610ebe565b906001600160e01b0319166000908152602091909152604090205460ff1690565b92915050565b6103e761119a565b546001600160a01b0316331461040f5760405162461bcd60e51b815260040161012090611d7c565b61046561041c8587611e73565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061045d9250610f6a915050565b929190610f8e565b5050505050565b6000610476610f6a565b600301546001600160a01b0316919050565b60606000610494610f6a565b600181015490915061ffff1667ffffffffffffffff8111156104c657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156104ef578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610654576000818152600285016020526040812054905b600881101561063f578361052e81611fd3565b600188015490955061ffff1685111590506105485761063f565b600581901b82901b6001600160e01b0319811660009081526020889052604081205460601c90805b888110156105d4578a818151811061059857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316836001600160a01b031614156105c257600191506105d4565b806105cc81611fd3565b915050610570565b5080156105e35750505061062d565b818a898151811061060457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909216602092830291909101909101528761062681611fd3565b9850505050505b8061063781611fd3565b91505061051b565b5050808061064c90611fd3565b9150506104f8565b505082525090565b60008051602061203b833981519152546001600160a01b031633146106d55760405162461bcd60e51b815260206004820152602960248201527f536166654f776e61626c653a2073656e646572206d757374206265206e6f6d696044820152683732b29037bbb732b960b91b6064820152608401610120565b60006106df61119a565b805460405191925033916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a361072581336111be565b610740600060008051602061203b8339815191525b906111be565b50565b6060600061074f610f6a565b600181015490915061ffff1667ffffffffffffffff81111561078157634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107c757816020015b60408051808201909152600081526060602082015281526020019060019003908161079f5790505b50600182015490925060009061ffff1667ffffffffffffffff8111156107fd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610826578160200160208202803683370190505b50905060008060005b600185015461ffff16821015610bc4576000818152600286016020526040812054905b6008811015610baf578361086581611fd3565b600189015490955061ffff16851115905061087f57610baf565b600581901b82901b6001600160e01b0319811660009081526020899052604081205460601c90805b88811015610a1957826001600160a01b03168c82815181106108d957634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516001600160a01b03161415610a0757838c828151811061091557634e487b7160e01b600052603260045260246000fd5b6020026020010151602001518b838151811061094157634e487b7160e01b600052603260045260246000fd5b602002602001015160ff168151811061096a57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160e01b03191690816001600160e01b0319168152505060ff8a82815181106109ae57634e487b7160e01b600052603260045260246000fd5b602002602001015160ff16106109c357600080fd5b8981815181106109e357634e487b7160e01b600052603260045260246000fd5b6020026020010180518091906109f890611fee565b60ff1690525060019150610a19565b80610a1181611fd3565b9150506108a7565b508015610a2857505050610b9d565b818b8981518110610a4957634e487b7160e01b600052603260045260246000fd5b60209081029190910101516001600160a01b03909116905260018a015461ffff1667ffffffffffffffff811115610a9057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ab9578160200160208202803683370190505b508b8981518110610ada57634e487b7160e01b600052603260045260246000fd5b602002602001015160200181905250828b8981518110610b0a57634e487b7160e01b600052603260045260246000fd5b602002602001015160200151600081518110610b3657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160e01b03191690816001600160e01b031916815250506001898981518110610b7a57634e487b7160e01b600052603260045260246000fd5b60ff9092166020928302919091019091015287610b9681611fd3565b9850505050505b80610ba781611fd3565b915050610852565b50508080610bbc90611fd3565b91505061082f565b5060005b82811015610c47576000848281518110610bf257634e487b7160e01b600052603260045260246000fd5b602002602001015160ff1690506000878381518110610c2157634e487b7160e01b600052603260045260246000fd5b602002602001015160200151905081815250508080610c3f90611fd3565b915050610bc8565b508185525050505090565b600060008051602061203b8339815191525b546001600160a01b0316919050565b6000610c6461119a565b610c8561119a565b546001600160a01b03163314610cad5760405162461bcd60e51b815260040161012090611d7c565b80610cb6610f6a565b60030180546001600160a01b0319166001600160a01b039290921691909117905550565b60606000610ce6610f6a565b600181015490915061ffff1667ffffffffffffffff811115610d1857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d41578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610e3f576000818152600285016020526040812054905b6008811015610e2a5783610d8081611fd3565b600188015490955061ffff168511159050610d9a57610e2a565b600581901b82901b6001600160e01b0319811660009081526020889052604090205460601c6001600160a01b038a161415610e175780888781518110610df057634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015285610e1381611fd3565b9650505b5080610e2281611fd3565b915050610d6d565b50508080610e3790611fd3565b915050610d4a565b5050825250919050565b6000610e53610f6a565b6001600160e01b0319909216600090815260209290925250604090205460601c90565b610e7e61119a565b546001600160a01b03163314610ea65760405162461bcd60e51b815260040161012090611d7c565b6107408160008051602061203b83398151915261073a565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083161415610f3c5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e74657266616365206964000000006044820152606401610120565b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615610fbe5750600381901c60009081526002870160205260409020545b60005b865181101561110e576000878281518110610fec57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816020015190506000826040015151116110605760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b6064820152608401610120565b600081600281111561108257634e487b7160e01b600052602160045260246000fd5b141561109e576110948a868685611223565b9095509350611104565b60028160028111156110c057634e487b7160e01b600052602160045260246000fd5b14156110d2576110948a8686856113e4565b60018160028111156110f457634e487b7160e01b600052602160045260246000fd5b1415611104576111048a83611684565b5050600101610fc1565b5082821461112a5760018701805461ffff191661ffff84161790555b600782161561114c57600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161117f93929190611c3a565b60405180910390a16111918585611883565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b7fd2fbe59115f79ec89cbdaf04053fefb85afb13a14fbcf6290cded23dd019d01d90565b7f4281b61aefbe70b3d3f684b428efca5f33077bc240e76f2808f9177c307617f490565b805160009081906001600160a01b031630148061124a575082516001600160a01b03163b15155b6112a25760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b6064820152608401610120565b60005b8360400151518110156113d7576000846040015182815181106112d857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c1561135f5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b6064820152608401610120565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c199990991617978114156113c857600389901c600090815260028b0160205260408120989098555b505050600195860195016112a5565b5093959294509192505050565b805160009081906001600160a01b0316156114595760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b6064820152608401610120565b600385901c6007861660005b8560400151518110156116705760008660400151828151811061149857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c6115125760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b606081901c3014156115365760405162461bcd60e51b815260040161012090611db3565b8861155e57600019909401600081815260028c01602052604090205498509360079350611566565b600019909301925b600584901b89901b6000806001600160e01b0319808416908616146115bd576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166bffffffffffffffffffffffff86161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821461162057600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c179055611644565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8661165f57600088815260028f01602052604081208190559b505b505060019093019250611465915050565b5060039190911b1796939550929350505050565b80516001600160a01b03163b6116ec5760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b6064820152608401610120565b60005b81604001515181101561187e5760008260400151828151811061172257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8061179d5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610120565b6001600160a01b0381163014156117c65760405162461bcd60e51b815260040161012090611db3565b84516001600160a01b03828116911614156118345760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b6064820152608401610120565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166bffffffffffffffffffffffff919091161790556001016116ef565b505050565b8051156001600160a01b03831615146118f55760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b6064820152608401610120565b6001600160a01b038216156119ef576001600160a01b0382163014611982576001600160a01b0382163b6119825760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b6064820152608401610120565b6000826001600160a01b03168260405161199c9190611bbe565b600060405180830381855af49150503d80600081146119d7576040519150601f19603f3d011682016040523d82523d6000602084013e6119dc565b606091505b505090508061187e573d6000803e3d6000fd5b5050565b80356001600160a01b0381168114611a0a57600080fd5b919050565b80356001600160e01b031981168114611a0a57600080fd5b60008083601f840112611a38578182fd5b50813567ffffffffffffffff811115611a4f578182fd5b602083019150836020828501011115611a6757600080fd5b9250929050565b600060208284031215611a7f578081fd5b61039d826119f3565b600080600080600060608688031215611a9f578081fd5b853567ffffffffffffffff80821115611ab6578283fd5b818801915088601f830112611ac9578283fd5b813581811115611ad7578384fd5b8960208260051b8501011115611aeb578384fd5b60208301975080965050611b01602089016119f3565b94506040880135915080821115611b16578283fd5b50611b2388828901611a27565b969995985093965092949392505050565b600060208284031215611b45578081fd5b61039d82611a0f565b6000815180845260208085019450808401835b83811015611b875781516001600160e01b03191687529582019590820190600101611b61565b509495945050505050565b60008151808452611baa816020860160208601611fa3565b601f01601f19169290920160200192915050565b60008251611bd0818460208701611fa3565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015611c1b5783516001600160a01b031683529284019291840191600101611bf6565b50909695505050505050565b60208152600061039d6020830184611b4e565b6000606080830181845280875180835260808601915060808160051b87010192506020808a01865b83811015611cd157888603607f19018552815180516001600160a01b031687528381015160038110611ca257634e487b7160e01b8a52602160045260248afd5b87850152604090810151908701889052611cbe88880182611b4e565b9650509382019390820190600101611c62565b50506001600160a01b0389169087015250508381036040850152611cf58186611b92565b979650505050505050565b60006020808301818452808551808352604092508286019150828160051b870101848801865b83811015611d6e57888303603f19018552815180516001600160a01b03168452870151878401879052611d5b87850182611b4e565b9588019593505090860190600101611d26565b509098975050505050505050565b6020808252601d908201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604082015260600190565b60208082526022908201527f4469616d6f6e64426173653a2073656c6563746f7220697320696d6d757461626040820152616c6560f01b606082015260800190565b6040516060810167ffffffffffffffff81118282101715611e1857611e18612024565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611e4757611e47612024565b604052919050565b600067ffffffffffffffff821115611e6957611e69612024565b5060051b60200190565b6000611e86611e8184611e4f565b611e1e565b838152602080820191908460053688821b83011115611ea3578586fd5b855b88811015611f9657823567ffffffffffffffff80821115611ec4578889fd5b818a01915060608236031215611ed8578889fd5b611ee0611df5565b611ee9836119f3565b81528683013560038110611efb578a8bfd5b8188015260408381013583811115611f11578b8cfd5b939093019236601f850112611f24578a8bfd5b83359250611f34611e8184611e4f565b83815288810190858a0136868a1b88018c011115611f50578d8efd5b8d96505b85871015611f7957611f6581611a0f565b835260019690960195918a01918a01611f54565b509183019190915250885250509483019491830191600101611ea5565b5092979650505050505050565b60005b83811015611fbe578181015183820152602001611fa6565b83811115611fcd576000848401525b50505050565b6000600019821415611fe757611fe761200e565b5060010190565b600060ff821660ff8114156120055761200561200e565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce6617890a26469706673582212205e055320dde7c68af7864df8aac3f8587155aca7c74d78de9a5992c61c4f813664736f6c634300080400334469616d6f6e64426173653a2073656c6563746f7220697320696d6d75746162000000000000000000000000d0ed73b33789111807bd64ae2a6e1e6f92f986f50000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d586b50394e6a546157354478346d686e597a584366703169554471756276784e696d716f365a586b654b75582f000000000000000000000000000000

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

000000000000000000000000d0ed73b33789111807bd64ae2a6e1e6f92f986f50000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d586b50394e6a546157354478346d686e597a584366703169554471756276784e696d716f365a586b654b75582f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : merkleProofClaim (address): 0xd0ed73b33789111807bd64ae2a6e1e6f92f986f5
Arg [1] : baseURI (string): https://gateway.pinata.cloud/ipfs/QmXkP9NjTaW5Dx4mhnYzXCfp1iUDqubvxNimqo6ZXkeKuX/

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000d0ed73b33789111807bd64ae2a6e1e6f92f986f5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [3] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [4] : 732f516d586b50394e6a546157354478346d686e597a58436670316955447175
Arg [5] : 6276784e696d716f365a586b654b75582f000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.