ETH Price: $2,519.67 (-1.22%)

GUTDEM Alpha Pass (GDPASS)
 

Overview

TokenID

480

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Diamond

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion
File 1 of 10 : Diamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

/******************************************************************************\
* Authors: Nick Mudge (https://twitter.com/mudgen)
*
* Implementation of a diamond.
/******************************************************************************/

import {LibDiamond} from "./libraries/LibDiamond.sol";
import {DiamondCutFacet} from "./facets/DiamondCutFacet.sol";
import {DiamondLoupeFacet} from "./facets/DiamondLoupeFacet.sol";
import {OwnershipFacet} from "./facets/OwnershipFacet.sol";

contract Diamond {
    constructor(address _contractOwner) {
        LibDiamond.setContractOwner(_contractOwner);
        LibDiamond.addDiamondFunctions(
            address(new DiamondCutFacet()),
            address(new DiamondLoupeFacet()),
            address(new OwnershipFacet())
        );
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
        address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
        require(facet != address(0), "Diamond: Function does not exist");
        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            switch result
                case 0 {
                    revert(0, returndatasize())
                }
                default {
                    return(0, returndatasize())
                }
        }
    }
}

File 2 of 10 : DiamondCutFacet.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {IDiamondCut} from "../interfaces/IDiamondCut.sol";
import {LibDiamond} from "../libraries/LibDiamond.sol";

contract DiamondCutFacet is IDiamondCut {
    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external override {
        LibDiamond.enforceIsContractOwner();
        LibDiamond.diamondCut(_diamondCut, _init, _calldata);
    }
}

File 3 of 10 : LibDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {IDiamondCut} from "../interfaces/IDiamondCut.sol";
import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol";
import {IERC165} from "../interfaces/IERC165.sol";
import {IOwnable} from "../interfaces/IOwnable.sol";
import {LibMeta} from "./LibMeta.sol";

library LibDiamond {
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct FacetAddressAndPosition {
        address facetAddress;
        uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint16 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

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

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(LibMeta.msgSender() == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    function addDiamondFunctions(
        address _diamondCutFacet,
        address _diamondLoupeFacet,
        address _ownershipFacet
    ) internal {
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](3);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IDiamondCut.diamondCut.selector;
        cut[0] = IDiamondCut.FacetCut({facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors});
        functionSelectors = new bytes4[](5);
        functionSelectors[0] = IDiamondLoupe.facets.selector;
        functionSelectors[1] = IDiamondLoupe.facetFunctionSelectors.selector;
        functionSelectors[2] = IDiamondLoupe.facetAddresses.selector;
        functionSelectors[3] = IDiamondLoupe.facetAddress.selector;
        functionSelectors[4] = IERC165.supportsInterface.selector;
        cut[1] = IDiamondCut.FacetCut({
            facetAddress: _diamondLoupeFacet,
            action: IDiamondCut.FacetCutAction.Add,
            functionSelectors: functionSelectors
        });
        functionSelectors = new bytes4[](2);
        functionSelectors[0] = IOwnable.transferOwnership.selector;
        functionSelectors[1] = IOwnable.owner.selector;
        cut[2] = IDiamondCut.FacetCut({facetAddress: _ownershipFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors});
        diamondCut(cut, address(0), "");
    }

    // Internal function version of diamondCut
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else {
                revert("LibDiamondCut: Incorrect FacetCutAction");
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // uint16 selectorCount = uint16(diamondStorage().selectors.length);
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
            ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);
            ds.facetAddresses.push(_facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists");
            ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);
            ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;
            ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;
            selectorPosition++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
            ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);
            ds.facetAddresses.push(_facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function");
            removeFunction(oldFacetAddress, selector);
            // add function
            ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;
            ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);
            ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;
            selectorPosition++;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(oldFacetAddress, selector);
        }
    }

    function removeFunction(address _facetAddress, bytes4 _selector) internal {
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition);
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty");
        } else {
            require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)");
            if (_init != address(this)) {
                enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");
            }
            (bool success, bytes memory error) = _init.delegatecall(_calldata);
            if (success == false) {
                if (error.length > 0) {
                    // bubble up the error
                    revert(string(error));
                } else {
                    revert("LibDiamondCut: _init function reverted");
                }
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize != 0, _errorMessage);
    }
}

