Contract 0x812d8983ead958512914713606e67022b965d738 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x723af36990f6e453f8f01fd5f579a218b80f72c5c072dca829e57bd9c474a2dfDeposit68705422023-02-08 15:03:3823 secs ago0xfa7586c334d456d2bd6adfab55593e9a0834e04a IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.137629305412 4,817.50325187
0x34e7a2b90f95464385506ec430b70964f5dac94714498595cf0de2e0faed263fDeposit68705352023-02-08 15:02:581 min ago0x382371705d48905637dac2abf5fee537300f5d3f IN  0x812d8983ead958512914713606e67022b965d7380 CRO0.971425508784 4,817.503577002
0x8c75475bd707023217867645ecabe000e4c17d796a8f31dd8d30c04e92ec4087Deposit68705302023-02-08 15:02:301 min ago0x382371705d48905637dac2abf5fee537300f5d3f IN  0x812d8983ead958512914713606e67022b965d7380 CRO0.971367744892 4,817.503805889
0xd4facaf9f6d09e89072b118cc4de94d95dc3a24b9e2458a27aae02c5205b2d1fDeposit68704422023-02-08 14:54:099 mins ago0x642d16a9a02abddf432c025381d283e34a113ec3 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.137630385381 4,817.5078252
0x4343c9417d39f4f97121fac26f5f724056d19abc6da142fd217435127a5220a3Deposit68703372023-02-08 14:44:1519 mins ago0x877e458f0f80262b84d428eb454004a99c59c110 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.137689297036 4,817.512489726
0xd15268709ecf1a6310f7bcbbadeeed44b318885884c0956af1ef2148516391990x5c51949c68703152023-02-08 14:42:1021 mins ago0x0f76de0739f3874bf930f3101fa7c6719ab4da95 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.153206731911 4,817.513438625
0xb7c76923577647f6294e9282cf37401911fd3f35c77f00101d407940f5464bfaDeposit68702982023-02-08 14:40:3323 mins ago0x0f76de0739f3874bf930f3101fa7c6719ab4da95 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.13763187319 4,817.514125605
0x2f6e16db05ce9460afc9376f579c785974148dff9299ea51bf00ad7d8d1c8e2eDeposit68702892023-02-08 14:39:4324 mins ago0xfa7586c334d456d2bd6adfab55593e9a0834e04a IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.137631972491 4,817.514546112
0xf64edb67d3c416e4f7c469757d3b6e6f1875beee5fb06ac37ef72e23519c24a0Deposit68702752023-02-08 14:38:2425 mins ago0x0f76de0739f3874bf930f3101fa7c6719ab4da95 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.055310427634 4,817.515202139
0x6bf7dbf9074303902a740af6b1fb983546a8ad8119763385649dd3dbb61f61b0Deposit68700712023-02-08 14:19:0844 mins ago0x11614b3ad3c36f7ec3170289bb3e51a22f3f000f IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.055312459943 4,817.524479672
0x2f6ecc3ecddc37145e5ddb6039ddb1182a9283282dec994eebf96df389cb00fdDeposit68700652023-02-08 14:18:3445 mins ago0x11614b3ad3c36f7ec3170289bb3e51a22f3f000f IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.05525471125 4,817.524760895
0xe93a423f33685a94af099aad16c39e9599ddea5dbcd3009a517c5f8283a58ed7Deposit68698362023-02-08 13:56:581 hr 7 mins ago0x9fc47f0057129e81fa4c92016d5025468338a138 IN  0x812d8983ead958512914713606e67022b965d7380 CRO0.974760753585 4,816.035423027
0x35796849913cb70cf16f5ed1d91eecd3355df86d49bc48b16b36eb7a21f5495cDeposit68698292023-02-08 13:56:181 hr 7 mins ago0x9fc47f0057129e81fa4c92016d5025468338a138 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.057115008401 4,816.035646639
0xd7a7bbe41e4db3c09d303eeefbb42169c099648578bf9c642243f18866b3a0d2Deposit68697852023-02-08 13:52:111 hr 11 mins ago0x1accb6fa2d48a7e2f92c8afa3459f4793fb739b1 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.055257509514 4,817.537535731
0xa5f6c9198b08346ecae3b3fe33ac3b3c04f208e5f0dd966a2058db96d06ec832Deposit68697772023-02-08 13:51:261 hr 12 mins ago0x1accb6fa2d48a7e2f92c8afa3459f4793fb739b1 IN  0x812d8983ead958512914713606e67022b965d7380 CRO0.962665756389 4,817.03790113
0xda897b1667b40e775d79177016a7ff3fa6697f22938445ada703f75abf9681ccDeposit68697682023-02-08 13:50:351 hr 13 mins ago0x1accb6fa2d48a7e2f92c8afa3459f4793fb739b1 IN  0x812d8983ead958512914713606e67022b965d7380 CRO0.843776517767 4,817.038322537
0xfc1aff52bc19394e82b318320f6cffb7d9aa2ab6f383eac9d18742d86a950ddcDeposit68697642023-02-08 13:50:131 hr 13 mins ago0x1accb6fa2d48a7e2f92c8afa3459f4793fb739b1 IN  0x812d8983ead958512914713606e67022b965d7380 CRO0.971331728509 4,817.038500878
0x21f58b9a992a0b8eac7341690bb3de6854cc0678bcf322814edaaaea19e902f0Deposit68695562023-02-08 13:30:371 hr 33 mins ago0xb6c2d470a902fba7c3d6de298230e7be929f045f IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.055317601991 4,817.547953233
0x0973c1857deacbeb126531d8a71bbe982bfc09e01b1ea4d756ca8a25ea3042e3Deposit68695522023-02-08 13:30:141 hr 33 mins ago0xb6c2d470a902fba7c3d6de298230e7be929f045f IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.055317642571 4,817.548138484
0x274a32be6821036912dacac3a0901765ffbd4f8d81876720986f12153ed32932Deposit68695472023-02-08 13:29:451 hr 34 mins ago0xb6c2d470a902fba7c3d6de298230e7be929f045f IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.13763995927 4,817.548367614
0xf3625a2298709ea57038acb7bb514447fef46352a36d2901e41beda47e0dc106Deposit68694892023-02-08 13:24:181 hr 39 mins ago0x805f2b8918dfbf8b2a08c6b69d4232965fe2ac20 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.053815206257 4,817.551058344
0xa090bf4a1275732b8ae4686785c79cfa60ae0893b8678d29245c632a3fc6dae9Deposit68692892023-02-08 13:05:281 hr 58 mins ago0x8997dffd15d0c9ea42d74be58d93b4867bb261fe IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.1373464378930
0xfe69b9733d205f17972e8c34f071d4e0a392d9f82c6a1de68ac4c9c0610a9123Deposit68692792023-02-08 13:04:311 hr 59 mins ago0x6b6e2523ec28f04e6aa83853900dd73774d9a860 IN  0x812d8983ead958512914713606e67022b965d7380 CRO0.971437028465 4,817.560705524
0xa76d6c56123d68d3f6d24d925a4f38d1009af45ef7d99db7895d3e395c110ff0Deposit68692762023-02-08 13:04:151 hr 59 mins ago0x6b6e2523ec28f04e6aa83853900dd73774d9a860 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.137642905265 4,817.560842978
0xd8db1d1f94e22f6d6cce3184ad4531b3bc8cad621f19653b59d6d54a53f95ea7Deposit68691312023-02-08 12:50:352 hrs 13 mins ago0x96f845771b4dc039a81b792a79e6ce5bac5cf946 IN  0x812d8983ead958512914713606e67022b965d7380 CRO1.05526403349 4,817.567319457
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x4aE2bD26e60741890Edb9e5C7e984BB396eC26e3

