ETH Price: $1,625.90 (+3.33%)

Contract

0xB426742139a18f7b9CCaA9Bb5c4D3a550b1b0Fcd

Overview

ETH Balance

89.77 ETH

ETH Value

$145,956.95 (@ $1,625.90/ETH)

Token Holdings

Transaction Hash
Method
Block
From
To
Set Approval For...72678402025-04-21 14:47:3337 mins ago1745246853IN
0xB4267421...50b1b0Fcd
0 ETH0.000006140.04525
Set Approval For...72637842025-04-21 13:38:291 hr ago1745242709IN
0xB4267421...50b1b0Fcd
0 ETH0.000005480.04525
Set Approval For...72634542025-04-21 13:32:451 hr ago1745242365IN
0xB4267421...50b1b0Fcd
0 ETH0.000005470.04525
Set Approval For...72629062025-04-21 13:23:242 hrs ago1745241804IN
0xB4267421...50b1b0Fcd
0 ETH0.000004880.04525
Set Approval For...72618462025-04-21 13:05:302 hrs ago1745240730IN
0xB4267421...50b1b0Fcd
0 ETH0.000005450.04525
Set Approval For...72615362025-04-21 13:00:052 hrs ago1745240405IN
0xB4267421...50b1b0Fcd
0 ETH0.000005260.04525
Set Approval For...72613232025-04-21 12:56:322 hrs ago1745240192IN
0xB4267421...50b1b0Fcd
0 ETH0.000005470.04525
Set Approval For...72609422025-04-21 12:49:572 hrs ago1745239797IN
0xB4267421...50b1b0Fcd
0 ETH0.000005770.04525
Set Approval For...72594592025-04-21 12:24:333 hrs ago1745238273IN
0xB4267421...50b1b0Fcd
0 ETH0.000004420.04525
Set Approval For...72592852025-04-21 12:21:243 hrs ago1745238084IN
0xB4267421...50b1b0Fcd
0 ETH0.000005230.04525
Set Approval For...72591372025-04-21 12:18:563 hrs ago1745237936IN
0xB4267421...50b1b0Fcd
0 ETH0.000005230.04525
Set Approval For...72590012025-04-21 12:16:403 hrs ago1745237800IN
0xB4267421...50b1b0Fcd
0 ETH0.000005530.04525
Set Approval For...72588922025-04-21 12:14:513 hrs ago1745237691IN
0xB4267421...50b1b0Fcd
0 ETH0.000005530.04525
Mint WL172580242025-04-21 11:59:533 hrs ago1745236793IN
0xB4267421...50b1b0Fcd
0.03 ETH0.000007320.04525
Mint WL172580192025-04-21 11:59:483 hrs ago1745236788IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005350.04525
Mint WL272580092025-04-21 11:59:383 hrs ago1745236778IN
0xB4267421...50b1b0Fcd
0 ETH0.00000550.04525
Mint WL172580052025-04-21 11:59:343 hrs ago1745236774IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000004810.04525
Mint WL172579972025-04-21 11:59:263 hrs ago1745236766IN
0xB4267421...50b1b0Fcd
0.005 ETH0.00000670.04525
Mint WL172579902025-04-21 11:59:193 hrs ago1745236759IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000006080.04525
Mint WL172579862025-04-21 11:59:153 hrs ago1745236755IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005020.04525
Mint WL172579752025-04-21 11:59:043 hrs ago1745236744IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000006090.04525
Mint WL172579692025-04-21 11:58:583 hrs ago1745236738IN
0xB4267421...50b1b0Fcd
0.01 ETH0.000005370.04525
Mint WL272579682025-04-21 11:58:573 hrs ago1745236737IN
0xB4267421...50b1b0Fcd
0 ETH0.000006740.04525
Mint WL172579572025-04-21 11:58:463 hrs ago1745236726IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000006270.04525
Mint WL172579552025-04-21 11:58:443 hrs ago1745236724IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005020.04525
VIEW ADVANCED FILTER

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
72580242025-04-21 11:59:533 hrs ago1745236793
0xB4267421...50b1b0Fcd
0.03 ETH
72580192025-04-21 11:59:483 hrs ago1745236788
0xB4267421...50b1b0Fcd
0.005 ETH
72580052025-04-21 11:59:343 hrs ago1745236774
0xB4267421...50b1b0Fcd
0.005 ETH
72579972025-04-21 11:59:263 hrs ago1745236766
0xB4267421...50b1b0Fcd
0.005 ETH
72579902025-04-21 11:59:193 hrs ago1745236759
0xB4267421...50b1b0Fcd
0.005 ETH
72579862025-04-21 11:59:153 hrs ago1745236755
0xB4267421...50b1b0Fcd
0.005 ETH
72579752025-04-21 11:59:043 hrs ago1745236744
0xB4267421...50b1b0Fcd
0.005 ETH
72579692025-04-21 11:58:583 hrs ago1745236738
0xB4267421...50b1b0Fcd
0.01 ETH
72579572025-04-21 11:58:463 hrs ago1745236726
0xB4267421...50b1b0Fcd
0.005 ETH
72579552025-04-21 11:58:443 hrs ago1745236724
0xB4267421...50b1b0Fcd
0.005 ETH
72579492025-04-21 11:58:383 hrs ago1745236718
0xB4267421...50b1b0Fcd
0.005 ETH
72579422025-04-21 11:58:313 hrs ago1745236711
0xB4267421...50b1b0Fcd
0.005 ETH
72579332025-04-21 11:58:223 hrs ago1745236702
0xB4267421...50b1b0Fcd
0.005 ETH
72579252025-04-21 11:58:143 hrs ago1745236694
0xB4267421...50b1b0Fcd
0.005 ETH
72579092025-04-21 11:57:583 hrs ago1745236678
0xB4267421...50b1b0Fcd
0.005 ETH
72578952025-04-21 11:57:443 hrs ago1745236664
0xB4267421...50b1b0Fcd
0.005 ETH
72578902025-04-21 11:57:393 hrs ago1745236659
0xB4267421...50b1b0Fcd
0.005 ETH
72578772025-04-21 11:57:253 hrs ago1745236645
0xB4267421...50b1b0Fcd
0.005 ETH
72578732025-04-21 11:57:213 hrs ago1745236641
0xB4267421...50b1b0Fcd
0.005 ETH
72578712025-04-21 11:57:193 hrs ago1745236639
0xB4267421...50b1b0Fcd
0.005 ETH
72578662025-04-21 11:57:143 hrs ago1745236634
0xB4267421...50b1b0Fcd
0.005 ETH
72578562025-04-21 11:57:043 hrs ago1745236624
0xB4267421...50b1b0Fcd
0.005 ETH
72578522025-04-21 11:57:003 hrs ago1745236620
0xB4267421...50b1b0Fcd
0.005 ETH
72578442025-04-21 11:56:523 hrs ago1745236612
0xB4267421...50b1b0Fcd
0.005 ETH
72578322025-04-21 11:56:403 hrs ago1745236600
0xB4267421...50b1b0Fcd
0.005 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LootBox

