Abstract Testnet

Contract

0xc4151FeCa42Df507F158D1FBC4Eb5C145D9CE16B

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Deploy Proxy41637282025-01-13 3:24:2018 days ago1736738660IN0 ETH0.000008250.06281206
Deploy Proxy41631092025-01-13 3:11:3318 days ago1736737893IN0 ETH0.000009710.06281206

Latest 22 internal transactions

Parent Transaction Hash Block From To
41637282025-01-13 3:24:2018 days ago1736738660
0xc4151FeC...45D9CE16B
0 ETH
41637282025-01-13 3:24:2018 days ago1736738660
0xc4151FeC...45D9CE16B
0 ETH
41637282025-01-13 3:24:2018 days ago1736738660
0xc4151FeC...45D9CE16B
 Contract Creation0 ETH
41637282025-01-13 3:24:2018 days ago1736738660
0xc4151FeC...45D9CE16B
0 ETH
41637282025-01-13 3:24:2018 days ago1736738660
0xc4151FeC...45D9CE16B
0 ETH
41631092025-01-13 3:11:3318 days ago1736737893
0xc4151FeC...45D9CE16B
0 ETH
41631092025-01-13 3:11:3318 days ago1736737893
0xc4151FeC...45D9CE16B
0 ETH
41631092025-01-13 3:11:3318 days ago1736737893
0xc4151FeC...45D9CE16B
 Contract Creation0 ETH
41631092025-01-13 3:11:3318 days ago1736737893
0xc4151FeC...45D9CE16B
0 ETH
41631092025-01-13 3:11:3318 days ago1736737893
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
 Contract Creation0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
 Contract Creation0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
 Contract Creation0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625
0xc4151FeC...45D9CE16B
0 ETH
41567792025-01-13 1:10:2518 days ago1736730625  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC1967Factory

Compiler Version
v0.8.28+commit.7893614a

ZkSolc Version
v1.5.7

Optimization Enabled:
Yes with Mode 3

Other Settings:
cancun EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 4 : ERC1967Factory.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import {ERC1967Proxy} from "./ERC1967Proxy.sol";
import {UpgradeableBeacon} from "./UpgradeableBeacon.sol";
import {ERC1967BeaconProxy} from "./ERC1967BeaconProxy.sol";