Contract Name:
UniswapV2FactoryDiamond

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 800 runs

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

pragma solidity ^0.8.0;

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

/**
 * @title Contract ownership standard interface
 * @dev see https://eips.ethereum.org/EIPS/eip-173
 */
interface IERC173 is IERC173Internal {
    /**
     * @notice get the ERC173 contract owner
     * @return conrtact owner
     */
    function owner() external view returns (address);

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

File 2 of 29 : IERC173Internal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Partial ERC173 interface needed by internal functions
 */
interface IERC173Internal {
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
}

File 3 of 29 : IOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

interface IOwnable is IERC173 {}

File 4 of 29 : IOwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

interface IOwnableInternal is IERC173Internal {}

File 5 of 29 : ISafeOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

interface ISafeOwnable is IOwnable {
    /**
     * @notice get the nominated owner who has permission to call acceptOwnership
     */
    function nomineeOwner() external view returns (address);

    /**
     * @notice accept transfer of contract ownership
     */
    function acceptOwnership() external;
}

File 6 of 29 : ISafeOwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

interface ISafeOwnableInternal is IOwnableInternal {}

File 7 of 29 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    /**
     * @inheritdoc IERC173
     */
    function owner() public view virtual returns (address) {
        return _owner();
    }

    /**
     * @inheritdoc IERC173
     */
    function transferOwnership(address account) public virtual onlyOwner {
        _transferOwnership(account);
    }
}

File 8 of 29 : OwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

abstract contract OwnableInternal is IOwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;

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

    function _owner() internal view virtual returns (address) {
        return OwnableStorage.layout().owner;
    }

    function _transferOwnership(address account) internal virtual {
        OwnableStorage.layout().setOwner(account);
        emit OwnershipTransferred(msg.sender, account);
    }
}