Compiler Version
v0.8.24+commit.e11b9ed9

ZkSolc Version
v1.4.1

Optimization Enabled:
Yes with Mode 3

Other Settings:
paris EvmVersion
File 1 of 2 : LootBox.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import {ERC1155} from "./Utils.sol";
import {Ownable} from "./Utils.sol";
import {MerkleProof} from "./Utils.sol";
import {IERC1155Receiver} from "./Utils.sol";

contract LootBox is ERC1155, Ownable {
    uint256 private _entropyNonce;

    uint256[] public tokenIdPool = [1, 2, 3, 4, 5, 6, 7];
    uint256[] public tokenProbabilities = [32, 32, 15, 10, 4, 6, 1];

    enum MintType {
        WL1,
        WL2,
        WL3
    }

    struct MintConfig {
        uint256 price;
        uint256 startTime;
        uint256 endTime;
        uint8 freeMintsAllowed;
        bytes32 merkleRoot;
    }

    mapping(MintType => MintConfig) public mintConfigs;
    mapping(address => mapping(MintType => uint256)) public userMints;
    mapping(uint256 => uint256) public tokenIdSupply;

    event URIUpdated(string newURI);
    event Minted(
        address indexed minter,
        uint256 indexed tokenId,
        MintType indexed mintType
    );
    event MintConfigUpdated(
        MintType indexed mintType,
        uint256 price,
        uint256 startTime,
        uint256 endTime,
        bytes32 merkleRoot,
        uint8 freeMints
    );
    event OddsUpdated(uint256[] newProbabilities);

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status = _NOT_ENTERED;

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }

    constructor() ERC1155("77-Bit Origin Skins", "77OS", "https://api.ipfs.metadata/") {}

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal override {
        super._mint(to, id, amount, data);
        emit TransferSingle(_msgSender(), address(0), to, id, amount);
    }

    function updateMintConfig(
        MintType mintType,
        uint256 price,
        uint256 startTime,
        uint256 endTime,
        bytes32 merkleRoot,
        uint8 freeMints
    ) external onlyOwner {
        require(startTime < endTime, "Invalid mint time");
        mintConfigs[mintType] = MintConfig(
            price,
            startTime,
            endTime,
            freeMints,
            merkleRoot
        );
        emit MintConfigUpdated(
            mintType,
            price,
            startTime,
            endTime,
            merkleRoot,
            freeMints
        );
    }

    function setURI(string memory newURI) external onlyOwner {
        _setURI(newURI);
        emit URIUpdated(newURI);
    }

    function withdraw() external onlyOwner {
        (bool success, ) = owner().call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function updateOdds(
        uint256[] calldata newProbabilities
    ) external onlyOwner {
        uint256 len = newProbabilities.length;
        require(len == tokenProbabilities.length, "Length mismatch");

        uint256 sum;
        for (uint256 i = 0; i < len; ) {
            require(newProbabilities[i] > 0, "Probability cannot be zero");
            sum += newProbabilities[i];
            unchecked {
                ++i;
            }
        }
        require(sum == 100, "Probabilities must sum to 100");
        tokenProbabilities = newProbabilities;
        emit OddsUpdated(newProbabilities);
    }

    function mintWL1(
        uint256 quantity,
        bytes32[] calldata proof
    ) external payable nonReentrant {
        _mintTokens(quantity, MintType.WL1, proof);
    }

    function mintWL2(
        uint256 quantity,
        bytes32[] calldata proof
    ) external payable nonReentrant {
        _mintTokens(quantity, MintType.WL2, proof);
    }

    function mintWL3(
        uint256 quantity,
        bytes32[] calldata proof
    ) external payable nonReentrant {
        _mintTokens(quantity, MintType.WL3, proof);
    }

    function _mintTokens(
        uint256 quantity,
        MintType mintType,
        bytes32[] memory proof
    ) internal {
        require(quantity > 0, "Must mint at least 1 NFT");

        MintConfig memory config = mintConfigs[mintType];
        require(
            block.timestamp >= config.startTime &&
                block.timestamp <= config.endTime,
            "Mint not active"
        );
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(proof, config.merkleRoot, leaf),
            "Not whitelisted"
        );

        // Free vs paid calculation
        uint256 freeMintsUsed = userMints[msg.sender][mintType];
        uint256 freeRemaining = config.freeMintsAllowed > freeMintsUsed
            ? config.freeMintsAllowed - freeMintsUsed
            : 0;
        uint256 freeQuantity = quantity > freeRemaining
            ? freeRemaining
            : quantity;
        uint256 paidQuantity = quantity - freeQuantity;

        if (freeQuantity > 0) {
            userMints[msg.sender][mintType] += freeQuantity;
        }

        require(msg.value == paidQuantity * config.price, "Incorrect ETH sent");
        for (uint256 i = 0; i < quantity; i++) {
            uint256 tokenId = _getRandomTokenId();
            tokenIdSupply[tokenId]++;
            emit Minted(msg.sender, tokenId, mintType);
            _mint(msg.sender, tokenId, 1, "");
        }
    }

    function _getRandomTokenId() internal returns (uint256) {
        // Increment nonce for each generation
        _entropyNonce++;
        uint256 rand = uint256(
            keccak256(
                abi.encodePacked(
                    msg.sender,
                    tx.gasprice,
                    block.timestamp,
                    blockhash(block.number),
                    _entropyNonce
                )
            )
        ) % 100;
        uint256 cumulative;
        for (uint256 i = 0; i < tokenProbabilities.length; i++) {
            cumulative += tokenProbabilities[i];
            if (rand < cumulative) {
                return tokenIdPool[i];
            }
        }
        return tokenIdPool[tokenIdPool.length - 1];
    }
}

File 2 of 2 : Utils.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