File 4 of 10 : OwnershipFacet.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import {LibDiamond} from "../libraries/LibDiamond.sol";
import {IOwnable} from "../interfaces/IOwnable.sol";

contract OwnershipFacet is IOwnable {
    function transferOwnership(address _newOwner) external override {
        LibDiamond.enforceIsContractOwner();
        LibDiamond.setContractOwner(_newOwner);
    }

    function owner() external view override returns (address owner_) {
        owner_ = LibDiamond.contractOwner();
    }
}

File 5 of 10 : DiamondLoupeFacet.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {LibDiamond} from "../libraries/LibDiamond.sol";
import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol";
import {IERC165} from "../interfaces/IERC165.sol";

contract DiamondLoupeFacet is IDiamondLoupe, IERC165 {
    // Diamond Loupe Functions
    ////////////////////////////////////////////////////////////////////
    /// These functions are expected to be called frequently by tools.
    //
    // struct Facet {
    //     address facetAddress;
    //     bytes4[] functionSelectors;
    // }

    /// @notice Gets all facets and their selectors.
    /// @return facets_ Facet
    function facets() external view override returns (Facet[] memory facets_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        uint256 numFacets = ds.facetAddresses.length;
        facets_ = new Facet[](numFacets);
        for (uint256 i; i < numFacets; i++) {
            address facetAddress_ = ds.facetAddresses[i];
            facets_[i].facetAddress = facetAddress_;
            facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;
        }
    }

    /// @notice Gets all the function selectors provided by a facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;
    }

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view override returns (address[] memory facetAddresses_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddresses_ = ds.facetAddresses;
    }

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;
    }

    // This implements ERC-165.
    function supportsInterface(bytes4 _interfaceId) external view override returns (bool) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        return ds.supportedInterfaces[_interfaceId];
    }
}

File 6 of 10 : IDiamondCut.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {Add, Replace, Remove}

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

File 7 of 10 : IDiamondLoupe.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

// A loupe is a small magnifying glass used to look at diamonds.
// These functions look at diamonds
interface IDiamondLoupe {
    /// These functions are expected to be called frequently
    /// by tools.

    struct Facet {
        address facetAddress;
        bytes4[] functionSelectors;
    }

    /// @notice Gets all facet addresses and their four byte function selectors.
    /// @return facets_ Facet
    function facets() external view returns (Facet[] memory facets_);

    /// @notice Gets all the function selectors supported by a specific facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view returns (address[] memory facetAddresses_);

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);
}

File 8 of 10 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (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);
}

File 9 of 10 : LibMeta.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

library LibMeta {
    bytes32 internal constant EIP712_DOMAIN_TYPEHASH =
        keccak256(bytes("EIP712Domain(string name,string version,uint256 salt,address verifyingContract)"));

    function domainSeparator(string memory name, string memory version) internal view returns (bytes32 domainSeparator_) {
        domainSeparator_ = keccak256(
            abi.encode(EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), getChainID(), address(this))
        );
    }

    function getChainID() internal view returns (uint256 id) {
        assembly {
            id := chainid()
        }
    }

    function msgSender() internal view returns (address sender_) {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender_ := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender_ = msg.sender;
        }
    }
}

File 10 of 10 : IOwnable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