File 9 of 29 : OwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library OwnableStorage {
    struct Layout {
        address owner;
    }

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

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

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

File 10 of 29 : SafeOwnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

/**
 * @title Ownership access control based on ERC173 with ownership transfer safety check
 */
abstract contract SafeOwnable is ISafeOwnable, Ownable, SafeOwnableInternal {
    /**
     * @inheritdoc ISafeOwnable
     */
    function nomineeOwner() public view virtual returns (address) {
        return _nomineeOwner();
    }

    /**
     * @inheritdoc ISafeOwnable
     */
    function acceptOwnership() public virtual onlyNomineeOwner {
        _acceptOwnership();
    }

    function _transferOwnership(address account)
        internal
        virtual
        override(OwnableInternal, SafeOwnableInternal)
    {
        super._transferOwnership(account);
    }
}

File 11 of 29 : SafeOwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { ISafeOwnableInternal } from './ISafeOwnableInternal.sol';
import { OwnableInternal } from './OwnableInternal.sol';
import { OwnableStorage } from './OwnableStorage.sol';
import { SafeOwnableStorage } from './SafeOwnableStorage.sol';

abstract contract SafeOwnableInternal is ISafeOwnableInternal, OwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;
    using SafeOwnableStorage for SafeOwnableStorage.Layout;

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

    /**
     * @notice get the nominated owner who has permission to call acceptOwnership
     */
    function _nomineeOwner() internal view virtual returns (address) {
        return SafeOwnableStorage.layout().nomineeOwner;
    }

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

    /**
     * @notice set nominee owner, granting permission to call acceptOwnership
     */
    function _transferOwnership(address account) internal virtual override {
        SafeOwnableStorage.layout().setNomineeOwner(account);
    }
}

File 12 of 29 : SafeOwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library SafeOwnableStorage {
    struct Layout {
        address nomineeOwner;
    }

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

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

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

File 13 of 29 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

File 14 of 29 : ERC165Storage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

File 15 of 29 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 16 of 29 : DiamondBase.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { Proxy } from '../../Proxy.sol';
import { IDiamondBase } from './IDiamondBase.sol';
import { DiamondBaseStorage } from './DiamondBaseStorage.sol';

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

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

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

        return implementation;
    }
}

File 17 of 29 : DiamondBaseStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                selectorCount++;
            }

            return (selectorCount, selectorSlot);
        }
    }

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

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

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

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

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

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

                bytes4 lastSelector;
                uint256 oldSelectorsSlotCount;
                uint256 oldSelectorInSlotPosition;

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

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

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

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

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

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

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

            selectorCount = (selectorSlotCount << 3) | selectorInSlotIndex;

            return (selectorCount, selectorSlot);
        }
    }

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

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

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

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

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

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

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

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

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

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

File 18 of 29 : IDiamondBase.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

interface IDiamondBase is IProxy {}

File 19 of 29 : ISolidStateDiamond.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { ISafeOwnable } from '../../access/ownable/ISafeOwnable.sol';
import { IERC165 } from '../../introspection/IERC165.sol';
import { IDiamondBase } from './base/IDiamondBase.sol';
import { IDiamondReadable } from './readable/IDiamondReadable.sol';
import { IDiamondWritable } from './writable/IDiamondWritable.sol';

interface ISolidStateDiamond is
    IDiamondBase,
    IDiamondReadable,
    IDiamondWritable,
    ISafeOwnable,
    IERC165
{
    receive() external payable;

    /**
     * @notice get the address of the fallback contract
     * @return fallback address
     */
    function getFallbackAddress() external view returns (address);

    /**
     * @notice set the address of the fallback contract
     * @param fallbackAddress fallback address
     */
    function setFallbackAddress(address fallbackAddress) external;
}

File 20 of 29 : DiamondReadable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { DiamondBaseStorage } from '../base/DiamondBaseStorage.sol';
import { IDiamondReadable } from './IDiamondReadable.sol';

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

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

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

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

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

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

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

                bool continueLoop;

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

                if (continueLoop) {
                    continue;
                }

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

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

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

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

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

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

        uint256 numSelectors;
        uint256 selectorIndex;

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

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

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

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

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

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

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

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

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

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

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

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

                bool continueLoop;

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

                if (continueLoop) {
                    continue;
                }

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

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

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

File 21 of 29 : IDiamondReadable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

File 22 of 29 : SolidStateDiamond.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IOwnable, Ownable, OwnableInternal, OwnableStorage } from '../../access/ownable/Ownable.sol';
import { ISafeOwnable, SafeOwnable } from '../../access/ownable/SafeOwnable.sol';
import { IERC173 } from '../../access/IERC173.sol';
import { ERC165, IERC165, ERC165Storage } from '../../introspection/ERC165.sol';
import { DiamondBase, DiamondBaseStorage } from './base/DiamondBase.sol';
import { DiamondReadable, IDiamondReadable } from './readable/DiamondReadable.sol';
import { DiamondWritable, IDiamondWritable } from './writable/DiamondWritable.sol';
import { ISolidStateDiamond } from './ISolidStateDiamond.sol';