/// @notice A factory for deploying minimal ERC1967 proxies on ZKsync.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ext/zksync/ERC1967Factory.sol)
///
/// @dev This factory can be used in one of the following ways:
/// 1. Deploying a fresh copy with each contract.
///    Easier to test. In ZKsync VM, factory dependency bytecode is not included in the
///    factory bytecode, so you do not need to worry too much about bytecode size limits.
/// 2. Loading it from a storage variable which is set to the canonical address.
///    See: ERC1967FactoryConstants.ADDRESS.
///
/// This factory is crafted to be compatible with both ZKsync VM and regular EVM.
/// This is so that when ZKsync achieves full EVM equivalence,
/// this factory can still be used via the fresh copy per contract way.
contract ERC1967Factory {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The proxy deployment failed.
    error DeploymentFailed();

    /// @dev The upgrade failed.
    error UpgradeFailed();

    /// @dev The salt does not start with the caller.
    error SaltDoesNotStartWithCaller();

    /// @dev No initialization code hash exists for the instance hash.
    error NoInitCodeHashFound();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The admin of a `instance` has been changed. Applies to both proxies and beacons.
    event AdminChanged(address indexed instance, address indexed admin);

    /// @dev The implementation for `instance` has been upgraded. Applies to both proxies and beacons.
    event Upgraded(address indexed instance, address indexed implementation);

    /// @dev A proxy has been deployed.
    event ProxyDeployed(
        address indexed proxy, address indexed implementation, address indexed admin
    );

    /// @dev A beacon has been deployed.
    event BeaconDeployed(
        address indexed beacon, address indexed implementation, address indexed admin
    );

    /// @dev A beacon proxy has been deployed.
    event BeaconProxyDeployed(address indexed beaconProxy, address indexed beacon);

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The hash of the proxy.
    bytes32 public proxyHash;

    /// @dev The hash of the upgradeable beacon.
    bytes32 public beaconHash;

    /// @dev The hash of the beacon proxy.
    bytes32 public beaconProxyHash;

    /// @dev Whether to use the CREATE2 address prediction workflow for ZKsync VM.
    bool internal _useZKsyncCreate2Prediction;

    /// @dev Maps the instance hash to the initialization code hash.
    mapping(bytes32 => bytes32) internal _initCodeHashes;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                        CONSTRUCTOR                         */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    constructor() payable {
        bytes32 proxySalt = keccak256(abi.encode(address(this), bytes32("proxySalt")));
        address proxyAddress = address(new ERC1967Proxy{salt: proxySalt}());

        proxyHash = _extcodehash(proxyAddress);
        beaconHash = _extcodehash(address(new UpgradeableBeacon()));
        beaconProxyHash = _extcodehash(address(new ERC1967BeaconProxy()));

        if (_predictDeterministicAddressZKsync(proxyHash, proxySalt) == proxyAddress) {
            _useZKsyncCreate2Prediction = true;
        } else {
            _initCodeHashes[proxyHash] = keccak256(type(ERC1967Proxy).creationCode);
            _initCodeHashes[beaconHash] = keccak256(type(UpgradeableBeacon).creationCode);
            _initCodeHashes[beaconProxyHash] = keccak256(type(ERC1967BeaconProxy).creationCode);
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                      ADMIN FUNCTIONS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the admin of the `instance`.
    /// Returns `address(0)` if `instance` is a beacon proxy.
    /// Works for both proxies and beacons.
    function adminOf(address instance) public view returns (address admin) {
        /// @solidity memory-safe-assembly
        assembly {
            admin := mul(sload(instance), gt(instance, 0xff))
        }
    }

    /// @dev Sets the admin of the `instance`.
    /// The caller of this function must be the admin of `instance`.
    /// Works for both proxies and beacons.
    function changeAdmin(address instance, address admin) public {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(eq(sload(instance), caller())) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
            sstore(instance, admin)
        }
        emit AdminChanged(instance, admin);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     UPGRADE FUNCTIONS                      */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Upgrades `instance` to point to `implementation`.
    /// The caller of this function must be the admin of `instance`.
    /// Works for both proxies and beacons.
    function upgrade(address instance, address implementation) public payable {
        upgradeAndCall(instance, implementation, _emptyData());
    }

    /// @dev Upgrades `instance` to point to `implementation`.
    /// Then, calls it with abi encoded `data`.
    /// The caller of this function must be the admin of `instance`.
    /// Works for both proxies and beacons.
    function upgradeAndCall(address instance, address implementation, bytes calldata data)
        public
        payable
    {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(eq(sload(instance), caller())) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
            let m := mload(0x40)
            mstore(m, implementation)
            calldatacopy(add(m, 0x20), data.offset, data.length)
            if iszero(call(gas(), instance, callvalue(), m, add(0x20, data.length), 0x00, 0x00)) {
                if iszero(returndatasize()) {
                    mstore(0x00, 0x55299b49) // `UpgradeFailed()`.
                    revert(0x1c, 0x04)
                }
                returndatacopy(0x00, 0x00, returndatasize())
                revert(0x00, returndatasize())
            }
        }
        emit Upgraded(instance, implementation);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                      PROXY DEPLOYMENT                      */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Deploys a proxy for `implementation`, with `admin`, and returns its address.
    /// The value passed into this function will be forwarded to the proxu.
    function deployProxy(address implementation, address admin) public payable returns (address) {
        return deployProxyAndCall(implementation, admin, _emptyData());
    }

    /// @dev Deploys a proxy for `implementation`, with `admin`, and returns its address.
    /// The value passed into this function will be forwarded to the proxu.
    /// Then, calls the proxy with abi encoded `data`.
    function deployProxyAndCall(address implementation, address admin, bytes calldata data)
        public
        payable
        returns (address)
    {
        return _deploy(0, uint160(implementation), uint160(admin), "", false, data);
    }

    /// @dev Deploys a proxy for `implementation`, with `admin`, `salt`,
    /// and returns its deterministic address.
    /// The value passed into this function will be forwarded to the proxy.
    function deployProxyDeterministic(address implementation, address admin, bytes32 salt)
        public
        payable
        returns (address)
    {
        return deployProxyDeterministicAndCall(implementation, admin, salt, _emptyData());
    }

    /// @dev Deploys a proxy for `implementation`, with `admin`, `salt`,
    /// and returns its deterministic address.
    /// The value passed into this function will be forwarded to the proxy.
    /// Then, calls the proxy with abi encoded `data`.
    function deployProxyDeterministicAndCall(
        address implementation,
        address admin,
        bytes32 salt,
        bytes calldata data
    ) public payable returns (address) {
        return _deploy(0, uint160(implementation), uint160(admin), salt, true, data);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     BEACON DEPLOYMENT                      */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Deploys a beacon with `implementation` and `admin`, and returns its address.
    function deployBeacon(address implementation, address admin) public returns (address) {
        return _deploy(1, uint160(implementation), uint160(admin), "", false, _emptyData());
    }

    /// @dev Deploys a beacon with `implementation` and `admin`, with `salt`,
    /// and returns its deterministic address.
    function deployBeaconDeterministic(address implementation, address admin, bytes32 salt)
        public
        payable
        returns (address)
    {
        return _deploy(1, uint160(implementation), uint160(admin), salt, true, _emptyData());
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  BEACON PROXY DEPLOYMENT                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Deploys a beacon proxy referring to `beacon`, and returns its address.
    /// The value passed into this function will be forwarded to the beacon proxy.
    function deployBeaconProxy(address beacon) public payable returns (address) {
        return deployBeaconProxyAndCall(beacon, _emptyData());
    }

    /// @dev Deploys a beacon proxy referring to `beacon`, and returns its address.
    /// The value passed into this function will be forwarded to the beacon proxy.
    /// Then, calls the beacon proxy with abi encoded `data`.
    function deployBeaconProxyAndCall(address beacon, bytes calldata data)
        public
        payable
        returns (address)
    {
        return _deploy(2, uint160(beacon), 0, "", false, data);
    }

    /// @dev Deploys a beacon proxy referring to `beacon`, with `salt`,
    /// and returns its deterministic address.
    /// The value passed into this function will be forwarded to the beacon proxy.
    function deployBeaconProxyDeterministic(address beacon, bytes32 salt)
        public
        payable
        returns (address)
    {
        return deployBeaconProxyDeterministicAndCall(beacon, salt, _emptyData());
    }

    /// @dev Deploys a beacon proxy referring to `beacon`, with `salt`,
    /// and returns its deterministic address.
    /// The value passed into this function will be forwarded to the beacon proxy.
    /// Then, calls the beacon proxy with abi encoded `data`.
    function deployBeaconProxyDeterministicAndCall(
        address beacon,
        bytes32 salt,
        bytes calldata data
    ) public payable returns (address) {
        return _deploy(2, uint160(beacon), 0, salt, true, data);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       PUBLIC HELPERS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the address of the instance deployed with `salt`.
    /// `instanceHash` is one of `proxyHash`, `beaconProxyHash`, `beaconHash`.
    function predictDeterministicAddress(bytes32 instanceHash, bytes32 salt)
        public
        view
        returns (address)
    {
        if (_useZKsyncCreate2Prediction) {
            return _predictDeterministicAddressZKsync(instanceHash, salt);
        }
        return _predictDeterministicAddressRegularEVM(instanceHash, salt);
    }

    /// @dev Returns the implementation of `instance`.
    /// If `instance` is not deployed, returns `address(0)`.
    function implementationOf(address instance) public view returns (address result) {
        bytes32 h = _extcodehash(instance);
        if (h == proxyHash || h == beaconProxyHash) {
            /// @solidity memory-safe-assembly
            assembly {
                let s := staticcall(gas(), instance, 0x00, 0x01, 0x00, 0x20)
                if iszero(and(gt(returndatasize(), 0x1f), s)) { revert(0x00, 0x00) }
                result := mload(0x00)
            }
        } else if (h == beaconHash) {
            /// @solidity memory-safe-assembly
            assembly {
                mstore(0x00, 0x5c60da1b) // `implementation()`.
                let s := staticcall(gas(), instance, 0x1c, 0x04, 0x00, 0x20)
                if iszero(and(gt(returndatasize(), 0x1f), s)) { revert(0x00, 0x00) }
                result := mload(0x00)
            }
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                      INTERNAL HELPERS                      */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Validates the salt and returns it.
    function _validateSalt(bytes32 salt) internal view returns (bytes32) {
        /// @solidity memory-safe-assembly
        assembly {
            // If the salt does not start with the zero address or the caller.
            if iszero(or(iszero(shr(96, salt)), eq(caller(), shr(96, salt)))) {
                mstore(0x00, 0x2f634836) // `SaltDoesNotStartWithCaller()`.
                revert(0x1c, 0x04)
            }
        }
        return salt;
    }

    /// @dev Performs the deployment optionality to deploy deterministically with a `salt`.
    function _deploy(
        uint256 codeType,
        uint256 target,
        uint256 admin,
        bytes32 salt,
        bool useSalt,
        bytes calldata data
    ) internal returns (address instance) {
        if (codeType == 0) {
            instance = address(
                useSalt ? new ERC1967Proxy{salt: _validateSalt(salt)}() : new ERC1967Proxy()
            );
            /// @solidity memory-safe-assembly
            assembly {
                sstore(instance, admin)
            }
            emit ProxyDeployed(instance, address(uint160(target)), address(uint160(admin)));
        } else if (codeType == 1) {
            instance = address(
                useSalt
                    ? new UpgradeableBeacon{salt: _validateSalt(salt)}()
                    : new UpgradeableBeacon()
            );
            /// @solidity memory-safe-assembly
            assembly {
                sstore(instance, admin)
            }
            emit BeaconDeployed(instance, address(uint160(target)), address(uint160(admin)));
        } else {
            instance = address(
                useSalt
                    ? new ERC1967BeaconProxy{salt: _validateSalt(salt)}()
                    : new ERC1967BeaconProxy()
            );
            emit BeaconProxyDeployed(instance, address(uint160(target)));
        }
        /// @solidity memory-safe-assembly
        assembly {
            // Revert if the creation fails.
            if iszero(instance) {
                mstore(0x00, 0x30116425) // `DeploymentFailed()`.
                revert(0x1c, 0x04)
            }
            // Make the initialization call.
            let m := mload(0x40)
            mstore(m, target)
            calldatacopy(add(m, 0x20), data.offset, data.length)
            if iszero(call(gas(), instance, callvalue(), m, add(0x20, data.length), 0x00, 0x00)) {
                // Revert with the `DeploymentFailed` selector if there is no error returndata.
                if iszero(returndatasize()) {
                    mstore(0x00, 0x30116425) // `DeploymentFailed()`.
                    revert(0x1c, 0x04)
                }
                // Otherwise, bubble up the returned error.
                returndatacopy(0x00, 0x00, returndatasize())
                revert(0x00, returndatasize())
            }
        }
    }

    /// @dev Returns the `extcodehash` of `instance`.
    function _extcodehash(address instance) internal view returns (bytes32 result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := extcodehash(instance)
        }
    }

    /// @dev Helper function to return an empty bytes calldata.
    function _emptyData() internal pure returns (bytes calldata data) {
        /// @solidity memory-safe-assembly
        assembly {
            data.length := 0
        }
    }

    /// @dev Returns the predicted `CREATE2` address on ZKsync VM.
    function _predictDeterministicAddressZKsync(bytes32 instanceHash, bytes32 salt)
        internal
        view
        returns (address predicted)
    {
        bytes32 prefix = keccak256("zksyncCreate2");
        bytes32 emptyStringHash = keccak256("");
        /// @solidity memory-safe-assembly
        assembly {
            // The following is `keccak256(abi.encode(...))`.
            let m := mload(0x40)
            mstore(m, prefix)
            mstore(add(m, 0x20), address())
            mstore(add(m, 0x40), salt)
            mstore(add(m, 0x60), instanceHash)
            mstore(add(m, 0x80), emptyStringHash)
            predicted := keccak256(m, 0xa0)
        }
    }

    /// @dev Returns the predicted `CREATE2` address on regular EVM.
    function _predictDeterministicAddressRegularEVM(bytes32 instanceHash, bytes32 salt)
        internal
        view
        returns (address predicted)
    {
        bytes32 initCodeHash = _initCodeHashes[instanceHash];
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(initCodeHash) {
                mstore(0x00, 0xa3a58d1c) // `NoInitCodeHashFound()`.
                revert(0x1c, 0x04)
            }
            // The following is `keccak256(abi.encodePacked(...))`.
            mstore8(0x00, 0xff) // Write the prefix.
            mstore(0x35, initCodeHash)
            mstore(0x01, shl(96, address()))
            mstore(0x15, salt)
            predicted := keccak256(0x00, 0x55)
            mstore(0x35, 0) // Restore the overwritten part of the free memory pointer.
        }
    }
}

File 2 of 4 : ERC1967Proxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice A sufficiently minimal ERC1967 proxy tailor-made for ZKsync.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ext/zksync/ERC1967Proxy.sol)
contract ERC1967Proxy {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Emitted when the proxy's implementation is upgraded.
    event Upgraded(address indexed implementation);

    /// @dev `keccak256(bytes("Upgraded(address)"))`.
    uint256 private constant _UPGRADED_EVENT_SIGNATURE =
        0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ERC-1967 storage slot for the implementation in the proxy.
    /// `uint256(keccak256("eip1967.proxy.implementation")) - 1`.
    bytes32 internal constant _ERC1967_IMPLEMENTATION_SLOT =
        0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /// @dev The storage slot for the deployer.
    /// `uint256(keccak256("ERC1967Proxy.deployer")) - 1`.
    bytes32 internal constant _ERC1967_PROXY_DEPLOYER_SLOT =
        0xc20b8dda59e1f49cae9bbc6c3744edc7900ba02880cd7b33b5b82a96197202ba;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                        CONSTRUCTOR                         */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    constructor() payable {
        /// @solidity memory-safe-assembly
        assembly {
            sstore(_ERC1967_PROXY_DEPLOYER_SLOT, caller())
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          FALLBACK                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    fallback() external payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x40, 0) // Optimization trick to remove free memory pointer initialization.
            // For the special case of 1-byte calldata, return the implementation.
            if eq(calldatasize(), 1) {
                mstore(0x00, sload(_ERC1967_IMPLEMENTATION_SLOT))
                return(0x00, 0x20)
            }
            // Deployer workflow.
            if eq(caller(), sload(_ERC1967_PROXY_DEPLOYER_SLOT)) {
                let newImplementation := calldataload(0x00)
                sstore(_ERC1967_IMPLEMENTATION_SLOT, newImplementation)
                if gt(calldatasize(), 0x20) {
                    let n := sub(calldatasize(), 0x20)
                    calldatacopy(0x00, 0x20, n)
                    if iszero(delegatecall(gas(), newImplementation, 0x00, n, 0x00, 0x00)) {
                        // Bubble up the revert if the call reverts.
                        returndatacopy(0x00, 0x00, returndatasize())
                        revert(0x00, returndatasize())
                    }
                }
                // Emit the {Upgraded} event.
                log2(0x00, 0x00, _UPGRADED_EVENT_SIGNATURE, newImplementation)
                stop() // End the context.
            }
            // Perform the delegatecall.
            let implementation := sload(_ERC1967_IMPLEMENTATION_SLOT)
            calldatacopy(0x00, 0x00, calldatasize())
            let s := delegatecall(gas(), implementation, 0x00, calldatasize(), 0x00, 0x00)
            returndatacopy(0x00, 0x00, returndatasize())
            if iszero(s) { revert(0x00, returndatasize()) }
            return(0x00, returndatasize())
        }
    }
}

File 3 of 4 : UpgradeableBeacon.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice A sufficiently minimal upgradeable beacon tailor-made for ZKsync.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ext/zksync/UpgradeableBeacon.sol)
contract UpgradeableBeacon {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Emitted when the proxy's implementation is upgraded.
    event Upgraded(address indexed implementation);

    /// @dev `keccak256(bytes("Upgraded(address)"))`.
    uint256 private constant _UPGRADED_EVENT_SIGNATURE =
        0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev To store the implementation.
    uint256 private __implementation;

    /// @dev For upgrades / initialization.
    uint256 private __deployer;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                        CONSTRUCTOR                         */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    constructor() payable {
        __deployer = uint256(uint160(msg.sender));
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*               UPGRADEABLE BEACON OPERATIONS                */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the implementation stored in the beacon.
    /// See: https://eips.ethereum.org/EIPS/eip-1967#beacon-contract-address
    function implementation() public view returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(__implementation.slot)
        }
    }

    fallback() external virtual {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x40, 0) // Optimization trick to remove free memory pointer initialization.
            let newImplementation := calldataload(0x00)
            // Revert if the caller is not the deployer. We will still allow the implementation
            // to be set to an empty contract for simplicity.
            if iszero(eq(caller(), sload(__deployer.slot))) { revert(0x00, 0x00) }
            sstore(__implementation.slot, newImplementation)
            // Emit the {Upgraded} event.
            log2(0x00, 0x00, _UPGRADED_EVENT_SIGNATURE, newImplementation)
        }
    }
}

