S Price: $0.500478 (-7.55%)
    /

    Contract

    0xFb2Cd41a8aeC89EFBb19575C6c48d872cE97A0A5

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo621 wei

    S Value

    Less Than $0.01 (@ $0.50/S)
    Transaction Hash
    Method
    Block
    Age
    From
    To
    Amount
    Register Domains166714042025-03-28 23:48:4910 hrs ago1743205729IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0274027355.01
    Register Domains165398402025-03-28 10:18:4524 hrs ago1743157125IN
    0xFb2Cd41a...2cE97A0A5
    5.5758313 S0.0333125166
    Register Domains164416692025-03-27 23:27:4435 hrs ago1743118064IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0237091450.0001
    Register Domains163626792025-03-27 15:31:5942 hrs ago1743089519IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0279601550.0001
    Register Domains155061072025-03-23 21:29:145 days ago1742765354IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0273516855.01
    Register Domains154331972025-03-23 13:36:535 days ago1742737013IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.027709355.01
    Register Domains150623882025-03-21 17:29:557 days ago1742578195IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0274027355.01
    Register Domains148766942025-03-20 17:35:408 days ago1742492140IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0237352450.0001
    Register Domains148049012025-03-20 9:25:389 days ago1742462738IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0288297457.34
    Register Domains142332972025-03-17 11:47:3811 days ago1742212058IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0275048855.01
    Register Domains138210202025-03-15 6:43:3914 days ago1742021019IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0275048855.01
    Register Domains136403382025-03-14 9:34:2515 days ago1741944865IN
    0xFb2Cd41a...2cE97A0A5
    8.61719383 S0.0303680360.5
    Register Domains134920312025-03-13 16:42:3815 days ago1741884158IN
    0xFb2Cd41a...2cE97A0A5
    7.09651257 S0.0239795450.0001
    Register Domains133064942025-03-12 19:13:1216 days ago1741806792IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0276876855.01
    Register Domains131272682025-03-11 21:32:1817 days ago1741728738IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0275513755.01
    Register Domains124805212025-03-08 15:11:5520 days ago1741446715IN
    0xFb2Cd41a...2cE97A0A5
    6.08272506 S0.0274499555
    Register Domains118885522025-03-05 19:06:4323 days ago1741201603IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0263725555
    Register Domains111266842025-03-02 6:42:3927 days ago1740897759IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0287912955.01
    Register Domains110717242025-03-01 23:19:2627 days ago1740871166IN
    0xFb2Cd41a...2cE97A0A5
    6.08272506 S0.0265714355
    Register Domains108048252025-02-28 17:28:2328 days ago1740763703IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0273516855.01
    Register Domains96660602025-02-23 22:40:3833 days ago1740350438IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0275559355.01
    Register Domains95527542025-02-23 11:06:1233 days ago1740308772IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0275048855.01
    Register Domains94408092025-02-22 21:17:4734 days ago1740259067IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0360464568.75
    Register Domains93563462025-02-22 12:44:4734 days ago1740228287IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.028842455.01
    Register Domains91725512025-02-21 16:32:0835 days ago1740155528IN
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S0.0275048855.01
    View all transactions

    Latest 25 internal transactions (View All)

    Parent Transaction Hash Block Age From To Amount
    166714042025-03-28 23:48:4910 hrs ago1743205729
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    165398402025-03-28 10:18:4524 hrs ago1743157125
    0xFb2Cd41a...2cE97A0A5
    5.5758313 S
    164416692025-03-27 23:27:4435 hrs ago1743118064
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    163626792025-03-27 15:31:5942 hrs ago1743089519
    0xFb2Cd41a...2cE97A0A5
    4.81549067 S
    163626792025-03-27 15:31:5942 hrs ago1743089519
    0xFb2Cd41a...2cE97A0A5
    0.25344687 S
    155061072025-03-23 21:29:145 days ago1742765354
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    154331972025-03-23 13:36:535 days ago1742737013
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    150623882025-03-21 17:29:557 days ago1742578195
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    148766942025-03-20 17:35:408 days ago1742492140
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    148049012025-03-20 9:25:389 days ago1742462738
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    142332972025-03-17 11:47:3811 days ago1742212058
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    138210202025-03-15 6:43:3914 days ago1742021019
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    136403382025-03-14 9:34:2515 days ago1741944865
    0xFb2Cd41a...2cE97A0A5
    8.61719383 S
    134920312025-03-13 16:42:3815 days ago1741884158
    0xFb2Cd41a...2cE97A0A5
    7.09651257 S
    133064942025-03-12 19:13:1216 days ago1741806792
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    131272682025-03-11 21:32:1817 days ago1741728738
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    124805212025-03-08 15:11:5520 days ago1741446715
    0xFb2Cd41a...2cE97A0A5
    6.08272506 S
    118885522025-03-05 19:06:4323 days ago1741201603
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    111266842025-03-02 6:42:3927 days ago1740897759
    0xFb2Cd41a...2cE97A0A5
    4.81549067 S
    111266842025-03-02 6:42:3927 days ago1740897759
    0xFb2Cd41a...2cE97A0A5
    0.25344687 S
    110717242025-03-01 23:19:2627 days ago1740871166
    0xFb2Cd41a...2cE97A0A5
    6.08272506 S
    108048252025-02-28 17:28:2328 days ago1740763703
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    96660602025-02-23 22:40:3833 days ago1740350438
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    95527542025-02-23 11:06:1233 days ago1740308772
    0xFb2Cd41a...2cE97A0A5
    5.06893755 S
    94408092025-02-22 21:17:4734 days ago1740259067
    0xFb2Cd41a...2cE97A0A5
    4.81549067 S
    View All Internal Transactions
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    ZNSRegistry

    Compiler Version
    v0.8.21+commit.d9974bed

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    paris EvmVersion
    File 1 of 22 : ZNSRegistryURI.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: GPL-3.0
    pragma solidity ^0.8.21;
    pragma abicoder v2;
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
    import "@openzeppelin/contracts/security/Pausable.sol";
    import "@openzeppelin/contracts/access/AccessControl.sol";
    import "@openzeppelin/contracts/utils/Strings.sol";
    import { ZNSOracle } from "./ZNSOracle.sol";
    import { ZNSGiftCard } from "./ZNSGiftCard.sol";
    contract ZNSRegistry is
    ERC721URIStorage,
    Pausable,
    ReentrancyGuard,
    AccessControl
    {
    using Strings for uint256;
    /*//////////////////////////////////////////////////////////////
    INITIALIZATION
    //////////////////////////////////////////////////////////////*/
    uint256 public tokenID;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 22 : AccessControl.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/AccessControl.sol)
    pragma solidity ^0.8.0;
    import "./IAccessControl.sol";
    import "../utils/Context.sol";
    import "../utils/Strings.sol";
    import "../utils/introspection/ERC165.sol";
    /**
    * @dev Contract module that allows children to implement role-based access
    * control mechanisms. This is a lightweight version that doesn't allow enumerating role
    * members except through off-chain means by accessing the contract event logs. Some
    * applications may benefit from on-chain enumerability, for those cases see
    * {AccessControlEnumerable}.
    *
    * Roles are referred to by their `bytes32` identifier. These should be exposed
    * in the external API and be unique. The best way to achieve this is by
    * using `public constant` hash digests:
    *
    * ```solidity
    * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
    * ```
    *
    * Roles can be used to represent a set of permissions. To restrict access to a
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 22 : IAccessControl.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 (access/IAccessControl.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev External interface of AccessControl declared to support ERC165 detection.
    */
    interface IAccessControl {
    /**
    * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
    *
    * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
    * {RoleAdminChanged} not being emitted signaling this.
    *
    * _Available since v3.1._
    */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    /**
    * @dev Emitted when `account` is granted `role`.
    *
    * `sender` is the account that originated the contract call, an admin role
    * bearer except when using {AccessControl-_setupRole}.
    */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 22 : IERC165.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)
    pragma solidity ^0.8.0;
    import "../utils/introspection/IERC165.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 22 : IERC4906.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4906.sol)
    pragma solidity ^0.8.0;
    import "./IERC165.sol";
    import "./IERC721.sol";
    /// @title EIP-721 Metadata Update Extension
    interface IERC4906 is IERC165, IERC721 {
    /// @dev This event emits when the metadata of a token is changed.
    /// So that the third-party platforms such as NFT market could
    /// timely update the images and related attributes of the NFT.
    event MetadataUpdate(uint256 _tokenId);
    /// @dev This event emits when the metadata of a range of tokens is changed.
    /// So that the third-party platforms such as NFT market could
    /// timely update the images and related attributes of the NFTs.
    event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 22 : IERC721.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol)
    pragma solidity ^0.8.0;
    import "../token/ERC721/IERC721.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 22 : Pausable.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.7.0) (security/Pausable.sol)
    pragma solidity ^0.8.0;
    import "../utils/Context.sol";
    /**
    * @dev Contract module which allows children to implement an emergency stop
    * mechanism that can be triggered by an authorized account.
    *
    * This module is used through inheritance. It will make available the
    * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
    * the functions of your contract. Note that they will not be pausable by
    * simply including this module, only once the modifiers are put in place.
    */
    abstract contract Pausable is Context {
    /**
    * @dev Emitted when the pause is triggered by `account`.
    */
    event Paused(address account);
    /**
    * @dev Emitted when the pause is lifted by `account`.
    */
    event Unpaused(address account);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 22 : 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 9 of 22 : ERC721.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/ERC721/ERC721.sol)
    pragma solidity ^0.8.0;
    import "./IERC721.sol";
    import "./IERC721Receiver.sol";
    import "./extensions/IERC721Metadata.sol";
    import "../../utils/Address.sol";
    import "../../utils/Context.sol";
    import "../../utils/Strings.sol";
    import "../../utils/introspection/ERC165.sol";
    /**
    * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
    * the Metadata extension, but not including the Enumerable extension, which is available separately as
    * {ERC721Enumerable}.
    */
    contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    // Token name
    string private _name;
    // Token symbol
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 22 : ERC721URIStorage.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/ERC721/extensions/ERC721URIStorage.sol)
    pragma solidity ^0.8.0;
    import "../ERC721.sol";
    import "../../../interfaces/IERC4906.sol";
    /**
    * @dev ERC721 token with storage based token URI management.
    */
    abstract contract ERC721URIStorage is IERC4906, ERC721 {
    using Strings for uint256;
    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;
    /**
    * @dev See {IERC165-supportsInterface}
    */
    function supportsInterface(
    bytes4 interfaceId
    ) public view virtual override(ERC721, IERC165) returns (bool) {
    return
    interfaceId == bytes4(0x49064906) ||
    super.supportsInterface(interfaceId);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 22 : IERC721Metadata.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 (token/ERC721/extensions/IERC721Metadata.sol)
    pragma solidity ^0.8.0;
    import "../IERC721.sol";
    /**
    * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
    * @dev See https://eips.ethereum.org/EIPS/eip-721
    */
    interface IERC721Metadata is IERC721 {
    /**
    * @dev Returns the token collection name.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the token collection symbol.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    */
    function tokenURI(uint256 tokenId) external view returns (string memory);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 22 : IERC721.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/ERC721/IERC721.sol)
    pragma solidity ^0.8.0;
    import "../../utils/introspection/IERC165.sol";
    /**
    * @dev Required interface of an ERC721 compliant contract.
    */
    interface IERC721 is IERC165 {
    /**
    * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
    */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 22 : IERC721Receiver.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.6.0) (token/ERC721/IERC721Receiver.sol)
    pragma solidity ^0.8.0;
    /**
    * @title ERC721 token receiver interface
    * @dev Interface for any contract that wants to support safeTransfers
    * from ERC721 asset contracts.
    */
    interface IERC721Receiver {
    /**
    * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
    * by `operator` from `from`, this function is called.
    *
    * It must return its Solidity selector to confirm the token transfer.
    * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
    *
    * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes calldata data
    ) external returns (bytes4);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 22 : 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 15 of 22 : 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 16 of 22 : 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 17 of 22 : 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 18 of 22 : 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 19 of 22 : 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 20 of 22 : 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 21 of 22 : ZNSGiftCard.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: GPL-3.0
    pragma solidity 0.8.21;
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
    import "@openzeppelin/contracts/security/Pausable.sol";
    import "@openzeppelin/contracts/access/AccessControl.sol";
    import { ZNSOracle } from "./ZNSOracle.sol";
    contract ZNSGiftCard is
    ERC721URIStorage,
    Pausable,
    ReentrancyGuard,
    AccessControl
    {
    /*//////////////////////////////////////////////////////////////
    INITIALIZATION
    //////////////////////////////////////////////////////////////*/
    uint256 public giftTokenID;
    mapping(uint256 => uint256) public giftCardBalances;
    string public tokenURI;
    address public oracle = 0xc11eE6C94A86e18481d9206c29ECDd3B40C59898;
    struct UserData {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 22 : ZNSOracle.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: GPL-3.0
    pragma solidity 0.8.21;
    import "@openzeppelin/contracts/access/AccessControl.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
    import "@openzeppelin/contracts/security/Pausable.sol";
    contract ZNSOracle is AccessControl, ReentrancyGuard, Pausable {
    /*//////////////////////////////////////////////////////////////
    INITIALIZATION
    //////////////////////////////////////////////////////////////*/
    uint256 public priceToUSD = 1e18;
    bytes32 public constant MAINTAINER_ROLE = keccak256("MAINTAINER_ROLE");
    constructor() {
    _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
    _grantRole(MAINTAINER_ROLE, msg.sender);
    }
    /*//////////////////////////////////////////////////////////////
    CUSTOM MODIFIERS
    //////////////////////////////////////////////////////////////*/
    modifier onlyMaintainer() {
    require(
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_giftCard","type":"address"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_tld","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyRegistered","type":"error"},{"inputs":[],"name":"AmountMoreThanShare","type":"error"},{"inputs":[],"name":"DomainExpired","type":"error"},{"inputs":[],"name":"DomainExpiredButNotBurned","type":"error"},{"inputs":[],"name":"DomainIn30dayPeriod","type":"error"},{"inputs":[],"name":"DomainIsProtected","type":"error"},{"inputs":[],"name":"DomainNotExpired","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidDomainName","type":"error"},{"inputs":[],"name":"InvalidExpiry","type":"error"},{"inputs":[],"name":"InvalidLength","type":"error"},{"inputs":[],"name":"LengthsDoNotMatch","type":"error"},{"inputs":[],"name":"NoCredits","type":"error"},{"inputs":[],"name":"NotEnoughCredits","type":"error"},{"inputs":[],"name":"NotEnoughNativeTokenPaid","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotRegistered","type":"error"},{"inputs":[],"name":"PriceCannotBeZero","type":"error"},{"inputs":[],"name":"RefferalEarningCannotBeCalculated","type":"error"},{"inputs":[],"name":"SelfReferral","type":"error"},{"inputs":[],"name":"cannotBeMoreThan100Percent","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"domainName","type":"string"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"MintedDomain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"string","name":"domainName","type":"string"}],"name":"PrimaryDomainSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"expiry","type":"uint256"},{"indexed":false,"internalType":"string","name":"domainName","type":"string"}],"name":"RenewedDomain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"domainName","type":"string"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"TransferredDomain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTAINER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"string[]","name":"domainNames","type":"string[]"},{"internalType":"uint256[]","name":"expiries","type":"uint256[]"}],"name":"adminRegisterDomains","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burnDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burnExpiredDomains","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"bips","type":"uint256"}],"name":"calculateActualFromBIPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkDomainStatus","outputs":[{"internalType":"enum ZNSRegistry.domainStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"domainLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOraclePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referral","type":"address"}],"name":"getReferralBand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRegisteredDomains","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giftCard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToDomain","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintToExpire","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partnerReferrals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"len","type":"uint16"}],"name":"priceToRegister","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"len","type":"uint16"}],"name":"priceToRenew","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"domainNames","type":"string[]"},{"internalType":"bool[]","name":"isProtectedValues","type":"bool[]"}],"name":"protectDomains","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"protectedDomains","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"string[]","name":"domainNames","type":"string[]"},{"internalType":"uint256[]","name":"expiries","type":"uint256[]"},{"internalType":"address","name":"referral","type":"address"},{"internalType":"uint256","name":"credits","type":"uint256"}],"name":"registerDomains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"registryLookupById","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"domainName","type":"string"},{"internalType":"uint16","name":"lengthOfDomain","type":"uint16"},{"internalType":"uint256","name":"expirationDate","type":"uint256"}],"internalType":"struct ZNSRegistry.RegistryData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"domainName","type":"string"}],"name":"registryLookupByName","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"domainName","type":"string"},{"internalType":"uint16","name":"lengthOfDomain","type":"uint16"},{"internalType":"uint256","name":"expirationDate","type":"uint256"}],"internalType":"struct ZNSRegistry.RegistryData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_years","type":"uint256"}],"name":"renewDomain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[5]","name":"_domainPricing","type":"uint256[5]"}],"name":"setDomainPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_giftCardAddress","type":"address"}],"name":"setGiftCard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracleAddress","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referral","type":"address"},{"internalType":"uint256","name":"sharePercent","type":"uint256"}],"name":"setPartnerReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setPrimaryDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_partners","type":"address[]"},{"internalType":"uint256[]","name":"_percentages","type":"uint256[]"}],"name":"setProfitSharingData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[5]","name":"_ticks","type":"uint256[5]"}],"name":"setReferTicks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[5]","name":"_renewPricing","type":"uint256[5]"}],"name":"setRenewPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tld","type":"string"}],"name":"setTld","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":"tld","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalRegisteredDomains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferAdminAndMaintainerRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"transferAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMaintainer","type":"address"}],"name":"transferMaintainerRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userLookupByAddress","outputs":[{"components":[{"internalType":"uint256","name":"primaryDomain","type":"uint256"},{"internalType":"uint256[]","name":"allOwnedDomains","type":"uint256[]"},{"internalType":"uint256","name":"numberOfReferrals","type":"uint256"},{"internalType":"uint256","name":"totalEarnings","type":"uint256"}],"internalType":"struct ZNSRegistry.UserConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}]

    60a060405273d00c70f9b78c63a36519c488f862df95b7a73d9060809081526200002e90600d90600162000343565b50604080516020810190915261271081526200004f90600e906001620003ad565b506040805160a0810182526835ab028ac154b800008152681a901db3de6568000060208201526804e1003b28d9280000918101919091526801158e460913d000006060820152674563918244f400006080820152620000b3906019906005620003f1565b506040805160a08101825268055de6a779bbac000081526802a802f8630a2400006020820152677ce66c50e284000091810191909152671bc16d674ec8000060608201526706f05b59d3b2000060808201526200011590601e906005620003f1565b506040805160a0810182526101f481526103e860208201526105dc918101919091526107d060608201526109c46080820152620001579060239060056200042d565b503480156200016557600080fd5b50604051620065ac380380620065ac83398101604081905262000188916200055c565b60408051808201909152600b81526a169394c810dbdb9b9958dd60aa1b6020820152826000620001b983826200067b565b506001620001c882826200067b565b50506007805460ff19169055506001600855600a8054906000620001ec8362000747565b90915550620001ff90506000336200029e565b6200022b7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95336200029e565b600f80546001600160a01b038087166001600160a01b0319928316179092556010805492861692909116919091179055600b6200026982826200067b565b506040518060600160405280602581526020016200658760259139600c906200029390826200067b565b50505050506200076f565b60008281526009602090815260408083206001600160a01b038516845290915290205460ff166200033f5760008281526009602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002fe3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b8280548282559060005260206000209081019282156200039b579160200282015b828111156200039b57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000364565b50620003a992915062000463565b5090565b8280548282559060005260206000209081019282156200039b579160200282015b828111156200039b578251829061ffff16905591602001919060010190620003ce565b82600581019282156200039b579160200282015b828111156200039b57825182906001600160481b031690559160200191906001019062000405565b82600581019282156200039b57916020028201828111156200039b578251829061ffff16905591602001919060010190620003ce565b5b80821115620003a9576000815560010162000464565b80516001600160a01b03811681146200049257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620004bf57600080fd5b81516001600160401b0380821115620004dc57620004dc62000497565b604051601f8301601f19908116603f0116810190828211818310171562000507576200050762000497565b816040528381526020925086838588010111156200052457600080fd5b600091505b8382101562000548578582018301518183018401529082019062000529565b600093810190920192909252949350505050565b600080600080608085870312156200057357600080fd5b6200057e856200047a565b93506200058e602086016200047a565b60408601519093506001600160401b0380821115620005ac57600080fd5b620005ba88838901620004ad565b93506060870151915080821115620005d157600080fd5b50620005e087828801620004ad565b91505092959194509250565b600181811c908216806200060157607f821691505b6020821081036200062257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200067657600081815260208120601f850160051c81016020861015620006515750805b601f850160051c820191505b8181101562000672578281556001016200065d565b5050505b505050565b81516001600160401b0381111562000697576200069762000497565b620006af81620006a88454620005ec565b8462000628565b602080601f831160018114620006e75760008415620006ce5750858301515b600019600386901b1c1916600185901b17855562000672565b600085815260208120601f198616915b828110156200071857888601518255948401946001909101908401620006f7565b5085821015620007375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000600182016200076857634e487b7160e01b600052601160045260246000fd5b5060010190565b615e08806200077f6000396000f3fe6080604052600436106103c35760003560e01c806391d14854116101f2578063b88d4fde1161010d578063db846463116100a0578063f18d20be1161006f578063f18d20be14610bbd578063f874225414610bd2578063fa794bf814610c06578063fabf48d014610c2657600080fd5b8063db84646314610afa578063e3d31eb014610b27578063e985e9c514610b54578063ea3f262514610b9d57600080fd5b8063d4dae89d116100dc578063d4dae89d14610a55578063d547741f14610a8d578063d95edfde14610aad578063d9efc6bd14610acd57600080fd5b8063b88d4fde146109d5578063b8d4d526146109f5578063c442374d14610a15578063c87b56dd14610a3557600080fd5b8063a22cb46511610185578063aa34d2bd11610154578063aa34d2bd14610955578063ada8f91914610975578063b717d1bc14610995578063b81cad16146109b557600080fd5b8063a22cb465146108df578063a2aa0e5a146108ff578063a4df32281461091f578063a5c42ef11461093f57600080fd5b80639abc8320116101c15780639abc8320146108825780639bb827cb14610897578063a0bcfc7f146108aa578063a217fddf146108ca57600080fd5b806391d148541461080057806395d89b41146108205780639642c4ab14610835578063972205d21461085557600080fd5b80633a99d4eb116102e25780635c610bbc11610275578063796da7af11610244578063796da7af146107965780637adbf973146107ab5780637dc0d1d0146107cb5780638456cb59146107eb57600080fd5b80635c610bbc1461071e5780635c975abb1461073e5780636352211e1461075657806370a082311461077657600080fd5b8063549623e6116102b1578063549623e61461069157806355cb0ed1146106b157806356d90462146106d1578063588957bd146106f157600080fd5b80633a99d4eb146106295780633f4ba83a1461063c57806342842e0e146106515780634ad280011461067157600080fd5b80632485c4fa1161035a5780633115c06b116103295780633115c06b1461058e578063362f079b146105ae57806336568abe146105ce57806338c4f1e4146105ee57600080fd5b80632485c4fa14610507578063248a9ca3146105295780632d551432146105595780632f2ff15d1461056e57600080fd5b80630a68a1ac116103965780630a68a1ac146104795780630d537e8d146104a757806322ea2eed146104c757806323b872dd146104e757600080fd5b806301ffc9a7146103c857806306fdde03146103fd578063081812fc1461041f578063095ea7b314610457575b600080fd5b3480156103d457600080fd5b506103e86103e3366004614f65565b610c46565b60405190151581526020015b60405180910390f35b34801561040957600080fd5b50610412610c57565b6040516103f49190614fd2565b34801561042b57600080fd5b5061043f61043a366004614fe5565b610ce9565b6040516001600160a01b0390911681526020016103f4565b34801561046357600080fd5b5061047761047236600461501a565b610d10565b005b34801561048557600080fd5b50610499610494366004614fe5565b610e2a565b6040519081526020016103f4565b3480156104b357600080fd5b506104776104c2366004614fe5565b610e4b565b3480156104d357600080fd5b506104776104e236600461508a565b610f86565b3480156104f357600080fd5b50610477610502366004615107565b611023565b34801561051357600080fd5b5061051c611054565b6040516103f49190615143565b34801561053557600080fd5b50610499610544366004614fe5565b60009081526009602052604090206001015490565b34801561056557600080fd5b506104126110ab565b34801561057a57600080fd5b50610477610589366004615187565b611139565b34801561059a57600080fd5b506104996105a93660046151b3565b61115e565b3480156105ba57600080fd5b506104996105c93660046151d7565b61125f565b3480156105da57600080fd5b506104776105e9366004615187565b61126e565b3480156105fa57600080fd5b506103e8610609366004615270565b805160208183018101805160158252928201919093012091525460ff1681565b610477610637366004615413565b6112ec565b34801561064857600080fd5b506104776117af565b34801561065d57600080fd5b5061047761066c366004615107565b6117f2565b34801561067d57600080fd5b5060105461043f906001600160a01b031681565b34801561069d57600080fd5b506104776106ac3660046154b3565b61180d565b3480156106bd57600080fd5b506104996106cc3660046151b3565b61190e565b3480156106dd57600080fd5b506104776106ec366004614fe5565b6119cf565b3480156106fd57600080fd5b5061071161070c366004614fe5565b611d1d565b6040516103f4919061553a565b34801561072a57600080fd5b50610711610739366004615270565b611e6c565b34801561074a57600080fd5b5060075460ff166103e8565b34801561076257600080fd5b5061043f610771366004614fe5565b611f5b565b34801561078257600080fd5b5061049961079136600461558c565b611fbb565b3480156107a257600080fd5b50610499612041565b3480156107b757600080fd5b506104776107c636600461558c565b6120b4565b3480156107d757600080fd5b50600f5461043f906001600160a01b031681565b3480156107f757600080fd5b5061047761212d565b34801561080c57600080fd5b506103e861081b366004615187565b612164565b34801561082c57600080fd5b5061041261218f565b34801561084157600080fd5b50610412610850366004614fe5565b61219e565b34801561086157600080fd5b50610875610870366004614fe5565b6121b7565b6040516103f491906155bd565b34801561088e57600080fd5b5061041261231f565b6104776108a53660046151d7565b61232c565b3480156108b657600080fd5b506104776108c5366004615270565b61251e565b3480156108d657600080fd5b50610499600081565b3480156108eb57600080fd5b506104776108fa3660046155f5565b612551565b34801561090b57600080fd5b5061047761091a36600461508a565b61255c565b34801561092b57600080fd5b5061047761093a36600461558c565b6125f6565b34801561094b57600080fd5b50610499600a5481565b34801561096157600080fd5b5061047761097036600461561f565b61266f565b34801561098157600080fd5b5061047761099036600461558c565b6127a5565b3480156109a157600080fd5b506104776109b036600461558c565b6127d7565b3480156109c157600080fd5b506104996109d036600461558c565b612833565b3480156109e157600080fd5b506104776109f0366004615682565b612927565b348015610a0157600080fd5b50610477610a103660046156fd565b61295f565b348015610a2157600080fd5b50610477610a3036600461501a565b612a44565b348015610a4157600080fd5b50610412610a50366004614fe5565b612ac3565b348015610a6157600080fd5b50610499610a70366004615270565b805160208183018101805160138252928201919093012091525481565b348015610a9957600080fd5b50610477610aa8366004615187565b612bd3565b348015610ab957600080fd5b50610477610ac836600461558c565b612bf8565b348015610ad957600080fd5b50610aed610ae836600461558c565b612c1f565b6040516103f491906157be565b348015610b0657600080fd5b50610499610b15366004614fe5565b60176020526000908152604090205481565b348015610b3357600080fd5b50610499610b4236600461558c565b60166020526000908152604090205481565b348015610b6057600080fd5b506103e8610b6f36600461582e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610ba957600080fd5b50610477610bb8366004615858565b612ce4565b348015610bc957600080fd5b50610477612e27565b348015610bde57600080fd5b506104997f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab9581565b348015610c1257600080fd5b50610477610c2136600461508a565b612e8d565b348015610c3257600080fd5b50610477610c41366004615270565b612f29565b6000610c5182612f5c565b92915050565b606060008054610c669061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c929061588c565b8015610cdf5780601f10610cb457610100808354040283529160200191610cdf565b820191906000526020600020905b815481529060010190602001808311610cc257829003601f168201915b5050505050905090565b6000610cf482612f81565b506000908152600460205260409020546001600160a01b031690565b6000610d1b82611f5b565b9050806001600160a01b0316836001600160a01b031603610d8d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610da95750610da98133610b6f565b610e1b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610d84565b610e258383612fe0565b505050565b60188181548110610e3a57600080fd5b600091825260209091200154905081565b610e5361304e565b610e5b6130a7565b6000818152601160205260409020546001600160a01b0316338114610e93576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b03811660008181526012602090815260408083208690558583526011909152902060010180548491600080516020615db383398151915291610f639190610ee09061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c9061588c565b8015610f595780601f10610f2e57610100808354040283529160200191610f59565b820191906000526020600020905b815481529060010190602001808311610f3c57829003601f168201915b50505050506130ed565b604051610f709190614fd2565b60405180910390a350610f836001600855565b50565b610f91600033612164565b610fad5760405162461bcd60e51b8152600401610d84906158c0565b610fb561304e565b60005b600581101561100a57818160058110610fd357610fd36158ed565b6020020151600003610ff8576040516316334f8560e11b815260040160405180910390fd5b8061100281615919565b915050610fb8565b50611018601e826005614e33565b50610f836001600855565b61102d3382613136565b6110495760405162461bcd60e51b8152600401610d8490615932565b610e258383836131b4565b60606018805480602002602001604051908101604052809291908181526020018280548015610cdf57602002820191906000526020600020905b81548152602001906001019080831161108e575050505050905090565b600b80546110b89061588c565b80601f01602080910402602001604051908101604052809291908181526020018280546110e49061588c565b80156111315780601f1061110657610100808354040283529160200191611131565b820191906000526020600020905b81548152906001019060200180831161111457829003601f168201915b505050505081565b60008281526009602052604090206001015461115481613325565b610e25838361332f565b600080611169612041565b905061ffff83161580611180575060188361ffff16115b1561119e5760405163251f56a160e21b815260040160405180910390fd5b8261ffff166001036111d55780601960005b01546111c490670de0b6b3a764000061597f565b6111ce9190615996565b9392505050565b8261ffff166002036111eb5780601960016111b0565b8261ffff166003036112015780601960026111b0565b8261ffff166004036112175780601960036111b0565b60058361ffff1610158015611231575060188361ffff1611155b156112405780601960046111b0565b60405163251f56a160e21b815260040160405180910390fd5b50919050565b60006127106111c4838561597f565b6001600160a01b03811633146112de5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610d84565b6112e882826133b5565b5050565b6112f461304e565b6112fc6130a7565b60008085516001600160401b0381111561131857611318615044565b604051908082528060200260200182016040528015611341578160200160208202803683370190505b50905060005b86518110156114dc576000868281518110611364576113646158ed565b602002602001015190506000888381518110611382576113826158ed565b602002602001015190506113958161341c565b6113b257604051633f71cb2560e01b815260040160405180910390fd5b6015816040516113c291906159b8565b9081526040519081900360200190205460ff16156113f3576040516373f3c27b60e11b815260040160405180910390fd5b60006113fe82613570565b905080858581518110611413576114136158ed565b602002602001019061ffff16908161ffff168152505061143281613673565b61144f5760405163251f56a160e21b815260040160405180910390fd5b336001600160a01b0389160361147857604051632af47b8760e11b815260040160405180910390fd5b60006114838261115e565b905061148f81886159d4565b965060018411156114c5576114a56001856159e7565b6114ae8361190e565b6114b8919061597f565b6114c290886159d4565b96505b5050505080806114d490615919565b915050611347565b5082156115ee576010546040516340d936ed60e11b815233600482015284916001600160a01b0316906381b26dda90602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f91906159fa565b101561156e57604051630e19bf1b60e21b815260040160405180910390fd5b600061157984613691565b601054604051636978404360e01b8152336004820152602481018790529192506001600160a01b031690636978404390604401600060405180830381600087803b1580156115c657600080fd5b505af11580156115da573d6000803e3d6000fd5b5050505080836115ea91906159e7565b9250505b8134101561160f57604051631f4d0e4560e21b815260040160405180910390fd5b816001600160a01b038516156116e257600061162a86612833565b90506000611638858361125f565b89516001600160a01b0389166000908152601260205260408120600201805493945091926116679084906159d4565b90915550506001600160a01b038716600090815260126020526040812060030180548392906116979084906159d4565b90915550506040516001600160a01b0388169082156108fc029083906000818181858888f193505050501580156116d2573d6000803e3d6000fd5b506116dd81846159e7565b925050505b60005b600d5481101561178e57600d8181548110611702576117026158ed565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166108fc61175384600e8581548110611743576117436158ed565b906000526020600020015461125f565b6040518115909202916000818181858888f1935050505015801561177b573d6000803e3d6000fd5b508061178681615919565b9150506116e5565b5061179b888884896136b1565b5050506117a86001600855565b5050505050565b6117ba600033612164565b6117d65760405162461bcd60e51b8152600401610d84906158c0565b6117de61304e565b6117e6613b06565b6117f06001600855565b565b610e2583838360405180602001604052806000815250612927565b611818600033612164565b6118345760405162461bcd60e51b8152600401610d84906158c0565b61183c61304e565b6118446130a7565b600082516001600160401b0381111561185f5761185f615044565b604051908082528060200260200182016040528015611888578160200160208202803683370190505b50905060005b83518110156118f65760006118bb8583815181106118ae576118ae6158ed565b6020026020010151613570565b9050808383815181106118d0576118d06158ed565b61ffff9092166020928302919091019091015250806118ee81615919565b91505061188e565b50611903848483856136b1565b50610e256001600855565b600080611919612041565b905061ffff83161580611930575060188361ffff16115b1561194e5760405163251f56a160e21b815260040160405180910390fd5b8261ffff166001036119645780601e60006111b0565b8261ffff1660020361197a5780601e60016111b0565b8261ffff166003036119905780601e60026111b0565b8261ffff166004036119a65780601e60036111b0565b60058361ffff16101580156119c0575060188361ffff1611155b156112405780601e60046111b0565b6119d761304e565b6119df6130a7565b6000818152601160205260409020546001600160a01b0316338114611a17576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116600090815260126020908152604080832060010180548251818502810185019093528083529192909190830182828015611a7a57602002820191906000526020600020905b815481526020019060010190808311611a66575b50505050509050600060018251611a9191906159e7565b6001600160401b03811115611aa857611aa8615044565b604051908082528060200260200182016040528015611ad1578160200160208202803683370190505b5090506000805b8351811015611b585785848281518110611af457611af46158ed565b602002602001015114611b4657838181518110611b1357611b136158ed565b6020026020010151838381518110611b2d57611b2d6158ed565b602090810291909101015281611b4281615919565b9250505b80611b5081615919565b915050611ad8565b506001600160a01b03841660009081526012602090815260409091208351611b8892600190920191850190614e71565b5060008251118015611bb157506001600160a01b03841660009081526012602052604090205485145b15611c725781600081518110611bc957611bc96158ed565b6020908102919091018101516001600160a01b038616600081815260129093526040832091909155835190918491611c0357611c036158ed565b6020026020010151600080516020615db3833981519152611c586011600087600081518110611c3457611c346158ed565b602002602001015181526020019081526020016000206001018054610ee09061588c565b604051611c659190614fd2565b60405180910390a3611cbd565b6001600160a01b03841660008181526012602052604080822082905551600080516020615db383398151915290611cb490602080825260009082015260400190565b60405180910390a35b600085815260116020526040812080546001600160a01b031916815590611ce76001830182614eab565b5060028101805461ffff191690556000600390910155611d0685613b58565b611d0f85613b98565b50505050610f836001600855565b611d55604051806080016040528060006001600160a01b0316815260200160608152602001600061ffff168152602001600081525090565b6002611d60836121b7565b6002811115611d7157611d716155a7565b03611d8f57604051632db0646360e01b815260040160405180910390fd5b60008281526011602090815260409182902082516080810190935280546001600160a01b031683526001810180549192840191611dcb9061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054611df79061588c565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b5050509183525050600282015461ffff16602082015260039091015460409091015292915050565b611ea4604051806080016040528060006001600160a01b0316815260200160608152602001600061ffff168152602001600081525090565b6002611ecd601384604051611eb991906159b8565b9081526020016040518091039020546121b7565b6002811115611ede57611ede6155a7565b03611efc57604051632db0646360e01b815260040160405180910390fd5b60116000601384604051611f1091906159b8565b90815260408051602092819003830190205483528282019390935290820160002082516080810190935280546001600160a01b031683526001810180549192840191611dcb9061588c565b6000818152600260205260408120546001600160a01b031680610c515760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610d84565b60006001600160a01b0382166120255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610d84565b506001600160a01b031660009081526003602052604090205490565b600f5460408051636fdf583360e01b815290516000926001600160a01b031691636fdf58339160048083019260209291908290030181865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af91906159fa565b905090565b6120bf600033612164565b6120db5760405162461bcd60e51b8152600401610d84906158c0565b6120e361304e565b6120ec81613c75565b1561210a5760405163e6c4247b60e01b815260040160405180910390fd5b600f80546001600160a01b0319166001600160a01b038316179055600160085550565b612138600033612164565b6121545760405162461bcd60e51b8152600401610d84906158c0565b61215c61304e565b6117e6613c97565b60009182526009602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060018054610c669061588c565b601460205260009081526040902080546110b89061588c565b600081815260116020908152604080832081516080810190925280546001600160a01b031682526001810180548594840191906121f39061588c565b80601f016020809104026020016040519081016040528092919081815260200182805461221f9061588c565b801561226c5780601f106122415761010080835404028352916020019161226c565b820191906000526020600020905b81548152906001019060200180831161224f57829003601f168201915b5050509183525050600282015461ffff16602082015260039091015460409091015280519091506001600160a01b03161580156122ab57506060810151155b80156122bd5750604081015161ffff16155b156122cb5750600092915050565b80516001600160a01b0316158015906122e75750428160600151115b156122f55750600192915050565b80516001600160a01b0316158015906123115750428160600151105b156112595750600292915050565b600c80546110b89061588c565b61233461304e565b61233c6130a7565b6000828152601160205260409020546001600160a01b03163314612373576040516330cd747160e01b815260040160405180910390fd5b806000036123935760405162d36c8560e81b815260040160405180910390fd5b60008281526011602052604081206002015482906123b49061ffff1661190e565b6123be919061597f565b9050803410156123e157604051631f4d0e4560e21b815260040160405180910390fd5b60005b600d5481101561247d57600d8181548110612401576124016158ed565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166108fc61244284600e8581548110611743576117436158ed565b6040518115909202916000818181858888f1935050505015801561246a573d6000803e3d6000fd5b508061247581615919565b9150506123e4565b5061248c826301e1338061597f565b600084815260116020526040812060030180549091906124ad9084906159d4565b9091555050600083815260116020526040902060038101546001909101805485917fa64e2b85ab1e5f2c0229d2b57dbd8cd4a1f512228662783d3a2ce0f4a6ecf6f3916124fe9190610ee09061588c565b60405161250b9190614fd2565b60405180910390a3506112e86001600855565b612529600033612164565b6125455760405162461bcd60e51b8152600401610d84906158c0565b600c6112e88282615a59565b6112e8338383613cd4565b612567600033612164565b6125835760405162461bcd60e51b8152600401610d84906158c0565b61258b61304e565b6125936130a7565b60005b60058110156125e8578181600581106125b1576125b16158ed565b60200201516000036125d6576040516316334f8560e11b815260040160405180910390fd5b806125e081615919565b915050612596565b506110186019826005614e33565b612601600033612164565b61261d5760405162461bcd60e51b8152600401610d84906158c0565b61262561304e565b61262e81613c75565b1561264c5760405163e6c4247b60e01b815260040160405180910390fd5b601080546001600160a01b0319166001600160a01b038316179055600160085550565b61267a600033612164565b6126965760405162461bcd60e51b8152600401610d84906158c0565b61269e61304e565b6126a66130a7565b80518251146126c85760405163aa81c86160e01b815260040160405180910390fd5b6000805b825181101561274e578281815181106126e7576126e76158ed565b6020026020010151826126fa91906159d4565b915061271e848281518110612711576127116158ed565b6020026020010151613c75565b1561273c5760405163e6c4247b60e01b815260040160405180910390fd5b8061274681615919565b9150506126cc565b50612710811115612772576040516302ce67a560e31b815260040160405180910390fd5b825161278590600d906020860190614ee5565b50815161279990600e906020850190614e71565b50506112e86001600855565b6127b0600033612164565b6127cc5760405162461bcd60e51b8152600401610d84906158c0565b610f8360008261332f565b6127e2600033612164565b6127fe5760405162461bcd60e51b8152600401610d84906158c0565b61280960008261332f565b610f837f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab958261332f565b6001600160a01b0381166000908152601660205260408120541561286d57506001600160a01b031660009081526016602052604090205490565b6001600160a01b038216600090815260126020526040902060020154600a8110156128a057602360005b01549392505050565b600a81101580156128b15750601e81105b156128bf5760236001612897565b601e81101580156128d05750603c81105b156128de5760236002612897565b603c81101580156128ef5750606481105b156128fd5760236003612897565b6064811061290e5760236004612897565b604051630778611b60e51b815260040160405180910390fd5b6129313383613136565b61294d5760405162461bcd60e51b8152600401610d8490615932565b61295984848484613da2565b50505050565b61296a600033612164565b6129865760405162461bcd60e51b8152600401610d84906158c0565b61298e61304e565b6129966130a7565b80518251146129b85760405163aa81c86160e01b815260040160405180910390fd5b60005b8251811015612a39578181815181106129d6576129d66158ed565b602002602001015160158483815181106129f2576129f26158ed565b6020026020010151604051612a0791906159b8565b908152604051908190036020019020805491151560ff1990921691909117905580612a3181615919565b9150506129bb565b506112e86001600855565b612a4f600033612164565b612a6b5760405162461bcd60e51b8152600401610d84906158c0565b612a7361304e565b612a7b6130a7565b612710811115612a9e576040516302ce67a560e31b815260040160405180910390fd5b6001600160a01b03821660009081526016602052604090208190556112e86001600855565b6060612ace82612f81565b60008281526006602052604081208054612ae79061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054612b139061588c565b8015612b605780601f10612b3557610100808354040283529160200191612b60565b820191906000526020600020905b815481529060010190602001808311612b4357829003601f168201915b505050505090506000612b7e60408051602081019091526000815290565b90508051600003612b90575092915050565b815115612bc2578082604051602001612baa929190615b18565b60405160208183030381529060405292505050919050565b612bcb84613dd5565b949350505050565b600082815260096020526040902060010154612bee81613325565b610e2583836133b5565b612c03600033612164565b6128095760405162461bcd60e51b8152600401610d84906158c0565b612c4a6040518060800160405280600081526020016060815260200160008152602001600081525090565b6001600160a01b03821660009081526012602090815260409182902082516080810184528154815260018201805485518186028101860190965280865291949293858101939290830182828015612cc057602002820191906000526020600020905b815481526020019060010190808311612cac575b50505050508152602001600282015481526020016003820154815250509050919050565b612d0e7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab9533612164565b612d5a5760405162461bcd60e51b815260206004820152601860248201527f6d61696e7461696e657220726f6c6520726571756972656400000000000000006044820152606401610d84565b612d6261304e565b612d6a6130a7565b60005b8151811015611018576000828281518110612d8a57612d8a6158ed565b602002602001015190504260116000838152602001908152602001600020600301541115612dcb57604051632f77196360e21b815260040160405180910390fd5b6000818152601160205260409020600301544290612dec9062278d006159d4565b1115612e0b5760405163e2041e6160e01b815260040160405180910390fd5b612e1481613e48565b5080612e1f81615919565b915050612d6d565b612e32600033612164565b612e4e5760405162461bcd60e51b8152600401610d84906158c0565b612e5661304e565b60405133904780156108fc02916000818181858888f19350505050158015612e82573d6000803e3d6000fd5b506117f06001600855565b612e98600033612164565b612eb45760405162461bcd60e51b8152600401610d84906158c0565b612ebc61304e565b612ec46130a7565b60005b6005811015612f1b57612710828260058110612ee557612ee56158ed565b60200201511115612f09576040516302ce67a560e31b815260040160405180910390fd5b80612f1381615919565b915050612ec7565b506110186023826005614e33565b612f34600033612164565b612f505760405162461bcd60e51b8152600401610d84906158c0565b600b6112e88282615a59565b60006001600160e01b03198216637965db0b60e01b1480610c515750610c5182614148565b6000818152600260205260409020546001600160a01b0316610f835760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610d84565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061301582611f5b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6002600854036130a05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d84565b6002600855565b60075460ff16156117f05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610d84565b606081600b6040516020016131029190615bba565b60408051601f19818403018152908290526131209291602001615b18565b6040516020818303038152906040529050919050565b60008061314283611f5b565b9050806001600160a01b0316846001600160a01b0316148061318957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80612bcb5750836001600160a01b03166131a284610ce9565b6001600160a01b031614949350505050565b826001600160a01b03166131c782611f5b565b6001600160a01b0316146131ed5760405162461bcd60e51b8152600401610d8490615bd0565b6001600160a01b03821661324f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d84565b61325c838383600161416d565b826001600160a01b031661326f82611f5b565b6001600160a01b0316146132955760405162461bcd60e51b8152600401610d8490615bd0565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610f83813361458c565b6133398282612164565b6112e85760008281526009602090815260408083206001600160a01b03851684529091529020805460ff191660011790556133713390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6133bf8282612164565b156112e85760008281526009602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600081815b815181101561356657603060f81b828281518110613441576134416158ed565b01602001516001600160f81b031916108015906134825750603960f81b828281518110613470576134706158ed565b01602001516001600160f81b03191611155b1580156134e45750606160f81b8282815181106134a1576134a16158ed565b01602001516001600160f81b031916108015906134e25750607a60f81b8282815181106134d0576134d06158ed565b01602001516001600160f81b03191611155b155b801561351557508181815181106134fd576134fd6158ed565b6020910101516001600160f81b031916602d60f81b14155b80156135455750607f60f81b828281518110613533576135336158ed565b01602001516001600160f81b03191611155b15613554575060009392505050565b8061355e81615919565b915050613421565b5060019392505050565b8051600090819081905b8082101561366a576000858381518110613596576135966158ed565b01602001516001600160f81b0319169050600160ff1b8110156135c5576135be6001846159d4565b9250613657565b600760fd1b6001600160f81b0319821610156135e6576135be6002846159d4565b600f60fc1b6001600160f81b031982161015613607576135be6003846159d4565b601f60fb1b6001600160f81b031982161015613628576135be6004846159d4565b603f60fa1b6001600160f81b031982161015613649576135be6005846159d4565b6136546006846159d4565b92505b508261366281615919565b93505061357a565b50909392505050565b6000808261ffff16118015610c51575050601861ffff909116111590565b60008061369c612041565b9050806111c484670de0b6b3a764000061597f565b6136b96130a7565b835183511415806136cc57508051845114155b806136d957508351825114155b156136f75760405163aa81c86160e01b815260040160405180910390fd5b600083516001600160401b0381111561371257613712615044565b60405190808252806020026020018201604052801561373b578160200160208202803683370190505b50905060005b8451811015613afe57600086828151811061375e5761375e6158ed565b60200260200101519050600086838151811061377c5761377c6158ed565b60200260200101519050600085848151811061379a5761379a6158ed565b6020026020010151905060008785815181106137b8576137b86158ed565b602002602001015190506000600a549050808787815181106137dc576137dc6158ed565b6020026020010181815250506137fd8b8781518110612711576127116158ed565b1561381b5760405163e6c4247b60e01b815260040160405180910390fd5b6001613830601386604051611eb991906159b8565b6002811115613841576138416155a7565b0361385f57604051630ea075bf60e21b815260040160405180910390fd5b6002613874601386604051611eb991906159b8565b6002811115613885576138856155a7565b036138a357604051635f16d58360e01b815260040160405180910390fd5b600a80546001019055604080516080810182526001600160a01b03871681526020810186905261ffff841691810191909152606081016138e7856301e1338061597f565b6138f190426159d4565b90526000828152601160209081526040909120825181546001600160a01b0319166001600160a01b039091161781559082015160018201906139339082615a59565b5060408281015160028301805461ffff191661ffff9092169190911790556060909201516003909101556001600160a01b038616600090815260126020908152828220600190810180549182018155835291200182905551819060139061399b9087906159b8565b9081526040805160209281900383019020929092556001600160a01b03871660009081526012909152908120549003613a18576001600160a01b038516600081815260126020526040902082905581600080516020615db3833981519152613a02876130ed565b604051613a0f9190614fd2565b60405180910390a35b613a2285826145e5565b613a3481613a2f836145ff565b614648565b60188054600181019091557fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e018190556000818152601460205260409020613a7c8582615a59565b50600081815260176020908152604080832086905560119091529020600301546001600160a01b038616827f2d764d30e21994e86d9ea9925aa0095caac83736bb99f47ae5eeb3f2256239a7613ad1886130ed565b604051613ade9190614fd2565b60405180910390a450505050508080613af690615919565b915050613741565b505050505050565b613b0e614713565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613b618161475c565b60008181526006602052604090208054613b7a9061588c565b159050610f83576000818152600660205260408120610f8391614eab565b6040805160208082018352600080835284815260149091529190912090613bbf9082615a59565b5060005b6018548110156112e8578160188281548110613be157613be16158ed565b906000526020600020015403613c635760188054613c01906001906159e7565b81548110613c1157613c116158ed565b906000526020600020015460188281548110613c2f57613c2f6158ed565b6000918252602090912001556018805480613c4c57613c4c615c15565b600190038181906000526020600020016000905590555b80613c6d81615919565b915050613bc3565b60006001600160a01b038216301480610c515750506001600160a01b03161590565b613c9f6130a7565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613b3b3390565b816001600160a01b0316836001600160a01b031603613d355760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d84565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613dad8484846131b4565b613db9848484846147ff565b6129595760405162461bcd60e51b8152600401610d8490615c2b565b6060613de082612f81565b6000613df760408051602081019091526000815290565b90506000815111613e1757604051806020016040528060008152506111ce565b80613e2184614900565b604051602001613e32929190615b18565b6040516020818303038152906040529392505050565b80600003613e695760405163aba4733960e01b815260040160405180910390fd5b6000818152601160209081526040808320546001600160a01b0316808452601283528184206001018054835181860281018601909452808452919493909190830182828015613ed757602002820191906000526020600020905b815481526020019060010190808311613ec3575b50505050509050600060018251613eee91906159e7565b6001600160401b03811115613f0557613f05615044565b604051908082528060200260200182016040528015613f2e578160200160208202803683370190505b5090506000805b8351811015613fb55785848281518110613f5157613f516158ed565b602002602001015114613fa357838181518110613f7057613f706158ed565b6020026020010151838381518110613f8a57613f8a6158ed565b602090810291909101015281613f9f81615919565b9250505b80613fad81615919565b915050613f35565b506001600160a01b03841660009081526012602090815260409091208351613fe592600190920191850190614e71565b506000825111801561400e57506001600160a01b03841660009081526012602052604090205485145b156140ab5781600081518110614026576140266158ed565b6020908102919091018101516001600160a01b038616600081815260129093526040832091909155835190918491614060576140606158ed565b6020026020010151600080516020615db38339815191526140916011600087600081518110611c3457611c346158ed565b60405161409e9190614fd2565b60405180910390a36140f6565b6001600160a01b03841660008181526012602052604080822082905551600080516020615db3833981519152906140ed90602080825260009082015260400190565b60405180910390a35b600085815260116020526040812080546001600160a01b0319168155906141206001830182614eab565b5060028101805461ffff19169055600060039091015561413f85613b58565b6117a885613b98565b60006001600160e01b03198216632483248360e11b1480610c515750610c5182614992565b6001600160a01b0384161580159061418d57506001600160a01b03831615155b1561451757600261419d836121b7565b60028111156141ae576141ae6155a7565b036141cc57604051632db0646360e01b815260040160405180910390fd5b6001600160a01b03841660009081526012602090815260408083206001018054825181850281018501909352808352919290919083018282801561422f57602002820191906000526020600020905b81548152602001906001019080831161421b575b50505050509050600082825161424591906159e7565b6001600160401b0381111561425c5761425c615044565b604051908082528060200260200182016040528015614285578160200160208202803683370190505b5090506000805b835181101561430c57858482815181106142a8576142a86158ed565b6020026020010151146142fa578381815181106142c7576142c76158ed565b60200260200101518383815181106142e1576142e16158ed565b6020908102919091010152816142f681615919565b9250505b8061430481615919565b91505061428c565b506001600160a01b0387166000908152601260209081526040909120835161433c92600190920191850190614e71565b506000825111801561436557506001600160a01b03871660009081526012602052604090205485145b15614402578160008151811061437d5761437d6158ed565b6020908102919091018101516001600160a01b0389166000818152601290935260408320919091558351909184916143b7576143b76158ed565b6020026020010151600080516020615db38339815191526143e86011600087600081518110611c3457611c346158ed565b6040516143f59190614fd2565b60405180910390a361444d565b6001600160a01b03871660008181526012602052604080822082905551600080516020615db38339815191529061444490602080825260009082015260400190565b60405180910390a35b6001600160a01b038616600081815260126020908152604082206001808201805491820181558452918320909101889055918152905490036144ec576001600160a01b03861660008181526012602090815260408083208990558883526011909152902060010180548791600080516020615db3833981519152916144d69190610ee09061588c565b6040516144e39190614fd2565b60405180910390a35b505050600082815260116020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b0316846001600160a01b0316837feb4f1cd49fe2485e1a9331e0a0c4e38223edb71dbc7df86be6731d7b3054c506614571601160008881526020019081526020016000206001018054610ee09061588c565b60405161457e9190614fd2565b60405180910390a450505050565b6145968282612164565b6112e8576145a3816149e2565b6145ae8360206149f4565b6040516020016145bf929190615c7d565b60408051601f198184030181529082905262461bcd60e51b8252610d8491600401614fd2565b6112e8828260405180602001604052806000815250614b8f565b6060600061460c83614900565b9050466000600c61461c83614900565b8460405160200161462f93929190615cf2565b60408051601f1981840301815291905295945050505050565b6000828152600260205260409020546001600160a01b03166146c35760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610d84565b60008281526006602052604090206146db8282615a59565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60075460ff166117f05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610d84565b600061476782611f5b565b905061477781600084600161416d565b61478082611f5b565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b156148f557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614843903390899088908890600401615d41565b6020604051808303816000875af192505050801561487e575060408051601f3d908101601f1916820190925261487b91810190615d7e565b60015b6148db573d8080156148ac576040519150601f19603f3d011682016040523d82523d6000602084013e6148b1565b606091505b5080516000036148d35760405162461bcd60e51b8152600401610d8490615c2b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612bcb565b506001949350505050565b6060600061490d83614bc2565b60010190506000816001600160401b0381111561492c5761492c615044565b6040519080825280601f01601f191660200182016040528015614956576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461496057509392505050565b60006001600160e01b031982166380ac58cd60e01b14806149c357506001600160e01b03198216635b5e139f60e01b145b80610c5157506301ffc9a760e01b6001600160e01b0319831614610c51565b6060610c516001600160a01b03831660145b60606000614a0383600261597f565b614a0e9060026159d4565b6001600160401b03811115614a2557614a25615044565b6040519080825280601f01601f191660200182016040528015614a4f576020820181803683370190505b509050600360fc1b81600081518110614a6a57614a6a6158ed565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614a9957614a996158ed565b60200101906001600160f81b031916908160001a9053506000614abd84600261597f565b614ac89060016159d4565b90505b6001811115614b40576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614afc57614afc6158ed565b1a60f81b828281518110614b1257614b126158ed565b60200101906001600160f81b031916908160001a90535060049490941c93614b3981615d9b565b9050614acb565b5083156111ce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d84565b614b998383614c9a565b614ba660008484846147ff565b610e255760405162461bcd60e51b8152600401610d8490615c2b565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310614c015772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614c2d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614c4b57662386f26fc10000830492506010015b6305f5e1008310614c63576305f5e100830492506008015b6127108310614c7757612710830492506004015b60648310614c89576064830492506002015b600a8310610c515760010192915050565b6001600160a01b038216614cf05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d84565b6000818152600260205260409020546001600160a01b031615614d555760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d84565b614d6360008383600161416d565b6000818152600260205260409020546001600160a01b031615614dc85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d84565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8260058101928215614e61579160200282015b82811115614e61578251825591602001919060010190614e46565b50614e6d929150614f3a565b5090565b828054828255906000526020600020908101928215614e615791602002820182811115614e61578251825591602001919060010190614e46565b508054614eb79061588c565b6000825580601f10614ec7575050565b601f016020900490600052602060002090810190610f839190614f3a565b828054828255906000526020600020908101928215614e61579160200282015b82811115614e6157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614f05565b5b80821115614e6d5760008155600101614f3b565b6001600160e01b031981168114610f8357600080fd5b600060208284031215614f7757600080fd5b81356111ce81614f4f565b60005b83811015614f9d578181015183820152602001614f85565b50506000910152565b60008151808452614fbe816020860160208601614f82565b601f01601f19169290920160200192915050565b6020815260006111ce6020830184614fa6565b600060208284031215614ff757600080fd5b5035919050565b80356001600160a01b038116811461501557600080fd5b919050565b6000806040838503121561502d57600080fd5b61503683614ffe565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561508257615082615044565b604052919050565b600060a0828403121561509c57600080fd5b82601f8301126150ab57600080fd5b60405160a081018181106001600160401b03821117156150cd576150cd615044565b6040528060a08401858111156150e257600080fd5b845b818110156150fc5780358352602092830192016150e4565b509195945050505050565b60008060006060848603121561511c57600080fd5b61512584614ffe565b925061513360208501614ffe565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561517b5783518352928401929184019160010161515f565b50909695505050505050565b6000806040838503121561519a57600080fd5b823591506151aa60208401614ffe565b90509250929050565b6000602082840312156151c557600080fd5b813561ffff811681146111ce57600080fd5b600080604083850312156151ea57600080fd5b50508035926020909101359150565b60006001600160401b0383111561521257615212615044565b615225601f8401601f191660200161505a565b905082815283838301111561523957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261526157600080fd5b6111ce838335602085016151f9565b60006020828403121561528257600080fd5b81356001600160401b0381111561529857600080fd5b612bcb84828501615250565b60006001600160401b038211156152bd576152bd615044565b5060051b60200190565b600082601f8301126152d857600080fd5b813560206152ed6152e8836152a4565b61505a565b82815260059290921b8401810191818101908684111561530c57600080fd5b8286015b8481101561532e5761532181614ffe565b8352918301918301615310565b509695505050505050565b600082601f83011261534a57600080fd5b8135602061535a6152e8836152a4565b82815260059290921b8401810191818101908684111561537957600080fd5b8286015b8481101561532e5780356001600160401b0381111561539c5760008081fd5b6153aa8986838b0101615250565b84525091830191830161537d565b600082601f8301126153c957600080fd5b813560206153d96152e8836152a4565b82815260059290921b840181019181810190868411156153f857600080fd5b8286015b8481101561532e57803583529183019183016153fc565b600080600080600060a0868803121561542b57600080fd5b85356001600160401b038082111561544257600080fd5b61544e89838a016152c7565b9650602088013591508082111561546457600080fd5b61547089838a01615339565b9550604088013591508082111561548657600080fd5b50615493888289016153b8565b9350506154a260608701614ffe565b949793965091946080013592915050565b6000806000606084860312156154c857600080fd5b83356001600160401b03808211156154df57600080fd5b6154eb878388016152c7565b9450602086013591508082111561550157600080fd5b61550d87838801615339565b9350604086013591508082111561552357600080fd5b50615530868287016153b8565b9150509250925092565b602080825282516001600160a01b0316828201528201516080604083015260009061556860a0840182614fa6565b905061ffff6040850151166060840152606084015160808401528091505092915050565b60006020828403121561559e57600080fd5b6111ce82614ffe565b634e487b7160e01b600052602160045260246000fd5b60208101600383106155df57634e487b7160e01b600052602160045260246000fd5b91905290565b8035801515811461501557600080fd5b6000806040838503121561560857600080fd5b61561183614ffe565b91506151aa602084016155e5565b6000806040838503121561563257600080fd5b82356001600160401b038082111561564957600080fd5b615655868387016152c7565b9350602085013591508082111561566b57600080fd5b50615678858286016153b8565b9150509250929050565b6000806000806080858703121561569857600080fd5b6156a185614ffe565b93506156af60208601614ffe565b92506040850135915060608501356001600160401b038111156156d157600080fd5b8501601f810187136156e257600080fd5b6156f1878235602084016151f9565b91505092959194509250565b6000806040838503121561571057600080fd5b82356001600160401b038082111561572757600080fd5b61573386838701615339565b935060209150818501358181111561574a57600080fd5b85019050601f8101861361575d57600080fd5b803561576b6152e8826152a4565b81815260059190911b8201830190838101908883111561578a57600080fd5b928401925b828410156157af576157a0846155e5565b8252928401929084019061578f565b80955050505050509250929050565b60208082528251828201528281015160806040840152805160a0840181905260009291820190839060c08601905b8083101561580c57835182529284019260019290920191908401906157ec565b5060408701516060870152606087015160808701528094505050505092915050565b6000806040838503121561584157600080fd5b61584a83614ffe565b91506151aa60208401614ffe565b60006020828403121561586a57600080fd5b81356001600160401b0381111561588057600080fd5b612bcb848285016153b8565b600181811c908216806158a057607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60208082526013908201527218591b5a5b881c9bdb19481c995c5d5a5c9959606a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161592b5761592b615903565b5060010190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b8082028115828204841417610c5157610c51615903565b6000826159b357634e487b7160e01b600052601260045260246000fd5b500490565b600082516159ca818460208701614f82565b9190910192915050565b80820180821115610c5157610c51615903565b81810381811115610c5157610c51615903565b600060208284031215615a0c57600080fd5b5051919050565b601f821115610e2557600081815260208120601f850160051c81016020861015615a3a5750805b601f850160051c820191505b81811015613afe57828155600101615a46565b81516001600160401b03811115615a7257615a72615044565b615a8681615a80845461588c565b84615a13565b602080601f831160018114615abb5760008415615aa35750858301515b600019600386901b1c1916600185901b178555613afe565b600085815260208120601f198616915b82811015615aea57888601518255948401946001909101908401615acb565b5085821015615b085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351615b2a818460208801614f82565b835190830190615b3e818360208801614f82565b01949350505050565b60008154615b548161588c565b60018281168015615b6c5760018114615b8157615bb0565b60ff1984168752821515830287019450615bb0565b8560005260208060002060005b85811015615ba75781548a820152908401908201615b8e565b50505082870194505b5050505092915050565b601760f91b815260006111ce6001830184615b47565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615cb5816017850160208801614f82565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615ce6816028840160208801614f82565b01602801949350505050565b6000615cfe8286615b47565b602f60f81b8082528551615d19816001850160208a01614f82565b60019201918201528351615d34816002840160208801614f82565b0160020195945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615d7490830184614fa6565b9695505050505050565b600060208284031215615d9057600080fd5b81516111ce81614f4f565b600081615daa57615daa615903565b50600019019056fe53946bf984072f5888fcb2d7d2b0587c8efeb9187d958f21809711cf00b4b4a5a2646970667358221220f3b94c777502545d9d9e0bb493645230eea712a4daefd5d27dd77dedd5de023664736f6c6343000815003368747470733a2f2f6170692e7a6e73636f6e6e6563742e696f2f76312f6d65746164617461000000000000000000000000c11ee6c94a86e18481d9206c29ecdd3b40c598980000000000000000000000000246d65ba41da3db6db55e489146eb25ca3634e5000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000062e7370656564000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057370656564000000000000000000000000000000000000000000000000000000

    Deployed Bytecode

    0x6080604052600436106103c35760003560e01c806391d14854116101f2578063b88d4fde1161010d578063db846463116100a0578063f18d20be1161006f578063f18d20be14610bbd578063f874225414610bd2578063fa794bf814610c06578063fabf48d014610c2657600080fd5b8063db84646314610afa578063e3d31eb014610b27578063e985e9c514610b54578063ea3f262514610b9d57600080fd5b8063d4dae89d116100dc578063d4dae89d14610a55578063d547741f14610a8d578063d95edfde14610aad578063d9efc6bd14610acd57600080fd5b8063b88d4fde146109d5578063b8d4d526146109f5578063c442374d14610a15578063c87b56dd14610a3557600080fd5b8063a22cb46511610185578063aa34d2bd11610154578063aa34d2bd14610955578063ada8f91914610975578063b717d1bc14610995578063b81cad16146109b557600080fd5b8063a22cb465146108df578063a2aa0e5a146108ff578063a4df32281461091f578063a5c42ef11461093f57600080fd5b80639abc8320116101c15780639abc8320146108825780639bb827cb14610897578063a0bcfc7f146108aa578063a217fddf146108ca57600080fd5b806391d148541461080057806395d89b41146108205780639642c4ab14610835578063972205d21461085557600080fd5b80633a99d4eb116102e25780635c610bbc11610275578063796da7af11610244578063796da7af146107965780637adbf973146107ab5780637dc0d1d0146107cb5780638456cb59146107eb57600080fd5b80635c610bbc1461071e5780635c975abb1461073e5780636352211e1461075657806370a082311461077657600080fd5b8063549623e6116102b1578063549623e61461069157806355cb0ed1146106b157806356d90462146106d1578063588957bd146106f157600080fd5b80633a99d4eb146106295780633f4ba83a1461063c57806342842e0e146106515780634ad280011461067157600080fd5b80632485c4fa1161035a5780633115c06b116103295780633115c06b1461058e578063362f079b146105ae57806336568abe146105ce57806338c4f1e4146105ee57600080fd5b80632485c4fa14610507578063248a9ca3146105295780632d551432146105595780632f2ff15d1461056e57600080fd5b80630a68a1ac116103965780630a68a1ac146104795780630d537e8d146104a757806322ea2eed146104c757806323b872dd146104e757600080fd5b806301ffc9a7146103c857806306fdde03146103fd578063081812fc1461041f578063095ea7b314610457575b600080fd5b3480156103d457600080fd5b506103e86103e3366004614f65565b610c46565b60405190151581526020015b60405180910390f35b34801561040957600080fd5b50610412610c57565b6040516103f49190614fd2565b34801561042b57600080fd5b5061043f61043a366004614fe5565b610ce9565b6040516001600160a01b0390911681526020016103f4565b34801561046357600080fd5b5061047761047236600461501a565b610d10565b005b34801561048557600080fd5b50610499610494366004614fe5565b610e2a565b6040519081526020016103f4565b3480156104b357600080fd5b506104776104c2366004614fe5565b610e4b565b3480156104d357600080fd5b506104776104e236600461508a565b610f86565b3480156104f357600080fd5b50610477610502366004615107565b611023565b34801561051357600080fd5b5061051c611054565b6040516103f49190615143565b34801561053557600080fd5b50610499610544366004614fe5565b60009081526009602052604090206001015490565b34801561056557600080fd5b506104126110ab565b34801561057a57600080fd5b50610477610589366004615187565b611139565b34801561059a57600080fd5b506104996105a93660046151b3565b61115e565b3480156105ba57600080fd5b506104996105c93660046151d7565b61125f565b3480156105da57600080fd5b506104776105e9366004615187565b61126e565b3480156105fa57600080fd5b506103e8610609366004615270565b805160208183018101805160158252928201919093012091525460ff1681565b610477610637366004615413565b6112ec565b34801561064857600080fd5b506104776117af565b34801561065d57600080fd5b5061047761066c366004615107565b6117f2565b34801561067d57600080fd5b5060105461043f906001600160a01b031681565b34801561069d57600080fd5b506104776106ac3660046154b3565b61180d565b3480156106bd57600080fd5b506104996106cc3660046151b3565b61190e565b3480156106dd57600080fd5b506104776106ec366004614fe5565b6119cf565b3480156106fd57600080fd5b5061071161070c366004614fe5565b611d1d565b6040516103f4919061553a565b34801561072a57600080fd5b50610711610739366004615270565b611e6c565b34801561074a57600080fd5b5060075460ff166103e8565b34801561076257600080fd5b5061043f610771366004614fe5565b611f5b565b34801561078257600080fd5b5061049961079136600461558c565b611fbb565b3480156107a257600080fd5b50610499612041565b3480156107b757600080fd5b506104776107c636600461558c565b6120b4565b3480156107d757600080fd5b50600f5461043f906001600160a01b031681565b3480156107f757600080fd5b5061047761212d565b34801561080c57600080fd5b506103e861081b366004615187565b612164565b34801561082c57600080fd5b5061041261218f565b34801561084157600080fd5b50610412610850366004614fe5565b61219e565b34801561086157600080fd5b50610875610870366004614fe5565b6121b7565b6040516103f491906155bd565b34801561088e57600080fd5b5061041261231f565b6104776108a53660046151d7565b61232c565b3480156108b657600080fd5b506104776108c5366004615270565b61251e565b3480156108d657600080fd5b50610499600081565b3480156108eb57600080fd5b506104776108fa3660046155f5565b612551565b34801561090b57600080fd5b5061047761091a36600461508a565b61255c565b34801561092b57600080fd5b5061047761093a36600461558c565b6125f6565b34801561094b57600080fd5b50610499600a5481565b34801561096157600080fd5b5061047761097036600461561f565b61266f565b34801561098157600080fd5b5061047761099036600461558c565b6127a5565b3480156109a157600080fd5b506104776109b036600461558c565b6127d7565b3480156109c157600080fd5b506104996109d036600461558c565b612833565b3480156109e157600080fd5b506104776109f0366004615682565b612927565b348015610a0157600080fd5b50610477610a103660046156fd565b61295f565b348015610a2157600080fd5b50610477610a3036600461501a565b612a44565b348015610a4157600080fd5b50610412610a50366004614fe5565b612ac3565b348015610a6157600080fd5b50610499610a70366004615270565b805160208183018101805160138252928201919093012091525481565b348015610a9957600080fd5b50610477610aa8366004615187565b612bd3565b348015610ab957600080fd5b50610477610ac836600461558c565b612bf8565b348015610ad957600080fd5b50610aed610ae836600461558c565b612c1f565b6040516103f491906157be565b348015610b0657600080fd5b50610499610b15366004614fe5565b60176020526000908152604090205481565b348015610b3357600080fd5b50610499610b4236600461558c565b60166020526000908152604090205481565b348015610b6057600080fd5b506103e8610b6f36600461582e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610ba957600080fd5b50610477610bb8366004615858565b612ce4565b348015610bc957600080fd5b50610477612e27565b348015610bde57600080fd5b506104997f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab9581565b348015610c1257600080fd5b50610477610c2136600461508a565b612e8d565b348015610c3257600080fd5b50610477610c41366004615270565b612f29565b6000610c5182612f5c565b92915050565b606060008054610c669061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c929061588c565b8015610cdf5780601f10610cb457610100808354040283529160200191610cdf565b820191906000526020600020905b815481529060010190602001808311610cc257829003601f168201915b5050505050905090565b6000610cf482612f81565b506000908152600460205260409020546001600160a01b031690565b6000610d1b82611f5b565b9050806001600160a01b0316836001600160a01b031603610d8d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610da95750610da98133610b6f565b610e1b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610d84565b610e258383612fe0565b505050565b60188181548110610e3a57600080fd5b600091825260209091200154905081565b610e5361304e565b610e5b6130a7565b6000818152601160205260409020546001600160a01b0316338114610e93576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b03811660008181526012602090815260408083208690558583526011909152902060010180548491600080516020615db383398151915291610f639190610ee09061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c9061588c565b8015610f595780601f10610f2e57610100808354040283529160200191610f59565b820191906000526020600020905b815481529060010190602001808311610f3c57829003601f168201915b50505050506130ed565b604051610f709190614fd2565b60405180910390a350610f836001600855565b50565b610f91600033612164565b610fad5760405162461bcd60e51b8152600401610d84906158c0565b610fb561304e565b60005b600581101561100a57818160058110610fd357610fd36158ed565b6020020151600003610ff8576040516316334f8560e11b815260040160405180910390fd5b8061100281615919565b915050610fb8565b50611018601e826005614e33565b50610f836001600855565b61102d3382613136565b6110495760405162461bcd60e51b8152600401610d8490615932565b610e258383836131b4565b60606018805480602002602001604051908101604052809291908181526020018280548015610cdf57602002820191906000526020600020905b81548152602001906001019080831161108e575050505050905090565b600b80546110b89061588c565b80601f01602080910402602001604051908101604052809291908181526020018280546110e49061588c565b80156111315780601f1061110657610100808354040283529160200191611131565b820191906000526020600020905b81548152906001019060200180831161111457829003601f168201915b505050505081565b60008281526009602052604090206001015461115481613325565b610e25838361332f565b600080611169612041565b905061ffff83161580611180575060188361ffff16115b1561119e5760405163251f56a160e21b815260040160405180910390fd5b8261ffff166001036111d55780601960005b01546111c490670de0b6b3a764000061597f565b6111ce9190615996565b9392505050565b8261ffff166002036111eb5780601960016111b0565b8261ffff166003036112015780601960026111b0565b8261ffff166004036112175780601960036111b0565b60058361ffff1610158015611231575060188361ffff1611155b156112405780601960046111b0565b60405163251f56a160e21b815260040160405180910390fd5b50919050565b60006127106111c4838561597f565b6001600160a01b03811633146112de5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610d84565b6112e882826133b5565b5050565b6112f461304e565b6112fc6130a7565b60008085516001600160401b0381111561131857611318615044565b604051908082528060200260200182016040528015611341578160200160208202803683370190505b50905060005b86518110156114dc576000868281518110611364576113646158ed565b602002602001015190506000888381518110611382576113826158ed565b602002602001015190506113958161341c565b6113b257604051633f71cb2560e01b815260040160405180910390fd5b6015816040516113c291906159b8565b9081526040519081900360200190205460ff16156113f3576040516373f3c27b60e11b815260040160405180910390fd5b60006113fe82613570565b905080858581518110611413576114136158ed565b602002602001019061ffff16908161ffff168152505061143281613673565b61144f5760405163251f56a160e21b815260040160405180910390fd5b336001600160a01b0389160361147857604051632af47b8760e11b815260040160405180910390fd5b60006114838261115e565b905061148f81886159d4565b965060018411156114c5576114a56001856159e7565b6114ae8361190e565b6114b8919061597f565b6114c290886159d4565b96505b5050505080806114d490615919565b915050611347565b5082156115ee576010546040516340d936ed60e11b815233600482015284916001600160a01b0316906381b26dda90602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f91906159fa565b101561156e57604051630e19bf1b60e21b815260040160405180910390fd5b600061157984613691565b601054604051636978404360e01b8152336004820152602481018790529192506001600160a01b031690636978404390604401600060405180830381600087803b1580156115c657600080fd5b505af11580156115da573d6000803e3d6000fd5b5050505080836115ea91906159e7565b9250505b8134101561160f57604051631f4d0e4560e21b815260040160405180910390fd5b816001600160a01b038516156116e257600061162a86612833565b90506000611638858361125f565b89516001600160a01b0389166000908152601260205260408120600201805493945091926116679084906159d4565b90915550506001600160a01b038716600090815260126020526040812060030180548392906116979084906159d4565b90915550506040516001600160a01b0388169082156108fc029083906000818181858888f193505050501580156116d2573d6000803e3d6000fd5b506116dd81846159e7565b925050505b60005b600d5481101561178e57600d8181548110611702576117026158ed565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166108fc61175384600e8581548110611743576117436158ed565b906000526020600020015461125f565b6040518115909202916000818181858888f1935050505015801561177b573d6000803e3d6000fd5b508061178681615919565b9150506116e5565b5061179b888884896136b1565b5050506117a86001600855565b5050505050565b6117ba600033612164565b6117d65760405162461bcd60e51b8152600401610d84906158c0565b6117de61304e565b6117e6613b06565b6117f06001600855565b565b610e2583838360405180602001604052806000815250612927565b611818600033612164565b6118345760405162461bcd60e51b8152600401610d84906158c0565b61183c61304e565b6118446130a7565b600082516001600160401b0381111561185f5761185f615044565b604051908082528060200260200182016040528015611888578160200160208202803683370190505b50905060005b83518110156118f65760006118bb8583815181106118ae576118ae6158ed565b6020026020010151613570565b9050808383815181106118d0576118d06158ed565b61ffff9092166020928302919091019091015250806118ee81615919565b91505061188e565b50611903848483856136b1565b50610e256001600855565b600080611919612041565b905061ffff83161580611930575060188361ffff16115b1561194e5760405163251f56a160e21b815260040160405180910390fd5b8261ffff166001036119645780601e60006111b0565b8261ffff1660020361197a5780601e60016111b0565b8261ffff166003036119905780601e60026111b0565b8261ffff166004036119a65780601e60036111b0565b60058361ffff16101580156119c0575060188361ffff1611155b156112405780601e60046111b0565b6119d761304e565b6119df6130a7565b6000818152601160205260409020546001600160a01b0316338114611a17576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116600090815260126020908152604080832060010180548251818502810185019093528083529192909190830182828015611a7a57602002820191906000526020600020905b815481526020019060010190808311611a66575b50505050509050600060018251611a9191906159e7565b6001600160401b03811115611aa857611aa8615044565b604051908082528060200260200182016040528015611ad1578160200160208202803683370190505b5090506000805b8351811015611b585785848281518110611af457611af46158ed565b602002602001015114611b4657838181518110611b1357611b136158ed565b6020026020010151838381518110611b2d57611b2d6158ed565b602090810291909101015281611b4281615919565b9250505b80611b5081615919565b915050611ad8565b506001600160a01b03841660009081526012602090815260409091208351611b8892600190920191850190614e71565b5060008251118015611bb157506001600160a01b03841660009081526012602052604090205485145b15611c725781600081518110611bc957611bc96158ed565b6020908102919091018101516001600160a01b038616600081815260129093526040832091909155835190918491611c0357611c036158ed565b6020026020010151600080516020615db3833981519152611c586011600087600081518110611c3457611c346158ed565b602002602001015181526020019081526020016000206001018054610ee09061588c565b604051611c659190614fd2565b60405180910390a3611cbd565b6001600160a01b03841660008181526012602052604080822082905551600080516020615db383398151915290611cb490602080825260009082015260400190565b60405180910390a35b600085815260116020526040812080546001600160a01b031916815590611ce76001830182614eab565b5060028101805461ffff191690556000600390910155611d0685613b58565b611d0f85613b98565b50505050610f836001600855565b611d55604051806080016040528060006001600160a01b0316815260200160608152602001600061ffff168152602001600081525090565b6002611d60836121b7565b6002811115611d7157611d716155a7565b03611d8f57604051632db0646360e01b815260040160405180910390fd5b60008281526011602090815260409182902082516080810190935280546001600160a01b031683526001810180549192840191611dcb9061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054611df79061588c565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b5050509183525050600282015461ffff16602082015260039091015460409091015292915050565b611ea4604051806080016040528060006001600160a01b0316815260200160608152602001600061ffff168152602001600081525090565b6002611ecd601384604051611eb991906159b8565b9081526020016040518091039020546121b7565b6002811115611ede57611ede6155a7565b03611efc57604051632db0646360e01b815260040160405180910390fd5b60116000601384604051611f1091906159b8565b90815260408051602092819003830190205483528282019390935290820160002082516080810190935280546001600160a01b031683526001810180549192840191611dcb9061588c565b6000818152600260205260408120546001600160a01b031680610c515760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610d84565b60006001600160a01b0382166120255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610d84565b506001600160a01b031660009081526003602052604090205490565b600f5460408051636fdf583360e01b815290516000926001600160a01b031691636fdf58339160048083019260209291908290030181865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af91906159fa565b905090565b6120bf600033612164565b6120db5760405162461bcd60e51b8152600401610d84906158c0565b6120e361304e565b6120ec81613c75565b1561210a5760405163e6c4247b60e01b815260040160405180910390fd5b600f80546001600160a01b0319166001600160a01b038316179055600160085550565b612138600033612164565b6121545760405162461bcd60e51b8152600401610d84906158c0565b61215c61304e565b6117e6613c97565b60009182526009602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060018054610c669061588c565b601460205260009081526040902080546110b89061588c565b600081815260116020908152604080832081516080810190925280546001600160a01b031682526001810180548594840191906121f39061588c565b80601f016020809104026020016040519081016040528092919081815260200182805461221f9061588c565b801561226c5780601f106122415761010080835404028352916020019161226c565b820191906000526020600020905b81548152906001019060200180831161224f57829003601f168201915b5050509183525050600282015461ffff16602082015260039091015460409091015280519091506001600160a01b03161580156122ab57506060810151155b80156122bd5750604081015161ffff16155b156122cb5750600092915050565b80516001600160a01b0316158015906122e75750428160600151115b156122f55750600192915050565b80516001600160a01b0316158015906123115750428160600151105b156112595750600292915050565b600c80546110b89061588c565b61233461304e565b61233c6130a7565b6000828152601160205260409020546001600160a01b03163314612373576040516330cd747160e01b815260040160405180910390fd5b806000036123935760405162d36c8560e81b815260040160405180910390fd5b60008281526011602052604081206002015482906123b49061ffff1661190e565b6123be919061597f565b9050803410156123e157604051631f4d0e4560e21b815260040160405180910390fd5b60005b600d5481101561247d57600d8181548110612401576124016158ed565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166108fc61244284600e8581548110611743576117436158ed565b6040518115909202916000818181858888f1935050505015801561246a573d6000803e3d6000fd5b508061247581615919565b9150506123e4565b5061248c826301e1338061597f565b600084815260116020526040812060030180549091906124ad9084906159d4565b9091555050600083815260116020526040902060038101546001909101805485917fa64e2b85ab1e5f2c0229d2b57dbd8cd4a1f512228662783d3a2ce0f4a6ecf6f3916124fe9190610ee09061588c565b60405161250b9190614fd2565b60405180910390a3506112e86001600855565b612529600033612164565b6125455760405162461bcd60e51b8152600401610d84906158c0565b600c6112e88282615a59565b6112e8338383613cd4565b612567600033612164565b6125835760405162461bcd60e51b8152600401610d84906158c0565b61258b61304e565b6125936130a7565b60005b60058110156125e8578181600581106125b1576125b16158ed565b60200201516000036125d6576040516316334f8560e11b815260040160405180910390fd5b806125e081615919565b915050612596565b506110186019826005614e33565b612601600033612164565b61261d5760405162461bcd60e51b8152600401610d84906158c0565b61262561304e565b61262e81613c75565b1561264c5760405163e6c4247b60e01b815260040160405180910390fd5b601080546001600160a01b0319166001600160a01b038316179055600160085550565b61267a600033612164565b6126965760405162461bcd60e51b8152600401610d84906158c0565b61269e61304e565b6126a66130a7565b80518251146126c85760405163aa81c86160e01b815260040160405180910390fd5b6000805b825181101561274e578281815181106126e7576126e76158ed565b6020026020010151826126fa91906159d4565b915061271e848281518110612711576127116158ed565b6020026020010151613c75565b1561273c5760405163e6c4247b60e01b815260040160405180910390fd5b8061274681615919565b9150506126cc565b50612710811115612772576040516302ce67a560e31b815260040160405180910390fd5b825161278590600d906020860190614ee5565b50815161279990600e906020850190614e71565b50506112e86001600855565b6127b0600033612164565b6127cc5760405162461bcd60e51b8152600401610d84906158c0565b610f8360008261332f565b6127e2600033612164565b6127fe5760405162461bcd60e51b8152600401610d84906158c0565b61280960008261332f565b610f837f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab958261332f565b6001600160a01b0381166000908152601660205260408120541561286d57506001600160a01b031660009081526016602052604090205490565b6001600160a01b038216600090815260126020526040902060020154600a8110156128a057602360005b01549392505050565b600a81101580156128b15750601e81105b156128bf5760236001612897565b601e81101580156128d05750603c81105b156128de5760236002612897565b603c81101580156128ef5750606481105b156128fd5760236003612897565b6064811061290e5760236004612897565b604051630778611b60e51b815260040160405180910390fd5b6129313383613136565b61294d5760405162461bcd60e51b8152600401610d8490615932565b61295984848484613da2565b50505050565b61296a600033612164565b6129865760405162461bcd60e51b8152600401610d84906158c0565b61298e61304e565b6129966130a7565b80518251146129b85760405163aa81c86160e01b815260040160405180910390fd5b60005b8251811015612a39578181815181106129d6576129d66158ed565b602002602001015160158483815181106129f2576129f26158ed565b6020026020010151604051612a0791906159b8565b908152604051908190036020019020805491151560ff1990921691909117905580612a3181615919565b9150506129bb565b506112e86001600855565b612a4f600033612164565b612a6b5760405162461bcd60e51b8152600401610d84906158c0565b612a7361304e565b612a7b6130a7565b612710811115612a9e576040516302ce67a560e31b815260040160405180910390fd5b6001600160a01b03821660009081526016602052604090208190556112e86001600855565b6060612ace82612f81565b60008281526006602052604081208054612ae79061588c565b80601f0160208091040260200160405190810160405280929190818152602001828054612b139061588c565b8015612b605780601f10612b3557610100808354040283529160200191612b60565b820191906000526020600020905b815481529060010190602001808311612b4357829003601f168201915b505050505090506000612b7e60408051602081019091526000815290565b90508051600003612b90575092915050565b815115612bc2578082604051602001612baa929190615b18565b60405160208183030381529060405292505050919050565b612bcb84613dd5565b949350505050565b600082815260096020526040902060010154612bee81613325565b610e2583836133b5565b612c03600033612164565b6128095760405162461bcd60e51b8152600401610d84906158c0565b612c4a6040518060800160405280600081526020016060815260200160008152602001600081525090565b6001600160a01b03821660009081526012602090815260409182902082516080810184528154815260018201805485518186028101860190965280865291949293858101939290830182828015612cc057602002820191906000526020600020905b815481526020019060010190808311612cac575b50505050508152602001600282015481526020016003820154815250509050919050565b612d0e7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab9533612164565b612d5a5760405162461bcd60e51b815260206004820152601860248201527f6d61696e7461696e657220726f6c6520726571756972656400000000000000006044820152606401610d84565b612d6261304e565b612d6a6130a7565b60005b8151811015611018576000828281518110612d8a57612d8a6158ed565b602002602001015190504260116000838152602001908152602001600020600301541115612dcb57604051632f77196360e21b815260040160405180910390fd5b6000818152601160205260409020600301544290612dec9062278d006159d4565b1115612e0b5760405163e2041e6160e01b815260040160405180910390fd5b612e1481613e48565b5080612e1f81615919565b915050612d6d565b612e32600033612164565b612e4e5760405162461bcd60e51b8152600401610d84906158c0565b612e5661304e565b60405133904780156108fc02916000818181858888f19350505050158015612e82573d6000803e3d6000fd5b506117f06001600855565b612e98600033612164565b612eb45760405162461bcd60e51b8152600401610d84906158c0565b612ebc61304e565b612ec46130a7565b60005b6005811015612f1b57612710828260058110612ee557612ee56158ed565b60200201511115612f09576040516302ce67a560e31b815260040160405180910390fd5b80612f1381615919565b915050612ec7565b506110186023826005614e33565b612f34600033612164565b612f505760405162461bcd60e51b8152600401610d84906158c0565b600b6112e88282615a59565b60006001600160e01b03198216637965db0b60e01b1480610c515750610c5182614148565b6000818152600260205260409020546001600160a01b0316610f835760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610d84565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061301582611f5b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6002600854036130a05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d84565b6002600855565b60075460ff16156117f05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610d84565b606081600b6040516020016131029190615bba565b60408051601f19818403018152908290526131209291602001615b18565b6040516020818303038152906040529050919050565b60008061314283611f5b565b9050806001600160a01b0316846001600160a01b0316148061318957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80612bcb5750836001600160a01b03166131a284610ce9565b6001600160a01b031614949350505050565b826001600160a01b03166131c782611f5b565b6001600160a01b0316146131ed5760405162461bcd60e51b8152600401610d8490615bd0565b6001600160a01b03821661324f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610d84565b61325c838383600161416d565b826001600160a01b031661326f82611f5b565b6001600160a01b0316146132955760405162461bcd60e51b8152600401610d8490615bd0565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610f83813361458c565b6133398282612164565b6112e85760008281526009602090815260408083206001600160a01b03851684529091529020805460ff191660011790556133713390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6133bf8282612164565b156112e85760008281526009602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600081815b815181101561356657603060f81b828281518110613441576134416158ed565b01602001516001600160f81b031916108015906134825750603960f81b828281518110613470576134706158ed565b01602001516001600160f81b03191611155b1580156134e45750606160f81b8282815181106134a1576134a16158ed565b01602001516001600160f81b031916108015906134e25750607a60f81b8282815181106134d0576134d06158ed565b01602001516001600160f81b03191611155b155b801561351557508181815181106134fd576134fd6158ed565b6020910101516001600160f81b031916602d60f81b14155b80156135455750607f60f81b828281518110613533576135336158ed565b01602001516001600160f81b03191611155b15613554575060009392505050565b8061355e81615919565b915050613421565b5060019392505050565b8051600090819081905b8082101561366a576000858381518110613596576135966158ed565b01602001516001600160f81b0319169050600160ff1b8110156135c5576135be6001846159d4565b9250613657565b600760fd1b6001600160f81b0319821610156135e6576135be6002846159d4565b600f60fc1b6001600160f81b031982161015613607576135be6003846159d4565b601f60fb1b6001600160f81b031982161015613628576135be6004846159d4565b603f60fa1b6001600160f81b031982161015613649576135be6005846159d4565b6136546006846159d4565b92505b508261366281615919565b93505061357a565b50909392505050565b6000808261ffff16118015610c51575050601861ffff909116111590565b60008061369c612041565b9050806111c484670de0b6b3a764000061597f565b6136b96130a7565b835183511415806136cc57508051845114155b806136d957508351825114155b156136f75760405163aa81c86160e01b815260040160405180910390fd5b600083516001600160401b0381111561371257613712615044565b60405190808252806020026020018201604052801561373b578160200160208202803683370190505b50905060005b8451811015613afe57600086828151811061375e5761375e6158ed565b60200260200101519050600086838151811061377c5761377c6158ed565b60200260200101519050600085848151811061379a5761379a6158ed565b6020026020010151905060008785815181106137b8576137b86158ed565b602002602001015190506000600a549050808787815181106137dc576137dc6158ed565b6020026020010181815250506137fd8b8781518110612711576127116158ed565b1561381b5760405163e6c4247b60e01b815260040160405180910390fd5b6001613830601386604051611eb991906159b8565b6002811115613841576138416155a7565b0361385f57604051630ea075bf60e21b815260040160405180910390fd5b6002613874601386604051611eb991906159b8565b6002811115613885576138856155a7565b036138a357604051635f16d58360e01b815260040160405180910390fd5b600a80546001019055604080516080810182526001600160a01b03871681526020810186905261ffff841691810191909152606081016138e7856301e1338061597f565b6138f190426159d4565b90526000828152601160209081526040909120825181546001600160a01b0319166001600160a01b039091161781559082015160018201906139339082615a59565b5060408281015160028301805461ffff191661ffff9092169190911790556060909201516003909101556001600160a01b038616600090815260126020908152828220600190810180549182018155835291200182905551819060139061399b9087906159b8565b9081526040805160209281900383019020929092556001600160a01b03871660009081526012909152908120549003613a18576001600160a01b038516600081815260126020526040902082905581600080516020615db3833981519152613a02876130ed565b604051613a0f9190614fd2565b60405180910390a35b613a2285826145e5565b613a3481613a2f836145ff565b614648565b60188054600181019091557fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e018190556000818152601460205260409020613a7c8582615a59565b50600081815260176020908152604080832086905560119091529020600301546001600160a01b038616827f2d764d30e21994e86d9ea9925aa0095caac83736bb99f47ae5eeb3f2256239a7613ad1886130ed565b604051613ade9190614fd2565b60405180910390a450505050508080613af690615919565b915050613741565b505050505050565b613b0e614713565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613b618161475c565b60008181526006602052604090208054613b7a9061588c565b159050610f83576000818152600660205260408120610f8391614eab565b6040805160208082018352600080835284815260149091529190912090613bbf9082615a59565b5060005b6018548110156112e8578160188281548110613be157613be16158ed565b906000526020600020015403613c635760188054613c01906001906159e7565b81548110613c1157613c116158ed565b906000526020600020015460188281548110613c2f57613c2f6158ed565b6000918252602090912001556018805480613c4c57613c4c615c15565b600190038181906000526020600020016000905590555b80613c6d81615919565b915050613bc3565b60006001600160a01b038216301480610c515750506001600160a01b03161590565b613c9f6130a7565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613b3b3390565b816001600160a01b0316836001600160a01b031603613d355760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610d84565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613dad8484846131b4565b613db9848484846147ff565b6129595760405162461bcd60e51b8152600401610d8490615c2b565b6060613de082612f81565b6000613df760408051602081019091526000815290565b90506000815111613e1757604051806020016040528060008152506111ce565b80613e2184614900565b604051602001613e32929190615b18565b6040516020818303038152906040529392505050565b80600003613e695760405163aba4733960e01b815260040160405180910390fd5b6000818152601160209081526040808320546001600160a01b0316808452601283528184206001018054835181860281018601909452808452919493909190830182828015613ed757602002820191906000526020600020905b815481526020019060010190808311613ec3575b50505050509050600060018251613eee91906159e7565b6001600160401b03811115613f0557613f05615044565b604051908082528060200260200182016040528015613f2e578160200160208202803683370190505b5090506000805b8351811015613fb55785848281518110613f5157613f516158ed565b602002602001015114613fa357838181518110613f7057613f706158ed565b6020026020010151838381518110613f8a57613f8a6158ed565b602090810291909101015281613f9f81615919565b9250505b80613fad81615919565b915050613f35565b506001600160a01b03841660009081526012602090815260409091208351613fe592600190920191850190614e71565b506000825111801561400e57506001600160a01b03841660009081526012602052604090205485145b156140ab5781600081518110614026576140266158ed565b6020908102919091018101516001600160a01b038616600081815260129093526040832091909155835190918491614060576140606158ed565b6020026020010151600080516020615db38339815191526140916011600087600081518110611c3457611c346158ed565b60405161409e9190614fd2565b60405180910390a36140f6565b6001600160a01b03841660008181526012602052604080822082905551600080516020615db3833981519152906140ed90602080825260009082015260400190565b60405180910390a35b600085815260116020526040812080546001600160a01b0319168155906141206001830182614eab565b5060028101805461ffff19169055600060039091015561413f85613b58565b6117a885613b98565b60006001600160e01b03198216632483248360e11b1480610c515750610c5182614992565b6001600160a01b0384161580159061418d57506001600160a01b03831615155b1561451757600261419d836121b7565b60028111156141ae576141ae6155a7565b036141cc57604051632db0646360e01b815260040160405180910390fd5b6001600160a01b03841660009081526012602090815260408083206001018054825181850281018501909352808352919290919083018282801561422f57602002820191906000526020600020905b81548152602001906001019080831161421b575b50505050509050600082825161424591906159e7565b6001600160401b0381111561425c5761425c615044565b604051908082528060200260200182016040528015614285578160200160208202803683370190505b5090506000805b835181101561430c57858482815181106142a8576142a86158ed565b6020026020010151146142fa578381815181106142c7576142c76158ed565b60200260200101518383815181106142e1576142e16158ed565b6020908102919091010152816142f681615919565b9250505b8061430481615919565b91505061428c565b506001600160a01b0387166000908152601260209081526040909120835161433c92600190920191850190614e71565b506000825111801561436557506001600160a01b03871660009081526012602052604090205485145b15614402578160008151811061437d5761437d6158ed565b6020908102919091018101516001600160a01b0389166000818152601290935260408320919091558351909184916143b7576143b76158ed565b6020026020010151600080516020615db38339815191526143e86011600087600081518110611c3457611c346158ed565b6040516143f59190614fd2565b60405180910390a361444d565b6001600160a01b03871660008181526012602052604080822082905551600080516020615db38339815191529061444490602080825260009082015260400190565b60405180910390a35b6001600160a01b038616600081815260126020908152604082206001808201805491820181558452918320909101889055918152905490036144ec576001600160a01b03861660008181526012602090815260408083208990558883526011909152902060010180548791600080516020615db3833981519152916144d69190610ee09061588c565b6040516144e39190614fd2565b60405180910390a35b505050600082815260116020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b0316846001600160a01b0316837feb4f1cd49fe2485e1a9331e0a0c4e38223edb71dbc7df86be6731d7b3054c506614571601160008881526020019081526020016000206001018054610ee09061588c565b60405161457e9190614fd2565b60405180910390a450505050565b6145968282612164565b6112e8576145a3816149e2565b6145ae8360206149f4565b6040516020016145bf929190615c7d565b60408051601f198184030181529082905262461bcd60e51b8252610d8491600401614fd2565b6112e8828260405180602001604052806000815250614b8f565b6060600061460c83614900565b9050466000600c61461c83614900565b8460405160200161462f93929190615cf2565b60408051601f1981840301815291905295945050505050565b6000828152600260205260409020546001600160a01b03166146c35760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610d84565b60008281526006602052604090206146db8282615a59565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60075460ff166117f05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610d84565b600061476782611f5b565b905061477781600084600161416d565b61478082611f5b565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b156148f557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614843903390899088908890600401615d41565b6020604051808303816000875af192505050801561487e575060408051601f3d908101601f1916820190925261487b91810190615d7e565b60015b6148db573d8080156148ac576040519150601f19603f3d011682016040523d82523d6000602084013e6148b1565b606091505b5080516000036148d35760405162461bcd60e51b8152600401610d8490615c2b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612bcb565b506001949350505050565b6060600061490d83614bc2565b60010190506000816001600160401b0381111561492c5761492c615044565b6040519080825280601f01601f191660200182016040528015614956576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461496057509392505050565b60006001600160e01b031982166380ac58cd60e01b14806149c357506001600160e01b03198216635b5e139f60e01b145b80610c5157506301ffc9a760e01b6001600160e01b0319831614610c51565b6060610c516001600160a01b03831660145b60606000614a0383600261597f565b614a0e9060026159d4565b6001600160401b03811115614a2557614a25615044565b6040519080825280601f01601f191660200182016040528015614a4f576020820181803683370190505b509050600360fc1b81600081518110614a6a57614a6a6158ed565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614a9957614a996158ed565b60200101906001600160f81b031916908160001a9053506000614abd84600261597f565b614ac89060016159d4565b90505b6001811115614b40576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614afc57614afc6158ed565b1a60f81b828281518110614b1257614b126158ed565b60200101906001600160f81b031916908160001a90535060049490941c93614b3981615d9b565b9050614acb565b5083156111ce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d84565b614b998383614c9a565b614ba660008484846147ff565b610e255760405162461bcd60e51b8152600401610d8490615c2b565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310614c015772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614c2d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614c4b57662386f26fc10000830492506010015b6305f5e1008310614c63576305f5e100830492506008015b6127108310614c7757612710830492506004015b60648310614c89576064830492506002015b600a8310610c515760010192915050565b6001600160a01b038216614cf05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610d84565b6000818152600260205260409020546001600160a01b031615614d555760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d84565b614d6360008383600161416d565b6000818152600260205260409020546001600160a01b031615614dc85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610d84565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8260058101928215614e61579160200282015b82811115614e61578251825591602001919060010190614e46565b50614e6d929150614f3a565b5090565b828054828255906000526020600020908101928215614e615791602002820182811115614e61578251825591602001919060010190614e46565b508054614eb79061588c565b6000825580601f10614ec7575050565b601f016020900490600052602060002090810190610f839190614f3a565b828054828255906000526020600020908101928215614e61579160200282015b82811115614e6157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614f05565b5b80821115614e6d5760008155600101614f3b565b6001600160e01b031981168114610f8357600080fd5b600060208284031215614f7757600080fd5b81356111ce81614f4f565b60005b83811015614f9d578181015183820152602001614f85565b50506000910152565b60008151808452614fbe816020860160208601614f82565b601f01601f19169290920160200192915050565b6020815260006111ce6020830184614fa6565b600060208284031215614ff757600080fd5b5035919050565b80356001600160a01b038116811461501557600080fd5b919050565b6000806040838503121561502d57600080fd5b61503683614ffe565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561508257615082615044565b604052919050565b600060a0828403121561509c57600080fd5b82601f8301126150ab57600080fd5b60405160a081018181106001600160401b03821117156150cd576150cd615044565b6040528060a08401858111156150e257600080fd5b845b818110156150fc5780358352602092830192016150e4565b509195945050505050565b60008060006060848603121561511c57600080fd5b61512584614ffe565b925061513360208501614ffe565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561517b5783518352928401929184019160010161515f565b50909695505050505050565b6000806040838503121561519a57600080fd5b823591506151aa60208401614ffe565b90509250929050565b6000602082840312156151c557600080fd5b813561ffff811681146111ce57600080fd5b600080604083850312156151ea57600080fd5b50508035926020909101359150565b60006001600160401b0383111561521257615212615044565b615225601f8401601f191660200161505a565b905082815283838301111561523957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261526157600080fd5b6111ce838335602085016151f9565b60006020828403121561528257600080fd5b81356001600160401b0381111561529857600080fd5b612bcb84828501615250565b60006001600160401b038211156152bd576152bd615044565b5060051b60200190565b600082601f8301126152d857600080fd5b813560206152ed6152e8836152a4565b61505a565b82815260059290921b8401810191818101908684111561530c57600080fd5b8286015b8481101561532e5761532181614ffe565b8352918301918301615310565b509695505050505050565b600082601f83011261534a57600080fd5b8135602061535a6152e8836152a4565b82815260059290921b8401810191818101908684111561537957600080fd5b8286015b8481101561532e5780356001600160401b0381111561539c5760008081fd5b6153aa8986838b0101615250565b84525091830191830161537d565b600082601f8301126153c957600080fd5b813560206153d96152e8836152a4565b82815260059290921b840181019181810190868411156153f857600080fd5b8286015b8481101561532e57803583529183019183016153fc565b600080600080600060a0868803121561542b57600080fd5b85356001600160401b038082111561544257600080fd5b61544e89838a016152c7565b9650602088013591508082111561546457600080fd5b61547089838a01615339565b9550604088013591508082111561548657600080fd5b50615493888289016153b8565b9350506154a260608701614ffe565b949793965091946080013592915050565b6000806000606084860312156154c857600080fd5b83356001600160401b03808211156154df57600080fd5b6154eb878388016152c7565b9450602086013591508082111561550157600080fd5b61550d87838801615339565b9350604086013591508082111561552357600080fd5b50615530868287016153b8565b9150509250925092565b602080825282516001600160a01b0316828201528201516080604083015260009061556860a0840182614fa6565b905061ffff6040850151166060840152606084015160808401528091505092915050565b60006020828403121561559e57600080fd5b6111ce82614ffe565b634e487b7160e01b600052602160045260246000fd5b60208101600383106155df57634e487b7160e01b600052602160045260246000fd5b91905290565b8035801515811461501557600080fd5b6000806040838503121561560857600080fd5b61561183614ffe565b91506151aa602084016155e5565b6000806040838503121561563257600080fd5b82356001600160401b038082111561564957600080fd5b615655868387016152c7565b9350602085013591508082111561566b57600080fd5b50615678858286016153b8565b9150509250929050565b6000806000806080858703121561569857600080fd5b6156a185614ffe565b93506156af60208601614ffe565b92506040850135915060608501356001600160401b038111156156d157600080fd5b8501601f810187136156e257600080fd5b6156f1878235602084016151f9565b91505092959194509250565b6000806040838503121561571057600080fd5b82356001600160401b038082111561572757600080fd5b61573386838701615339565b935060209150818501358181111561574a57600080fd5b85019050601f8101861361575d57600080fd5b803561576b6152e8826152a4565b81815260059190911b8201830190838101908883111561578a57600080fd5b928401925b828410156157af576157a0846155e5565b8252928401929084019061578f565b80955050505050509250929050565b60208082528251828201528281015160806040840152805160a0840181905260009291820190839060c08601905b8083101561580c57835182529284019260019290920191908401906157ec565b5060408701516060870152606087015160808701528094505050505092915050565b6000806040838503121561584157600080fd5b61584a83614ffe565b91506151aa60208401614ffe565b60006020828403121561586a57600080fd5b81356001600160401b0381111561588057600080fd5b612bcb848285016153b8565b600181811c908216806158a057607f821691505b60208210810361125957634e487b7160e01b600052602260045260246000fd5b60208082526013908201527218591b5a5b881c9bdb19481c995c5d5a5c9959606a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161592b5761592b615903565b5060010190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b8082028115828204841417610c5157610c51615903565b6000826159b357634e487b7160e01b600052601260045260246000fd5b500490565b600082516159ca818460208701614f82565b9190910192915050565b80820180821115610c5157610c51615903565b81810381811115610c5157610c51615903565b600060208284031215615a0c57600080fd5b5051919050565b601f821115610e2557600081815260208120601f850160051c81016020861015615a3a5750805b601f850160051c820191505b81811015613afe57828155600101615a46565b81516001600160401b03811115615a7257615a72615044565b615a8681615a80845461588c565b84615a13565b602080601f831160018114615abb5760008415615aa35750858301515b600019600386901b1c1916600185901b178555613afe565b600085815260208120601f198616915b82811015615aea57888601518255948401946001909101908401615acb565b5085821015615b085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351615b2a818460208801614f82565b835190830190615b3e818360208801614f82565b01949350505050565b60008154615b548161588c565b60018281168015615b6c5760018114615b8157615bb0565b60ff1984168752821515830287019450615bb0565b8560005260208060002060005b85811015615ba75781548a820152908401908201615b8e565b50505082870194505b5050505092915050565b601760f91b815260006111ce6001830184615b47565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615cb5816017850160208801614f82565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615ce6816028840160208801614f82565b01602801949350505050565b6000615cfe8286615b47565b602f60f81b8082528551615d19816001850160208a01614f82565b60019201918201528351615d34816002840160208801614f82565b0160020195945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615d7490830184614fa6565b9695505050505050565b600060208284031215615d9057600080fd5b81516111ce81614f4f565b600081615daa57615daa615903565b50600019019056fe53946bf984072f5888fcb2d7d2b0587c8efeb9187d958f21809711cf00b4b4a5a2646970667358221220f3b94c777502545d9d9e0bb493645230eea712a4daefd5d27dd77dedd5de023664736f6c63430008150033

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

    000000000000000000000000c11ee6c94a86e18481d9206c29ecdd3b40c598980000000000000000000000000246d65ba41da3db6db55e489146eb25ca3634e5000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000062e7370656564000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057370656564000000000000000000000000000000000000000000000000000000

    -----Decoded View---------------
    Arg [0] : _oracle (address): 0xc11eE6C94A86e18481d9206c29ECDd3B40C59898
    Arg [1] : _giftCard (address): 0x0246D65bA41Da3DB6dB55e489146eB25ca3634E5
    Arg [2] : _symbol (string): .speed
    Arg [3] : _tld (string): speed

    -----Encoded View---------------
    8 Constructor Arguments found :
    Arg [0] : 000000000000000000000000c11ee6c94a86e18481d9206c29ecdd3b40c59898
    Arg [1] : 0000000000000000000000000246d65ba41da3db6db55e489146eb25ca3634e5
    Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
    Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
    Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
    Arg [5] : 2e73706565640000000000000000000000000000000000000000000000000000
    Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
    Arg [7] : 7370656564000000000000000000000000000000000000000000000000000000


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