/**
 * @title SolidState "Diamond" proxy reference implementation
 */
abstract contract SolidStateDiamond is
    ISolidStateDiamond,
    DiamondBase,
    DiamondReadable,
    DiamondWritable,
    SafeOwnable,
    ERC165
{
    using DiamondBaseStorage for DiamondBaseStorage.Layout;
    using ERC165Storage for ERC165Storage.Layout;
    using OwnableStorage for OwnableStorage.Layout;

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

        // register DiamondWritable

        selectors[0] = IDiamondWritable.diamondCut.selector;

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

        // register DiamondReadable

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

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

        // register ERC165

        selectors[5] = IERC165.supportsInterface.selector;

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

        // register SafeOwnable

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

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

        // register Diamond

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

        // diamond cut

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

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

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

        // set owner

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

    receive() external payable {}

    /**
     * @inheritdoc ISolidStateDiamond
     */
    function getFallbackAddress() external view returns (address) {
        return DiamondBaseStorage.layout().fallbackAddress;
    }

    /**
     * @inheritdoc ISolidStateDiamond
     */
    function setFallbackAddress(address fallbackAddress) external onlyOwner {
        DiamondBaseStorage.layout().fallbackAddress = fallbackAddress;
    }

    function _transferOwnership(address account)
        internal
        virtual
        override(OwnableInternal, SafeOwnable)
    {
        super._transferOwnership(account);
    }
}

File 23 of 29 : DiamondWritable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { OwnableInternal } from '../../../access/ownable/OwnableInternal.sol';
import { DiamondBaseStorage } from '../base/DiamondBaseStorage.sol';
import { IDiamondWritable } from './IDiamondWritable.sol';

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

    /**
     * @inheritdoc IDiamondWritable
     */
    function diamondCut(
        FacetCut[] calldata facetCuts,
        address target,
        bytes calldata data
    ) external onlyOwner {
        DiamondBaseStorage.layout().diamondCut(facetCuts, target, data);
    }
}

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

pragma solidity ^0.8.0;

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

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

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

    /**
     * @notice update diamond facets and optionally execute arbitrary initialization function
     * @param facetCuts array of structured Diamond facet update data
     * @param target optional target of initialization delegatecall
     * @param data optional initialization function call data
     */
    function diamondCut(
        FacetCut[] calldata facetCuts,
        address target,
        bytes calldata data
    ) external;
}

File 25 of 29 : IProxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IProxy {
    fallback() external payable;
}

File 26 of 29 : Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

File 27 of 29 : AddressUtils.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

library AddressUtils {
    using UintUtils for uint256;

    function toString(address account) internal pure returns (string memory) {
        return uint256(uint160(account)).toHexString(20);
    }

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

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

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

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

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

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

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

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

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

File 28 of 29 : UintUtils.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title utility functions for uint256 operations
 * @dev derived from https://github.com/OpenZeppelin/openzeppelin-contracts/ (MIT license)
 */
library UintUtils {
    bytes16 private constant HEX_SYMBOLS = '0123456789abcdef';

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return '0';
        }

        uint256 temp = value;
        uint256 digits;

        while (temp != 0) {
            digits++;
            temp /= 10;
        }

        bytes memory buffer = new bytes(digits);

        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }

        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return '0x00';
        }

        uint256 length = 0;

        for (uint256 temp = value; temp != 0; temp >>= 8) {
            unchecked {
                length++;
            }
        }

        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = '0';
        buffer[1] = 'x';

        unchecked {
            for (uint256 i = 2 * length + 1; i > 1; --i) {
                buffer[i] = HEX_SYMBOLS[value & 0xf];
                value >>= 4;
            }
        }

        require(value == 0, 'UintUtils: hex length insufficient');

        return string(buffer);
    }
}

File 29 of 29 : UniswapV2FactoryDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import {SolidStateDiamond} from "@solidstate/contracts/proxy/diamond/SolidStateDiamond.sol";

contract UniswapV2FactoryDiamond is SolidStateDiamond {}

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

Contract ABI