File 4 of 4 : ERC1967BeaconProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice A sufficiently minimal ERC1967 beacon proxy tailor-made for ZKsync.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ext/zksync/ERC1967BeaconProxy.sol)
contract ERC1967BeaconProxy {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Emitted when the proxy's beacon is upgraded.
    event BeaconUpgraded(address indexed beacon);

    /// @dev `keccak256(bytes("BeaconUpgraded(address)"))`.
    uint256 private constant _BEACON_UPGRADED_EVENT_SIGNATURE =
        0x1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ERC-1967 storage slot for the implementation in the proxy.
    /// `uint256(keccak256("eip1967.proxy.implementation")) - 1`.
    bytes32 internal constant _ERC1967_BEACON_SLOT =
        0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;

    /// @dev The storage slot for the deployer.
    /// `uint256(keccak256("ERC1967BeaconProxy.deployer")) - 1`.
    bytes32 internal constant _ERC1967_BEACON_PROXY_DEPLOYER_SLOT =
        0xabc1f855dddf3277214739f5a08d8b9db61505a97fd0c09e835a2d800705b3bc;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                        CONSTRUCTOR                         */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    constructor() payable {
        /// @solidity memory-safe-assembly
        assembly {
            sstore(_ERC1967_BEACON_PROXY_DEPLOYER_SLOT, caller())
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          FALLBACK                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    fallback() external payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x40, 0) // Optimization trick to remove free memory pointer initialization.
            // For the special case of 1-byte calldata, return the implementation.
            if eq(calldatasize(), 1) {
                mstore(0x00, 0x5c60da1b) // `implementation()`.
                let s := staticcall(gas(), sload(_ERC1967_BEACON_SLOT), 0x1c, 0x04, 0x00, 0x20)
                if iszero(and(gt(returndatasize(), 0x1f), s)) { revert(0x00, 0x00) }
                return(0x00, 0x20) // Return the implementation.
            }
            // Deployer workflow.
            if eq(caller(), sload(_ERC1967_BEACON_PROXY_DEPLOYER_SLOT)) {
                sstore(_ERC1967_BEACON_SLOT, calldataload(0x00))
                // Emit the {Upgraded} event.
                log2(0x00, 0x00, _BEACON_UPGRADED_EVENT_SIGNATURE, calldataload(0x00))
                stop() // End the context.
            }
            // Query the beacon.
            mstore(0x00, 0x5c60da1b) // `implementation()`.
            let s := staticcall(gas(), sload(_ERC1967_BEACON_SLOT), 0x1c, 0x04, 0x00, 0x20)
            if iszero(and(gt(returndatasize(), 0x1f), s)) { revert(0x00, 0x00) }
            let implementation := mload(0x00)
            // Perform the delegatecall.
            calldatacopy(0x00, 0x00, calldatasize())
            s := delegatecall(gas(), implementation, 0x00, calldatasize(), 0x00, 0x00)
            returndatacopy(0x00, 0x00, returndatasize())
            if iszero(s) { revert(0x00, returndatasize()) }
            return(0x00, returndatasize())
        }
    }
}