library Hashes {
    function commutativeKeccak256(
        bytes32 a,
        bytes32 b
    ) internal pure returns (bytes32) {
        return a < b ? efficientKeccak256(a, b) : efficientKeccak256(b, a);
    }

    /**
     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
     */
    function efficientKeccak256(
        bytes32 a,
        bytes32 b
    ) internal pure returns (bytes32 value) {
        assembly ("memory-safe") {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

library MerkleProof {
    /**
     *@dev The multiproof provided is not valid.
     */
    error MerkleProofInvalidMultiproof();

    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     *
     * This version handles proofs in memory with the default hashing function.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in memory with the default hashing function.
     */
    function processProof(
        bytes32[] memory proof,
        bytes32 leaf
    ) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     *
     * This version handles proofs in memory with a custom hashing function.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return processProof(proof, leaf, hasher) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in memory with a custom hashing function.
     */
    function processProof(
        bytes32[] memory proof,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = hasher(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     *
     * This version handles proofs in calldata with the default hashing function.
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in calldata with the default hashing function.
     */
    function processProofCalldata(
        bytes32[] calldata proof,
        bytes32 leaf
    ) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     *
     * This version handles proofs in calldata with a custom hashing function.
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return processProofCalldata(proof, leaf, hasher) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in calldata with a custom hashing function.
     */
    function processProofCalldata(
        bytes32[] calldata proof,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = hasher(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in memory with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProof}.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in memory with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = Hashes.commutativeKeccak256(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in memory with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProof}.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return processMultiProof(proof, proofFlags, leaves, hasher) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in memory with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = hasher(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in calldata with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProofCalldata}.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in calldata with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = Hashes.commutativeKeccak256(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in calldata with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProofCalldata}.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return
            processMultiProofCalldata(proof, proofFlags, leaves, hasher) ==
            root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in calldata with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = hasher(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {
    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
    );
    event URI(string value, uint256 indexed id);

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

    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);

    function setApprovalForAll(address operator, bool approved) external;

    function isApprovedForAll(
        address account,
        address operator
    ) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external;
}

interface IERC1155MetadataURI is IERC1155 {
    function uri(uint256 id) external view returns (string memory);
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {

    using Strings for uint256;

    // Token metadata
    string public name;
    string public symbol;
    string private _uri;

    // Balances and approvals
    mapping(uint256 => mapping(address => uint256)) private _balances;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Total supply tracking
    mapping(uint256 => uint256) private _totalSupply;

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

    // ERC165
    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    // ERC1155MetadataURI
    function uri(
        uint256 tokenId
    ) public view virtual override returns (string memory) {
        return string(abi.encodePacked(_uri, tokenId.toString()));
    }

    // ERC1155
    function balanceOf(
        address account,
        uint256 id
    ) public view virtual override returns (uint256) {
        return _balances[id][account];
    }

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    ) public view virtual override returns (uint256[] memory) {
        require(
            accounts.length == ids.length,
            "ERC1155: accounts and ids length mismatch"
        );

        uint256[] memory batchBalances = new uint256[](accounts.length);
        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }
        return batchBalances;
    }

    function setApprovalForAll(
        address operator,
        bool approved
    ) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(
        address account,
        address operator
    ) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes memory data
    ) public virtual override {
        revert("Soulbound: Transfers are disabled");
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory values,
        bytes memory data
    ) public virtual override {
        revert("Soulbound: Transfers are disabled");
    }

    // Internal functions
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    function _mint(
        address to,
        uint256 id,
        uint256 value,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        _balances[id][to] += value;
        _totalSupply[id] += value;

        emit TransferSingle(_msgSender(), address(0), to, id, value);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes memory data
    ) internal virtual {
        if (to.code.length > 0) {
            try
                IERC1155Receiver(to).onERC1155Received(
                    operator,
                    from,
                    id,
                    value,
                    data
                )
            returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory values,
        bytes memory data
    ) private {
        if (to.code.length > 0) {
            try
                IERC1155Receiver(to).onERC1155BatchReceived(
                    operator,
                    from,
                    ids,
                    values,
                    data
                )
            returns (bytes4 response) {
                if (
                    response != IERC1155Receiver.onERC1155BatchReceived.selector
                ) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function totalSupply(uint256 id) public view returns (uint256) {
        return _totalSupply[id];
    }

    function exists(uint256 id) public view returns (bool) {
        return _totalSupply[id] > 0;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "mode": "3"
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "abi"
      ]
    }
  },
  "libraries": {},
  "isSystem": false,
  "forceEvmla": false
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"indexed":false,"internalType":"uint8","name":"freeMints","type":"uint8"}],"name":"MintConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"newProbabilities","type":"uint256[]"}],"name":"OddsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"URIUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum LootBox.MintType","name":"","type":"uint8"}],"name":"mintConfigs","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"freeMintsAllowed","type":"uint8"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL3","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenProbabilities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint8","name":"freeMints","type":"uint8"}],"name":"updateMintConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newProbabilities","type":"uint256[]"}],"name":"updateOdds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"enum LootBox.MintType","name":"","type":"uint8"}],"name":"userMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