[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondWritable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondWritable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IDiamondWritable.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondWritable.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IDiamondReadable.Facet[]","name":"diamondFacets","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nomineeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackAddress","type":"address"}],"name":"setFallbackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506000620000296200048160201b62000ef81760201c565b60408051600c8082526101a08201909252919250600091906020820161018080368337019050509050631f931c1c60e01b816000815181106200007057620000706200103a565b6001600160e01b0319909216602092830291909101820152620000aa9083906307e4c70760e21b9060019062000f1c620004a5821b17901c565b637a0ed62760e01b81600181518110620000c857620000c86200103a565b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b90829060029081106200010257620001026200103a565b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060039081106200013c576200013c6200103a565b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060049081106200017657620001766200103a565b6001600160e01b0319909216602092830291909101820152620001b09083906348e2b09360e01b9060019062000f1c620004a5821b17901c565b6301ffc9a760e01b81600581518110620001ce57620001ce6200103a565b6001600160e01b0319909216602092830291909101820152620002089083906301ffc9a760e01b9060019062000f1c620004a5821b17901c565b638da5cb5b60e01b816006815181106200022657620002266200103a565b6001600160e01b031990921660209283029190910190910152805163455a8a8560e11b90829060079081106200026057620002606200103a565b6001600160e01b031990921660209283029190910190910152805163f2fde38b60e01b90829060089081106200029a576200029a6200103a565b6001600160e01b03199092166020928302919091019091015280516379ba509760e01b9082906009908110620002d457620002d46200103a565b6001600160e01b03199092166020928302919091018201526200030e9083906307f5828d60e41b9060019062000f1c620004a5821b17901c565b632c40805960e01b81600a815181106200032c576200032c6200103a565b6001600160e01b0319909216602092830291909101909101528051639142376560e01b908290600b9081106200036657620003666200103a565b6001600160e01b03199290921660209283029190910190910152604080516001808252818301909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816200039757905050604080516060810190915230815290915060208101600081526020018381525081600081518110620003fd57620003fd6200103a565b60200260200101819052506200044a81600060405180602001604052806000815250620004346200053360201b62000fa41760201c565b6200055760201b62000fc817909392919060201c565b6200047833620004646200078360201b620011a41760201c565b620007a760201b620011c81790919060201c565b505050620011df565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083169003620005055760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615620005885750600381901c60009081526002870160205260409020545b60005b8651811015620006f1576000878281518110620005ac57620005ac6200103a565b60200260200101519050600081602001519050600082604001515111620006225760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b6064820152608401620004fc565b600081600281111562000639576200063962001050565b0362000668576200065d8585848d620007c460201b620011e517909392919060201c565b9095509350620006e6565b60018160028111156200067f576200067f62001050565b03620006a5576200069f828b6200099660201b6200139d1790919060201c565b620006e6565b6002816002811115620006bc57620006bc62001050565b03620006e657620006e08585848d62000bd760201b6200160017909392919060201c565b90955093505b50506001016200058b565b508282146200070e5760018701805461ffff191661ffff84161790555b60078216156200073157600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516200076693929190620010ba565b60405180910390a16200077a858562000ea5565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b805160009081906001600160a01b03163014806200080057506200080083600001516001600160a01b03166200103460201b6200047c1760201c565b6200085a5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b6064820152608401620004fc565b60005b83604001515181101562000989576000846040015182815181106200088657620008866200103a565b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c156200090f5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b6064820152608401620004fc565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c199990991617978190036200097957600389901c600090815260028b0160205260408120989098555b505050600195860195016200085d565b5093959294509192505050565b620009b981600001516001600160a01b03166200103460201b6200047c1760201c565b62000a175760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b6064820152608401620004fc565b60005b81604001515181101562000bd25760008260400151828151811062000a435762000a436200103a565b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c8062000ac05760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401620004fc565b306001600160a01b0382160362000b145760405162461bcd60e51b81526020600482015260226024820152600080516020620033dc8339815191526044820152616c6560f01b6064820152608401620004fc565b84600001516001600160a01b0316816001600160a01b03160362000b8c5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b6064820152608401620004fc565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166001600160601b039190911617905560010162000a1a565b505050565b805160009081906001600160a01b03161562000c4e5760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b6064820152608401620004fc565b600385901c6007861660005b85604001515181101562000e915760008660400151828151811062000c835762000c836200103a565b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c62000cff5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401620004fc565b30606082901c0362000d4e5760405162461bcd60e51b81526020600482015260226024820152600080516020620033dc8339815191526044820152616c6560f01b6064820152608401620004fc565b600089900362000d7c57600019909401600081815260028c0160205260409020549850936007935062000d84565b600019909301925b600584901b89901b6000806001600160e01b03198084169086161462000dd7576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166001600160601b0386161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821462000e3c57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c17905562000e60565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8660000362000e7f57600088815260028f01602052604081208190559b505b50506001909301925062000c5a915050565b5060039190911b1796939550929350505050565b8051156001600160a01b038316151462000f195760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b6064820152608401620004fc565b6001600160a01b0382161562001030576001600160a01b038216301462000fbe5762000f59826001600160a01b03166200103460201b6200047c1760201c565b62000fbe5760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b6064820152608401620004fc565b6000826001600160a01b03168260405162000fda9190620011c1565b600060405180830381855af49150503d806000811462001017576040519150601f19603f3d011682016040523d82523d6000602084013e6200101c565b606091505b505090508062000bd2573d6000803e3d6000fd5b5050565b3b151590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60005b838110156200108357818101518382015260200162001069565b50506000910152565b60008151808452620010a681602086016020860162001066565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156200118f57898403607f19018652815180516001600160a01b031685528381015189860190600381106200112b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620011795783516001600160e01b03191682529286019260019290920191908601906200114d565b50978501979550505090820190600101620010e3565b50506001600160a01b038a16908801528681036040880152620011b381896200108c565b9a9950505050505050505050565b60008251620011d581846020870162001066565b9190910192915050565b6121ed80620011ef6000396000f3fe6080604052600436106100cb5760003560e01c80638ab5150a11610074578063adfca15e1161004e578063adfca15e14610308578063cdffacc614610335578063f2fde38b1461038e576100d2565b80638ab5150a146102be5780638da5cb5b146102d357806391423765146102e8576100d2565b806352ef6b2c116100a557806352ef6b2c1461026557806379ba5097146102875780637a0ed6271461029c576100d2565b806301ffc9a7146101865780631f931c1c146101f45780632c40805914610214576100d2565b366100d257005b60006100dc6103ae565b90506001600160a01b0381163b6101605760405162461bcd60e51b815260206004820152602660248201527f50726f78793a20696d706c656d656e746174696f6e206d75737420626520636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e80801561017f573d6000f35b3d6000fd5b005b34801561019257600080fd5b506101df6101a1366004611bd0565b6001600160e01b03191660009081527f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e705602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561020057600080fd5b5061018461020f366004611c4b565b610482565b34801561022057600080fd5b507f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc96546001600160a01b03165b6040516001600160a01b0390911681526020016101eb565b34801561027157600080fd5b5061027a610558565b6040516101eb9190611cfd565b34801561029357600080fd5b5061018461072e565b3480156102a857600080fd5b506102b16107c6565b6040516101eb9190611d8f565b3480156102ca57600080fd5b5061024d610c21565b3480156102df57600080fd5b5061024d610c30565b3480156102f457600080fd5b50610184610303366004611e0c565b610c3a565b34801561031457600080fd5b50610328610323366004611e0c565b610cf4565b6040516101eb9190611e27565b34801561034157600080fd5b5061024d610350366004611bd0565b6001600160e01b03191660009081527f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc93602052604090205460601c90565b34801561039a57600080fd5b506101846103a9366004611e0c565b610e73565b600080356001600160e01b03191681527f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9360208190526040822054819060601c80610475575060038201546001600160a01b0316806104755760405162461bcd60e51b815260206004820152603260248201527f4469616d6f6e64426173653a206e6f20666163657420666f756e6420666f722060448201527f66756e6374696f6e207369676e617475726500000000000000000000000000006064820152608401610157565b9392505050565b3b151590565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146104fb5760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e65720000006044820152606401610157565b6105516105088587611efd565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105499250610fa4915050565b929190610fc8565b5050505050565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc94546060907f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc939061ffff1667ffffffffffffffff8111156105bb576105bb611e69565b6040519080825280602002602001820160405280156105e4578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610726576000818152600285016020526040812054905b6008811015610711578361062381612047565b600188015490955061ffff168511905061071157600581901b82901b6001600160e01b0319811660009081526020889052604081205460601c90805b888110156106b4578a818151811061067957610679612060565b60200260200101516001600160a01b0316836001600160a01b0316036106a257600191506106b4565b806106ac81612047565b91505061065f565b5080156106c3575050506106ff565b818a89815181106106d6576106d6612060565b6001600160a01b0390921660209283029190910190910152876106f881612047565b9850505050505b8061070981612047565b915050610610565b5050808061071e90612047565b9150506105ed565b505082525090565b6107366118e6565b6001600160a01b0316336001600160a01b0316146107bc5760405162461bcd60e51b815260206004820152602960248201527f536166654f776e61626c653a2073656e646572206d757374206265206e6f6d6960448201527f6e6565206f776e657200000000000000000000000000000000000000000000006064820152608401610157565b6107c4611919565b565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc94546060907f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc939061ffff1667ffffffffffffffff81111561082957610829611e69565b60405190808252806020026020018201604052801561086f57816020015b6040805180820190915260008152606060208201528152602001906001900390816108475790505b50600182015490925060009061ffff1667ffffffffffffffff81111561089757610897611e69565b6040519080825280602002602001820160405280156108c0578160200160208202803683370190505b50905060008060005b600185015461ffff16821015610baf576000818152600286016020526040812054905b6008811015610b9a57836108ff81612047565b600189015490955061ffff1685119050610b9a57600581901b82901b6001600160e01b0319811660009081526020899052604081205460601c90805b88811015610a5857826001600160a01b03168c828151811061095f5761095f612060565b6020026020010151600001516001600160a01b031603610a4657838c828151811061098c5761098c612060565b6020026020010151602001518b83815181106109aa576109aa612060565b602002602001015160ff16815181106109c5576109c5612060565b60200260200101906001600160e01b03191690816001600160e01b0319168152505060ff8a82815181106109fb576109fb612060565b602002602001015160ff1610610a1057600080fd5b898181518110610a2257610a22612060565b602002602001018051809190610a3790612076565b60ff1690525060019150610a58565b80610a5081612047565b91505061093b565b508015610a6757505050610b88565b818b8981518110610a7a57610a7a612060565b60209081029190910101516001600160a01b03909116905260018a015461ffff1667ffffffffffffffff811115610ab357610ab3611e69565b604051908082528060200260200182016040528015610adc578160200160208202803683370190505b508b8981518110610aef57610aef612060565b602002602001015160200181905250828b8981518110610b1157610b11612060565b602002602001015160200151600081518110610b2f57610b2f612060565b60200260200101906001600160e01b03191690816001600160e01b031916815250506001898981518110610b6557610b65612060565b60ff9092166020928302919091019091015287610b8181612047565b9850505050505b80610b9281612047565b9150506108ec565b50508080610ba790612047565b9150506108c9565b5060005b82811015610c16576000848281518110610bcf57610bcf612060565b602002602001015160ff1690506000878381518110610bf057610bf0612060565b602002602001015160200151905081815250508080610c0e90612047565b915050610bb3565b508185525050505090565b6000610c2b6118e6565b905090565b6000610c2b6119c6565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b03163314610cb35760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e65720000006044820152606401610157565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9680546001600160a01b0319166001600160a01b0392909216919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc94546060907f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc939061ffff1667ffffffffffffffff811115610d5757610d57611e69565b604051908082528060200260200182016040528015610d80578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610e69576000818152600285016020526040812054905b6008811015610e545783610dbf81612047565b600188015490955061ffff1685119050610e5457600581901b82901b6001600160e01b0319811660009081526020889052604090205460601c6001600160a01b038a1603610e415780888781518110610e1a57610e1a612060565b6001600160e01b03199092166020928302919091019091015285610e3d81612047565b9650505b5080610e4c81612047565b915050610dac565b50508080610e6190612047565b915050610d89565b5050825250919050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b03163314610eec5760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e65720000006044820152606401610157565b610ef5816119ee565b50565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083169003610f765760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e74657266616365206964000000006044820152606401610157565b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615610ff85750600381901c60009081526002870160205260409020545b60005b865181101561111857600087828151811061101857611018612060565b6020026020010151905060008160200151905060008260400151511161108c5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b6064820152608401610157565b60008160028111156110a0576110a0612095565b036110bb576110b18a8686856111e5565b909550935061110e565b60018160028111156110cf576110cf612095565b036110e3576110de8a8361139d565b61110e565b60028160028111156110f7576110f7612095565b0361110e576111088a868685611600565b90955093505b5050600101610ffb565b508282146111345760018701805461ffff191661ffff84161790555b600782161561115657600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686604051611189939291906120fb565b60405180910390a161119b85856119f7565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b805160009081906001600160a01b031630148061120c575082516001600160a01b03163b15155b6112645760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b6064820152608401610157565b60005b8360400151518110156113905760008460400151828151811061128c5761128c612060565b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c156113135760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b6064820152608401610157565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6bffffffffffffffffffffffff19168b1790925560058a901b60e090811692831c91831c1999909916179781900361138157600389901c600090815260028b0160205260408120989098555b50505060019586019501611267565b5093959294509192505050565b80516001600160a01b03163b61141b5760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c41434520746172676574206861732060448201527f6e6f20636f6465000000000000000000000000000000000000000000000000006064820152608401610157565b60005b8160400151518110156115fb5760008260400151828151811061144357611443612060565b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c806114be5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610157565b306001600160a01b038216036115215760405162461bcd60e51b815260206004820152602260248201527f4469616d6f6e64426173653a2073656c6563746f7220697320696d6d757461626044820152616c6560f01b6064820152608401610157565b84600001516001600160a01b0316816001600160a01b0316036115ac5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201527f64656e746963616c0000000000000000000000000000000000000000000000006064820152608401610157565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6bffffffffffffffffffffffff19166bffffffffffffffffffffffff9190911617905560010161141e565b505050565b805160009081906001600160a01b0316156116835760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201527f6265207a65726f206164647265737300000000000000000000000000000000006064820152608401610157565b600385901c6007861660005b8560400151518110156118d2576000866040015182815181106116b4576116b4612060565b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c61172e5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e64006044820152606401610157565b30606082901c0361178c5760405162461bcd60e51b815260206004820152602260248201527f4469616d6f6e64426173653a2073656c6563746f7220697320696d6d757461626044820152616c6560f01b6064820152608401610157565b60008990036117b857600019909401600081815260028c016020526040902054985093600793506117c0565b600019909301925b600584901b89901b6000806001600160e01b03198084169086161461181c576001600160e01b03198316600090815260208f90526040902080546bffffffffffffffffffffffff19166bffffffffffffffffffffffff86161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821461187f57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c1790556118a3565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b866000036118c157600088815260028f01602052604081208190559b505b50506001909301925061168f915050565b5060039190911b1796939550929350505050565b60007f24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce66178905b546001600160a01b0316919050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460805460405133916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a380546001600160a01b03191633178155610ef560007f24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce66178905b9081546001600160a01b0319166001600160a01b0391909116179055565b60007f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046061190a565b610ef581611b85565b8051156001600160a01b0383161514611a785760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201527f696f6e20706172616d65746572730000000000000000000000000000000000006064820152608401610157565b6001600160a01b03821615611b81576001600160a01b0382163014611b14576001600160a01b0382163b611b145760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201527f657420686173206e6f20636f64650000000000000000000000000000000000006064820152608401610157565b6000826001600160a01b031682604051611b2e91906121c4565b600060405180830381855af49150503d8060008114611b69576040519150601f19603f3d011682016040523d82523d6000602084013e611b6e565b606091505b50509050806115fb573d6000803e3d6000fd5b5050565b610ef581610ef5817f24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce66178906119a8565b80356001600160e01b031981168114611bcb57600080fd5b919050565b600060208284031215611be257600080fd5b61047582611bb3565b80356001600160a01b0381168114611bcb57600080fd5b60008083601f840112611c1457600080fd5b50813567ffffffffffffffff811115611c2c57600080fd5b602083019150836020828501011115611c4457600080fd5b9250929050565b600080600080600060608688031215611c6357600080fd5b853567ffffffffffffffff80821115611c7b57600080fd5b818801915088601f830112611c8f57600080fd5b813581811115611c9e57600080fd5b8960208260051b8501011115611cb357600080fd5b60208301975080965050611cc960208901611beb565b94506040880135915080821115611cdf57600080fd5b50611cec88828901611c02565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b81811015611d3e5783516001600160a01b031683529284019291840191600101611d19565b50909695505050505050565b600081518084526020808501945080840160005b83811015611d845781516001600160e01b03191687529582019590820190600101611d5e565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611dfe57888303603f19018552815180516001600160a01b03168452870151878401879052611deb87850182611d4a565b9588019593505090860190600101611db6565b509098975050505050505050565b600060208284031215611e1e57600080fd5b61047582611beb565b6020808252825182820181905260009190848201906040850190845b81811015611d3e5783516001600160e01b03191683529284019291840191600101611e43565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611ea257611ea2611e69565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611ed157611ed1611e69565b604052919050565b600067ffffffffffffffff821115611ef357611ef3611e69565b5060051b60200190565b6000611f10611f0b84611ed9565b611ea8565b83815260208082019190600586811b860136811115611f2e57600080fd5b865b8181101561202457803567ffffffffffffffff80821115611f515760008081fd5b818a01915060608236031215611f675760008081fd5b611f6f611e7f565b611f7883611beb565b81528683013560038110611f8c5760008081fd5b8188015260408381013583811115611fa45760008081fd5b939093019236601f850112611fbb57600092508283fd5b83359250611fcb611f0b84611ed9565b83815292871b84018801928881019036851115611fe85760008081fd5b948901945b8486101561200d57611ffe86611bb3565b82529489019490890190611fed565b918301919091525088525050948301948301611f30565b5092979650505050505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161205957612059612031565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361208c5761208c612031565b60010192915050565b634e487b7160e01b600052602160045260246000fd5b60005b838110156120c65781810151838201526020016120ae565b50506000910152565b600081518084526120e78160208601602086016120ab565b601f01601f19169290920160200192915050565b6000606080830181845280875180835260808601915060808160051b87010192506020808a016000805b8481101561219457898703607f19018652825180516001600160a01b03168852848101516003811061216557634e487b7160e01b84526021600452602484fd5b8886015260409081015190880189905261218189890182611d4a565b9750509483019491830191600101612125565b5050506001600160a01b03891690870152505083810360408501526121b981866120cf565b979650505050505050565b600082516121d68184602087016120ab565b919091019291505056fea164736f6c6343000810000a4469616d6f6e64426173653a2073656c6563746f7220697320696d6d75746162

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