APE Price: $0.70 (-1.88%)
    /

    Contract

    0x02fBc2Dd28288c16889Ec321dda3a74177a027ED

    Overview

    APE Balance

    Apechain LogoApechain LogoApechain Logo80 APE

    APE Value

    $56.27 (@ $0.70/APE)

    Multichain Info

    No addresses found
    Transaction Hash
    Method
    Block
    Age
    From
    To
    Set Approval For...101993322025-02-18 3:09:201 hr ago1739848160IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Set Approval For...101861532025-02-17 21:31:097 hrs ago1739827869IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Reveal101860492025-02-17 21:28:387 hrs ago1739827718IN
    0x02fBc2Dd...177a027ED
    0 APE0.0026205125.42069
    Mint101692902025-02-17 14:54:1213 hrs ago1739804052IN
    0x02fBc2Dd...177a027ED
    8 APE0.0074712925.42069
    Mint101643362025-02-17 12:30:2916 hrs ago1739795429IN
    0x02fBc2Dd...177a027ED
    8 APE0.0074712625.42069
    Set Approval For...101449702025-02-17 2:59:1325 hrs ago1739761153IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Set Approval For...101226332025-02-16 16:03:0936 hrs ago1739721789IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Mint101182242025-02-16 14:05:2338 hrs ago1739714723IN
    0x02fBc2Dd...177a027ED
    8 APE0.0083406825.42069
    Set Approval For...101178172025-02-16 13:53:0238 hrs ago1739713982IN
    0x02fBc2Dd...177a027ED
    0 APE0.001231725.42069
    Reveal101126582025-02-16 11:17:1741 hrs ago1739704637IN
    0x02fBc2Dd...177a027ED
    0 APE0.002906725.42069
    Set Approval For...100814692025-02-16 2:56:022 days ago1739674562IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Mint100726082025-02-16 1:15:432 days ago1739668543IN
    0x02fBc2Dd...177a027ED
    32 APE0.018602425.42069
    Mint100724952025-02-16 1:13:522 days ago1739668432IN
    0x02fBc2Dd...177a027ED
    8 APE0.0083406825.42069
    Set Approval For...100610432025-02-15 23:56:512 days ago1739663811IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Set Approval For...100562232025-02-15 22:53:552 days ago1739660035IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Set Approval For...100540302025-02-15 22:12:252 days ago1739657545IN
    0x02fBc2Dd...177a027ED
    0 APE0.001231725.42069
    Set Approval For...100274872025-02-15 17:57:332 days ago1739642253IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Reveal100266482025-02-15 17:48:522 days ago1739641732IN
    0x02fBc2Dd...177a027ED
    0 APE0.0071381825.42069
    Reveal99439482025-02-15 0:02:553 days ago1739577775IN
    0x02fBc2Dd...177a027ED
    0 APE0.0024968925.42069
    Mint99379932025-02-14 22:17:553 days ago1739571475IN
    0x02fBc2Dd...177a027ED
    8 APE0.0083409825.42069
    Set Approval For...99317282025-02-14 20:42:583 days ago1739565778IN
    0x02fBc2Dd...177a027ED
    0 APE0.0012317325.42069
    Set Approval For...99274722025-02-14 19:29:533 days ago1739561393IN
    0x02fBc2Dd...177a027ED
    0 APE0.0006747125.42069
    Set Approval For...99274682025-02-14 19:29:503 days ago1739561390IN
    0x02fBc2Dd...177a027ED
    0 APE0.0006747125.42069
    Mint99170812025-02-14 16:30:103 days ago1739550610IN
    0x02fBc2Dd...177a027ED
    8 APE0.0074715925.42069
    Withdraw99118542025-02-14 15:23:163 days ago1739546596IN
    0x02fBc2Dd...177a027ED
    0 APE0.0007719225.42069
    View all transactions

    Latest 2 internal transactions

    Parent Transaction Hash Block Age From To Amount
    99118542025-02-14 15:23:163 days ago1739546596
    0x02fBc2Dd...177a027ED
    5,384 APE
    89678252025-01-30 1:16:5319 days ago1738199813
    0x02fBc2Dd...177a027ED
    12,412 APE

    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    CodeHavoc

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    paris EvmVersion
    File 1 of 32 : 1155.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity 0.8.28;
    import "@limitbreak/creator-token-standards/src/access/OwnableBasic.sol";
    import "@limitbreak/creator-token-standards/src/erc1155c/ERC1155C.sol";
    import "@limitbreak/creator-token-standards/src/programmable-royalties/BasicRoyalties.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
    import "./utils/PhaseMint.sol";
    import "./utils/Signature.sol";
    contract CodeHavoc is
    ERC1155C,
    PhaseMint,
    BasicRoyalties,
    OwnableBasic,
    Signature,
    ReentrancyGuard
    {
    string public name;
    string public symbol;
    struct Token {
    uint8 id;
    uint256 supply;
    uint256 maxSupply;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 32 : OwnableBasic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "./OwnablePermissions.sol";
    import "@openzeppelin/contracts/access/Ownable.sol";
    abstract contract OwnableBasic is OwnablePermissions, Ownable {
    function _requireCallerIsContractOwner() internal view virtual override {
    _checkOwner();
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 32 : OwnablePermissions.sol
    1
    2
    3
    4
    5
    6
    7
    8
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "@openzeppelin/contracts/utils/Context.sol";
    abstract contract OwnablePermissions is Context {
    function _requireCallerIsContractOwner() internal view virtual;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 32 : ERC1155C.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "../utils/AutomaticValidatorTransferApproval.sol";
    import "../utils/CreatorTokenBase.sol";
    import "../token/erc1155/ERC1155OpenZeppelin.sol";
    import {TOKEN_TYPE_ERC1155} from "@limitbreak/permit-c/src/Constants.sol";
    /**
    * @title ERC1155C
    * @author Limit Break, Inc.
    * @notice Extends OpenZeppelin's ERC1155 implementation with Creator Token functionality, which
    * allows the contract owner to update the transfer validation logic by managing a security policy in
    * an external transfer validation security policy registry. See {CreatorTokenTransferValidator}.
    */
    abstract contract ERC1155C is ERC1155OpenZeppelin, CreatorTokenBase, AutomaticValidatorTransferApproval {
    /**
    * @notice Overrides behavior of isApprovedFor all such that if an operator is not explicitly approved
    * for all, the contract owner can optionally auto-approve the 721-C transfer validator for transfers.
    */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool isApproved) {
    isApproved = super.isApprovedForAll(owner, operator);
    if (!isApproved) {
    if (autoApproveTransfersFromValidator) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 32 : ICreatorToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    interface ICreatorToken {
    event TransferValidatorUpdated(address oldValidator, address newValidator);
    function getTransferValidator() external view returns (address validator);
    function setTransferValidator(address validator) external;
    function getTransferValidationFunction() external view returns (bytes4 functionSignature, bool isViewFunction);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 32 : ICreatorTokenLegacy.sol
    1
    2
    3
    4
    5
    6
    7
    8
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    interface ICreatorTokenLegacy {
    event TransferValidatorUpdated(address oldValidator, address newValidator);
    function getTransferValidator() external view returns (address validator);
    function setTransferValidator(address validator) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 32 : ITransferValidator.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    interface ITransferValidator {
    function applyCollectionTransferPolicy(address caller, address from, address to) external view;
    function validateTransfer(address caller, address from, address to) external view;
    function validateTransfer(address caller, address from, address to, uint256 tokenId) external view;
    function validateTransfer(address caller, address from, address to, uint256 tokenId, uint256 amount) external;
    function beforeAuthorizedTransfer(address operator, address token, uint256 tokenId) external;
    function afterAuthorizedTransfer(address token, uint256 tokenId) external;
    function beforeAuthorizedTransfer(address operator, address token) external;
    function afterAuthorizedTransfer(address token) external;
    function beforeAuthorizedTransfer(address token, uint256 tokenId) external;
    function beforeAuthorizedTransferWithAmount(address token, uint256 tokenId, uint256 amount) external;
    function afterAuthorizedTransferWithAmount(address token, uint256 tokenId) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 32 : ITransferValidatorSetTokenType.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    interface ITransferValidatorSetTokenType {
    function setTokenTypeOfCollection(address collection, uint16 tokenType) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 32 : BasicRoyalties.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "@openzeppelin/contracts/token/common/ERC2981.sol";
    /**
    * @title BasicRoyaltiesBase
    * @author Limit Break, Inc.
    * @dev Base functionality of an NFT mix-in contract implementing the most basic form of programmable royalties.
    */
    abstract contract BasicRoyaltiesBase is ERC2981 {
    event DefaultRoyaltySet(address indexed receiver, uint96 feeNumerator);
    event TokenRoyaltySet(uint256 indexed tokenId, address indexed receiver, uint96 feeNumerator);
    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual override {
    super._setDefaultRoyalty(receiver, feeNumerator);
    emit DefaultRoyaltySet(receiver, feeNumerator);
    }
    function _setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) internal virtual override {
    super._setTokenRoyalty(tokenId, receiver, feeNumerator);
    emit TokenRoyaltySet(tokenId, receiver, feeNumerator);
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 32 : ERC1155OpenZeppelin.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "../../access/OwnablePermissions.sol";
    import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
    abstract contract ERC1155OpenZeppelinBase is ERC1155 {
    }
    abstract contract ERC1155OpenZeppelin is ERC1155OpenZeppelinBase {
    constructor(string memory uri_) ERC1155(uri_) {}
    }
    abstract contract ERC1155OpenZeppelinInitializable is OwnablePermissions, ERC1155OpenZeppelinBase {
    error ERC1155OpenZeppelinInitializable__AlreadyInitializedERC1155();
    bool private _erc1155Initialized;
    function initializeERC1155(string memory uri_) public virtual {
    _requireCallerIsContractOwner();
    if(_erc1155Initialized) {
    revert ERC1155OpenZeppelinInitializable__AlreadyInitializedERC1155();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 32 : AutomaticValidatorTransferApproval.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "../access/OwnablePermissions.sol";
    /**
    * @title AutomaticValidatorTransferApproval
    * @author Limit Break, Inc.
    * @notice Base contract mix-in that provides boilerplate code giving the contract owner the
    * option to automatically approve a 721-C transfer validator implementation for transfers.
    */
    abstract contract AutomaticValidatorTransferApproval is OwnablePermissions {
    /// @dev Emitted when the automatic approval flag is modified by the creator.
    event AutomaticApprovalOfTransferValidatorSet(bool autoApproved);
    /// @dev If true, the collection's transfer validator is automatically approved to transfer holder's tokens.
    bool public autoApproveTransfersFromValidator;
    /**
    * @notice Sets if the transfer validator is automatically approved as an operator for all token owners.
    *
    * @dev Throws when the caller is not the contract owner.
    *
    * @param autoApprove If true, the collection's transfer validator will be automatically approved to
    * transfer holder's tokens.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 32 : CreatorTokenBase.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "../access/OwnablePermissions.sol";
    import "../interfaces/ICreatorToken.sol";
    import "../interfaces/ICreatorTokenLegacy.sol";
    import "../interfaces/ITransferValidator.sol";
    import "./TransferValidation.sol";
    import "../interfaces/ITransferValidatorSetTokenType.sol";
    /**
    * @title CreatorTokenBase
    * @author Limit Break, Inc.
    * @notice CreatorTokenBaseV3 is an abstract contract that provides basic functionality for managing token
    * transfer policies through an implementation of ICreatorTokenTransferValidator/ICreatorTokenTransferValidatorV2/ICreatorTokenTransferValidatorV3.
    * This contract is intended to be used as a base for creator-specific token contracts, enabling customizable transfer
    * restrictions and security policies.
    *
    * <h4>Features:</h4>
    * <ul>Ownable: This contract can have an owner who can set and update the transfer validator.</ul>
    * <ul>TransferValidation: Implements the basic token transfer validation interface.</ul>
    *
    * <h4>Benefits:</h4>
    * <ul>Provides a flexible and modular way to implement custom token transfer restrictions and security policies.</ul>
    * <ul>Allows creators to enforce policies such as account and codehash blacklists, whitelists, and graylists.</ul>
    * <ul>Can be easily integrated into other token contracts as a base contract.</ul>
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 32 : TransferValidation.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    import "@openzeppelin/contracts/utils/Context.sol";
    /**
    * @title TransferValidation
    * @author Limit Break, Inc.
    * @notice A mix-in that can be combined with ERC-721 contracts to provide more granular hooks.
    * Openzeppelin's ERC721 contract only provides hooks for before and after transfer. This allows
    * developers to validate or customize transfers within the context of a mint, a burn, or a transfer.
    */
    abstract contract TransferValidation is Context {
    /// @dev Thrown when the from and to address are both the zero address.
    error ShouldNotMintToBurnAddress();
    /*************************************************************************/
    /* Transfers Without Amounts */
    /*************************************************************************/
    /// @dev Inheriting contracts should call this function in the _beforeTokenTransfer function to get more granular hooks.
    function _validateBeforeTransfer(address from, address to, uint256 tokenId) internal virtual {
    bool fromZeroAddress = from == address(0);
    bool toZeroAddress = to == address(0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 32 : Constants.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    /// @dev Constant bytes32 value of 0x000...000
    bytes32 constant ZERO_BYTES32 = bytes32(0);
    /// @dev Constant value of 0
    uint256 constant ZERO = 0;
    /// @dev Constant value of 1
    uint256 constant ONE = 1;
    /// @dev Constant value representing an open order in storage
    uint8 constant ORDER_STATE_OPEN = 0;
    /// @dev Constant value representing a filled order in storage
    uint8 constant ORDER_STATE_FILLED = 1;
    /// @dev Constant value representing a cancelled order in storage
    uint8 constant ORDER_STATE_CANCELLED = 2;
    /// @dev Constant value representing the ERC721 token type for signatures and transfer hooks
    uint256 constant TOKEN_TYPE_ERC721 = 721;
    /// @dev Constant value representing the ERC1155 token type for signatures and transfer hooks
    uint256 constant TOKEN_TYPE_ERC1155 = 1155;
    /// @dev Constant value representing the ERC20 token type for signatures and transfer hooks
    uint256 constant TOKEN_TYPE_ERC20 = 20;
    /// @dev Constant value to mask the upper bits of a signature that uses a packed `vs` value to extract `s`
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 32 : Ownable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
    pragma solidity ^0.8.0;
    import "../utils/Context.sol";
    /**
    * @dev Contract module which provides a basic access control mechanism, where
    * there is an account (an owner) that can be granted exclusive access to
    * specific functions.
    *
    * By default, the owner account will be the one that deploys the contract. This
    * can later be changed with {transferOwnership}.
    *
    * This module is used through inheritance. It will make available the modifier
    * `onlyOwner`, which can be applied to your functions to restrict their use to
    * the owner.
    */
    abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 32 : IERC2981.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC2981.sol)
    pragma solidity ^0.8.0;
    import "../utils/introspection/IERC165.sol";
    /**
    * @dev Interface for the NFT Royalty Standard.
    *
    * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
    * support for royalty payments across all NFT marketplaces and ecosystem participants.
    *
    * _Available since v4.5._
    */
    interface IERC2981 is IERC165 {
    /**
    * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
    * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
    */
    function royaltyInfo(
    uint256 tokenId,
    uint256 salePrice
    ) external view returns (address receiver, uint256 royaltyAmount);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 32 : ReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Contract module that helps prevent reentrant calls to a function.
    *
    * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
    * available, which can be applied to functions to make sure there are no nested
    * (reentrant) calls to them.
    *
    * Note that because there is a single `nonReentrant` guard, functions marked as
    * `nonReentrant` may not call one another. This can be worked around by making
    * those functions `private`, and then adding `external` `nonReentrant` entry
    * points to them.
    *
    * TIP: If you would like to learn more about reentrancy and alternative ways
    * to protect against it, check out our blog post
    * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
    */
    abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 32 : ERC2981.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/common/ERC2981.sol)
    pragma solidity ^0.8.0;
    import "../../interfaces/IERC2981.sol";
    import "../../utils/introspection/ERC165.sol";
    /**
    * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
    *
    * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
    * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
    *
    * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
    * fee is specified in basis points by default.
    *
    * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
    * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
    * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
    *
    * _Available since v4.5._
    */
    abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
    address receiver;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 32 : ERC1155.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/ERC1155.sol)
    pragma solidity ^0.8.0;
    import "./IERC1155.sol";
    import "./IERC1155Receiver.sol";
    import "./extensions/IERC1155MetadataURI.sol";
    import "../../utils/Address.sol";
    import "../../utils/Context.sol";
    import "../../utils/introspection/ERC165.sol";
    /**
    * @dev Implementation of the basic standard multi-token.
    * See https://eips.ethereum.org/EIPS/eip-1155
    * Originally based on code by Enjin: https://github.com/enjin/erc-1155
    *
    * _Available since v3.1._
    */
    contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;
    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;
    // Mapping from account to operator approvals
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 32 : IERC1155MetadataURI.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
    pragma solidity ^0.8.0;
    import "../IERC1155.sol";
    /**
    * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
    * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
    *
    * _Available since v3.1._
    */
    interface IERC1155MetadataURI is IERC1155 {
    /**
    * @dev Returns the URI for token type `id`.
    *
    * If the `\{id\}` substring is present in the URI, it must be replaced by
    * clients with the actual token type ID.
    */
    function uri(uint256 id) external view returns (string memory);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 32 : IERC1155.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol)
    pragma solidity ^0.8.0;
    import "../../utils/introspection/IERC165.sol";
    /**
    * @dev Required interface of an ERC1155 compliant contract, as defined in the
    * https://eips.ethereum.org/EIPS/eip-1155[EIP].
    *
    * _Available since v3.1._
    */
    interface IERC1155 is IERC165 {
    /**
    * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
    */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    /**
    * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
    * transfers.
    */
    event TransferBatch(
    address indexed operator,
    address indexed from,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 32 : IERC1155Receiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
    pragma solidity ^0.8.0;
    import "../../utils/introspection/IERC165.sol";
    /**
    * @dev _Available since v3.1._
    */
    interface IERC1155Receiver is IERC165 {
    /**
    * @dev Handles the receipt of a single ERC1155 token type. This function is
    * called at the end of a `safeTransferFrom` after the balance has been updated.
    *
    * NOTE: To accept the transfer, this must return
    * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
    * (i.e. 0xf23a6e61, or its own function selector).
    *
    * @param operator The address which initiated the transfer (i.e. msg.sender)
    * @param from The address which previously owned the token
    * @param id The ID of the token being transferred
    * @param value The amount of tokens being transferred
    * @param data Additional data with no specified format
    * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 32 : Address.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
    pragma solidity ^0.8.1;
    /**
    * @dev Collection of functions related to the address type
    */
    library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    * - an externally-owned account
    * - a contract in construction
    * - an address where a contract will be created
    * - an address where a contract lived, but was destroyed
    *
    * Furthermore, `isContract` will also return true if the target contract within
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 24 of 32 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Provides information about the current execution context, including the
    * sender of the transaction and its data. While these are generally available
    * via msg.sender and msg.data, they should not be accessed in such a direct
    * manner, since when dealing with meta-transactions the account sending and
    * paying for execution may not be the actual sender (as far as an application
    * is concerned).
    *
    * This contract is only required for intermediate, library-like contracts.
    */
    abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
    return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 25 of 32 : ECDSA.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)
    pragma solidity ^0.8.0;
    import "../Strings.sol";
    /**
    * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
    *
    * These functions can be used to verify that a message was signed by the holder
    * of the private keys of a given address.
    */
    library ECDSA {
    enum RecoverError {
    NoError,
    InvalidSignature,
    InvalidSignatureLength,
    InvalidSignatureS,
    InvalidSignatureV // Deprecated in v4.8
    }
    function _throwError(RecoverError error) private pure {
    if (error == RecoverError.NoError) {
    return; // no error: do nothing
    } else if (error == RecoverError.InvalidSignature) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 26 of 32 : ERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
    pragma solidity ^0.8.0;
    import "./IERC165.sol";
    /**
    * @dev Implementation of the {IERC165} interface.
    *
    * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
    * for the additional interface id that will be supported. For example:
    *
    * ```solidity
    * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
    * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
    * }
    * ```
    *
    * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
    */
    abstract contract ERC165 is IERC165 {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 27 of 32 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Interface of the ERC165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[EIP].
    *
    * Implementers can declare support of contract interfaces, which can then be
    * queried by others ({ERC165Checker}).
    *
    * For an implementation, see {ERC165}.
    */
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 28 of 32 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Down, // Toward negative infinity
    Up, // Toward infinity
    Zero // Toward zero
    }
    /**
    * @dev Returns the largest of two numbers.
    */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
    return a > b ? a : b;
    }
    /**
    * @dev Returns the smallest of two numbers.
    */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 29 of 32 : SignedMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Standard signed math utilities missing in the Solidity language.
    */
    library SignedMath {
    /**
    * @dev Returns the largest of two signed numbers.
    */
    function max(int256 a, int256 b) internal pure returns (int256) {
    return a > b ? a : b;
    }
    /**
    * @dev Returns the smallest of two signed numbers.
    */
    function min(int256 a, int256 b) internal pure returns (int256) {
    return a < b ? a : b;
    }
    /**
    * @dev Returns the average of two signed numbers without overflow.
    * The result is rounded towards zero.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 30 of 32 : Strings.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)
    pragma solidity ^0.8.0;
    import "./math/Math.sol";
    import "./math/SignedMath.sol";
    /**
    * @dev String operations.
    */
    library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;
    /**
    * @dev Converts a `uint256` to its ASCII `string` decimal representation.
    */
    function toString(uint256 value) internal pure returns (string memory) {
    unchecked {
    uint256 length = Math.log10(value) + 1;
    string memory buffer = new string(length);
    uint256 ptr;
    /// @solidity memory-safe-assembly
    assembly {
    ptr := add(buffer, add(32, length))
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 31 of 32 : PhaseMint.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity 0.8.28;
    abstract contract PhaseMint {
    mapping(bytes32 => PhaseStats) public phasesStats; // Tracks stats for each phase
    /// @notice Stores the statistics of each phase, including total minted and per-user mints for each token ID.
    struct PhaseStats {
    uint256 mintedTotal; // Track total mints for the phase
    mapping(uint256 => uint256) mintedTotalByTokenId; // Track total mints per token ID
    mapping(address => mapping(uint256 => uint256)) mintedByUser; // Track mints per user and tokenId
    }
    /// @notice Checks if the phase constraints for minting are respected.
    /// @dev Ensures that the amount minted doesn't exceed phase or user limits.
    /// @param _to The address to mint the tokens to.
    /// @param _amount The number of tokens to mint.
    /// @param _tokenId The ID of the token to mint.
    /// @param _phaseID The identifier for the current minting phase.
    /// @param _maxPerTx The maximum number of tokens allowed per transaction.
    /// @param _maxPerUser The maximum number of tokens allowed per user for the phase.
    /// @param _maxPerPhase The total maximum number of tokens allowed for the phase.
    function _mintPhase(
    address _to,
    uint256 _amount,
    uint256 _tokenId,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 32 of 32 : Signature.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity 0.8.28;
    import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
    abstract contract Signature {
    using ECDSA for bytes32;
    address private signer; // Authorized signer
    mapping(bytes32 => bool) public nonces; // Tracks used nonces to prevent replay attacks
    function _setSigner(address _signer) internal {
    require(_signer != address(0), "Invalid signer address");
    signer = _signer;
    }
    /// @notice Verifies the cryptographic signature.
    /// @param data The hash of the data to verify.
    /// @param signature The signature to verify.
    /// @return True if the signature is valid, false otherwise.
    function _verifySignature(
    bytes32 data,
    bytes memory signature
    ) internal view returns (bool) {
    return data.toEthSignedMessageHash().recover(signature) == signer;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {
    "optimizer": {
    "enabled": true,
    "runs": 200
    },
    "evmVersion": "paris",
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    "abi"
    ]
    }
    },
    "libraries": {}
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"royaltyReceiver_","type":"address"},{"internalType":"uint96","name":"royaltyFeeNumerator_","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CreatorTokenBase__InvalidTransferValidatorContract","type":"error"},{"inputs":[],"name":"ShouldNotMintToBurnAddress","type":"error"},{"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":false,"internalType":"bool","name":"autoApproved","type":"bool"}],"name":"AutomaticApprovalOfTransferValidatorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"DefaultRoyaltySet","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":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"TokenRoyaltySet","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":"address","name":"oldValidator","type":"address"},{"indexed":false,"internalType":"address","name":"newValidator","type":"address"}],"name":"TransferValidatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"DEFAULT_TRANSFER_VALIDATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"Tokens","outputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum CodeHavoc.Rarity","name":"_rarity","type":"uint8"},{"internalType":"uint8","name":"_id","type":"uint8"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoApproveTransfersFromValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"evolution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"bytes32","name":"_nonce","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"evolve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"evolveEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferValidationFunction","outputs":[{"internalType":"bytes4","name":"functionSignature","type":"bytes4"},{"internalType":"bool","name":"isViewFunction","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTransferValidator","outputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isApproved","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nonce","type":"bytes32"}],"name":"isValidNonce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_phaseID","type":"bytes32"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_maxPerTx","type":"uint256"},{"internalType":"uint256","name":"_maxPerUser","type":"uint256"},{"internalType":"uint256","name":"_maxPerPhase","type":"uint256"},{"internalType":"uint256","name":"_maxPerPhasePerTokenId","type":"uint256"},{"internalType":"bytes32","name":"_nonce","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32","name":"_phaseID","type":"bytes32"}],"name":"mintedByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_phaseID","type":"bytes32"}],"name":"mintedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32","name":"_phaseID","type":"bytes32"}],"name":"mintedTotalByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nonces","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"phasesStats","outputs":[{"internalType":"uint256","name":"mintedTotal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_phaseID","type":"bytes32"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_maxPerTx","type":"uint256"},{"internalType":"uint256","name":"_maxPerUser","type":"uint256"},{"internalType":"uint256","name":"_maxPerPhase","type":"uint256"},{"internalType":"uint256","name":"_maxPerPhasePerTokenId","type":"uint256"},{"internalType":"bytes32","name":"_nonce","type":"bytes32"}],"name":"recoverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"bytes32","name":"_nonce","type":"bytes32"}],"name":"recoverAddressToEvolve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"autoApprove","type":"bool"}],"name":"setAutomaticApprovalOfTransfersFromValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_evolutionId","type":"uint256"}],"name":"setEvolution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_evolveEnabled","type":"bool"}],"name":"setEvolveEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum CodeHavoc.Rarity","name":"_rarity","type":"uint8"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setRarityMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSaleActive","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum CodeHavoc.Rarity","name":"_rarity","type":"uint8"},{"internalType":"uint8","name":"_id","type":"uint8"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setTokenMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setTokenRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_transferEnabled","type":"bool"}],"name":"setTransferEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"transferValidator_","type":"address"}],"name":"setTransferValidator","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

    608060405234801561001057600080fd5b5060405161581738038061581783398101604081905261002f91610a8a565b818160405180602001604052806000815250806100518161050c60201b60201c565b5061005c905061051c565b61007973721c002b0059009a671d00ad1700c9748146cd1b61056b565b61008382826105ec565b5061008f905033610641565b6001600a5561009d33610693565b604080518082019091526009815268436f64654861766f6360b81b6020820152600b906100ca9082610b7d565b5060408051808201909152600381526221a42b60e91b6020820152600c906100f29082610b7d565b506040518060600160405280602381526020016157f4602391396014906101199082610b7d565b50601380546301000000600160b81b03191663010000006001600160a01b038616021790556101478361070e565b6013805461ffff1916600117905561138860155560006016556040805180820190915260098152600d60208201526101839060179060026109b3565b5060408051606081018252600181526002602082015260039181018290526101ae91601891906109b3565b506040805160608101825260088152600a60208201526011918101919091526101db9060199060036109b3565b5060408051608081018252600480825260066020830152600c92820192909252600e606082015261020f91601a91906109b3565b506040805160608101825260078152600b602082015260109181019190915261023c90601b9060036109b3565b506040805180820190915260058152600f602082015261026090601c9060026109b3565b506102e26000601c8054806020026020016040519081016040528092919081815260200182805480156102d057602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116102a15790505b5050505050600061078660201b60201c565b6103426001601b8054806020026020016040519081016040528092919081815260200182805480156102d0576000918252602091829020805460ff1684529082028301929091600191018084116102a15750600094505061078692505050565b6103a26002601a8054806020026020016040519081016040528092919081815260200182805480156102d0576000918252602091829020805460ff1684529082028301929091600191018084116102a15750600094505061078692505050565b610402600360198054806020026020016040519081016040528092919081815260200182805480156102d0576000918252602091829020805460ff1684529082028301929091600191018084116102a15750600094505061078692505050565b6104836004601880548060200260200160405190810160405280929190818152602001828054801561047157602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116104425790505b5050505050608561078660201b60201c565b610504600560178054806020026020016040519081016040528092919081815260200182805480156104f257602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116104c35790505b5050505050606461078660201b60201c565b505050610c94565b60026105188282610b7d565b5050565b604080516000815273721c002b0059009a671d00ad1700c9748146cd1b60208201527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1565b6001600160a01b038116156105e957803b8015610518576040805163fb2de5d760e01b8152306004820152610483602482015290516001600160a01b0384169163fb2de5d791604480830192600092919082900301818387803b1580156105d157600080fd5b505af19250505080156105e2575060015b1561051857505b50565b6105f6828261085a565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61069b610957565b6001600160a01b0381166107055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6105e981610641565b6001600160a01b0381166107645760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964207369676e657220616464726573730000000000000000000060448201526064016106fc565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61078e610957565b60005b82518160ff16101561085457600d60008560058111156107b3576107b3610c3b565b60ff1660ff1681526020019081526020016000206040518060600160405280858460ff16815181106107e7576107e7610c51565b60209081029190910181015160ff908116835260008383018190526040938401889052855460018082018855968252908390208551600390920201805460ff191691909216178155908301519381019390935501516002909101558061084c81610c67565b915050610791565b50505050565b6127106001600160601b03821611156108c85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016106fc565b6001600160a01b03821661091e5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016106fc565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600555565b6007546001600160a01b031633146109b15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fc565b565b82805482825590600052602060002090601f01602090048101928215610a495791602002820160005b83821115610a1a57835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026109dc565b8015610a475782816101000a81549060ff0219169055600101602081600001049283019260010302610a1a565b505b50610a55929150610a59565b5090565b5b80821115610a555760008155600101610a5a565b80516001600160a01b0381168114610a8557600080fd5b919050565b600080600060608486031215610a9f57600080fd5b610aa884610a6e565b9250610ab660208501610a6e565b60408501519092506001600160601b0381168114610ad357600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610b0857607f821691505b602082108103610b2857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b7857806000526020600020601f840160051c81016020851015610b555750805b601f840160051c820191505b81811015610b755760008155600101610b61565b50505b505050565b81516001600160401b03811115610b9657610b96610ade565b610baa81610ba48454610af4565b84610b2e565b6020601f821160018114610bde5760008315610bc65750848201515b600019600385901b1c1916600184901b178455610b75565b600084815260208120601f198516915b82811015610c0e5787850151825560209485019460019092019101610bee565b5084821015610c2c5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103610c8b57634e487b7160e01b600052601160045260246000fd5b60010192915050565b614b5180610ca36000396000f3fe60806040526004361061034f5760003560e01c8063715018a6116101c6578063a22cb465116100f7578063e548753511610095578063f231c08d1161006f578063f231c08d14610a7a578063f242432a14610a9a578063f2fde38b14610aba578063f5d5a92a14610ada57600080fd5b8063e5487535146109e3578063e80e98fa14610a0a578063e985e9c514610a5a57600080fd5b8063ba0f2637116100d1578063ba0f26371461094f578063c2ca0ac514610980578063c6089b51146109a0578063d5abeb01146109cd57600080fd5b8063a22cb465146108ef578063a9fc664e1461090f578063b9a389bf1461092f57600080fd5b80638f902655116101645780639e05d2401161013e5780639e05d240146108525780639e317f12146108725780639fe9f623146108a2578063a1ccfca8146108c257600080fd5b80638f9026551461080a57806395d89b411461081d57806397b507a51461083257600080fd5b806382ab3867116101a057806382ab386714610799578063841718a6146107ac5780638da5cb5b146107cc5780638f0b9c6f146107ea57600080fd5b8063715018a61461072a5780637dc0bf3f1461073f578063814623501461076c57600080fd5b80633b413d99116102a0578063564566a81161023e5780636c0360eb116102185780636c0360eb146106b55780636c19e783146106ca5780636ea67222146106ea5780636f8b44b01461070a57600080fd5b8063564566a81461065a5780635944c753146106745780636221d13c1461069457600080fd5b80634cd412d51161027a5780634cd412d5146105c15780634e1273f4146105e057806355c0aabf1461060d57806355f804b31461063a57600080fd5b80633b413d991461056c5780633ccfd60b1461058c5780634b9c5e88146105a157600080fd5b80630d705df61161030d578063184ff48a116102e7578063184ff48a146104ae5780632a55205a146104ce5780632eb2c2d61461050d57806335d776be1461052d57600080fd5b80630d705df6146104505780630e89341c1461047857806318160ddd1461049857600080fd5b8062fdd58e14610354578063014635461461038757806301ffc9a7146103c757806304634d8d146103f757806306fdde0314610419578063098144d41461043b575b600080fd5b34801561036057600080fd5b5061037461036f366004613bcb565b610b15565b6040519081526020015b60405180910390f35b34801561039357600080fd5b506103af73721c002b0059009a671d00ad1700c9748146cd1b81565b6040516001600160a01b03909116815260200161037e565b3480156103d357600080fd5b506103e76103e2366004613c0b565b610bae565b604051901515815260200161037e565b34801561040357600080fd5b50610417610412366004613c3f565b610bd3565b005b34801561042557600080fd5b5061042e610be9565b60405161037e9190613cc2565b34801561044757600080fd5b506103af610c77565b34801561045c57600080fd5b5060408051631854b24160e01b8152600060208201520161037e565b34801561048457600080fd5b5061042e610493366004613cd5565b610cb1565b3480156104a457600080fd5b5061037460165481565b3480156104ba57600080fd5b506104176104c9366004613cfe565b610ce5565b3480156104da57600080fd5b506104ee6104e9366004613d19565b610d09565b604080516001600160a01b03909316835260208301919091520161037e565b34801561051957600080fd5b50610417610528366004613e96565b610db7565b34801561053957600080fd5b5061054d610548366004613f5a565b610fd5565b6040805160ff909416845260208401929092529082015260600161037e565b34801561057857600080fd5b506013546103e79062010000900460ff1681565b34801561059857600080fd5b5061041761101b565b3480156105ad57600080fd5b506104176105bc366004613d19565b611052565b3480156105cd57600080fd5b506013546103e790610100900460ff1681565b3480156105ec57600080fd5b506106006105fb366004613f76565b61106c565b60405161037e9190614085565b34801561061957600080fd5b50610374610628366004614098565b60116020526000908152604090205481565b34801561064657600080fd5b506104176106553660046140b3565b61118d565b34801561066657600080fd5b506013546103e79060ff1681565b34801561068057600080fd5b5061041761068f366004614103565b6111a1565b3480156106a057600080fd5b506003546103e790600160a81b900460ff1681565b3480156106c157600080fd5b5061042e6111b9565b3480156106d657600080fd5b506104176106e5366004614098565b6111c6565b3480156106f657600080fd5b5061041761070536600461414e565b6111fa565b34801561071657600080fd5b50610417610725366004613cd5565b6112dd565b34801561073657600080fd5b506104176112ea565b34801561074b57600080fd5b5061037461075a366004613cd5565b60106020526000908152604090205481565b34801561077857600080fd5b50610374610787366004613cd5565b60126020526000908152604090205481565b6104176107a7366004614178565b6112fe565b3480156107b857600080fd5b506104176107c7366004613cfe565b611681565b3480156107d857600080fd5b506007546001600160a01b03166103af565b3480156107f657600080fd5b506103af61080536600461421f565b61169c565b61041761081836600461428e565b611713565b34801561082957600080fd5b5061042e611964565b34801561083e57600080fd5b5061041761084d3660046142d8565b611971565b34801561085e57600080fd5b5061041761086d366004613cfe565b611a16565b34801561087e57600080fd5b506103e761088d366004613cd5565b60096020526000908152604090205460ff1681565b3480156108ae57600080fd5b506104176108bd366004613cfe565b611a76565b3480156108ce57600080fd5b506103746108dd366004613cd5565b60046020526000908152604090205481565b3480156108fb57600080fd5b5061041761090a3660046142f4565b611a98565b34801561091b57600080fd5b5061041761092a366004614098565b611ac9565b34801561093b57600080fd5b5061041761094a36600461431e565b611b82565b34801561095b57600080fd5b506103e761096a366004613cd5565b60009081526009602052604090205460ff161590565b34801561098c57600080fd5b5061041761099b366004613cd5565b611be3565b3480156109ac57600080fd5b506103746109bb366004613cd5565b60009081526004602052604090205490565b3480156109d957600080fd5b5061037460155481565b3480156109ef57600080fd5b506013546103af90630100000090046001600160a01b031681565b348015610a1657600080fd5b50610374610a2536600461435b565b60008181526004602090815260408083206001600160a01b038716845260020182528083208584529091529020549392505050565b348015610a6657600080fd5b506103e7610a7536600461438e565b611e77565b348015610a8657600080fd5b506103af610a953660046143b8565b611edb565b348015610aa657600080fd5b50610417610ab5366004614456565b611f7d565b348015610ac657600080fd5b50610417610ad5366004614098565b61214d565b348015610ae657600080fd5b50610374610af5366004613d19565b600090815260046020908152604080832093835260019093019052205490565b60006001600160a01b038316610b855760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216632483248360e11b1480610ba85750610ba8826121c3565b610bdb6121e8565b610be58282612242565b5050565b600b8054610bf6906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610c22906144ae565b8015610c6f5780601f10610c4457610100808354040283529160200191610c6f565b820191906000526020600020905b815481529060010190602001808311610c5257829003601f168201915b505050505081565b60035461010090046001600160a01b031680610cae5760035460ff16610cae575073721c002b0059009a671d00ad1700c9748146cd1b5b90565b60606014610cbe83612297565b604051602001610ccf9291906144e2565b6040516020818303038152906040529050919050565b610ced6121e8565b60138054911515620100000262ff000019909216919091179055565b60008281526006602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610d7e5750604080518082019091526005546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610d9d906001600160601b03168761458e565b610da791906145bb565b91519350909150505b9250929050565b601354610100900460ff16610dde5760405162461bcd60e51b8152600401610b7c906145cf565b336001600160a01b0386161480610dfa5750610dfa8533611e77565b610e165760405162461bcd60e51b8152600401610b7c90614606565b60005b8351811015610fc057838181518110610e3457610e3461464f565b6020026020010151600003610fb85760005b838181518110610e5857610e5861464f565b6020026020010151811015610fb6576001600160a01b0387166000908152600f602052604081208054610e8d90600190614665565b81548110610e9d57610e9d61464f565b906000526020600020018054610eb2906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610ede906144ae565b8015610f2b5780601f10610f0057610100808354040283529160200191610f2b565b820191906000526020600020905b815481529060010190602001808311610f0e57829003601f168201915b505050506001600160a01b038a166000908152600f60205260409020805492935091905080610f5c57610f5c614678565b600190038181906000526020600020016000610f789190613b61565b90556001600160a01b0387166000908152600f6020908152604082208054600181018255908352912001610fac82826146d5565b5050600101610e46565b505b600101610e19565b50610fce8585858585612329565b5050505050565b600d6020528160005260406000208181548110610ff157600080fd5b600091825260209091206003909102018054600182015460029092015460ff909116935090915083565b6110236121e8565b60405133904780156108fc02916000818181858888f1935050505015801561104f573d6000803e3d6000fd5b50565b61105a6121e8565b60009182526012602052604090912055565b606081518351146110d15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610b7c565b600083516001600160401b038111156110ec576110ec613d3b565b604051908082528060200260200182016040528015611115578160200160208202803683370190505b50905060005b8451811015611185576111608582815181106111395761113961464f565b60200260200101518583815181106111535761115361464f565b6020026020010151610b15565b8282815181106111725761117261464f565b602090810291909101015260010161111b565b509392505050565b6111956121e8565b6014610be582826146d5565b6111a96121e8565b6111b483838361251b565b505050565b60148054610bf6906144ae565b6111ce6121e8565b601380546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6112026121e8565b600d600083600581111561121857611218614793565b60ff1660ff16815260200190815260200160002060405180606001604052808360ff16815260200160008152602001600d600086600581111561125d5761125d614793565b60ff1660ff1681526020019081526020016000206000815481106112835761128361464f565b6000918252602080832060039283020160029081015490945285546001808201885596845292819020855193909202909101805460ff191660ff909316929092178255830151938101939093556040909101519101555050565b6112e56121e8565b601555565b6112f26121e8565b6112fc6000612575565b565b33321461131d5760405162461bcd60e51b8152600401610b7c906147a9565b60135460ff166113645760405162461bcd60e51b815260206004820152601260248201527153616c65206973206e6f742061637469766560701b6044820152606401610b7c565b600089116113b45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b7c565b89156113f55760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081d1bdad95b88125160821b6044820152606401610b7c565b60155460008b815260106020526040902054611412908b906147e0565b11156114605760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d617820737570706c7920666f7220746f6b656e204944006044820152606401610b7c565b61146a878a61458e565b3410156114b95760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742076616c756520746f206d696e740000000000006044820152606401610b7c565b60008281526009602052604090205460ff16156115085760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610b7c565b6000828152600960205260409020805460ff191660011790556013546001600160a01b03630100000090910416611548828d8d8d8d8d8d8d8d8d8d611edb565b6001600160a01b0316146115925760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b7c565b6115a28b8a8c8b8a8a8a8a6125c7565b60005b89811015611633576001601660008282546115c091906147e0565b90915550506001600160a01b038c166000908152600e602052604081208054600192906115ee9084906147e0565b9091555050336000908152600f6020526040902061160a6127f9565b8154600181018355600092835260209092209091019061162a90826146d5565b506001016115a5565b5060008a815260106020526040812080548b92906116529084906147e0565b925050819055506116748b8b8b6040518060200160405280600081525061287b565b5050505050505050505050565b6116896121e8565b6013805460ff1916911515919091179055565b6040516001600160601b0319606087901b16602082015260348101859052605481018490526074810183905260948101829052600090819060b40160405160208183030381529060405280519060200120905060006116fa826129ad565b9050611706818a612a00565b9998505050505050505050565b3332146117325760405162461bcd60e51b8152600401610b7c906147a9565b8361173d3387610b15565b101561175b5760405162461bcd60e51b8152600401610b7c906147f3565b60008581526012602052604081205490036117ae5760405162461bcd60e51b8152602060048201526013602482015272546f6b656e2063616e6e6f742065766f6c766560681b6044820152606401610b7c565b60135462010000900460ff166117fe5760405162461bcd60e51b8152602060048201526015602482015274115d9bdb1d99481a5cc81b9bdd08195b98589b1959605a1b6044820152606401610b7c565b60008281526009602052604090205460ff161561184d5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610b7c565b6000828152600960205260409020805460ff191660011790556013546001600160a01b0363010000009091041661188882338888888861169c565b6001600160a01b0316146118d25760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b7c565b6118dc838561458e565b34101561192b5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742076616c756520746f2065766f6c7665000000006044820152606401610b7c565b611936338686612a1c565b610fce336012600088815260200190815260200160002054866040518060200160405280600081525061287b565b600c8054610bf6906144ae565b6119796121e8565b60005b600d600084600581111561199257611992614793565b60ff908116825260208201929092526040016000205490821610156111b45781600d60008560058111156119c8576119c8614793565b60ff1660ff1681526020019081526020016000208260ff16815481106119f0576119f061464f565b600091825260209091206002600390920201015580611a0e8161482a565b91505061197c565b611a1e612bb6565b60038054821515600160a81b0260ff60a81b199091161790556040517f6787c7f9a80aa0f5ceddab2c54f1f5169c0b88e75dd5e19d5e858a64144c7dbc90611a6b90831515815260200190565b60405180910390a150565b611a7e6121e8565b601380549115156101000261ff0019909216919091179055565b601354610100900460ff16611abf5760405162461bcd60e51b8152600401610b7c906145cf565b610be58282612bbe565b611ad1612bb6565b6001600160a01b038116803b15159015801590611aec575080155b15611b0a576040516332483afb60e01b815260040160405180910390fd5b7fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac611b33610c77565b604080516001600160a01b03928316815291851660208301520160405180910390a1600380546001600160a01b038416610100026001600160a81b0319909116176001179055610be582612bc9565b611b8a6121e8565b80600d6000856005811115611ba157611ba1614793565b60ff1660ff1681526020019081526020016000208360ff1681548110611bc957611bc961464f565b906000526020600020906003020160020181905550505050565b333214611c025760405162461bcd60e51b8152600401610b7c906147a9565b336000908152600f6020526040902054811115611c315760405162461bcd60e51b8152600401610b7c906147f3565b80611c3d336000610b15565b1015611c5b5760405162461bcd60e51b8152600401610b7c906147f3565b60005b81811015611e6a57336000908152600f602052604081208054611c8390600190614665565b81548110611c9357611c9361464f565b906000526020600020018054611ca8906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd4906144ae565b8015611d215780601f10611cf657610100808354040283529160200191611d21565b820191906000526020600020905b815481529060010190602001808311611d0457829003601f168201915b5050336000908152600f602052604090208054949550939250829150611d4b905057611d4b614678565b600190038181906000526020600020016000611d679190613b61565b90556000611d7482612c49565b9050600080611d8283612cc3565b915091506001600d60008460ff1660ff1681526020019081526020016000208260ff1681548110611db557611db561464f565b90600052602060002090600302016001016000828254611dd591906147e0565b9091555050336000908152600e60205260408120805460019290611dfa9084906147e0565b909155505060ff8083166000908152600d602052604090208054611e5a92339291908516908110611e2d57611e2d61464f565b6000918252602080832060039092029091015460408051928301905291815260ff9091169060019061287b565b505060019092019150611c5e9050565b5061104f33600083612a1c565b6001600160a01b0382811660009081526001602090815260408083209385168352929052205460ff1680610ba857600354600160a81b900460ff1615610ba857611ebf610c77565b6001600160a01b0316826001600160a01b031614905092915050565b6040516001600160601b031960608c901b166020820152603481018a905260548101899052607481018890526094810187905260b4810186905260d4810185905260f48101849052610114810183905261013481018290526000908190610154016040516020818303038152906040528051906020012090506000611f5f826129ad565b9050611f6b818f612a00565b9e9d5050505050505050505050505050565b601354610100900460ff16611fa45760405162461bcd60e51b8152600401610b7c906145cf565b336001600160a01b0386161480611fc05750611fc08533611e77565b611fdc5760405162461bcd60e51b8152600401610b7c90614606565b826000036121405760005b8281101561213e576001600160a01b0386166000908152600f60205260408120805461201590600190614665565b815481106120255761202561464f565b90600052602060002001805461203a906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054612066906144ae565b80156120b35780601f10612088576101008083540402835291602001916120b3565b820191906000526020600020905b81548152906001019060200180831161209657829003601f168201915b505050506001600160a01b0389166000908152600f602052604090208054929350919050806120e4576120e4614678565b6001900381819060005260206000200160006121009190613b61565b90556001600160a01b0386166000908152600f602090815260408220805460018101825590835291200161213482826146d5565b5050600101611fe7565b505b610fce8585858585612d4f565b6121556121e8565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7c565b61104f81612575565b60006001600160e01b0319821663152a902d60e11b1480610ba85750610ba882612e95565b6007546001600160a01b031633146112fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b7c565b61224c8282612ed5565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b606060006122a483612f8f565b60010190506000816001600160401b038111156122c3576122c3613d3b565b6040519080825280601f01601f1916602001820160405280156122ed576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f757509392505050565b815183511461238b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610b7c565b6001600160a01b0384166123b15760405162461bcd60e51b8152600401610b7c90614849565b336123c0818787878787613067565b60005b845181101561249f5760008582815181106123e0576123e061464f565b6020026020010151905060008583815181106123fe576123fe61464f565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561244e5760405162461bcd60e51b8152600401610b7c9061488e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061248b9084906147e0565b9091555050600190930192506123c3915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124ef9291906148d8565b60405180910390a46125058187878787876130c4565b612513818787878787613117565b505050505050565b612526838383613272565b6040516001600160601b03821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c906020015b60405180910390a3505050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000858152600460205260409020841561262057878510156126205760405162461bcd60e51b815260206004820152601260248201527108af0c6cacac8e640dac2f040e0cae440e8f60731b6044820152606401610b7c565b831561269e576001600160a01b038916600090815260028201602090815260408083208a84529091529020548490612659908a906147e0565b111561269e5760405162461bcd60e51b815260206004820152601460248201527322bc31b2b2b2399036b0bc103832b9103ab9b2b960611b6044820152606401610b7c565b82156126f957805483906126b3908a906147e0565b11156126f95760405162461bcd60e51b815260206004820152601560248201527445786365656473206d61782070657220706861736560581b6044820152606401610b7c565b8115612776576000878152600182016020526040902054829061271d908a906147e0565b11156127765760405162461bcd60e51b815260206004820152602260248201527f45786365656473206d6178207065722070686173652070657220746f6b656e20604482015261125160f21b6064820152608401610b7c565b8781600001600082825461278a91906147e0565b90915550506001600160a01b038916600090815260028201602090815260408083208a8452909152812080548a92906127c49084906147e0565b90915550506000878152600182016020526040812080548a92906127e99084906147e0565b9091555050505050505050505050565b60604244612808600143614665565b336000818152600e60209081526040918290205460165492516128679796954094919392019586526020860194909452604085019290925260608085019190915260808401919091521b6001600160601b03191660a082015260b40190565b604051602081830303815290604052905090565b6001600160a01b0384166128db5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610b7c565b3360006128e78561333d565b905060006128f48561333d565b905061290583600089858589613067565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906129359084906147e0565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612995836000898585896130c4565b6129a483600089898989613388565b50505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6000806000612a0f8585613443565b9150915061118581613485565b6001600160a01b038316612a7e5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610b7c565b336000612a8a8461333d565b90506000612a978461333d565b9050612ab783876000858560405180602001604052806000815250613067565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015612b345760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610b7c565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46129a4848860008686604051806020016040528060008152506130c4565b6112fc6121e8565b610be53383836135cf565b6001600160a01b0381161561104f57803b8015610be5576040805163fb2de5d760e01b8152306004820152610483602482015290516001600160a01b0384169163fb2de5d791604480830192600092919082900301818387803b158015612c2f57600080fd5b505af1925050508015612c40575060015b15610be5575050565b805160208201206000908190612c6190606490614906565b90506003811015612c765760055b9392505050565b6008811015612c86576004612c6f565b6014811015612c96576003612c6f565b6028811015612ca6576002612c6f565b6041811015612cb6576001612c6f565b6000612c6f565b50919050565b600080600080612cd2856136a7565b915091506000815144600143612ce89190614665565b40604051602001612d03929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c612d269190614906565b905082828281518110612d3b57612d3b61464f565b602002602001015194509450505050915091565b6001600160a01b038416612d755760405162461bcd60e51b8152600401610b7c90614849565b336000612d818561333d565b90506000612d8e8561333d565b9050612d9e838989858589613067565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015612ddf5760405162461bcd60e51b8152600401610b7c9061488e565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612e1c9084906147e0565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612e7c848a8a86868a6130c4565b612e8a848a8a8a8a8a613388565b505050505050505050565b60006001600160e01b03198216632b435fdb60e21b1480612ec657506001600160e01b0319821663503e914d60e11b145b80610ba85750610ba882613909565b6127106001600160601b0382161115612f005760405162461bcd60e51b8152600401610b7c9061491a565b6001600160a01b038216612f565760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b7c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600555565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612fce5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612ffa576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061301857662386f26fc10000830492506010015b6305f5e1008310613030576305f5e100830492506008015b612710831061304457612710830492506004015b60648310613056576064830492506002015b600a8310610ba85760010192915050565b825160005b818110156130ba576130b2878787848151811061308b5761308b61464f565b60200260200101518785815181106130a5576130a561464f565b6020026020010151613959565b60010161306c565b5050505050505050565b825160005b818110156130ba5761310f87878784815181106130e8576130e861464f565b60200260200101518785815181106131025761310261464f565b60200260200101516139b0565b6001016130c9565b6001600160a01b0384163b156125135760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061315b9089908990889088908890600401614964565b6020604051808303816000875af1925050508015613196575060408051601f3d908101601f19168201909252613193918101906149c2565b60015b613242576131a26149df565b806308c379a0036131db57506131b66149fa565b806131c157506131dd565b8060405162461bcd60e51b8152600401610b7c9190613cc2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610b7c565b6001600160e01b0319811663bc197c8160e01b146129a45760405162461bcd60e51b8152600401610b7c90614a75565b6127106001600160601b038216111561329d5760405162461bcd60e51b8152600401610b7c9061491a565b6001600160a01b0382166132f35760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610b7c565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600690529190942093519051909116600160a01b029116179055565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106133775761337761464f565b602090810291909101015292915050565b6001600160a01b0384163b156125135760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906133cc9089908990889088908890600401614abd565b6020604051808303816000875af1925050508015613407575060408051601f3d908101601f19168201909252613404918101906149c2565b60015b613413576131a26149df565b6001600160e01b0319811663f23a6e6160e01b146129a45760405162461bcd60e51b8152600401610b7c90614a75565b60008082516041036134795760208301516040840151606085015160001a61346d878285856139f7565b94509450505050610db0565b50600090506002610db0565b600081600481111561349957613499614793565b036134a15750565b60018160048111156134b5576134b5614793565b036135025760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b7c565b600281600481111561351657613516614793565b036135635760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b7c565b600381600481111561357757613577614793565b0361104f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b7c565b816001600160a01b0316836001600160a01b0316036136425760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610b7c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101612568565b60ff81166000908152600d602052604081205460609082906001600160401b038111156136d6576136d6613d3b565b6040519080825280602002602001820160405280156136ff578160200160208202803683370190505b5060ff85166000908152600d60205260408120919250805b825460ff8216101561382e5760ff8088166000908152600d6020526040902080549091831690811061374b5761374b61464f565b906000526020600020906003020160020154600014806137e1575060ff8088166000908152600d6020526040902080549091831690811061378e5761378e61464f565b906000526020600020906003020160020154600d60008960ff1660ff1681526020019081526020016000208260ff16815481106137cd576137cd61464f565b906000526020600020906003020160010154105b1561381c5780848360ff16815181106137fc576137fc61464f565b60ff90921660209283029190910190910152816138188161482a565b9250505b806138268161482a565b915050613717565b5060008160ff166001600160401b0381111561384c5761384c613d3b565b604051908082528060200260200182016040528015613875578160200160208202803683370190505b50905060005b8260ff168160ff1610156138d557848160ff168151811061389e5761389e61464f565b6020026020010151828260ff16815181106138bb576138bb61464f565b60ff9092166020928302919091019091015260010161387b565b5080516000036138ff576138f26138ed886001614b02565b6136a7565b9550955050505050915091565b9596945050505050565b60006001600160e01b03198216636cdb3d1360e11b148061393a57506001600160e01b031982166303a24d0760e21b145b80610ba857506301ffc9a760e01b6001600160e01b0319831614610ba8565b6001600160a01b0384811615908416158180156139735750805b1561399157604051635cbd944160e01b815260040160405180910390fd5b811561399d575b612513565b8061399857612513338787878734613abb565b6001600160a01b0384811615908416158180156139ca5750805b156139e857604051635cbd944160e01b815260040160405180910390fd5b81613998578061399857612513565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613a2e5750600090506003613ab2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613a82573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613aab57600060019250925050613ab2565b9150600090505b94509492505050565b6000613ac5610c77565b90506001600160a01b038116156129a4576001600160a01b0381163303613aec5750612513565b604051631854b24160e01b81526001600160a01b038881166004830152878116602483015286811660448301526064820186905260848201859052821690631854b2419060a401600060405180830381600087803b158015613b4d57600080fd5b505af1158015611674573d6000803e3d6000fd5b508054613b6d906144ae565b6000825580601f10613b7d575050565b601f01602090049060005260206000209081019061104f91905b80821115613bab5760008155600101613b97565b5090565b80356001600160a01b0381168114613bc657600080fd5b919050565b60008060408385031215613bde57600080fd5b613be783613baf565b946020939093013593505050565b6001600160e01b03198116811461104f57600080fd5b600060208284031215613c1d57600080fd5b8135612c6f81613bf5565b80356001600160601b0381168114613bc657600080fd5b60008060408385031215613c5257600080fd5b613c5b83613baf565b9150613c6960208401613c28565b90509250929050565b60005b83811015613c8d578181015183820152602001613c75565b50506000910152565b60008151808452613cae816020860160208601613c72565b601f01601f19169290920160200192915050565b602081526000612c6f6020830184613c96565b600060208284031215613ce757600080fd5b5035919050565b80358015158114613bc657600080fd5b600060208284031215613d1057600080fd5b612c6f82613cee565b60008060408385031215613d2c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613d7657613d76613d3b565b6040525050565b60006001600160401b03821115613d9657613d96613d3b565b5060051b60200190565b600082601f830112613db157600080fd5b8135613dbc81613d7d565b604051613dc98282613d51565b80915082815260208101915060208360051b860101925085831115613ded57600080fd5b602085015b83811015613e0a578035835260209283019201613df2565b5095945050505050565b6000806001600160401b03841115613e2e57613e2e613d3b565b50604051601f8401601f191660200190613e488282613d51565b809250848152858585011115613e5d57600080fd5b8484602083013760006020868301015250509392505050565b600082601f830112613e8757600080fd5b612c6f83833560208501613e14565b600080600080600060a08688031215613eae57600080fd5b613eb786613baf565b9450613ec560208701613baf565b935060408601356001600160401b03811115613ee057600080fd5b613eec88828901613da0565b93505060608601356001600160401b03811115613f0857600080fd5b613f1488828901613da0565b92505060808601356001600160401b03811115613f3057600080fd5b613f3c88828901613e76565b9150509295509295909350565b803560ff81168114613bc657600080fd5b60008060408385031215613f6d57600080fd5b613be783613f49565b60008060408385031215613f8957600080fd5b82356001600160401b03811115613f9f57600080fd5b8301601f81018513613fb057600080fd5b8035613fbb81613d7d565b604051613fc88282613d51565b80915082815260208101915060208360051b850101925087831115613fec57600080fd5b6020840193505b828410156140155761400484613baf565b825260209384019390910190613ff3565b945050505060208301356001600160401b0381111561403357600080fd5b61403f85828601613da0565b9150509250929050565b600081518084526020840193506020830160005b8281101561407b57815186526020958601959091019060010161405d565b5093949350505050565b602081526000612c6f6020830184614049565b6000602082840312156140aa57600080fd5b612c6f82613baf565b6000602082840312156140c557600080fd5b81356001600160401b038111156140db57600080fd5b8201601f810184136140ec57600080fd5b6140fb84823560208401613e14565b949350505050565b60008060006060848603121561411857600080fd5b8335925061412860208501613baf565b915061413660408501613c28565b90509250925092565b803560068110613bc657600080fd5b6000806040838503121561416157600080fd5b61416a8361413f565b9150613c6960208401613f49565b60008060008060008060008060008060006101608c8e03121561419a57600080fd5b6141a38c613baf565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c013592506101208c013591506101408c01356001600160401b0381111561420057600080fd5b61420c8e828f01613e76565b9150509295989b509295989b9093969950565b60008060008060008060c0878903121561423857600080fd5b86356001600160401b0381111561424e57600080fd5b61425a89828a01613e76565b96505061426960208801613baf565b95989597505050506040840135936060810135936080820135935060a0909101359150565b600080600080600060a086880312156142a657600080fd5b8535945060208601359350604086013592506060860135915060808601356001600160401b03811115613f3057600080fd5b600080604083850312156142eb57600080fd5b613be78361413f565b6000806040838503121561430757600080fd5b61431083613baf565b9150613c6960208401613cee565b60008060006060848603121561433357600080fd5b61433c8461413f565b925061434a60208501613f49565b929592945050506040919091013590565b60008060006060848603121561437057600080fd5b61437984613baf565b95602085013595506040909401359392505050565b600080604083850312156143a157600080fd5b6143aa83613baf565b9150613c6960208401613baf565b60008060008060008060008060008060006101608c8e0312156143da57600080fd5b8b356001600160401b038111156143f057600080fd5b6143fc8e828f01613e76565b9b505061440b60208d01613baf565b9a9d9a9c505050506040890135986060810135986080820135985060a0820135975060c0820135965060e0820135955061010082013594506101208201359350610140909101359150565b600080600080600060a0868803121561446e57600080fd5b61447786613baf565b945061448560208701613baf565b9350604086013592506060860135915060808601356001600160401b03811115613f3057600080fd5b600181811c908216806144c257607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b60008084546144f0816144ae565b600182168015614507576001811461451c5761454c565b60ff198316865281151582028601935061454c565b87600052602060002060005b8381101561454457815488820152600190910190602001614528565b505081860193505b505050835161455f818360208801613c72565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ba857610ba8614578565b634e487b7160e01b600052601260045260246000fd5b6000826145ca576145ca6145a5565b500490565b60208082526017908201527f5472616e73666572206973206e6f7420656e61626c6564000000000000000000604082015260600190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810381811115610ba857610ba8614578565b634e487b7160e01b600052603160045260246000fd5b601f8211156111b457806000526020600020601f840160051c810160208510156146b55750805b601f840160051c820191505b81811015610fce57600081556001016146c1565b81516001600160401b038111156146ee576146ee613d3b565b614702816146fc84546144ae565b8461468e565b6020601f821160018114614736576000831561471e5750848201515b600019600385901b1c1916600184901b178455610fce565b600084815260208120601f198516915b828110156147665787850151825560209485019460019092019101614746565b50848210156147845786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60208082526017908201527f4e6f20636f6e747261637420696e746572616374696f6e000000000000000000604082015260600190565b80820180821115610ba857610ba8614578565b6020808252601c908201527f496e73756666696369656e7420626f78657320746f2072657665616c00000000604082015260600190565b600060ff821660ff810361484057614840614578565b60010192915050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006148eb6040830185614049565b82810360208401526148fd8185614049565b95945050505050565b600082614915576149156145a5565b500690565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061499090830186614049565b82810360608401526149a28186614049565b905082810360808401526149b68185613c96565b98975050505050505050565b6000602082840312156149d457600080fd5b8151612c6f81613bf5565b600060033d1115610cae5760046000803e5060005160e01c90565b600060443d1015614a085790565b6040513d600319016004823e80513d60248201116001600160401b0382111715614a3157505090565b80820180516001600160401b03811115614a4c575050505090565b3d8401600319018282016020011115614a66575050505090565b61118560208285010185613d51565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614af790830184613c96565b979650505050505050565b60ff8181168382160190811115610ba857610ba861457856fea2646970667358221220b2543514605d9cc5179278b930dbd86d527f27b44611e56e2c09d2e53e12708d64736f6c634300081c003368747470733a2f2f636f64656861766f632e78797a2f6e66742f6d657461646174612f0000000000000000000000002ee72b834fca2fe7f1be77cb77a19508262e2b4b00000000000000000000000028de0ac47063a42e340eb9f4aa9b1b048b2fd28d00000000000000000000000000000000000000000000000000000000000002b2

    Deployed Bytecode

    0x60806040526004361061034f5760003560e01c8063715018a6116101c6578063a22cb465116100f7578063e548753511610095578063f231c08d1161006f578063f231c08d14610a7a578063f242432a14610a9a578063f2fde38b14610aba578063f5d5a92a14610ada57600080fd5b8063e5487535146109e3578063e80e98fa14610a0a578063e985e9c514610a5a57600080fd5b8063ba0f2637116100d1578063ba0f26371461094f578063c2ca0ac514610980578063c6089b51146109a0578063d5abeb01146109cd57600080fd5b8063a22cb465146108ef578063a9fc664e1461090f578063b9a389bf1461092f57600080fd5b80638f902655116101645780639e05d2401161013e5780639e05d240146108525780639e317f12146108725780639fe9f623146108a2578063a1ccfca8146108c257600080fd5b80638f9026551461080a57806395d89b411461081d57806397b507a51461083257600080fd5b806382ab3867116101a057806382ab386714610799578063841718a6146107ac5780638da5cb5b146107cc5780638f0b9c6f146107ea57600080fd5b8063715018a61461072a5780637dc0bf3f1461073f578063814623501461076c57600080fd5b80633b413d99116102a0578063564566a81161023e5780636c0360eb116102185780636c0360eb146106b55780636c19e783146106ca5780636ea67222146106ea5780636f8b44b01461070a57600080fd5b8063564566a81461065a5780635944c753146106745780636221d13c1461069457600080fd5b80634cd412d51161027a5780634cd412d5146105c15780634e1273f4146105e057806355c0aabf1461060d57806355f804b31461063a57600080fd5b80633b413d991461056c5780633ccfd60b1461058c5780634b9c5e88146105a157600080fd5b80630d705df61161030d578063184ff48a116102e7578063184ff48a146104ae5780632a55205a146104ce5780632eb2c2d61461050d57806335d776be1461052d57600080fd5b80630d705df6146104505780630e89341c1461047857806318160ddd1461049857600080fd5b8062fdd58e14610354578063014635461461038757806301ffc9a7146103c757806304634d8d146103f757806306fdde0314610419578063098144d41461043b575b600080fd5b34801561036057600080fd5b5061037461036f366004613bcb565b610b15565b6040519081526020015b60405180910390f35b34801561039357600080fd5b506103af73721c002b0059009a671d00ad1700c9748146cd1b81565b6040516001600160a01b03909116815260200161037e565b3480156103d357600080fd5b506103e76103e2366004613c0b565b610bae565b604051901515815260200161037e565b34801561040357600080fd5b50610417610412366004613c3f565b610bd3565b005b34801561042557600080fd5b5061042e610be9565b60405161037e9190613cc2565b34801561044757600080fd5b506103af610c77565b34801561045c57600080fd5b5060408051631854b24160e01b8152600060208201520161037e565b34801561048457600080fd5b5061042e610493366004613cd5565b610cb1565b3480156104a457600080fd5b5061037460165481565b3480156104ba57600080fd5b506104176104c9366004613cfe565b610ce5565b3480156104da57600080fd5b506104ee6104e9366004613d19565b610d09565b604080516001600160a01b03909316835260208301919091520161037e565b34801561051957600080fd5b50610417610528366004613e96565b610db7565b34801561053957600080fd5b5061054d610548366004613f5a565b610fd5565b6040805160ff909416845260208401929092529082015260600161037e565b34801561057857600080fd5b506013546103e79062010000900460ff1681565b34801561059857600080fd5b5061041761101b565b3480156105ad57600080fd5b506104176105bc366004613d19565b611052565b3480156105cd57600080fd5b506013546103e790610100900460ff1681565b3480156105ec57600080fd5b506106006105fb366004613f76565b61106c565b60405161037e9190614085565b34801561061957600080fd5b50610374610628366004614098565b60116020526000908152604090205481565b34801561064657600080fd5b506104176106553660046140b3565b61118d565b34801561066657600080fd5b506013546103e79060ff1681565b34801561068057600080fd5b5061041761068f366004614103565b6111a1565b3480156106a057600080fd5b506003546103e790600160a81b900460ff1681565b3480156106c157600080fd5b5061042e6111b9565b3480156106d657600080fd5b506104176106e5366004614098565b6111c6565b3480156106f657600080fd5b5061041761070536600461414e565b6111fa565b34801561071657600080fd5b50610417610725366004613cd5565b6112dd565b34801561073657600080fd5b506104176112ea565b34801561074b57600080fd5b5061037461075a366004613cd5565b60106020526000908152604090205481565b34801561077857600080fd5b50610374610787366004613cd5565b60126020526000908152604090205481565b6104176107a7366004614178565b6112fe565b3480156107b857600080fd5b506104176107c7366004613cfe565b611681565b3480156107d857600080fd5b506007546001600160a01b03166103af565b3480156107f657600080fd5b506103af61080536600461421f565b61169c565b61041761081836600461428e565b611713565b34801561082957600080fd5b5061042e611964565b34801561083e57600080fd5b5061041761084d3660046142d8565b611971565b34801561085e57600080fd5b5061041761086d366004613cfe565b611a16565b34801561087e57600080fd5b506103e761088d366004613cd5565b60096020526000908152604090205460ff1681565b3480156108ae57600080fd5b506104176108bd366004613cfe565b611a76565b3480156108ce57600080fd5b506103746108dd366004613cd5565b60046020526000908152604090205481565b3480156108fb57600080fd5b5061041761090a3660046142f4565b611a98565b34801561091b57600080fd5b5061041761092a366004614098565b611ac9565b34801561093b57600080fd5b5061041761094a36600461431e565b611b82565b34801561095b57600080fd5b506103e761096a366004613cd5565b60009081526009602052604090205460ff161590565b34801561098c57600080fd5b5061041761099b366004613cd5565b611be3565b3480156109ac57600080fd5b506103746109bb366004613cd5565b60009081526004602052604090205490565b3480156109d957600080fd5b5061037460155481565b3480156109ef57600080fd5b506013546103af90630100000090046001600160a01b031681565b348015610a1657600080fd5b50610374610a2536600461435b565b60008181526004602090815260408083206001600160a01b038716845260020182528083208584529091529020549392505050565b348015610a6657600080fd5b506103e7610a7536600461438e565b611e77565b348015610a8657600080fd5b506103af610a953660046143b8565b611edb565b348015610aa657600080fd5b50610417610ab5366004614456565b611f7d565b348015610ac657600080fd5b50610417610ad5366004614098565b61214d565b348015610ae657600080fd5b50610374610af5366004613d19565b600090815260046020908152604080832093835260019093019052205490565b60006001600160a01b038316610b855760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216632483248360e11b1480610ba85750610ba8826121c3565b610bdb6121e8565b610be58282612242565b5050565b600b8054610bf6906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610c22906144ae565b8015610c6f5780601f10610c4457610100808354040283529160200191610c6f565b820191906000526020600020905b815481529060010190602001808311610c5257829003601f168201915b505050505081565b60035461010090046001600160a01b031680610cae5760035460ff16610cae575073721c002b0059009a671d00ad1700c9748146cd1b5b90565b60606014610cbe83612297565b604051602001610ccf9291906144e2565b6040516020818303038152906040529050919050565b610ced6121e8565b60138054911515620100000262ff000019909216919091179055565b60008281526006602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610d7e5750604080518082019091526005546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610d9d906001600160601b03168761458e565b610da791906145bb565b91519350909150505b9250929050565b601354610100900460ff16610dde5760405162461bcd60e51b8152600401610b7c906145cf565b336001600160a01b0386161480610dfa5750610dfa8533611e77565b610e165760405162461bcd60e51b8152600401610b7c90614606565b60005b8351811015610fc057838181518110610e3457610e3461464f565b6020026020010151600003610fb85760005b838181518110610e5857610e5861464f565b6020026020010151811015610fb6576001600160a01b0387166000908152600f602052604081208054610e8d90600190614665565b81548110610e9d57610e9d61464f565b906000526020600020018054610eb2906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610ede906144ae565b8015610f2b5780601f10610f0057610100808354040283529160200191610f2b565b820191906000526020600020905b815481529060010190602001808311610f0e57829003601f168201915b505050506001600160a01b038a166000908152600f60205260409020805492935091905080610f5c57610f5c614678565b600190038181906000526020600020016000610f789190613b61565b90556001600160a01b0387166000908152600f6020908152604082208054600181018255908352912001610fac82826146d5565b5050600101610e46565b505b600101610e19565b50610fce8585858585612329565b5050505050565b600d6020528160005260406000208181548110610ff157600080fd5b600091825260209091206003909102018054600182015460029092015460ff909116935090915083565b6110236121e8565b60405133904780156108fc02916000818181858888f1935050505015801561104f573d6000803e3d6000fd5b50565b61105a6121e8565b60009182526012602052604090912055565b606081518351146110d15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610b7c565b600083516001600160401b038111156110ec576110ec613d3b565b604051908082528060200260200182016040528015611115578160200160208202803683370190505b50905060005b8451811015611185576111608582815181106111395761113961464f565b60200260200101518583815181106111535761115361464f565b6020026020010151610b15565b8282815181106111725761117261464f565b602090810291909101015260010161111b565b509392505050565b6111956121e8565b6014610be582826146d5565b6111a96121e8565b6111b483838361251b565b505050565b60148054610bf6906144ae565b6111ce6121e8565b601380546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b6112026121e8565b600d600083600581111561121857611218614793565b60ff1660ff16815260200190815260200160002060405180606001604052808360ff16815260200160008152602001600d600086600581111561125d5761125d614793565b60ff1660ff1681526020019081526020016000206000815481106112835761128361464f565b6000918252602080832060039283020160029081015490945285546001808201885596845292819020855193909202909101805460ff191660ff909316929092178255830151938101939093556040909101519101555050565b6112e56121e8565b601555565b6112f26121e8565b6112fc6000612575565b565b33321461131d5760405162461bcd60e51b8152600401610b7c906147a9565b60135460ff166113645760405162461bcd60e51b815260206004820152601260248201527153616c65206973206e6f742061637469766560701b6044820152606401610b7c565b600089116113b45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b7c565b89156113f55760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081d1bdad95b88125160821b6044820152606401610b7c565b60155460008b815260106020526040902054611412908b906147e0565b11156114605760405162461bcd60e51b815260206004820152601f60248201527f45786365656473206d617820737570706c7920666f7220746f6b656e204944006044820152606401610b7c565b61146a878a61458e565b3410156114b95760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742076616c756520746f206d696e740000000000006044820152606401610b7c565b60008281526009602052604090205460ff16156115085760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610b7c565b6000828152600960205260409020805460ff191660011790556013546001600160a01b03630100000090910416611548828d8d8d8d8d8d8d8d8d8d611edb565b6001600160a01b0316146115925760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b7c565b6115a28b8a8c8b8a8a8a8a6125c7565b60005b89811015611633576001601660008282546115c091906147e0565b90915550506001600160a01b038c166000908152600e602052604081208054600192906115ee9084906147e0565b9091555050336000908152600f6020526040902061160a6127f9565b8154600181018355600092835260209092209091019061162a90826146d5565b506001016115a5565b5060008a815260106020526040812080548b92906116529084906147e0565b925050819055506116748b8b8b6040518060200160405280600081525061287b565b5050505050505050505050565b6116896121e8565b6013805460ff1916911515919091179055565b6040516001600160601b0319606087901b16602082015260348101859052605481018490526074810183905260948101829052600090819060b40160405160208183030381529060405280519060200120905060006116fa826129ad565b9050611706818a612a00565b9998505050505050505050565b3332146117325760405162461bcd60e51b8152600401610b7c906147a9565b8361173d3387610b15565b101561175b5760405162461bcd60e51b8152600401610b7c906147f3565b60008581526012602052604081205490036117ae5760405162461bcd60e51b8152602060048201526013602482015272546f6b656e2063616e6e6f742065766f6c766560681b6044820152606401610b7c565b60135462010000900460ff166117fe5760405162461bcd60e51b8152602060048201526015602482015274115d9bdb1d99481a5cc81b9bdd08195b98589b1959605a1b6044820152606401610b7c565b60008281526009602052604090205460ff161561184d5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610b7c565b6000828152600960205260409020805460ff191660011790556013546001600160a01b0363010000009091041661188882338888888861169c565b6001600160a01b0316146118d25760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b7c565b6118dc838561458e565b34101561192b5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742076616c756520746f2065766f6c7665000000006044820152606401610b7c565b611936338686612a1c565b610fce336012600088815260200190815260200160002054866040518060200160405280600081525061287b565b600c8054610bf6906144ae565b6119796121e8565b60005b600d600084600581111561199257611992614793565b60ff908116825260208201929092526040016000205490821610156111b45781600d60008560058111156119c8576119c8614793565b60ff1660ff1681526020019081526020016000208260ff16815481106119f0576119f061464f565b600091825260209091206002600390920201015580611a0e8161482a565b91505061197c565b611a1e612bb6565b60038054821515600160a81b0260ff60a81b199091161790556040517f6787c7f9a80aa0f5ceddab2c54f1f5169c0b88e75dd5e19d5e858a64144c7dbc90611a6b90831515815260200190565b60405180910390a150565b611a7e6121e8565b601380549115156101000261ff0019909216919091179055565b601354610100900460ff16611abf5760405162461bcd60e51b8152600401610b7c906145cf565b610be58282612bbe565b611ad1612bb6565b6001600160a01b038116803b15159015801590611aec575080155b15611b0a576040516332483afb60e01b815260040160405180910390fd5b7fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac611b33610c77565b604080516001600160a01b03928316815291851660208301520160405180910390a1600380546001600160a01b038416610100026001600160a81b0319909116176001179055610be582612bc9565b611b8a6121e8565b80600d6000856005811115611ba157611ba1614793565b60ff1660ff1681526020019081526020016000208360ff1681548110611bc957611bc961464f565b906000526020600020906003020160020181905550505050565b333214611c025760405162461bcd60e51b8152600401610b7c906147a9565b336000908152600f6020526040902054811115611c315760405162461bcd60e51b8152600401610b7c906147f3565b80611c3d336000610b15565b1015611c5b5760405162461bcd60e51b8152600401610b7c906147f3565b60005b81811015611e6a57336000908152600f602052604081208054611c8390600190614665565b81548110611c9357611c9361464f565b906000526020600020018054611ca8906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd4906144ae565b8015611d215780601f10611cf657610100808354040283529160200191611d21565b820191906000526020600020905b815481529060010190602001808311611d0457829003601f168201915b5050336000908152600f602052604090208054949550939250829150611d4b905057611d4b614678565b600190038181906000526020600020016000611d679190613b61565b90556000611d7482612c49565b9050600080611d8283612cc3565b915091506001600d60008460ff1660ff1681526020019081526020016000208260ff1681548110611db557611db561464f565b90600052602060002090600302016001016000828254611dd591906147e0565b9091555050336000908152600e60205260408120805460019290611dfa9084906147e0565b909155505060ff8083166000908152600d602052604090208054611e5a92339291908516908110611e2d57611e2d61464f565b6000918252602080832060039092029091015460408051928301905291815260ff9091169060019061287b565b505060019092019150611c5e9050565b5061104f33600083612a1c565b6001600160a01b0382811660009081526001602090815260408083209385168352929052205460ff1680610ba857600354600160a81b900460ff1615610ba857611ebf610c77565b6001600160a01b0316826001600160a01b031614905092915050565b6040516001600160601b031960608c901b166020820152603481018a905260548101899052607481018890526094810187905260b4810186905260d4810185905260f48101849052610114810183905261013481018290526000908190610154016040516020818303038152906040528051906020012090506000611f5f826129ad565b9050611f6b818f612a00565b9e9d5050505050505050505050505050565b601354610100900460ff16611fa45760405162461bcd60e51b8152600401610b7c906145cf565b336001600160a01b0386161480611fc05750611fc08533611e77565b611fdc5760405162461bcd60e51b8152600401610b7c90614606565b826000036121405760005b8281101561213e576001600160a01b0386166000908152600f60205260408120805461201590600190614665565b815481106120255761202561464f565b90600052602060002001805461203a906144ae565b80601f0160208091040260200160405190810160405280929190818152602001828054612066906144ae565b80156120b35780601f10612088576101008083540402835291602001916120b3565b820191906000526020600020905b81548152906001019060200180831161209657829003601f168201915b505050506001600160a01b0389166000908152600f602052604090208054929350919050806120e4576120e4614678565b6001900381819060005260206000200160006121009190613b61565b90556001600160a01b0386166000908152600f602090815260408220805460018101825590835291200161213482826146d5565b5050600101611fe7565b505b610fce8585858585612d4f565b6121556121e8565b6001600160a01b0381166121ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7c565b61104f81612575565b60006001600160e01b0319821663152a902d60e11b1480610ba85750610ba882612e95565b6007546001600160a01b031633146112fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b7c565b61224c8282612ed5565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b606060006122a483612f8f565b60010190506000816001600160401b038111156122c3576122c3613d3b565b6040519080825280601f01601f1916602001820160405280156122ed576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f757509392505050565b815183511461238b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610b7c565b6001600160a01b0384166123b15760405162461bcd60e51b8152600401610b7c90614849565b336123c0818787878787613067565b60005b845181101561249f5760008582815181106123e0576123e061464f565b6020026020010151905060008583815181106123fe576123fe61464f565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561244e5760405162461bcd60e51b8152600401610b7c9061488e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061248b9084906147e0565b9091555050600190930192506123c3915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124ef9291906148d8565b60405180910390a46125058187878787876130c4565b612513818787878787613117565b505050505050565b612526838383613272565b6040516001600160601b03821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c906020015b60405180910390a3505050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000858152600460205260409020841561262057878510156126205760405162461bcd60e51b815260206004820152601260248201527108af0c6cacac8e640dac2f040e0cae440e8f60731b6044820152606401610b7c565b831561269e576001600160a01b038916600090815260028201602090815260408083208a84529091529020548490612659908a906147e0565b111561269e5760405162461bcd60e51b815260206004820152601460248201527322bc31b2b2b2399036b0bc103832b9103ab9b2b960611b6044820152606401610b7c565b82156126f957805483906126b3908a906147e0565b11156126f95760405162461bcd60e51b815260206004820152601560248201527445786365656473206d61782070657220706861736560581b6044820152606401610b7c565b8115612776576000878152600182016020526040902054829061271d908a906147e0565b11156127765760405162461bcd60e51b815260206004820152602260248201527f45786365656473206d6178207065722070686173652070657220746f6b656e20604482015261125160f21b6064820152608401610b7c565b8781600001600082825461278a91906147e0565b90915550506001600160a01b038916600090815260028201602090815260408083208a8452909152812080548a92906127c49084906147e0565b90915550506000878152600182016020526040812080548a92906127e99084906147e0565b9091555050505050505050505050565b60604244612808600143614665565b336000818152600e60209081526040918290205460165492516128679796954094919392019586526020860194909452604085019290925260608085019190915260808401919091521b6001600160601b03191660a082015260b40190565b604051602081830303815290604052905090565b6001600160a01b0384166128db5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610b7c565b3360006128e78561333d565b905060006128f48561333d565b905061290583600089858589613067565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906129359084906147e0565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612995836000898585896130c4565b6129a483600089898989613388565b50505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6000806000612a0f8585613443565b9150915061118581613485565b6001600160a01b038316612a7e5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610b7c565b336000612a8a8461333d565b90506000612a978461333d565b9050612ab783876000858560405180602001604052806000815250613067565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015612b345760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610b7c565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46129a4848860008686604051806020016040528060008152506130c4565b6112fc6121e8565b610be53383836135cf565b6001600160a01b0381161561104f57803b8015610be5576040805163fb2de5d760e01b8152306004820152610483602482015290516001600160a01b0384169163fb2de5d791604480830192600092919082900301818387803b158015612c2f57600080fd5b505af1925050508015612c40575060015b15610be5575050565b805160208201206000908190612c6190606490614906565b90506003811015612c765760055b9392505050565b6008811015612c86576004612c6f565b6014811015612c96576003612c6f565b6028811015612ca6576002612c6f565b6041811015612cb6576001612c6f565b6000612c6f565b50919050565b600080600080612cd2856136a7565b915091506000815144600143612ce89190614665565b40604051602001612d03929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c612d269190614906565b905082828281518110612d3b57612d3b61464f565b602002602001015194509450505050915091565b6001600160a01b038416612d755760405162461bcd60e51b8152600401610b7c90614849565b336000612d818561333d565b90506000612d8e8561333d565b9050612d9e838989858589613067565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015612ddf5760405162461bcd60e51b8152600401610b7c9061488e565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612e1c9084906147e0565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612e7c848a8a86868a6130c4565b612e8a848a8a8a8a8a613388565b505050505050505050565b60006001600160e01b03198216632b435fdb60e21b1480612ec657506001600160e01b0319821663503e914d60e11b145b80610ba85750610ba882613909565b6127106001600160601b0382161115612f005760405162461bcd60e51b8152600401610b7c9061491a565b6001600160a01b038216612f565760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b7c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600555565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612fce5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612ffa576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061301857662386f26fc10000830492506010015b6305f5e1008310613030576305f5e100830492506008015b612710831061304457612710830492506004015b60648310613056576064830492506002015b600a8310610ba85760010192915050565b825160005b818110156130ba576130b2878787848151811061308b5761308b61464f565b60200260200101518785815181106130a5576130a561464f565b6020026020010151613959565b60010161306c565b5050505050505050565b825160005b818110156130ba5761310f87878784815181106130e8576130e861464f565b60200260200101518785815181106131025761310261464f565b60200260200101516139b0565b6001016130c9565b6001600160a01b0384163b156125135760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061315b9089908990889088908890600401614964565b6020604051808303816000875af1925050508015613196575060408051601f3d908101601f19168201909252613193918101906149c2565b60015b613242576131a26149df565b806308c379a0036131db57506131b66149fa565b806131c157506131dd565b8060405162461bcd60e51b8152600401610b7c9190613cc2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610b7c565b6001600160e01b0319811663bc197c8160e01b146129a45760405162461bcd60e51b8152600401610b7c90614a75565b6127106001600160601b038216111561329d5760405162461bcd60e51b8152600401610b7c9061491a565b6001600160a01b0382166132f35760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610b7c565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600690529190942093519051909116600160a01b029116179055565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106133775761337761464f565b602090810291909101015292915050565b6001600160a01b0384163b156125135760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906133cc9089908990889088908890600401614abd565b6020604051808303816000875af1925050508015613407575060408051601f3d908101601f19168201909252613404918101906149c2565b60015b613413576131a26149df565b6001600160e01b0319811663f23a6e6160e01b146129a45760405162461bcd60e51b8152600401610b7c90614a75565b60008082516041036134795760208301516040840151606085015160001a61346d878285856139f7565b94509450505050610db0565b50600090506002610db0565b600081600481111561349957613499614793565b036134a15750565b60018160048111156134b5576134b5614793565b036135025760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b7c565b600281600481111561351657613516614793565b036135635760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b7c565b600381600481111561357757613577614793565b0361104f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b7c565b816001600160a01b0316836001600160a01b0316036136425760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610b7c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101612568565b60ff81166000908152600d602052604081205460609082906001600160401b038111156136d6576136d6613d3b565b6040519080825280602002602001820160405280156136ff578160200160208202803683370190505b5060ff85166000908152600d60205260408120919250805b825460ff8216101561382e5760ff8088166000908152600d6020526040902080549091831690811061374b5761374b61464f565b906000526020600020906003020160020154600014806137e1575060ff8088166000908152600d6020526040902080549091831690811061378e5761378e61464f565b906000526020600020906003020160020154600d60008960ff1660ff1681526020019081526020016000208260ff16815481106137cd576137cd61464f565b906000526020600020906003020160010154105b1561381c5780848360ff16815181106137fc576137fc61464f565b60ff90921660209283029190910190910152816138188161482a565b9250505b806138268161482a565b915050613717565b5060008160ff166001600160401b0381111561384c5761384c613d3b565b604051908082528060200260200182016040528015613875578160200160208202803683370190505b50905060005b8260ff168160ff1610156138d557848160ff168151811061389e5761389e61464f565b6020026020010151828260ff16815181106138bb576138bb61464f565b60ff9092166020928302919091019091015260010161387b565b5080516000036138ff576138f26138ed886001614b02565b6136a7565b9550955050505050915091565b9596945050505050565b60006001600160e01b03198216636cdb3d1360e11b148061393a57506001600160e01b031982166303a24d0760e21b145b80610ba857506301ffc9a760e01b6001600160e01b0319831614610ba8565b6001600160a01b0384811615908416158180156139735750805b1561399157604051635cbd944160e01b815260040160405180910390fd5b811561399d575b612513565b8061399857612513338787878734613abb565b6001600160a01b0384811615908416158180156139ca5750805b156139e857604051635cbd944160e01b815260040160405180910390fd5b81613998578061399857612513565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613a2e5750600090506003613ab2565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613a82573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613aab57600060019250925050613ab2565b9150600090505b94509492505050565b6000613ac5610c77565b90506001600160a01b038116156129a4576001600160a01b0381163303613aec5750612513565b604051631854b24160e01b81526001600160a01b038881166004830152878116602483015286811660448301526064820186905260848201859052821690631854b2419060a401600060405180830381600087803b158015613b4d57600080fd5b505af1158015611674573d6000803e3d6000fd5b508054613b6d906144ae565b6000825580601f10613b7d575050565b601f01602090049060005260206000209081019061104f91905b80821115613bab5760008155600101613b97565b5090565b80356001600160a01b0381168114613bc657600080fd5b919050565b60008060408385031215613bde57600080fd5b613be783613baf565b946020939093013593505050565b6001600160e01b03198116811461104f57600080fd5b600060208284031215613c1d57600080fd5b8135612c6f81613bf5565b80356001600160601b0381168114613bc657600080fd5b60008060408385031215613c5257600080fd5b613c5b83613baf565b9150613c6960208401613c28565b90509250929050565b60005b83811015613c8d578181015183820152602001613c75565b50506000910152565b60008151808452613cae816020860160208601613c72565b601f01601f19169290920160200192915050565b602081526000612c6f6020830184613c96565b600060208284031215613ce757600080fd5b5035919050565b80358015158114613bc657600080fd5b600060208284031215613d1057600080fd5b612c6f82613cee565b60008060408385031215613d2c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613d7657613d76613d3b565b6040525050565b60006001600160401b03821115613d9657613d96613d3b565b5060051b60200190565b600082601f830112613db157600080fd5b8135613dbc81613d7d565b604051613dc98282613d51565b80915082815260208101915060208360051b860101925085831115613ded57600080fd5b602085015b83811015613e0a578035835260209283019201613df2565b5095945050505050565b6000806001600160401b03841115613e2e57613e2e613d3b565b50604051601f8401601f191660200190613e488282613d51565b809250848152858585011115613e5d57600080fd5b8484602083013760006020868301015250509392505050565b600082601f830112613e8757600080fd5b612c6f83833560208501613e14565b600080600080600060a08688031215613eae57600080fd5b613eb786613baf565b9450613ec560208701613baf565b935060408601356001600160401b03811115613ee057600080fd5b613eec88828901613da0565b93505060608601356001600160401b03811115613f0857600080fd5b613f1488828901613da0565b92505060808601356001600160401b03811115613f3057600080fd5b613f3c88828901613e76565b9150509295509295909350565b803560ff81168114613bc657600080fd5b60008060408385031215613f6d57600080fd5b613be783613f49565b60008060408385031215613f8957600080fd5b82356001600160401b03811115613f9f57600080fd5b8301601f81018513613fb057600080fd5b8035613fbb81613d7d565b604051613fc88282613d51565b80915082815260208101915060208360051b850101925087831115613fec57600080fd5b6020840193505b828410156140155761400484613baf565b825260209384019390910190613ff3565b945050505060208301356001600160401b0381111561403357600080fd5b61403f85828601613da0565b9150509250929050565b600081518084526020840193506020830160005b8281101561407b57815186526020958601959091019060010161405d565b5093949350505050565b602081526000612c6f6020830184614049565b6000602082840312156140aa57600080fd5b612c6f82613baf565b6000602082840312156140c557600080fd5b81356001600160401b038111156140db57600080fd5b8201601f810184136140ec57600080fd5b6140fb84823560208401613e14565b949350505050565b60008060006060848603121561411857600080fd5b8335925061412860208501613baf565b915061413660408501613c28565b90509250925092565b803560068110613bc657600080fd5b6000806040838503121561416157600080fd5b61416a8361413f565b9150613c6960208401613f49565b60008060008060008060008060008060006101608c8e03121561419a57600080fd5b6141a38c613baf565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c013592506101208c013591506101408c01356001600160401b0381111561420057600080fd5b61420c8e828f01613e76565b9150509295989b509295989b9093969950565b60008060008060008060c0878903121561423857600080fd5b86356001600160401b0381111561424e57600080fd5b61425a89828a01613e76565b96505061426960208801613baf565b95989597505050506040840135936060810135936080820135935060a0909101359150565b600080600080600060a086880312156142a657600080fd5b8535945060208601359350604086013592506060860135915060808601356001600160401b03811115613f3057600080fd5b600080604083850312156142eb57600080fd5b613be78361413f565b6000806040838503121561430757600080fd5b61431083613baf565b9150613c6960208401613cee565b60008060006060848603121561433357600080fd5b61433c8461413f565b925061434a60208501613f49565b929592945050506040919091013590565b60008060006060848603121561437057600080fd5b61437984613baf565b95602085013595506040909401359392505050565b600080604083850312156143a157600080fd5b6143aa83613baf565b9150613c6960208401613baf565b60008060008060008060008060008060006101608c8e0312156143da57600080fd5b8b356001600160401b038111156143f057600080fd5b6143fc8e828f01613e76565b9b505061440b60208d01613baf565b9a9d9a9c505050506040890135986060810135986080820135985060a0820135975060c0820135965060e0820135955061010082013594506101208201359350610140909101359150565b600080600080600060a0868803121561446e57600080fd5b61447786613baf565b945061448560208701613baf565b9350604086013592506060860135915060808601356001600160401b03811115613f3057600080fd5b600181811c908216806144c257607f821691505b602082108103612cbd57634e487b7160e01b600052602260045260246000fd5b60008084546144f0816144ae565b600182168015614507576001811461451c5761454c565b60ff198316865281151582028601935061454c565b87600052602060002060005b8381101561454457815488820152600190910190602001614528565b505081860193505b505050835161455f818360208801613c72565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ba857610ba8614578565b634e487b7160e01b600052601260045260246000fd5b6000826145ca576145ca6145a5565b500490565b60208082526017908201527f5472616e73666572206973206e6f7420656e61626c6564000000000000000000604082015260600190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810381811115610ba857610ba8614578565b634e487b7160e01b600052603160045260246000fd5b601f8211156111b457806000526020600020601f840160051c810160208510156146b55750805b601f840160051c820191505b81811015610fce57600081556001016146c1565b81516001600160401b038111156146ee576146ee613d3b565b614702816146fc84546144ae565b8461468e565b6020601f821160018114614736576000831561471e5750848201515b600019600385901b1c1916600184901b178455610fce565b600084815260208120601f198516915b828110156147665787850151825560209485019460019092019101614746565b50848210156147845786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60208082526017908201527f4e6f20636f6e747261637420696e746572616374696f6e000000000000000000604082015260600190565b80820180821115610ba857610ba8614578565b6020808252601c908201527f496e73756666696369656e7420626f78657320746f2072657665616c00000000604082015260600190565b600060ff821660ff810361484057614840614578565b60010192915050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006148eb6040830185614049565b82810360208401526148fd8185614049565b95945050505050565b600082614915576149156145a5565b500690565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061499090830186614049565b82810360608401526149a28186614049565b905082810360808401526149b68185613c96565b98975050505050505050565b6000602082840312156149d457600080fd5b8151612c6f81613bf5565b600060033d1115610cae5760046000803e5060005160e01c90565b600060443d1015614a085790565b6040513d600319016004823e80513d60248201116001600160401b0382111715614a3157505090565b80820180516001600160401b03811115614a4c575050505090565b3d8401600319018282016020011115614a66575050505090565b61118560208285010185613d51565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614af790830184613c96565b979650505050505050565b60ff8181168382160190811115610ba857610ba861457856fea2646970667358221220b2543514605d9cc5179278b930dbd86d527f27b44611e56e2c09d2e53e12708d64736f6c634300081c0033

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

    0000000000000000000000002ee72b834fca2fe7f1be77cb77a19508262e2b4b00000000000000000000000028de0ac47063a42e340eb9f4aa9b1b048b2fd28d00000000000000000000000000000000000000000000000000000000000002b2

    -----Decoded View---------------
    Arg [0] : _signer (address): 0x2eE72B834Fca2fe7f1be77cb77A19508262e2b4B
    Arg [1] : royaltyReceiver_ (address): 0x28De0Ac47063a42e340eB9F4aa9B1b048B2Fd28d
    Arg [2] : royaltyFeeNumerator_ (uint96): 690

    -----Encoded View---------------
    3 Constructor Arguments found :
    Arg [0] : 0000000000000000000000002ee72b834fca2fe7f1be77cb77a19508262e2b4b
    Arg [1] : 00000000000000000000000028de0ac47063a42e340eb9f4aa9b1b048b2fd28d
    Arg [2] : 00000000000000000000000000000000000000000000000000000000000002b2


    Block Age Transaction Difficulty Gas Used Reward
    View All Blocks Produced

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

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age 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.