9c4d535b00000000000000000000000000000000000000000000000000000000000000000100046d7263757f600235d35eeaecb5945230db2a90380a7ef8823eb337ebe900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x0003000000000002000a000000000002000000000302001900000000020100190000006002200270000003f402200197000200000021035500010000000103550000008005000039000000400050043f00000001033001900000003d0000c13d000000040320008c00000ee60000413d000000000301043b000000e004300270000004020340009c0000005e0000213d000000000321034f000004140540009c000000ae0000a13d000004150540009c000001790000a13d000004160540009c000004320000213d000004190340009c0000046b0000613d0000041a0140009c00000ee60000c13d0000000001000416000000000101004b00000ee60000c13d0000000601000039000000000101041a000003fe011001970000000002000411000000000121004b000008c40000c13d000a00000002001d0000045501000041000000000010043900000000010004100000000400100443000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043f011001c70000800a020000390fcb0fc60000040f000000010220019000000d780000613d000000000301043b00000000010004140000000a05000029000000040250008c0000098a0000c13d0000000102000039000000000100003100000af10000013d0000000001000416000000000101004b00000ee60000c13d0000001301000039000000800010043f000003f501000041000000a00010043f0000000407000039000000c00070043f000003f601000041000000e00010043f0000014001000039000000400010043f0000001a01000039000001000010043f000003f701000041000001200010043f000000000100041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b000000860000613d000004610100004100000000001004350000002201000039000000040010043f000004620100004100000fcd00010430000004030340009c000001230000a13d000004040340009c000001df0000a13d000004050340009c0000044a0000213d000004080340009c000004780000613d000004090340009c00000ee60000c13d0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000003fe0320009c00000ee60000213d0000002401100370000000000101043b000a00000001001d000003fe0110009c00000ee60000213d00000000002004350000000401000039000000200010043f0000004002000039000900000002001d00000000010000190fcb0fab0000040f0000000a020000290000000000200435000000200010043f000000000100001900000009020000290fcb0fab0000040f000000000101041a000000ff01100190000004450000013d000000200130008c000000a10000413d000900000003001d000a00000007001d0000000000000435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000009020000290000001f0220003900000005022002700000000002210019000000000321004b0000000a07000029000000a10000813d000000000001041b0000000101100039000000000321004b0000009d0000413d000000a00100043d000003f90110019700000026011001bf000000000010041b000000c00400043d000003fa0140009c000001340000413d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd000104300000041e0540009c000001ef0000213d000004220340009c000004850000613d000004230340009c000004940000613d000004240340009c00000ee60000c13d0000000003000416000000240420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000503043b000003fb0350009c00000ee60000213d0000002303500039000000000323004b00000ee60000813d0000000406500039000000000361034f000000000403043b000003fb0340009c000000a80000213d0000001f07400039000000200300008a000000000737016f0000003f07700039000000000737016f000004370870009c000000a80000213d00000024055000390000008007700039000000400070043f000000800040043f0000000005540019000000000225004b00000ee60000213d0000002002600039000000000121034f0000001f0240018f0000000505400272000000e30000613d00000000060000190000000507600210000000000871034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000000db0000413d000000000602004b000000f20000613d0000000505500210000000000151034f0000000302200210000000a005500039000000000605043300000000062601cf000000000626022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000161019f0000000000150435000000a00140003900000000000104350000000601000039000000000101041a000003fe011001970000000002000411000000000121004b00000b380000c13d000000800200043d000003fb0120009c000000a80000213d0000000201000039000000000501041a000000010450019000000001065002700000007f0460018f000000000406c0190000001f0640008c00000000060000190000000106002039000000000565013f0000000105500190000000580000c13d000000200540008c0000011b0000413d0000001f05200039000000050550027000000465065000410000046505000041000000200720008c000000000506801900000000001004350000001f0440003900000005044002700000046504400041000000000645004b0000011b0000813d000000000005041b0000000105500039000000000645004b000001170000413d0000001f0420008c00000d830000a13d0000000000100435000000000532017000000d960000c13d000000a006000039000004650400004100000da30000013d0000040d0340009c000002190000213d000004110340009c000004a70000613d000004120340009c000006bc0000613d000004130140009c00000ee60000c13d0000000001000416000000000101004b00000ee60000c13d0000000601000039000000000101041a000003fe01100197000000800010043f0000042c0100004100000fcc0001042e0000000106000039000000000106041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000000580000c13d000000200130008c000900000006001d000a00000007001d000001630000413d000700000003001d000800000004001d0000000000600435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000008040000290000001f024000390000000502200270000000200340008c0000000002004019000000000301043b00000007010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000000906000029000001630000813d000000000002041b0000000102200039000000000312004b0000015f0000413d0000001f0140008c000008b80000a13d000800000004001d0000000000600435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000200200008a00000008080000290000000003280170000000000101043b000009040000c13d000000200200003900000009060000290000090f0000013d0000041b0340009c000006d50000613d0000041c0340009c000006f90000613d0000041d0340009c00000ee60000c13d0000000003000416000000a40420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000303043b000003fe0330009c00000ee60000213d0000002403100370000000000303043b000003fe0330009c00000ee60000213d0000004403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c000000a80000213d00000005045002100000003f064000390000043606600197000004370760009c000000a80000213d0000008006600039000000400060043f000000800050043f00000024033000390000000004340019000000000624004b00000ee60000213d000000000505004b000001ae0000613d0000008005000039000000000631034f000000000606043b000000200550003900000000006504350000002003300039000000000643004b000001a70000413d0000006403100370000000000303043b000003fb0430009c00000ee60000213d00000023043000390000045005000041000000000624004b000000000600001900000000060580190000045004400197000000000704004b0000000005008019000004500440009c000000000506c019000000000405004b00000ee60000c13d0000000404300039000000000441034f000000000504043b000003fb0450009c000000a80000213d00000005065002100000003f046000390000043607400197000000400400043d0000000007740019000000000847004b00000000080000190000000108004039000003fb0970009c000000a80000213d0000000108800190000000a80000c13d000000400070043f000000000054043500000024033000390000000006360019000000000726004b00000ee60000213d000000000505004b0000089d0000613d000000000531034f000000000505043b000000200440003900000000005404350000002003300039000000000563004b000001d70000413d0000089d0000013d0000040a0340009c000007180000613d0000040b0340009c000007390000613d0000040c0340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000501000039000004740000013d0000041f0540009c000007a80000613d000004200540009c000007c60000613d000004210340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b000000020210008c00000ee60000213d0fcb0f270000040f0000000302100039000000000202041a0000000103100039000000000303041a0000000204100039000000000404041a000000000501041a0000000401100039000000000101041a000000400600043d000000800760003900000000001704350000004001600039000000000041043500000020016000390000000000310435000000ff0120018f000000600260003900000000001204350000000000560435000003f401000041000003f40260009c000000000601801900000040016002100000045f011001c700000fcc0001042e0000040e0340009c000007f20000613d0000040f0340009c0000081e0000613d000004100340009c00000ee60000c13d000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000604043b000003fb0460009c00000ee60000213d000000240330003900000005076002100000000004370019000000000224004b00000ee60000213d0000000d02000039000000000802041a000000020880008c000006ef0000613d0000000208000039000000000082041b0000003f027000390000043602200197000004370720009c000000a80000213d0000008002200039000000400020043f000000800060043f000000000206004b0000024b0000613d000000000231034f000000000202043b000000200550003900000000002504350000002003300039000000000243004b000002440000413d000000080100006b00000ad70000613d000600000008001d00000000008004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000500000002001d000004380220009c000000a80000213d000000000101043b0000000504000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000300000003001d000000000023043500000080024000390000000401100039000000000101041a000400000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000004020000290000000002020433000400000002001d000000800200043d000000000202004b000002d20000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b000002c10000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000902000029000002c90000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b000002b20000413d000000040110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000003020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000400000003001d00000000010300190000000801004029000900000001001d000000000101004b00000e740000c13d000000090100002900000008021000690000000501000029000000000301043300000000412300a90000000404000029000000080440006b0000030d0000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000600070000003d00090001000000920005800b0000003d000200000000001d0000000601000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000601000029000400000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000040400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b0000038f0000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b000003950000413d0000000101100039000000000521004b000003820000413d0000000801000039000000000101041a000000000201004b00000ee00000613d00000443011000410000039a0000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d0200003900000004030000390000000207000039000004440400004100000007050000290000000a060000290fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d00000020021000390000000103000039000400000003001d00000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000040300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c000003140000413d00000d730000013d000004170540009c000008370000613d000004180340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000501000039000000200010043f000000400200003900000000010000190fcb0fab0000040f000000000101041a000000000101004b0000000001000019000000010100c039000000800010043f0000042c0100004100000fcc0001042e000004060340009c000008900000613d000004070340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000601043b000003fe0160009c00000ee60000213d0000000601000039000000000201041a000003fe032001970000000005000411000000000353004b000008c40000c13d000000000306004b000009920000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f0000042601000041000000c40010043f0000042701000041000000e40010043f000004280100004100000fcd000104300000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000c01000039000000200010043f00000040020000390000000001000019000007130000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b0000000802000039000000000202041a000000000221004b00000ee60000813d0fcb0f9c0000040f000006c80000013d0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000003fe0220009c00000ee60000213d0000002401100370000000000101043b00000000001004350000000301000039000007090000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000201043b000004680120019800000ee60000c13d0000000101000039000004690320009c000007150000613d0000046a0320009c000007150000613d0000046b0220009c000000000100c019000000800010043f0000042c0100004100000fcc0001042e000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c00000ee60000213d000000240330003900000005065002100000000004360019000000000224004b00000ee60000213d0000000d02000039000000000702041a000000020770008c000006ef0000613d0000000207000039000000000072041b0000003f026000390000043602200197000004370620009c000000a80000213d0000008002200039000000400020043f000000800050043f000000000205004b000004d40000613d0000008002000039000000000531034f000000000505043b000000200220003900000000005204350000002003300039000000000543004b000004cd0000413d000000080100006b00000ad70000613d0000000101000039000600000001001d00000000001004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000500000002001d000004380220009c000000a80000213d000000000101043b0000000504000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000300000003001d000000000023043500000080024000390000000401100039000000000101041a000400000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000004020000290000000002020433000400000002001d000000000101043b000000800200043d000000000202004b0000055c0000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b0000054b0000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000902000029000005530000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b0000053c0000413d000000040110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000003020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000400000003001d00000000010300190000000801004029000900000001001d000000000101004b00000e990000c13d000000090100002900000008021000690000000501000029000000000301043300000000412300a90000000404000029000000080440006b000005970000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000500070000003d00090001000000920004800b0000003d000200000000001d0000000501000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000501000029000600000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000004020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000004020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000060400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b000006190000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b0000061f0000413d0000000101100039000000000521004b0000060c0000413d0000000801000039000000000101041a000000000201004b00000ee00000613d0000044301100041000006240000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d0200003900000004030000390000000107000039000004440400004100000007050000290000000a06000029000600000007001d0fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d0000002002100039000000060300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000060300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c0000059e0000413d00000d730000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b0000000902000039000000000202041a000000000221004b00000ee60000813d0fcb0f8e0000040f0000000302200210000000000101041a000000000121022f000000ff0220008c0000000001002019000000400200043d0000000000120435000003f401000041000003f40320009c000000000201801900000040012002100000042d011001c700000fcc0001042e000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c00000ee60000213d000000240330003900000005065002100000000004360019000000000224004b00000ee60000213d0000000d02000039000000000702041a000000020770008c00000ac20000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000045e01000041000000c40010043f0000042f0100004100000fcd000104300000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000003fe0320009c00000ee60000213d0000002401100370000000000101043b000a00000001001d000000020110008c00000ee60000213d00000000002004350000000b01000039000000200010043f0000004002000039000900000002001d00000000010000190fcb0fab0000040f0000000a020000290000000000200435000000200010043f000000000100001900000009020000290fcb0fab0000040f000000000101041a000000800010043f0000042c0100004100000fcc0001042e0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000003fe0220009c00000ee60000213d0000002401100370000000000201043b000000000102004b0000000001000019000000010100c039000900000002001d000000000112004b00000ee60000c13d00000000020004110000000a0120006c000009a20000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000043401000041000000c40010043f0000043501000041000000e40010043f000004280100004100000fcd000104300000000003000416000000c40220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000000020220008c00000ee60000213d0000008402100370000000000202043b000700000002001d0000006402100370000000000202043b000800000002001d0000004402100370000000000202043b000900000002001d0000002402100370000000000202043b000600000002001d000000a401100370000000000101043b000000ff0210008c00000ee60000213d0000000602000039000000000202041a000003fe022001970000000003000411000000000232004b000008c40000c13d00000009030000290000000804000029000000000243004b00000ade0000813d000000ff0210018f0000012001000039000000400010043f0000000601000029000000800010043f000000a00030043f000000c00040043f000500000002001d000000e00020043f0000000701000029000001000010043f0000000a0100002900000000001004350000000a01000039000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000800200043d000000000021041b0000000102100039000000a00300043d000000000032041b0000000202100039000000c00300043d000000000032041b0000000302100039000001000300008a000000000402041a000000000334016f000000e00400043d000000ff0440018f000000000343019f000000000032041b0000000401100039000001000200043d000000000021041b000000400100043d000000800210003900000005030000290000000000320435000000600210003900000007030000290000000000320435000000400210003900000008030000290000000000320435000000200210003900000009030000290000000000320435000000060200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000431011001c70000800d02000039000000020300003900000432040000410000000a050000290000099e0000013d0000000001000416000000000101004b00000ee60000c13d000000000200041a000000010320019000000001042002700000007f0140018f000000000104c0190000001f0410008c00000000040000190000000104002039000000000442013f0000000104400190000000580000c13d000000800010043f000000000303004b0000096f0000613d0000000000000435000000000201004b000009790000613d00000466030000410000000004000019000000000503041a000000a002400039000000000052043500000001033000390000002004400039000000000514004b000007be0000413d000009e00000013d0000000004000416000000240220008c00000ee60000413d000000000204004b00000ee60000c13d0000000401100370000000000101043b000000000201004b000008cd0000c13d000000c005000039000000400050043f0000000101000039000000800010043f0000046401000041000000a00010043f0000000203000039000000000203041a000000010420019000000001012002700000007f0610018f000000000601c0190000001f0160008c00000000010000190000000101002039000000000112013f0000000101100190000000580000c13d0000002001500039000000000404004b000a00000005001d0000097b0000613d0000000000300435000000000206004b0000097e0000613d000004650200004100000000030000190000000004130019000000000502041a000000000054043500000001022000390000002003300039000000000463004b000007ea0000413d0000097e0000013d0000000003000416000000240420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000503043b000003fb0350009c00000ee60000213d0000002303500039000000000323004b00000ee60000813d0000000404500039000000000341034f000000000303043b000003fb0630009c00000ee60000213d000000240650003900000005053002100000000007650019000000000227004b00000ee60000213d0000000602000039000000000202041a000003fe022001970000000007000411000000000272004b000008c40000c13d0000000902000039000000000702041a000000000773004b00000b430000c13d000000000703004b00000b4d0000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f0000044f01000041000000c40010043f0000042f0100004100000fcd000104300000000001000416000000000101004b00000ee60000c13d0000000103000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0610008c00000000060000190000000106002039000000000662013f0000000106600190000000580000c13d000000800010043f000000000505004b000009760000c13d000001000100008a000000000112016f000000a00010043f000000000104004b000000a0020000390000008002006039000009e00000013d0000000004000416000000440520008c00000ee60000413d000000000404004b00000ee60000c13d0000000404100370000000000404043b000003fb0540009c00000ee60000213d0000002305400039000000000525004b00000ee60000813d0000000405400039000000000551034f000000000605043b000003fb0560009c000000a80000213d00000005056002100000003f075000390000043607700197000004370870009c000000a80000213d0000008007700039000000400070043f000000800060043f00000024044000390000000005450019000000000725004b00000ee60000213d000000000606004b0000085f0000613d000000a006000039000000000741034f000000000707043b000003fe0870009c00000ee60000213d00000000067604360000002004400039000000000754004b000008570000413d0000002404100370000000000404043b000003fb0540009c00000ee60000213d00000023054000390000045006000041000000000725004b000000000700001900000000070640190000045005500197000000000805004b000000000600a019000004500550009c000000000607c019000000000506004b00000ee60000613d0000000405400039000000000551034f000000000505043b000003fb0650009c000000a80000213d00000005065002100000003f076000390000043607700197000000400800043d0000000007780019000600000008001d000000000887004b00000000080000190000000108004039000003fb0970009c000000a80000213d0000000108800190000000a80000c13d000000400070043f00000006070000290000000007570436000500000007001d00000024044000390000000006460019000000000226004b00000ee60000213d000000000205004b00000dd70000c13d000000800100043d000000000101004b000000000100001900000de60000613d00000e220000013d0000000003000416000000a40420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000303043b000003fe0330009c00000ee60000213d0000002403100370000000000303043b000003fe0330009c00000ee60000213d0000008401100370000000000101043b000003fb0310009c00000ee60000213d00000004011000390fcb0f400000040f000000400100043d00000064021000390000042903000041000000000032043500000044021000390000042a03000041000000000032043500000024021000390000002103000039000000000032043500000425020000410000000000210435000000040210003900000020030000390000000000320435000003f402000041000003f40310009c000000000102801900000040011002100000042b011001c700000fcd00010430000000000104004b0000000001000019000008bc0000613d000000e00100043d0000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000091c0000013d0000042501000041000000800010043f0000002001000039000000840010043f000000a40010043f0000045401000041000000c40010043f0000042f0100004100000fcd00010430000000010500008a000000000601001900000000020000190000000004020019000000000254004b00000ee00000613d000000090260008c0000000a2660011a0000000102400039000008d00000213d000004600540009c000000a80000213d000000200500008a000000000454016f0000005f06400039000000000556016f000004370650009c000000a80000213d0000008005500039000000400050043f000000800020043f00000020054000390000001f0450018f0000000505500272000008ef0000613d00000000060000190000000507600210000000000873034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000008e70000413d000000000304004b000008f10000613d000000000302004b00000ee00000613d000000010320008a000000800400043d000000000443004b00000e670000813d000000090410008c0000000a4110011a000000f8044002100000009f0220003900000000050204330000046305500197000000000454019f00000464044001c700000000004204350000000002030019000008f10000213d000000400500043d000007d50000013d000000200200003900000000040000190000000906000029000000c0052000390000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000009070000413d000000000383004b0000091a0000813d0000000303800210000000f80330018f000000010400008a000000000334022f000000000343013f000000c0022000390000000002020433000000000232016f000000000021041b000000010180021000000001011001bf000000000016041b000001000500043d000003fb0150009c000000a80000213d0000000204000039000000000104041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000000580000c13d000000200130008c000800000004001d0000094e0000413d000600000003001d000700000005001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000007050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000006010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000008040000290000094e0000813d000000000002041b0000000102200039000000000312004b0000094a0000413d0000001f0150008c000009630000a13d000700000005001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000200200008a00000007070000290000000002270170000000000101043b000009f30000c13d0000012003000039000009ff0000013d000000000105004b0000000001000019000009670000613d000001200100043d0000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f00000a0c0000013d000001000300008a000000000232016f000000a00020043f000000000101004b000000a0020000390000008002006039000009e00000013d0000000000300435000000020220008c000009d70000813d0000008002000039000009e00000013d000001000300008a000000000232016f00000000002104350000000002610019000000800300043d000900000003001d000000a001000039000800000006001d0fcb0f040000040f000000080200002900000009022000290000000a0100002900000000002104350000002002200039000009e30000013d000003f402000041000003f40410009c0000000001028019000000c001100210000000000203004b00000ae80000c13d000000000205001900000aec0000013d000003fc02200197000000000262019f000000000021041b000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003fd011001c70000800d020000390000000303000039000003ff040000410fcb0fc10000040f000000010120019000000af50000c13d00000ee60000013d000800000002001d00000000002004350000000401000039000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000904000029000000ff0340018f000000000232019f000000000021041b000000400100043d0000000000410435000003f4020000410000000003000414000003f40430009c0000000003028019000003f40410009c00000000010280190000004001100210000000c002300210000000000112019f000003f8011001c70000800d020000390000000303000039000004330400004100000008050000290000000a060000290000099e0000013d00000447030000410000000004000019000000000503041a000000a002400039000000000052043500000001033000390000002004400039000000000514004b000009d90000413d000000600220008a0000008001000039000a00000001001d0fcb0ef10000040f000000400100043d000900000001001d0000000a020000290fcb0f110000040f00000009040000290000000001410049000003f402000041000003f40310009c0000000001028019000003f40340009c000000000402801900000040024002100000006001100210000000000121019f00000fcc0001042e00000020040000390000000003000019000000000504001900000100045000390000000004040433000000000041041b000000200450003900000001011000390000002003300039000000000623004b000009f50000413d0000012003500039000000000272004b00000a090000813d0000000302700210000000f80220018f000000010400008a000000000224022f000000000242013f0000000003030433000000000223016f000000000021041b000000010170021000000001011001bf0000000804000029000000000014041b0000000603000039000000000203041a000003fc012001970000000006000411000000000161019f000700000003001d000000000013041b000003f4010000410000000003000414000003f40430009c0000000003018019000000c001300210000003fd011001c7000003fe052001970000800d020000390000000303000039000600000003001d000003ff040000410fcb0fc10000040f000000010120019000000ee60000613d000000400500043d000004000150009c00000009030000290000000a04000029000000a80000213d000000e001500039000000400010043f000000a00150003900000007020000290000000000210435000000800150003900000005020000390000000000210435000000600150003900000000004104350000004001500039000000060200002900000000002104350000002001500039000000080200002900000000002104350000000000350435000800000005001d000000c001500039000000070200003900000000002104350000000804000039000000000304041a000600000002001d000000000024041b000000080130008c00000a590000413d000400000003001d000500000004001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000201043b00000004012000290000000702200039000000000312004b000000050400002900000a590000813d000000000002041b0000000102200039000000000312004b00000a550000413d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000002000019000000080500002900000000031200190000000054050434000000ff0440018f000000000043041b000000060320008c000000010220003900000a670000413d000000400400043d000004000140009c00000009020000290000000a03000029000000a80000213d000000e001400039000000400010043f000000c0014000390000000000210435000000a001400039000000070200002900000000002104350000008001400039000000000031043500000060014000390000000a02000039000000000021043500000040014000390000000f020000390000000000210435000000200140003900000020020000390000000000210435000a00000004001d000800000002001d00000000002404350000000904000039000000000204041a0000000601000029000000000014041b000700000002001d000000080120008c00000aa50000413d000600000004001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000201043b00000007012000290000000702200039000000000312004b000000060400002900000aa50000813d000000000002041b0000000102200039000000000312004b00000aa10000413d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000000020000190000000a0500002900000000031200190000000054050434000000ff0440018f000000000043041b000000060320008c000000010220003900000ab30000413d0000000d010000390000000902000029000000000021041b000000080100002900000100001004430000012000000443000004010100004100000fcc0001042e0000000207000039000000000072041b0000003f026000390000043602200197000004370620009c000000a80000213d0000008002200039000000400020043f000000800050043f000000000205004b00000ad50000613d0000008002000039000000000531034f000000000505043b000000200220003900000000005204350000002003300039000000000543004b00000ace0000413d000000080100006b00000b910000c13d000000400100043d00000044021000390000045d0300004100000000003204350000002402100039000000180300003900000b2c0000013d0000042501000041000000800010043f0000002001000039000000840010043f0000001101000039000000a40010043f0000042e01000041000000c40010043f0000042f0100004100000fcd00010430000003fd011001c70000800902000039000000000405001900000000050000190fcb0fc10000040f00020000000103550000006001100270000003f40010019d000003f401100197000000000301004b00000af70000c13d000000010120019000000b260000613d000000000100001900000fcc0001042e000003fb0310009c000000a80000213d0000001f03100039000000200400008a000000000343016f0000003f03300039000000000343016f000000400400043d0000000003340019000000000543004b00000000050000190000000105004039000003fb0630009c000000a80000213d0000000105500190000000a80000c13d000000400030043f0000001f0310018f00000000041404360000000205000367000000050110027200000b160000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00000b0e0000413d000000000603004b00000af30000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f000000000031043500000af30000013d000000400100043d00000044021000390000045603000041000000000032043500000024021000390000001003000039000000000032043500000425020000410000000000210435000000040210003900000020030000390000000000320435000003f402000041000003f40310009c0000000001028019000000400110021000000457011001c700000fcd00010430000000400100043d00000044021000390000045403000041000000000032043500000425020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000b310000013d0000042501000041000000800010043f0000002001000039000000840010043f0000000f01000039000000a40010043f0000044801000041000000c40010043f0000042f0100004100000fcd000104300000000008000019000000000700001900000005098002100000000009690019000000000991034f000000000909043b000000000a09004b00000d790000613d0000000007790019000000000997004b00000000090000190000000109004039000000010990019000000ee00000c13d0000000108800039000000000938004b00000b4f0000413d000000640770008c000008140000c13d000003fa0730009c000000a80000213d000000000032041b00000000002004350000000002000019000000000761034f000000000707043b0000044108200041000000000078041b00000020066000390000000102200039000000000732004b00000b650000413d0000002002000039000000800020043f000000a00030043f000004490230009c00000ee60000213d0000001f0250018f000000050550027200000b800000613d0000002004400039000000000141034f00000000040000190000000506400210000000000761034f000000000707043b000000c00660003900000000007604350000000104400039000000000654004b00000b780000413d000000000102004b00000b820000613d00000065013002100000044a011000410000044b020000410000044c0330009c0000000001028019000003f4020000410000000003000414000003f40430009c0000000003028019000000c00230021000000000011200190000800d0200003900000001030000390000044d0400004100000dd60000013d00000000000004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000600000002001d000004380220009c000000a80000213d000000000101043b0000000604000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000400000003001d000000000023043500000080024000390000000401100039000000000101041a000500000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000005020000290000000002020433000500000002001d000000000101043b000000800200043d000000000202004b00000c150000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b00000c040000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c7000000090200002900000c0c0000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b00000bf50000413d000000050110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000000000435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000004020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000500000003001d00000000010300190000000801004029000900000001001d000000000101004b00000ebe0000c13d000000090100002900000008021000690000000601000029000000000301043300000000412300a90000000504000029000000080440006b00000c4f0000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000600070000003d00090001000000920005800b0000003d000200000000001d0000000601000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000601000029000400000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000040400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b00000cd10000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b00000cd70000413d0000000101100039000000000521004b00000cc40000413d0000000801000039000000000101041a000000000201004b00000ee00000613d000004430110004100000cdc0000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d020000390000000403000039000004440400004100000007050000290000000a0600002900000000070000190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d00000020021000390000000103000039000400000003001d00000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000040300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c00000c560000413d00000001010000390000000d02000039000000000012041b000000000100001900000fcc0001042e000000000001042f0000042501000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000044e01000041000000c40010043f0000042f0100004100000fcd00010430000000000402004b000000000400001900000d870000613d000000a00400043d0000000305200210000000010600008a000000000556022f000000000565013f000000000454016f0000000102200210000000000224019f00000daf0000013d000000400100043d00000044021000390000045c03000041000000000032043500000024021000390000000f0300003900000b2c0000013d000004650400004100000020070000390000000006000019000000000807001900000080078000390000000007070433000000000074041b000000200780003900000001044000390000002006600039000000000956004b00000d990000413d000000a006800039000000000525004b00000dad0000813d0000000305200210000000f80550018f000000010700008a000000000557022f000000000575013f0000000006060433000000000556016f000000000054041b000000010220021000000001022001bf000000000021041b0000002002000039000000400100043d0000000004210436000000800200043d00000000002404350000004004100039000000000502004b00000dc00000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000625004b00000db90000413d000000000442001900000000000404350000001f02200039000000000232016f000003f403000041000003f40410009c000000000103801900000040011002100000004002200039000003f40420009c00000000020380190000006002200210000000000112019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c70000800d02000039000000010300003900000467040000410000099e0000013d0000000602000029000000000541034f000000000505043b000000200220003900000000005204350000002004400039000000000564004b00000dd80000413d00000006010000290000000001010433000000800200043d000000000212004b00000e220000c13d000003fb0210009c000000a80000213d00000005021002100000003f042000390000045305400197000000400400043d000400000004001d0000000004450019000000000554004b00000000050000190000000105004039000003fb0640009c000000a80000213d0000000105500190000000a80000c13d000000400040043f000000040400002900000000071404360000001f0120018f000000050220027200000e020000613d000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000524004b00000dfa0000413d000300000007001d000000000101004b00000e050000613d000000800100043d000000000101004b00000e300000c13d000000400100043d000000200200003900000000022104360000000403000029000000000303043300000000003204350000004002100039000000000403004b00000e180000613d00000000040000190000000306000029000000006506043400000000025204360000000104400039000000000534004b00000e130000413d0000000002120049000003f403000041000003f40420009c0000000002038019000003f40410009c000000000103801900000040011002100000006002200210000000000112019f00000fcc0001042e000000400100043d00000064021000390000045103000041000000000032043500000044021000390000045203000041000000000032043500000024021000390000002903000039000008ac0000013d000000400100043d0000004402100039000004580300004100000d920000013d000200030000003d000a80100000003d00000000030000190000000502300210000000a0012000390000000001010433000903fe0010019b00000006010000290000000001010433000000000131004b00000e670000a13d000800000003001d000700000002001d0000000501200029000000000101043300000000001004350000000201000029000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000a020000290fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000009020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000a020000290fcb0fc60000040f000000010220019000000ee60000613d000000040200002900000000020204330000000803000029000000000232004b000000070400002900000e670000a13d0000000302400029000000000101043b000000000101041a00000000001204350000000103300039000000800100043d000000000113004b00000e330000413d00000e080000013d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd00010430000000400100043d0000004402100039000004590300004100000000003204350000002402100039000000120300003900000b2c0000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee00000c13d000000000021041b000003020000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee00000c13d000000000021041b0000058c0000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000000000435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee80000613d000004610100004100000000001004350000001101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd00010430000000000021041b00000c440000013d000000400100043d00000064021000390000045a03000041000000000032043500000044021000390000045b03000041000008a90000013d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000003fb0310009c00000efe0000213d000000010220019000000efe0000c13d000000400010043f000000000001042d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd00010430000000000403004b00000f0e0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b00000f070000413d00000000012300190000000000010435000000000001042d00000020030000390000000004310436000000003202043400000000002404350000004001100039000000000402004b00000f200000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000524004b00000f190000413d000000000312001900000000000304350000001f02200039000000200300008a000000000232016f0000000001210019000000000001042d000000030210008c00000f380000813d00000000001004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000f3e0000613d000000000101043b000000000001042d000004610100004100000000001004350000002101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd000104300000001f031000390000045004000041000000000523004b0000000005000019000000000504401900000450062001970000045003300197000000000763004b000000000400a019000000000363013f000004500330009c000000000405c019000000000304004b00000f8c0000613d0000000104000367000000000314034f000000000303043b000003fa0530009c00000f860000813d0000001f05300039000000200600008a000000000565016f0000003f05500039000000000665016f000000400500043d0000000006650019000000000756004b00000000070000190000000107004039000003fb0860009c00000f860000213d000000010770019000000f860000c13d0000002007100039000000400060043f00000000013504360000000005730019000000000225004b00000f8c0000213d000000000474034f0000001f0230018f000000050530027200000f740000613d000000000600001900000005076002100000000008710019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00000f6c0000413d000000000602004b00000f830000613d0000000505500210000000000454034f00000000055100190000000302200210000000000605043300000000062601cf000000000626022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000262019f000000000025043500000000013100190000000000010435000000000001042d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd000104300000000902000039000000000302041a000000000313004b00000f960000a13d000000000020043500000441011000410000000002000019000000000001042d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd000104300000000802000039000000000302041a000000000313004b00000fa40000a13d000000000020043500000442011000410000000002000019000000000001042d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd00010430000000000001042f000003f403000041000003f40410009c00000000010380190000004001100210000003f40420009c00000000020380190000006002200210000000000112019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000fbf0000613d000000000101043b000000000001042d000000000100001900000fcd0001043000000fc4002104210000000102000039000000000001042d0000000002000019000000000001042d00000fc9002104230000000102000039000000000001042d0000000002000019000000000001042d00000fcb0000043200000fcc0001042e00000fcd000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff37372d426974204f726967696e20536b696e730000000000000000000000000037374f530000000000000000000000000000000000000000000000000000000068747470733a2f2f6170692e697066732e6d657461646174612f0000000000000200000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000ffffffffffffff1f0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006bd6327700000000000000000000000000000000000000000000000000000000a22cb46400000000000000000000000000000000000000000000000000000000ca4c0e0800000000000000000000000000000000000000000000000000000000f242432900000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000ca4c0e0900000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000a79a2c2700000000000000000000000000000000000000000000000000000000bd85b039000000000000000000000000000000000000000000000000000000008ed67ea9000000000000000000000000000000000000000000000000000000008ed67eaa0000000000000000000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000a1ec98d4000000000000000000000000000000000000000000000000000000006bd63278000000000000000000000000000000000000000000000000000000006ed0d208000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000001b7c85a500000000000000000000000000000000000000000000000000000000327de31e000000000000000000000000000000000000000000000000000000004e1273f3000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000004f558e7900000000000000000000000000000000000000000000000000000000327de31f000000000000000000000000000000000000000000000000000000003ccfd60b000000000000000000000000000000000000000000000000000000001b7c85a6000000000000000000000000000000000000000000000000000000002ba9ddae000000000000000000000000000000000000000000000000000000002eb2c2d60000000000000000000000000000000000000000000000000000000006fdde020000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000019e275420000000000000000000000000000000000000000000000000000000000fdd58e0000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000002fe530508c379a0000000000000000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000006400000000000000000000000000000000000000000000000000000000000000536f756c626f756e643a205472616e7366657273206172652064697361626c65000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000200000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e76616c6964206d696e742074696d650000000000000000000000000000000000000000000000000000000000000000000064000000800000000000000000020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000a0000000000000000000000000b220e1ff85aeaa1ff30890ed50e6d51ac264bc0b3424d64000300a4c31cd86db17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c6600000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff5f796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbffe173b97ed9aa263236c52fa3eb334d07741add95e972d17352d76816b4aaea342cbb15ccdc3cad6266b0e7a08c0454b23bf29dc2df74b6f3c209e9336465bd180b41246c05cbb406f874e82aa2faf7db11bba9792fe09929e56ef1eee2c2da30200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7aff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee2dcb23284f3935b5557998e99dcc286e29744c5000723d99eecd5d6f5694f6e11000000000000000000000000000000000000000000000000ffffffffffffffdfc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf64c656e677468206d69736d61746368000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020000000000000000000000000000000000004000000080000000000000000002000000000000000000000000000000ffffffff0000008000000000000000000000000000000000000000000000000000000000000000000000000007fffffe7983ca35fe1b5295f154d37047422da650345e407122812e8873db36c3773fdf50726f626162696c6974792063616e6e6f74206265207a65726f00000000000050726f626162696c6974696573206d7573742073756d20746f203130300000008000000000000000000000000000000000000000000000000000000000000000206d69736d617463680000000000000000000000000000000000000000000000455243313135353a206163636f756e747320616e6420696473206c656e67746800000000000000000000000000000000000000000000003fffffffffffffffe04f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395472616e73666572206661696c65642e0000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004e6f742077686974656c69737465640000000000000000000000000000000000496e636f7272656374204554482073656e7400000000000000000000000000007300000000000000000000000000000000000000000000000000000000000000455243313135353a206d696e7420746f20746865207a65726f206164647265734d696e74206e6f742061637469766500000000000000000000000000000000004d757374206d696e74206174206c656173742031204e465400000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c0000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffe4e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3000000000000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563e3afa94108b5f5e82e5f6e539d161ff4b5402a85f696c67b9768ec3ae54ce36600000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000d9b67a260000000000000000000000000000000000000000000000000000000015486077d7b75f7e77e0e6142f5067e9c8321f5cc4102c7d5f7150fd41dc66c1

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.