Settings
{
  "viaIR": false,
  "codegen": "yul",
  "remappings": [
    "forge-std/=lib/forge-std/src/",
    "forge-zksync-std/=lib/forge-zksync-std/src/"
  ],
  "evmVersion": "cancun",
  "outputSelection": {
    "*": {
      "*": [
        "abi",
        "metadata"
      ],
      "": [
        "ast"
      ]
    }
  },
  "optimizer": {
    "enabled": true,
    "mode": "3",
    "fallback_to_optimizing_for_size": false,
    "disable_system_request_memoization": true
  },
  "metadata": {},
  "libraries": {},
  "enableEraVMExtensions": false,
  "forceEVMLA": false
}

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"DeploymentFailed","type":"error"},{"inputs":[],"name":"NoInitCodeHashFound","type":"error"},{"inputs":[],"name":"SaltDoesNotStartWithCaller","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UpgradeFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"instance","type":"address"},{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"BeaconDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beaconProxy","type":"address"},{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconProxyDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":true,"internalType":"address","name":"admin","type":"address"}],"name":"ProxyDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"instance","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[{"internalType":"address","name":"instance","type":"address"}],"name":"adminOf","outputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beaconHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beaconProxyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"address","name":"admin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"address","name":"admin","type":"address"}],"name":"deployBeacon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"deployBeaconDeterministic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beacon","type":"address"}],"name":"deployBeaconProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beacon","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"deployBeaconProxyAndCall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beacon","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"deployBeaconProxyDeterministic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beacon","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"deployBeaconProxyDeterministicAndCall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"address","name":"admin","type":"address"}],"name":"deployProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"deployProxyAndCall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"deployProxyDeterministic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"deployProxyDeterministicAndCall","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"instance","type":"address"}],"name":"implementationOf","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"instanceHash","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"predictDeterministicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeAndCall","outputs":[],"stateMutability":"payable","type":"function"}]