/// @title ERC-173 Contract Ownership Standard
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
/* is ERC165 */
interface IOwnable {
    /// @notice Get the address of the owner
    /// @return owner_ The address of the owner.
    function owner() external view returns (address owner_);

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"}]

60806040523480156200001157600080fd5b5060405162005fc638038062005fc6833981016040819052620000349162001500565b6200004a81620000ea60201b620000e61760201c565b620000e36040516200005c90620014d6565b604051809103906000f08015801562000079573d6000803e3d6000fd5b506040516200008890620014e4565b604051809103906000f080158015620000a5573d6000803e3d6000fd5b50604051620000b490620014f2565b604051809103906000f080158015620000d1573d6000803e3d6000fd5b506200016e60201b620001a01760201c565b506200177e565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080546001600160a01b031981166001600160a01b0384811691821790935560405160008051602062005f1a833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081620001865750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620001f957620001f962001532565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106200024c576200024c62001532565b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b8160008151811062000298576200029862001532565b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b9082906001908110620002d257620002d262001532565b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106200030c576200030c62001532565b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b908290600390811062000346576200034662001532565b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b908290600490811062000380576200038062001532565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0386168152908101600081526020018281525082600181518110620003d357620003d362001532565b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106200041f576200041f62001532565b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b908290600190811062000459576200045962001532565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0385168152908101600081526020018281525082600281518110620004ac57620004ac62001532565b6020026020010181905250620004da82600060405180602001604052806000815250620004e160201b60201c565b5050505050565b60005b8351811015620006f057600084828151811062000505576200050562001532565b60200260200101516020015190506000600281111562000529576200052962001548565b8160028111156200053e576200053e62001548565b14156200059d57620005978583815181106200055e576200055e62001532565b6020026020010151600001518684815181106200057f576200057f62001532565b6020026020010151604001516200073f60201b60201c565b620006da565b6001816002811115620005b457620005b462001548565b14156200060d5762000597858381518110620005d457620005d462001532565b602002602001015160000151868481518110620005f557620005f562001532565b60200260200101516040015162000a2060201b60201c565b600281600281111562000624576200062462001548565b14156200067d576200059785838151811062000644576200064462001532565b60200260200101516000015186848151811062000665576200066562001532565b60200260200101516040015162000d2560201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084015b60405180910390fd5b5080620006e78162001574565b915050620004e4565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516200072693929190620015ef565b60405180910390a16200073a828262000e8a565b505050565b6000815111620007955760405162461bcd60e51b815260206004820152602b602482015260008051602062005fa683398151915260448201526a1858d95d081d1bc818dd5d60aa1b6064820152608401620006d1565b60008051602062005f1a8339815191526001600160a01b038316620008015760405162461bcd60e51b815260206004820152602c602482015260008051602062005f6283398151915260448201526b65206164647265737328302960a01b6064820152608401620006d1565b6001600160a01b038316600090815260018201602052604090205461ffff8116620008a7576200084b8460405180606001604052806024815260200162005f8260249139620010aa565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b8351811015620004da576000848281518110620008cb57620008cb62001532565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620009735760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608401620006d1565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160b01b031916909117600160a01b61ffff8716021790558362000a0581620016f6565b9450505050808062000a179062001574565b915050620008aa565b600081511162000a765760405162461bcd60e51b815260206004820152602b602482015260008051602062005fa683398151915260448201526a1858d95d081d1bc818dd5d60aa1b6064820152608401620006d1565b60008051602062005f1a8339815191526001600160a01b03831662000ae25760405162461bcd60e51b815260206004820152602c602482015260008051602062005f6283398151915260448201526b65206164647265737328302960a01b6064820152608401620006d1565b6001600160a01b038316600090815260018201602052604090205461ffff811662000b885762000b2c8460405180606001604052806024815260200162005f8260249139620010aa565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b8351811015620004da57600084828151811062000bac5762000bac62001532565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690871681141562000c5a5760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401620006d1565b62000c668183620010ce565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000d0a81620016f6565b9450505050808062000d1c9062001574565b91505062000b8b565b600081511162000d7b5760405162461bcd60e51b815260206004820152602b602482015260008051602062005fa683398151915260448201526a1858d95d081d1bc818dd5d60aa1b6064820152608401620006d1565b60008051602062005f1a8339815191526001600160a01b0383161562000e0a5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608401620006d1565b60005b825181101562000e8457600083828151811062000e2e5762000e2e62001532565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000e6c8183620010ce565b5050808062000e7b9062001574565b91505062000e0d565b50505050565b6001600160a01b03821662000f145780511562000f105760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401620006d1565b5050565b600081511162000f8d5760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401620006d1565b6001600160a01b038216301462000fc35762000fc38260405180606001604052806028815260200162005f3a60289139620010aa565b600080836001600160a01b03168360405162000fe091906200171b565b600060405180830381855af49150503d80600081146200101d576040519150601f19603f3d011682016040523d82523d6000602084013e62001022565b606091505b5090925090508162000e845780511562001052578060405162461bcd60e51b8152600401620006d1919062001739565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b6064820152608401620006d1565b813b818162000e845760405162461bcd60e51b8152600401620006d1919062001739565b60008051602062005f1a8339815191526001600160a01b0383166200115c5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401620006d1565b6001600160a01b038316301415620011ce5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401620006d1565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff1692916200121a916200174e565b90508082146200130d576001600160a01b0385166000908152600184016020526040812080548390811062001253576200125362001532565b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110620012a757620012a762001532565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b0385166000908152600184016020526040902080548062001339576200133962001768565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b031916905580620004da576002830154600090620013a8906001906200174e565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff168082146200146e576000856002018381548110620013ef57620013ef62001532565b6000918252602090912001546002870180546001600160a01b03909216925082918490811062001423576200142362001532565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b8460020180548062001484576200148462001768565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b611d4d80620035e583390190565b61086e806200533283390190565b61037a8062005ba083390190565b6000602082840312156200151357600080fd5b81516001600160a01b03811681146200152b57600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156200158b576200158b6200155e565b5060010190565b60005b83811015620015af57818101518382015260200162001595565b8381111562000e845750506000910152565b60008151808452620015db81602086016020860162001592565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015620016c457898403607f19018652815180516001600160a01b031685528381015189860190600381106200166057634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620016ae5783516001600160e01b031916825292860192600192909201919086019062001682565b5097850197955050509082019060010162001618565b50506001600160a01b038a16908801528681036040880152620016e88189620015c1565b9a9950505050505050505050565b600061ffff808316818114156200171157620017116200155e565b6001019392505050565b600082516200172f81846020870162001592565b9190910192915050565b6020815260006200152b6020830184620015c1565b6000828210156200176357620017636200155e565b500390565b634e487b7160e01b600052603160045260246000fd5b611e57806200178e6000396000f3fe60806040908152600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602081905291902054819073ffffffffffffffffffffffffffffffffffffffff16806100c25760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816101b85750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061022757610227611a93565b7fffffffff00000000000000000000000000000000000000000000000000000000909216602092830291909101820152604080516060810190915273ffffffffffffffffffffffffffffffffffffffff8716815290810160008152602001828152508260008151811061029c5761029c611a93565b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106102e5576102e5611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517fadfca15e00000000000000000000000000000000000000000000000000000000908290600190811061034d5761034d611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517f52ef6b2c0000000000000000000000000000000000000000000000000000000090829060029081106103b5576103b5611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517fcdffacc600000000000000000000000000000000000000000000000000000000908290600390811061041d5761041d611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517f01ffc9a700000000000000000000000000000000000000000000000000000000908290600490811061048557610485611a93565b7fffffffff00000000000000000000000000000000000000000000000000000000909216602092830291909101820152604080516060810190915273ffffffffffffffffffffffffffffffffffffffff861681529081016000815260200182815250826001815181106104fa576104fa611a93565b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b8160008151811061054357610543611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517f8da5cb5b0000000000000000000000000000000000000000000000000000000090829060019081106105ab576105ab611a93565b7fffffffff00000000000000000000000000000000000000000000000000000000909216602092830291909101820152604080516060810190915273ffffffffffffffffffffffffffffffffffffffff8516815290810160008152602001828152508260028151811061062057610620611a93565b60200260200101819052506106468260006040518060200160405280600081525061064d565b5050505050565b60005b835181101561082c57600084828151811061066d5761066d611a93565b60200260200101516020015190506000600281111561068e5761068e611ac2565b8160028111156106a0576106a0611ac2565b14156106ef576106ea8583815181106106bb576106bb611a93565b6020026020010151600001518684815181106106d9576106d9611a93565b602002602001015160400151610877565b610819565b600181600281111561070357610703611ac2565b141561074d576106ea85838151811061071e5761071e611a93565b60200260200101516000015186848151811061073c5761073c611a93565b602002602001015160400151610c6a565b600281600281111561076157610761611ac2565b14156107ab576106ea85838151811061077c5761077c611a93565b60200260200101516000015186848151811061079a5761079a611a93565b602002602001015160400151611099565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100b9565b508061082481611b20565b915050610650565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161086093929190611bcf565b60405180910390a16108728282611257565b505050565b60008151116108ee5760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100b9565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166109985760405162461bcd60e51b815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff8116610a89576109eb84604051806060016040528060248152602001611dfe602491396114a3565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b8351811015610646576000848281518110610aa957610aa9611a93565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610b745760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092557fffffffff0000000000000000000000000000000000000000000000000000000086168352889052902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169091177401000000000000000000000000000000000000000061ffff87160217905583610c5281611d37565b94505050508080610c6290611b20565b915050610a8c565b6000815111610ce15760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100b9565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610d8b5760405162461bcd60e51b815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff8116610e7c57610dde84604051806060016040528060248152602001611dfe602491396114a3565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b8351811015610646576000848281518110610e9c57610e9c611a93565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610f6d5760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100b9565b610f7781836114c4565b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526020878152604080832080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8b160217815573ffffffffffffffffffffffffffffffffffffffff8c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361108181611d37565b9450505050808061109190611b20565b915050610e7f565b60008151116111105760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100b9565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316156111bb5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100b9565b60005b82518110156112515760008382815181106111db576111db611a93565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff1661123c81836114c4565b5050808061124990611b20565b9150506111be565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82166112eb578051156112e75760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016100b9565b5050565b60008151116113625760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff821630146113a1576113a182604051806060016040528060288152602001611dd6602891396114a3565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516113c99190611d59565b600060405180830381855af49150503d8060008114611404576040519150601f19603f3d011682016040523d82523d6000602084013e611409565b606091505b5090925090508161125157805115611435578060405162461bcd60e51b81526004016100b99190611d75565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f766572746564000000000000000000000000000000000000000000000000000060648201526084016100b9565b813b81816112515760405162461bcd60e51b81526004016100b99190611d75565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831661156e5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff83163014156115fa5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100b9565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152602082815260408083205473ffffffffffffffffffffffffffffffffffffffff871684526001808601909352908320547401000000000000000000000000000000000000000090910461ffff16929161167a91611d8f565b90508082146117c35773ffffffffffffffffffffffffffffffffffffffff8516600090815260018401602052604081208054839081106116bc576116bc611a93565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8a168452600188019091526040909220805460079092166004026101000a90920460e01b92508291908590811061171a5761171a611a93565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff000000000000000000000000000000000000000000000000000000009290921682528490526040902080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff8516600090815260018401602052604090208054806117f9576117f9611da6565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000861682528490526040902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169055806106465760028301546000906118b390600190611d8f565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260018087016020526040909120015490915061ffff168082146119ce57600085600201838154811061190357611903611a93565b60009182526020909120015460028701805473ffffffffffffffffffffffffffffffffffffffff909216925082918490811061194157611941611a93565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526001878101909252604090200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83161790555b846002018054806119e1576119e1611da6565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600187810190915260409091200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905550505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b5257611b52611af1565b5060010190565b60005b83811015611b74578181015183820152602001611b5c565b838111156112515750506000910152565b60008151808452611b9d816020860160208601611b59565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611cfa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611c81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611ce55783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611ca3565b50978501979550505090820190600101611bf8565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611d298189611b85565b9a9950505050505050505050565b600061ffff80831681811415611d4f57611d4f611af1565b6001019392505050565b60008251611d6b818460208701611b59565b9190910192915050565b602081526000611d886020830184611b85565b9392505050565b600082821015611da157611da1611af1565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122050dcfaf36eb4358cc6a6a47984bbfe1c43e8c6c0dab6fad9c41913a17404309d64736f6c63430008090033608060405234801561001057600080fd5b50611d2d806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004361003e366004611690565b610045565b005b61004d61009e565b61009761005a858761180d565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061016e92505050565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff166100de610398565b73ffffffffffffffffffffffffffffffffffffffff161461016c5760405162461bcd60e51b815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b565b60005b835181101561034d57600084828151811061018e5761018e611969565b6020026020010151602001519050600060028111156101af576101af611998565b8160028111156101c1576101c1611998565b14156102105761020b8583815181106101dc576101dc611969565b6020026020010151600001518684815181106101fa576101fa611969565b602002602001015160400151610402565b61033a565b600181600281111561022457610224611998565b141561026e5761020b85838151811061023f5761023f611969565b60200260200101516000015186848151811061025d5761025d611969565b6020026020010151604001516107f5565b600281600281111561028257610282611998565b14156102cc5761020b85838151811061029d5761029d611969565b6020026020010151600001518684815181106102bb576102bb611969565b602002602001015160400151610c24565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e000000000000000000000000000000000000000000000000006064820152608401610163565b5080610345816119f6565b915050610171565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161038193929190611aa5565b60405180910390a16103938282610de2565b505050565b6000333014156103fc57600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505036015173ffffffffffffffffffffffffffffffffffffffff1691506103ff9050565b50335b90565b60008151116104795760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166105235760405162461bcd60e51b815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff81166106145761057684604051806060016040528060248152602001611cd46024913961102e565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b835181101561009757600084828151811061063457610634611969565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff1680156106ff5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092557fffffffff0000000000000000000000000000000000000000000000000000000086168352889052902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169091177401000000000000000000000000000000000000000061ffff871602179055836107dd81611c0d565b945050505080806107ed906119f6565b915050610617565b600081511161086c5760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166109165760405162461bcd60e51b815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff8116610a075761096984604051806060016040528060248152602001611cd46024913961102e565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b8351811015610097576000848281518110610a2757610a27611969565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610af85760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610163565b610b02818361104f565b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526020878152604080832080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8b160217815573ffffffffffffffffffffffffffffffffffffffff8c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610c0c81611c0d565b94505050508080610c1c906119f6565b915050610a0a565b6000815111610c9b5760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610d465760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608401610163565b60005b8251811015610ddc576000838281518110610d6657610d66611969565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610dc7818361104f565b50508080610dd4906119f6565b915050610d49565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610e7657805115610e725760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610163565b5050565b6000815111610eed5760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff82163014610f2c57610f2c82604051806060016040528060288152602001611cac6028913961102e565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610f549190611c2f565b600060405180830381855af49150503d8060008114610f8f576040519150601f19603f3d011682016040523d82523d6000602084013e610f94565b606091505b50909250905081610ddc57805115610fc0578060405162461bcd60e51b81526004016101639190611c4b565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f76657274656400000000000000000000000000000000000000000000000000006064820152608401610163565b813b8181610ddc5760405162461bcd60e51b81526004016101639190611c4b565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166110f95760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff83163014156111855760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e0000000000000000000000000000000000006064820152608401610163565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152602082815260408083205473ffffffffffffffffffffffffffffffffffffffff871684526001808601909352908320547401000000000000000000000000000000000000000090910461ffff16929161120591611c65565b905080821461134e5773ffffffffffffffffffffffffffffffffffffffff85166000908152600184016020526040812080548390811061124757611247611969565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8a168452600188019091526040909220805460079092166004026101000a90920460e01b9250829190859081106112a5576112a5611969565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff000000000000000000000000000000000000000000000000000000009290921682528490526040902080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff85166000908152600184016020526040902080548061138457611384611c7c565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000861682528490526040902080547fffffffffffffffffffff000000000000000000000000000000000000000000001690558061009757600283015460009061143e90600190611c65565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260018087016020526040909120015490915061ffff1680821461155957600085600201838154811061148e5761148e611969565b60009182526020909120015460028701805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106114cc576114cc611969565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526001878101909252604090200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83161790555b8460020180548061156c5761156c611c7c565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600187810190915260409091200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905550505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461164257600080fd5b919050565b60008083601f84011261165957600080fd5b50813567ffffffffffffffff81111561167157600080fd5b60208301915083602082850101111561168957600080fd5b9250929050565b6000806000806000606086880312156116a857600080fd5b853567ffffffffffffffff808211156116c057600080fd5b818801915088601f8301126116d457600080fd5b8135818111156116e357600080fd5b8960208260051b85010111156116f857600080fd5b6020830197508096505061170e6020890161161e565b9450604088013591508082111561172457600080fd5b5061173188828901611647565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561179457611794611742565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117e1576117e1611742565b604052919050565b600067ffffffffffffffff82111561180357611803611742565b5060051b60200190565b600061182061181b846117e9565b61179a565b83815260208082019190600586811b86013681111561183e57600080fd5b865b8181101561195c57803567ffffffffffffffff808211156118615760008081fd5b818a019150606082360312156118775760008081fd5b61187f611771565b6118888361161e565b8152868301356003811061189c5760008081fd5b81880152604083810135838111156118b45760008081fd5b939093019236601f8501126118cb57600092508283fd5b833592506118db61181b846117e9565b83815292871b840188019288810190368511156118f85760008081fd5b948901945b848610156119455785357fffffffff00000000000000000000000000000000000000000000000000000000811681146119365760008081fd5b825294890194908901906118fd565b918301919091525088525050948301948301611840565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a2857611a286119c7565b5060010190565b60005b83811015611a4a578181015183820152602001611a32565b83811115610ddc5750506000910152565b60008151808452611a73816020860160208601611a2f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611bd0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611bbb5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611b79565b50978501979550505090820190600101611ace565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611bff8189611a5b565b9a9950505050505050505050565b600061ffff80831681811415611c2557611c256119c7565b6001019392505050565b60008251611c41818460208701611a2f565b9190910192915050565b602081526000611c5e6020830184611a5b565b9392505050565b600082821015611c7757611c776119c7565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220ca8584251ee597ca053a28fe7f19581cea12d444b64863e012d25b8c7d075a2f64736f6c63430008090033608060405234801561001057600080fd5b5061084e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80637a0ed627116100505780637a0ed627146100fa578063adfca15e1461010f578063cdffacc61461012f57600080fd5b806301ffc9a71461006c57806352ef6b2c146100e5575b600080fd5b6100d061007a366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100ed6101cb565b6040516100dc91906105b2565b61010261025d565b6040516100dc9190610669565b61012261011d366004610711565b610469565b6040516100dc9190610747565b6101a661013d366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100dc565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6002810180546040805160208084028201810190925282815293945083018282801561025257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610227575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff8111156102bd576102bd61075a565b60405190808252806020026020018201604052801561030357816020015b6040805180820190915260008152606060208201528152602001906001900390816102db5790505b50925060005b8181101561046357600083600201828154811061032857610328610789565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508085838151811061036857610368610789565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561042957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103d65790505b505050505085838151811061044057610440610789565b60200260200101516020018190525050808061045b906107b8565b915050610309565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092919083018282801561055c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116105095790505b5050505050915050919050565b60006020828403121561057b57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105ab57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561060057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105ce565b50909695505050505050565b600081518084526020808501945080840160005b8381101561065e5781517fffffffff000000000000000000000000000000000000000000000000000000001687529582019590820190600101610620565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610703578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff1684528701518784018790526106f08785018261060c565b9588019593505090860190600101610690565b509098975050505050505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146105ab57600080fd5b6020815260006105ab602083018461060c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610811577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212206bb38038b7ae67a486ea18b42544e8e0d095a1dc0931b6b34fa08c709bcf5c9864736f6c63430008090033608060405234801561001057600080fd5b5061035a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b1461006c575b600080fd5b610043610081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007f61007a3660046102e7565b6100c6565b005b60006100c17fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6100ce6100da565b6100d7816101c3565b50565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1661011a61027d565b73ffffffffffffffffffffffffffffffffffffffff16146101c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000333014156102e157600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505036015173ffffffffffffffffffffffffffffffffffffffff1691506102e49050565b50335b90565b6000602082840312156102f957600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461031d57600080fd5b939250505056fea26469706673582212200ef172762718a64b6ad3c5ffa5b3b5709e9d06435e3040ad99caeaa6b70a32ef64736f6c63430008090033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066000000000000000000000000769e939c3b807523058953f259b355f6ccbf1bcb

Deployed Bytecode

0x60806040908152600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602081905291902054819073ffffffffffffffffffffffffffffffffffffffff16806100c25760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816101b85750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061022757610227611a93565b7fffffffff00000000000000000000000000000000000000000000000000000000909216602092830291909101820152604080516060810190915273ffffffffffffffffffffffffffffffffffffffff8716815290810160008152602001828152508260008151811061029c5761029c611a93565b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106102e5576102e5611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517fadfca15e00000000000000000000000000000000000000000000000000000000908290600190811061034d5761034d611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517f52ef6b2c0000000000000000000000000000000000000000000000000000000090829060029081106103b5576103b5611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517fcdffacc600000000000000000000000000000000000000000000000000000000908290600390811061041d5761041d611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517f01ffc9a700000000000000000000000000000000000000000000000000000000908290600490811061048557610485611a93565b7fffffffff00000000000000000000000000000000000000000000000000000000909216602092830291909101820152604080516060810190915273ffffffffffffffffffffffffffffffffffffffff861681529081016000815260200182815250826001815181106104fa576104fa611a93565b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b8160008151811061054357610543611a93565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015280517f8da5cb5b0000000000000000000000000000000000000000000000000000000090829060019081106105ab576105ab611a93565b7fffffffff00000000000000000000000000000000000000000000000000000000909216602092830291909101820152604080516060810190915273ffffffffffffffffffffffffffffffffffffffff8516815290810160008152602001828152508260028151811061062057610620611a93565b60200260200101819052506106468260006040518060200160405280600081525061064d565b5050505050565b60005b835181101561082c57600084828151811061066d5761066d611a93565b60200260200101516020015190506000600281111561068e5761068e611ac2565b8160028111156106a0576106a0611ac2565b14156106ef576106ea8583815181106106bb576106bb611a93565b6020026020010151600001518684815181106106d9576106d9611a93565b602002602001015160400151610877565b610819565b600181600281111561070357610703611ac2565b141561074d576106ea85838151811061071e5761071e611a93565b60200260200101516000015186848151811061073c5761073c611a93565b602002602001015160400151610c6a565b600281600281111561076157610761611ac2565b14156107ab576106ea85838151811061077c5761077c611a93565b60200260200101516000015186848151811061079a5761079a611a93565b602002602001015160400151611099565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100b9565b508061082481611b20565b915050610650565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161086093929190611bcf565b60405180910390a16108728282611257565b505050565b60008151116108ee5760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100b9565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166109985760405162461bcd60e51b815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff8116610a89576109eb84604051806060016040528060248152602001611dfe602491396114a3565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b8351811015610646576000848281518110610aa957610aa9611a93565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610b745760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092557fffffffff0000000000000000000000000000000000000000000000000000000086168352889052902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169091177401000000000000000000000000000000000000000061ffff87160217905583610c5281611d37565b94505050508080610c6290611b20565b915050610a8c565b6000815111610ce15760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100b9565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610d8b5760405162461bcd60e51b815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff8116610e7c57610dde84604051806060016040528060248152602001611dfe602491396114a3565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b8351811015610646576000848281518110610e9c57610e9c611a93565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610f6d5760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100b9565b610f7781836114c4565b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526020878152604080832080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8b160217815573ffffffffffffffffffffffffffffffffffffffff8c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361108181611d37565b9450505050808061109190611b20565b915050610e7f565b60008151116111105760405162461bcd60e51b815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100b9565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316156111bb5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100b9565b60005b82518110156112515760008382815181106111db576111db611a93565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff1661123c81836114c4565b5050808061124990611b20565b9150506111be565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82166112eb578051156112e75760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016100b9565b5050565b60008151116113625760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff821630146113a1576113a182604051806060016040528060288152602001611dd6602891396114a3565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516113c99190611d59565b600060405180830381855af49150503d8060008114611404576040519150601f19603f3d011682016040523d82523d6000602084013e611409565b606091505b5090925090508161125157805115611435578060405162461bcd60e51b81526004016100b99190611d75565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f766572746564000000000000000000000000000000000000000000000000000060648201526084016100b9565b813b81816112515760405162461bcd60e51b81526004016100b99190611d75565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831661156e5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100b9565b73ffffffffffffffffffffffffffffffffffffffff83163014156115fa5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100b9565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152602082815260408083205473ffffffffffffffffffffffffffffffffffffffff871684526001808601909352908320547401000000000000000000000000000000000000000090910461ffff16929161167a91611d8f565b90508082146117c35773ffffffffffffffffffffffffffffffffffffffff8516600090815260018401602052604081208054839081106116bc576116bc611a93565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8a168452600188019091526040909220805460079092166004026101000a90920460e01b92508291908590811061171a5761171a611a93565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff000000000000000000000000000000000000000000000000000000009290921682528490526040902080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff8516600090815260018401602052604090208054806117f9576117f9611da6565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000861682528490526040902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169055806106465760028301546000906118b390600190611d8f565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260018087016020526040909120015490915061ffff168082146119ce57600085600201838154811061190357611903611a93565b60009182526020909120015460028701805473ffffffffffffffffffffffffffffffffffffffff909216925082918490811061194157611941611a93565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526001878101909252604090200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83161790555b846002018054806119e1576119e1611da6565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600187810190915260409091200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905550505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b5257611b52611af1565b5060010190565b60005b83811015611b74578181015183820152602001611b5c565b838111156112515750506000910152565b60008151808452611b9d816020860160208601611b59565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611cfa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611c81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611ce55783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611ca3565b50978501979550505090820190600101611bf8565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611d298189611b85565b9a9950505050505050505050565b600061ffff80831681811415611d4f57611d4f611af1565b6001019392505050565b60008251611d6b818460208701611b59565b9190910192915050565b602081526000611d886020830184611b85565b9392505050565b600082821015611da157611da1611af1565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122050dcfaf36eb4358cc6a6a47984bbfe1c43e8c6c0dab6fad9c41913a17404309d64736f6c63430008090033

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

000000000000000000000000769e939c3b807523058953f259b355f6ccbf1bcb

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x769E939c3B807523058953F259b355f6CcBF1bCb

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000769e939c3b807523058953f259b355f6ccbf1bcb


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.