3cda33510000000000000000000000000000000000000000000000000000000000000000010002af85ebd661bd7f3893d0b1218242efe52e013b3489cb048c199f90be4900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x0004000000000002000400000000000200000060041002700000025a03400197000300000031035500020000000103550000025a0040019d0000000100200190000000390000c13d0000008002000039000000400020043f000000040030008c000006eb0000413d000000000201043b000000e002200270000002720020009c000000740000a13d000002730020009c000000a40000213d0000027a0020009c0000014e0000a13d0000027b0020009c000001c80000613d0000027c0020009c000001cf0000613d0000027d0020009c000006eb0000c13d000000240030008c000006eb0000413d0000000401100370000000000101043b000400000001001d000002620010009c000006eb0000213d0000026701000041000000a40010043f00000000010004140000026602000041000000800020043f000000840000043f0000006002000039000000c40020043f000000e40000043f0000025a0010009c0000025a01008041000000c0011002100000029a011001c70000800602000039096209580000040f0000000100200190000003460000613d000000000101043b000000000001004b000003560000c13d000000030100036700000001020000310000034a0000013d0000000001000410000000a00010043f0000025b01000041000000c00010043f0000004001000039000000800010043f000000e001000039000000400010043f00000000010004140000025a0010009c0000025a01008041000000c0011002100000025c011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000401043b000000400100043d0000025d0010009c000000540000413d0000027001000041000000000010043f0000004101000039000000040010043f0000027101000041000009640001043000000024021000390000025e03000041000000000032043500000044021000390000000003000414000000600500003900000000005204350000025f0200004100000000002104350000000402100039000400000004001d0000000000420435000000640210003900000000000204350000025a0010009c0000025a0100804100000040011002100000025a0030009c0000025a03008041000000c002300210000000000121019f00000260011001c70000800602000039096209580000040f0000000100200190000000c70000613d000000000101043b000000000001004b0000011c0000c13d00000003010003670000000102000031000000cb0000013d000002800020009c000000eb0000a13d000002810020009c000001570000a13d000002820020009c000001fe0000613d000002830020009c000002040000613d000002840020009c000006eb0000c13d000000440030008c000006eb0000413d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000002401100370000000000101043b000002990010009c0000008d0000413d00000000020004110000006003100270000000000032004b0000017b0000c13d0000026702000041000000a40020043f00000000020004140000025f03000041000000800030043f000000840010043f0000006001000039000000c40010043f000000e40000043f0000025a0020009c0000025a02008041000000c0012002100000029a011001c70000800602000039096209580000040f00000001002001900000037a0000613d000000000101043b000000000001004b000003d80000c13d000000030100036700000001020000310000037e0000013d000002740020009c0000017f0000a13d000002750020009c0000020c0000613d000002760020009c0000025a0000613d000002770020009c000006eb0000c13d000000840030008c000006eb0000413d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000002402100370000000000202043b000300000002001d000002620020009c000006eb0000213d0000006401100370000000000101043b0000028c0010009c000006eb0000213d00000004011000390000000002030019096207820000040f00000044030000390000000203300367000000000303043b0000000004010019000000000502001900000004010000290000000302000029000002e50000013d000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000000d20000c13d000000000006004b000000e30000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000025a0020009c0000025a0200804100000060012002100000025a0030009c0000025a030080410000004002300210000000000112019f0000096400010430000002870020009c000001a90000213d0000028a0020009c000002790000613d0000028b0020009c000006eb0000c13d000000640030008c000006eb0000413d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000002402100370000000000202043b000300000002001d000002620020009c000006eb0000213d0000004401100370000000000101043b000002990010009c000001050000413d00000000020004110000006003100270000000000032004b0000017b0000c13d0000026502000041000000a40020043f00000000020004140000025f03000041000000800030043f000000840010043f0000006001000039000000c40010043f000000e40000043f0000025a0020009c0000025a02008041000000c0012002100000029a011001c70000800602000039096209580000040f0000000100200190000003fc0000613d000000000101043b000000000001004b0000046e0000c13d00000003010003670000000102000031000004000000013d000002610200004100000000002004430000026201100197000300000001001d000000040010044300000000010004140000025a0010009c0000025a01008041000000c00110021000000263011001c700008002020000390962095d0000040f0000000100200190000005160000613d000000000101043b000000000010041b000000400100043d000002640010009c0000004e0000213d00000024021000390000026503000041000000000032043500000044021000390000000003000414000000600400003900000000004204350000026602000041000000000021043500000064021000390000000000020435000000040210003900000000000204350000025a0010009c0000025a0100804100000040011002100000025a0030009c0000025a03008041000000c002300210000000000121019f00000260011001c70000800602000039096209580000040f0000000100200190000002ed0000613d000000000101043b000000000001004b000003100000c13d00000003010003670000000102000031000002f10000013d0000027e0020009c000002870000613d0000027f0020009c000006eb0000c13d0000000001000416000000000001004b000006eb0000c13d0000000201000039000002080000013d000002850020009c000002a90000613d000002860020009c000006eb0000c13d000000640030008c000006eb0000413d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000004402100370000000000202043b0000028c0020009c000006eb0000213d0000002304200039000000000034004b000006eb0000813d000200040020003d0000000204100360000000000404043b000300000004001d0000028c0040009c000006eb0000213d00000003022000290000002402200039000000000032004b000006eb0000213d0000002401100370000000000101043b000002990010009c000004940000413d00000000020004110000006003100270000000000032004b000004940000613d000002a701000041000000000010043f00000297010000410000096400010430000002780020009c000002b90000613d000002790020009c000006eb0000c13d000000240030008c000006eb0000413d0000000002000416000000000002004b000006eb0000c13d0000000401100370000000000101043b000400000001001d000002620010009c000006eb0000213d000002610100004100000000001004430000000401000029000000040010044300000000010004140000025a0010009c0000025a01008041000000c00110021000000263011001c700008002020000390962095d0000040f0000000100200190000005160000613d000000000101043b000000000200041a000000000021004b000001a20000613d0000000202000039000000000202041a000000000021004b0000040c0000c13d00000000010004140000000402000029000000040020008c000003af0000c13d00000001020000390000000103000031000003d10000013d000002880020009c000002df0000613d000002890020009c000006eb0000c13d000000440030008c000006eb0000413d0000000002000416000000000002004b000006eb0000c13d0000000402100370000000000502043b000002620050009c000006eb0000213d0000002401100370000000000601043b000002620060009c000006eb0000213d000000000105041a0000000002000411000000000021004b000003420000c13d000000000065041b00000000010004140000025a0010009c0000025a01008041000000c00110021000000291011001c70000800d020000390000000303000039000002a504000041000004cf0000013d0000000001000416000000000001004b000006eb0000c13d000000000100041a000000800010043f0000028f01000041000009630001042e000000440030008c000006eb0000413d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000002402100370000000000202043b0000028c0020009c000006eb0000213d0000002304200039000000000034004b000006eb0000813d000200040020003d0000000201100360000000000101043b000300000001001d0000028c0010009c000006eb0000213d00000003012000290000002401100039000000000031004b000006eb0000213d0000026701000041000000a40010043f00000000010004140000026602000041000000800020043f000000840000043f0000006002000039000000c40020043f000000e40000043f0000025a0010009c0000025a01008041000000c0011002100000029a011001c70000800602000039096209580000040f0000000100200190000004ab0000613d000000000101043b000000000001004b000005170000c13d00000003010003670000000102000031000004af0000013d00000000010300190962079c0000040f00000262011001970000026202200197096207bd0000040f000002e60000013d0000000001000416000000000001004b000006eb0000c13d0000000101000039000000000101041a000000800010043f0000028f01000041000009630001042e000000640030008c000006eb0000413d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000002402100370000000000202043b000300000002001d000002620020009c000006eb0000213d0000004402100370000000000502043b0000028c0050009c000006eb0000213d0000002302500039000000000032004b000006eb0000813d0000000404500039000000000241034f000000000202043b0000028c0020009c000006eb0000213d00000000052500190000002405500039000000000035004b000006eb0000213d0000000403000029000000000303041a0000000005000411000000000053004b000003420000c13d0000000303000029000000800030043f0000002003400039000000000331034f000002a8042001980000001f0520018f000000a0014000390000023b0000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000016004b000002370000c13d000000000005004b000002480000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000000010004140000000403000029000000040030008c0000061f0000613d000000000300041600000020042000390000025a0010009c0000025a01008041000000c001100210000000000003004b000006110000c13d0000025a0040009c0000025a040080410000006002400210000000000121019f00000295011001c70000000402000029000006190000013d000000440030008c000006eb0000413d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000002401100370000000000101043b000300000001001d000002620010009c000006eb0000213d0000000405000029000000000105041a0000000002000411000000000021004b000003420000c13d0000000301000029000000800010043f0000000001000414000000040050008c000004c60000613d00000000030004160000025a0010009c0000025a01008041000000c001100210000000000003004b000004bb0000c13d0000028f011001c70000000002050019000004bf0000013d000000440030008c000006eb0000413d0000000402100370000000000402043b000002620040009c000006eb0000213d0000002401100370000000000201043b000002620020009c000006eb0000213d00000000010400190000000004000019096207bd0000040f000002e60000013d000000440030008c000006eb0000413d0000000002000416000000000002004b000006eb0000c13d0000000402100370000000000202043b0000002401100370000000000301043b0000000301000039000000000101041a000000ff00100190000002fd0000c13d000400000003001d000000000020043f0000000401000039000000200010043f00000000010004140000025a0010009c0000025a01008041000000c0011002100000026e011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b000000000101041a000000000001004b0000038a0000c13d000002a301000041000000000010043f00000297010000410000096400010430000000240030008c000006eb0000413d0000000002000416000000000002004b000006eb0000c13d0000000401100370000000000101043b000002620010009c000006eb0000213d000000000201041a0000026202200197000000ff0010008c000000000200a019000000800020043f0000028f01000041000009630001042e000000440030008c000006eb0000413d0000000002000416000000000002004b000006eb0000c13d0000000402100370000000000202043b000400000002001d000002620020009c000006eb0000213d0000002401100370000000000101043b000300000001001d000002620010009c000006eb0000213d0000026501000041000000a40010043f00000000010004140000026602000041000000800020043f000000840000043f0000006002000039000000c40020043f000000e40000043f0000025a0010009c0000025a01008041000000c0011002100000029a011001c70000800602000039096209580000040f00000001002001900000039f0000613d000000000101043b000000000001004b0000041b0000c13d00000003010003670000000102000031000003a30000013d0000000001030019096207700000040f0000000004000031000002620110019700000262022001970000000005000019096208850000040f000000400200043d00000000001204350000025a0020009c0000025a0200804100000040012002100000028d011001c7000009630001042e000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000002f80000c13d000000d60000013d0000026901000041000000800010043f0000000001000410000000a00010043f000000c00030043f000000e00020043f0000026801000041000001000010043f00000000010004140000025a0010009c0000025a01008041000000c001100210000002a0011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b000003d60000013d000002610200004100000000002004430000026201100197000000040010044300000000010004140000025a0010009c0000025a01008041000000c00110021000000263011001c700008002020000390962095d0000040f0000000100200190000005160000613d000000000101043b0000000102000039000000000012041b000000400100043d000002640010009c0000004e0000213d00000024021000390000026703000041000000000032043500000044021000390000000003000414000000600400003900000000004204350000026602000041000000000021043500000064021000390000000000020435000000040210003900000000000204350000025a0010009c0000025a0100804100000040011002100000025a0030009c0000025a03008041000000c002300210000000000121019f00000260011001c70000800602000039096209580000040f00000001002001900000045e0000613d000000000101043b000000000001004b000004da0000c13d00000003010003670000000102000031000004620000013d000002a401000041000000000010043f00000297010000410000096400010430000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000003510000c13d000000d60000013d00000000020004140000025a0020009c0000025a020080410000026205100197000000c00120021000000291011001c70000800d0200003900000003030000390000029c04000041000300000005001d0000000406000029096209580000040f0000000100200190000006eb0000613d0000000304000029000000000004004b000007540000613d000000400200043d000000040100002900000000001204350000000001000414000000040040008c000006340000613d00000000030004160000025a0020009c0000025a0200804100000040022002100000025a0010009c0000025a01008041000000c001100210000000000121019f000000000003004b000005aa0000c13d0000028d011001c70000000002040019000005ad0000013d000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000003850000c13d000000d60000013d000000000200043d000002a1022001c7000000000020043f000000350010043f00000000010004100000006001100210000000010010043f0000000401000029000000150010043f00000000010004140000025a0010009c0000025a01008041000000c001100210000002a2011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b000000350000043f000003d60000013d000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000003aa0000c13d000000d60000013d0000025a0010009c0000025a01008041000000c00110021000000299011001c70962095d0000040f00000060031002700000025a03300197000000200030008c000000200400003900000000040340190000001f0540018f0000002004400190000003c20000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000003be0000c13d000000000005004b000003cf0000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000100200190000006eb0000613d0000001f0030008c000006eb0000a13d000000000100043d0000026201100197000002e60000013d00000000020004140000025a0020009c0000025a020080410000026205100197000000c00120021000000291011001c70000800d0200003900000003030000390000029c04000041000300000005001d0000000406000029096209580000040f0000000100200190000006eb0000613d0000000304000029000000000004004b000007540000613d000000400200043d000000040100002900000000001204350000000001000414000000040040008c000006340000613d00000000030004160000025a0020009c0000025a0200804100000040022002100000025a0010009c0000025a01008041000000c001100210000000000121019f000000000003004b000006290000c13d0000028d011001c700000003020000290000062d0000013d000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000004070000c13d000000d60000013d0000000102000039000000000302041a000000000031004b0000000001000019000002e60000c13d0000029801000041000000000010043f00000000010004140000000403000029000000040030008c0000055a0000c13d0000001c0100043d000000000010043f00000001030000310000057d0000013d00000262051001970000000307000029000000000075041b00000000010004140000025a0010009c0000025a01008041000000c00110021000000291011001c70000800d0200003900000004030000390000029b04000041000200000005001d0000000406000029096209580000040f0000000100200190000006eb0000613d0000000204000029000000000004004b000007540000613d000000400200043d000000040100002900000000001204350000000001000414000000040040008c000006340000613d0000025a0020009c0000025a0200804100000040022002100000025a0010009c0000025a01008041000000c001100210000000000121019f0000028d011001c70000000002040019096209580000040f000000020400002900000060031002700001025a0030019d00030000000103550000000100200190000006340000c13d0000025a02300198000007540000613d0000001f0420018f00000290032001980000044f0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b0000044b0000c13d000000000004004b0000045c0000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060012002100000096400010430000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000004690000c13d000000d60000013d00000262051001970000000307000029000000000075041b00000000010004140000025a0010009c0000025a01008041000000c00110021000000291011001c70000800d0200003900000004030000390000029b04000041000200000005001d0000000406000029096209580000040f0000000100200190000006eb0000613d0000000203000029000000000003004b000007540000613d000000400200043d000000040100002900000000001204350000000001000414000000040030008c000006f70000613d00000000030004160000025a0020009c0000025a0200804100000040022002100000025a0010009c0000025a01008041000000c001100210000000000121019f000000000003004b000006ed0000c13d0000028d011001c70000000202000029000006f10000013d0000026702000041000000a40020043f00000000020004140000025f03000041000000800030043f000000840010043f0000006001000039000000c40010043f000000e40000043f0000025a0020009c0000025a02008041000000c0012002100000029a011001c70000800602000039096209580000040f0000000100200190000005820000613d000000000101043b000000000001004b000005ce0000c13d00000003010003670000000102000031000005860000013d000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b000004b60000c13d000000d60000013d0000028e011001c7000080090200003900000000040500190000000005000019096209580000040f000300000001035500000060031002700001025a0030019d00000001002001900000000405000029000004d40000613d00000000010004140000025a0010009c0000025a01008041000000c00110021000000291011001c70000800d02000039000000030300003900000292040000410000000306000029096209580000040f0000000100200190000006eb0000613d0000000001000019000009630001042e0000025a02300198000005920000c13d0000029601000041000000000010043f00000297010000410000096400010430000002610200004100000000002004430000026201100197000000040010044300000000010004140000025a0010009c0000025a01008041000000c00110021000000263011001c700008002020000390962095d0000040f0000000100200190000005160000613d000000000101043b0000000202000039000000000012041b000000400100043d0000008002100039000000000400041a00000268030000410000000000320435000000400210003900000004030000290000000000320435000000200210003900000000030004100000000000320435000002690200004100000000002104350000006002100039000400000004001d00000000004204350000025a0010009c0000025a01008041000000400110021000000000020004140000025a0020009c0000025a02008041000000c002200210000000000121019f0000026a011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b0000026201100197000000030010006c0000066f0000c13d0000000301000039000000000201041a000002a90220019700040001002001c30000000402000029000000000021041b0000002001000039000001000010044300000120000004430000026f01000041000009630001042e000000000001042f00000000020004140000025a0020009c0000025a020080410000026205100197000000c00120021000000291011001c70000800d0200003900000003030000390000029c04000041000100000005001d0000000406000029096209580000040f0000000100200190000006eb0000613d000000010000006b000007540000613d000000400100043d000000040200002900000000052104360000000304000029000002a8034001980000001f0440018f0000000002350019000000020600002900000020066000390000000206600367000005370000613d000000000706034f000000007807043c0000000005850436000000000025004b000005330000c13d000000000004004b000005440000613d000000000336034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000000020004140000000103000029000000040030008c0000074e0000613d0000000003000416000000030400002900000020044000390000025a0020009c0000025a02008041000000c0022002100000025a0010009c0000025a010080410000004001100210000000000003004b000007140000c13d0000025a0040009c0000025a040080410000006003400210000000000131019f000000000112019f00000001020000290000071e0000013d0000025a0010009c0000025a01008041000000c00110021000000297011001c700000000020300190962095d0000040f00000060031002700000025a03300197000000200030008c000000200400003900000000040340190000001f0540018f00000020044001900000056e0000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b0000056a0000c13d000000000005004b0000057b0000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000100200190000006eb0000613d000000200030008c000003d50000813d000006eb0000013d000300000001035500000060021002700001025a0020019d0000025a02200197000002a8052001980000001f0620018f000000400300043d0000000004530019000000d60000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b0000058d0000c13d000000d60000013d0000001f0420018f00000290032001980000059b0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b000005970000c13d000000000004004b000005a80000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000600120021000000964000104300000029d011001c700008009020000390000000005000019096209580000040f000300000001035500000060031002700001025a0030019d00000001002001900000000304000029000006340000c13d0000025a02300198000007540000613d0000001f0420018f0000029003200198000005bf0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b000005bb0000c13d000000000004004b000005cc0000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001200210000009640001043000000000020004140000025a0020009c0000025a020080410000026205100197000000c00120021000000291011001c70000800d0200003900000003030000390000029c04000041000100000005001d0000000406000029096209580000040f0000000100200190000006eb0000613d000000010000006b000007540000613d000000400100043d000000040200002900000000052104360000000304000029000002a8034001980000001f0440018f0000000002350019000000020600002900000020066000390000000206600367000005ee0000613d000000000706034f000000007807043c0000000005850436000000000025004b000005ea0000c13d000000000004004b000005fb0000613d000000000336034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000000020004140000000103000029000000040030008c0000074e0000613d0000000003000416000000030400002900000020044000390000025a0020009c0000025a02008041000000c0022002100000025a0010009c0000025a010080410000004001100210000000000003004b0000073e0000c13d0000025a0040009c0000025a040080410000006003400210000000000131019f000000000112019f0000000102000029000007480000013d0000006004400210000002930440009a000002900020009c00000294040080410000000001410019000080090200003900000004040000290000000005000019096209580000040f000300000001035500000060031002700001025a0030019d00000001002001900000063b0000613d00000000010004140000025a0010009c0000025a01008041000000c00110021000000291011001c70000800d02000039000000030300003900000292040000410000000405000029000004ce0000013d0000029d011001c7000080090200003900000003040000290000000005000019096209580000040f000300000001035500000060031002700001025a0030019d00000001002001900000000304000029000006550000613d000000400100043d00000000004104350000025a0010009c0000025a0100804100000040011002100000028d011001c7000009630001042e0000025a02300198000004d60000613d0000001f0420018f0000029003200198000006460000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b000006420000c13d000000000004004b000006530000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000600120021000000964000104300000025a02300198000007540000613d0000001f0420018f0000029003200198000006600000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b0000065c0000c13d000000000004004b0000066d0000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060012002100000096400010430000000400100043d0000026b0010009c0000004e0000213d000000c002100039000000400020043f00000044021000390000025e030000410000000000320435000000840200003900000000002104350000026c0010009c0000026c01008041000000400110021000000000020004140000025a0020009c0000025a02008041000000c002200210000000000121019f0000026d0110009a00008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b000300000001001d0000000401000029000000000010043f0000000401000039000000200010043f00000000010004140000025a0010009c0000025a01008041000000c0011002100000026e011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b0000000302000029000000000021041b000000400100043d0000026b0010009c0000004e0000213d000000c002100039000000400020043f000000440210003900000265030000410000000000320435000000840200003900000000002104350000026c0010009c0000026c01008041000000400110021000000000020004140000025a0020009c0000025a02008041000000c002200210000000000121019f0000026d0110009a00008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b000400000001001d0000000101000039000000000101041a000000000010043f0000000401000039000000200010043f00000000010004140000025a0010009c0000025a01008041000000c0011002100000026e011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b0000000402000029000000000021041b000000400100043d0000026b0010009c0000004e0000213d000000c002100039000000400020043f000000440210003900000267030000410000000000320435000000840200003900000000002104350000026c0010009c0000026c01008041000000400110021000000000020004140000025a0020009c0000025a02008041000000c002200210000000000121019f0000026d0110009a00008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b000400000001001d0000000201000039000000000101041a000000000010043f0000000401000039000000200010043f00000000010004140000025a0010009c0000025a01008041000000c0011002100000026e011001c700008010020000390962095d0000040f0000000100200190000006eb0000613d000000000101043b0000050f0000013d000000000100001900000964000104300000029d011001c7000080090200003900000002040000290000000005000019096209580000040f000300000001035500000060031002700001025a0030019d0000000100200190000006fa0000613d000000400100043d0000000202000029000007500000013d0000025a02300198000007540000613d0000001f0420018f0000029003200198000007050000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b000007010000c13d000000000004004b000007120000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001200210000009640001043000000060044002100000029e0440009a0000000305000029000002900050009c0000029f04008041000000000141019f0000000001210019000080090200003900000001040000290000000005000019096209580000040f000300000001035500000060031002700001025a0030019d00000001002001900000074e0000c13d0000025a02300198000007540000613d0000001f0420018f00000290032001980000072f0000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b0000072b0000c13d000000000004004b0000073c0000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001200210000009640001043000000060044002100000029e0440009a0000000305000029000002900050009c0000029f04008041000000000141019f0000000001210019000080090200003900000001040000290000000005000019096209580000040f000300000001035500000060031002700001025a0030019d0000000100200190000007520000613d000000400100043d00000001020000290000000000210435000006360000013d0000025a02300198000007580000c13d000002a601000041000000000010043f000002970100004100000964000104300000001f0420018f0000029003200198000007610000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b0000075d0000c13d000000000004004b0000076e0000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060012002100000096400010430000002aa0010009c000007800000213d000000630010008c000007800000a13d00000002030003670000000401300370000000000101043b000002620010009c000007800000213d0000002402300370000000000202043b000002620020009c000007800000213d0000004403300370000000000303043b000000000001042d000000000100001900000964000104300000001f03100039000000000023004b0000000004000019000002ab04004041000002ab05200197000002ab03300197000000000653013f000000000053004b0000000003000019000002ab03002041000002ab0060009c000000000304c019000000000003004b0000079a0000613d0000000203100367000000000303043b0000028c0030009c0000079a0000213d00000020011000390000000004310019000000000024004b0000079a0000213d0000000002030019000000000001042d00000000010000190000096400010430000002aa0010009c000007bb0000213d000000630010008c000007bb0000a13d00000002030003670000000402300370000000000502043b000002620050009c000007bb0000213d0000002402300370000000000202043b000002620020009c000007bb0000213d0000004404300370000000000604043b0000028c0060009c000007bb0000213d0000002304600039000000000014004b000007bb0000813d0000000404600039000000000343034f000000000403043b0000028c0040009c000007bb0000213d00000024036000390000000006340019000000000016004b000007bb0000213d0000000001050019000000000001042d000000000100001900000964000104300005000000000002000200000004001d000100000003001d000300000002001d000500000001001d000000400100043d0000025d0010009c000008380000813d00000024021000390000025e03000041000000000032043500000044021000390000000003000414000000600400003900000000004204350000026602000041000000000021043500000064021000390000000000020435000000040210003900000000000204350000025a0010009c0000025a0100804100000040011002100000025a0030009c0000025a03008041000000c002300210000000000121019f00000260011001c70000800602000039096209580000040f00000001002001900000083e0000613d000000000101043b000000000001004b000008430000613d00000262051001970000000303000029000000000035041b00000000010004140000000502000029000002620620019700000262073001970000025a0010009c0000025a01008041000000c00110021000000291011001c70000800d020000390000000403000039000002ac04000041000400000005001d096209580000040f0000000100200190000008650000613d0000000409000029000000000009004b000000020a000029000008690000613d000000400100043d00000005020000290000000006210436000002a803a001980000001f04a0018f000000000236001900000001050000290000000205500367000008050000613d000000000705034f000000007807043c0000000006860436000000000026004b000008010000c13d000000000004004b000008120000613d000000000335034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000000002000414000000040090008c000008360000613d00000000030004160000002004a000390000025a0020009c0000025a02008041000000c0022002100000025a0010009c0000025a010080410000004001100210000000000003004b000008290000613d00000060054002100000029e0550009a000002ad0040009c0000029f05008041000000000115019f00000000012100190000800902000039000000000409001900000000050000190000082f0000013d0000025a0040009c0000025a040080410000006003400210000000000131019f000000000112019f0000000002090019096209580000040f000300000001035500000060031002700001025a0030019d00000001002001900000000409000029000008670000613d0000000001090019000000000001042d0000027001000041000000000010043f0000004101000039000000040010043f00000271010000410000096400010430000300000001035500000060021002700001025a0020019d0000025a02200197000008450000013d00000003010003670000000102000031000002a8052001980000001f0620018f000000400300043d0000000004530019000008500000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b0000084c0000c13d000000000006004b0000085d0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000025a0030009c0000025a0300804100000040013002100000025a0020009c0000025a020080410000006002200210000000000112019f0000096400010430000000000100001900000964000104300000025a023001980000086d0000c13d000002a601000041000000000010043f000002970100004100000964000104300000001f0420018f0000029003200198000008760000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b000008720000c13d000000000004004b000008830000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000600120021000000964000104300005000000000002000300000002001d000500000001001d000002990030009c0000088e0000413d00000000010004110000006002300270000000000021004b000009060000c13d000100000004001d000200000005001d000000400100043d0000025d0010009c0000090a0000813d00000024021000390000025e04000041000000000042043500000044021000390000000004000414000000600500003900000000005204350000025f02000041000000000021043500000004021000390000000000320435000000640210003900000000000204350000025a0010009c0000025a0100804100000040011002100000025a0040009c0000025a04008041000000c002400210000000000121019f00000260011001c70000800602000039096209580000040f0000000100200190000009100000613d000000000101043b000000000001004b000009150000613d00000262051001970000000303000029000000000035041b00000000010004140000000502000029000002620620019700000262073001970000025a0010009c0000025a01008041000000c00110021000000291011001c70000800d020000390000000403000039000002ac04000041000400000005001d096209580000040f0000000100200190000009370000613d0000000409000029000000000009004b000000020a0000290000093b0000613d000000400100043d00000005020000290000000006210436000002a803a001980000001f04a0018f000000000236001900000001050000290000000205500367000008d30000613d000000000705034f000000007807043c0000000006860436000000000026004b000008cf0000c13d000000000004004b000008e00000613d000000000335034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000000002000414000000040090008c000009040000613d00000000030004160000002004a000390000025a0020009c0000025a02008041000000c0022002100000025a0010009c0000025a010080410000004001100210000000000003004b000008f70000613d00000060054002100000029e0550009a000002ad0040009c0000029f05008041000000000115019f0000000001210019000080090200003900000000040900190000000005000019000008fd0000013d0000025a0040009c0000025a040080410000006003400210000000000131019f000000000112019f0000000002090019096209580000040f000300000001035500000060031002700001025a0030019d00000001002001900000000409000029000009390000613d0000000001090019000000000001042d000002a701000041000000000010043f000002970100004100000964000104300000027001000041000000000010043f0000004101000039000000040010043f00000271010000410000096400010430000300000001035500000060021002700001025a0020019d0000025a02200197000009170000013d00000003010003670000000102000031000002a8052001980000001f0620018f000000400300043d0000000004530019000009220000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b0000091e0000c13d000000000006004b0000092f0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000025a0030009c0000025a0300804100000040013002100000025a0020009c0000025a020080410000006002200210000000000112019f0000096400010430000000000100001900000964000104300000025a023001980000093f0000c13d000002a601000041000000000010043f000002970100004100000964000104300000001f0420018f0000029003200198000009480000613d000000000501034f0000000006000019000000005705043c0000000006760436000000000036004b000009440000c13d000000000004004b000009550000613d000000000131034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000060012002100000096400010430000000000001042f0000095b002104210000000102000039000000000001042d0000000002000019000000000001042d00000960002104230000000102000039000000000001042d0000000002000019000000000001042d0000096200000432000009630001042e000009640001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff70726f787953616c7400000000000000000000000000000000000000000000000200000000000000000000000000000000000040000000a00000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7c010000411ce9cfcdb9d2c72518551a5f8dad1fbe68e2e50eb9e44cd8e0d2ddaa3cda33511d41a8a5431b1770c5bc0ddd62e1cd30555d16659b89c0d60f4f9f570200000000000000000000000000000000000084000000000000000000000000e03fe177bb050a40ea1b3ecd64121a3fa063a94b6d404b2f45c64697555efe0e000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7b01000019d7f34637ffda6a523c09e13458940fa828c48564ab17bcf60573f1659c4d535bdea7cd8a978f128b93471df48c7dbab89d703809115bdc118c235bfd0100004d425ac85452f9f73135adb876059808c90f3eac720fa2bfd44a887837c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4702020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca49402000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f00000000000000000000000000000000000000000000000000000000ffffffdffdffffffffffffffffffffffffffffffffffff7bffffffe00000000000000000020000000000000000000000000000000000004000000000000000000000000000000002000000000000000000000000000000400000010000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000006d07dbf700000000000000000000000000000000000000000000000000000000881ff526000000000000000000000000000000000000000000000000000000009623609c000000000000000000000000000000000000000000000000000000009623609d0000000000000000000000000000000000000000000000000000000099a88ec400000000000000000000000000000000000000000000000000000000af1f33f700000000000000000000000000000000000000000000000000000000881ff527000000000000000000000000000000000000000000000000000000008b4872b800000000000000000000000000000000000000000000000000000000809cee2e00000000000000000000000000000000000000000000000000000000809cee2f00000000000000000000000000000000000000000000000000000000824e171900000000000000000000000000000000000000000000000000000000864f4b36000000000000000000000000000000000000000000000000000000006d07dbf80000000000000000000000000000000000000000000000000000000071c9f02f000000000000000000000000000000000000000000000000000000002abbef14000000000000000000000000000000000000000000000000000000003ed354d6000000000000000000000000000000000000000000000000000000003ed354d7000000000000000000000000000000000000000000000000000000004b5b26c100000000000000000000000000000000000000000000000000000000591fcbbc000000000000000000000000000000000000000000000000000000002abbef150000000000000000000000000000000000000000000000000000000032e6cf620000000000000000000000000000000000000000000000000000000015d243650000000000000000000000000000000000000000000000000000000015d24366000000000000000000000000000000000000000000000000000000001acfd02a000000000000000000000000000000000000000000000000000000000a6eafdd000000000000000000000000000000000000000000000000000000000e6ef578000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000200000000000000000000000000200000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000ffffffe002000000000000000000000000000000000000000000000000000000000000005d611f318680d00598bb735d61bacf0c514c6b50e1e5ad30040a4df2b12791c7fdffffffffffffffffffffffffffffffffffffffffffff80000000000000000002000000000000000000000000000000ffffffff00000080000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000055299b4900000000000000000000000000000000000000040000001c0000000000000000000000000000000000000000000000000000000000000000000000005c60da1b00000000000000000000000000000000000000010000000000000000000000000200000000000000000000000000000000000084000000800000000000000000f53ff7c8fa39204521b1e348ab2a7ad0397471eefade072522e79552bf633726fa8e336138457120a1572efbe25f72698abd5cca1c9be0bce42ad406ff350a2b0200000000000000000000000000000000000020000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000ffffffff00000000000000000000000002000000000000000000000000000000000000a0000000800000000000000000ff00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000005500000000000000000000000000000000000000000000000000000000000000000000000000000000a3a58d1c0000000000000000000000000000000000000000000000000000000082b429007e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f0000000000000000000000000000000000000000000000000000000030116425000000000000000000000000000000000000000000000000000000002f634836ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000009e0862c4ebff2150fbbfd3f8547483f55bdec0c34fd977d3fccaa55d6c4ce78400000000000000000000000000000000000000000000000000000001000000005466f03d680a4bfc36038d5dfe2b8e36131638d778dd8cb579ab057c13a5a807

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

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

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