ETH Price: $1,975.88 (+0.69%)
Gas: 0.03 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

ContractCreator

Multichain Info

No addresses found
Amount:Between 1-1M
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Update your filters to view other transactions

Amount:Between 1-1M
Reset Filter

Advanced mode:
Parent Transaction Hash Method Block
From
To

There are no matching entries

Update your filters to view other transactions

View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x00984aC3...100bC0000
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
TKGasStation

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
prague EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

import {ITKGasDelegate} from "./interfaces/ITKGasDelegate.sol";
import {ITKGasStation} from "./interfaces/ITKGasStation.sol";
import {IBatchExecution} from "./interfaces/IBatchExecution.sol";

contract TKGasStation is ITKGasStation {
    error NotDelegated();
    error InvalidFunctionSelector();
    error ExecutionFailed();

    address public immutable TK_GAS_DELEGATE;

    constructor(address _tkGasDelegate) {
        TK_GAS_DELEGATE = _tkGasDelegate;
    }

    fallback(bytes calldata data) external returns (bytes memory) {
        address target;
        assembly {
            target := shr(96, calldataload(add(data.offset, 1)))
        }
        if (!_isDelegated(target)) {
            revert NotDelegated();
        }

        if (bytes1(data[21]) == 0x00) {
            // check if the first byte is 0x00
            bytes1 functionSelector = bytes1(data[22] & 0xf0); // mask the last nibble

            // only allow execute functions, no session functions
            if (functionSelector == 0x00 || functionSelector == 0x10 || functionSelector == 0x20) {
                (bool success, bytes memory result) = target.call(data[21:]);
                if (success) {
                    return result;
                }
                revert ExecutionFailed();
            }
        }

        revert InvalidFunctionSelector();
    }

    function _isDelegated(address _targetEoA) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(_targetEoA)
        }
        if (size != 23) {
            return false;
        }

        bytes memory code = new bytes(23);
        assembly {
            extcodecopy(_targetEoA, add(code, 0x20), 0, 23)
        }
        // prefix is 0xef0100
        if (code[0] != 0xef || code[1] != 0x01 || code[2] != 0x00) {
            return false;
        }

        address delegatedTo;

        assembly {
            // Load the 20-byte address from bytes 3-22
            delegatedTo := shr(96, mload(add(code, 0x23)))
        }

        return delegatedTo == TK_GAS_DELEGATE;
    }

    // Execute functions
    function executeReturns(address _target, address _to, uint256 _ethAmount, bytes calldata _data)
        external
        returns (bytes memory)
    {
        if (!_isDelegated(_target)) {
            revert NotDelegated();
        }
        bytes memory result = ITKGasDelegate(_target).executeReturns(_to, _ethAmount, _data);
        return result;
    }

    function execute(address _target, address _to, uint256 _ethAmount, bytes calldata _data) external {
        if (!_isDelegated(_target)) {
            revert NotDelegated();
        }
        ITKGasDelegate(_target).execute(_to, _ethAmount, _data);
    }

    // ApproveThenExecute functions
    function approveThenExecuteReturns(
        address _target,
        address _to,
        uint256 _ethAmount,
        address _erc20,
        address _spender,
        uint256 _approveAmount,
        bytes calldata _data
    ) external returns (bytes memory) {
        if (!_isDelegated(_target)) {
            revert NotDelegated();
        }
        bytes memory result =
            ITKGasDelegate(_target).approveThenExecuteReturns(_to, _ethAmount, _erc20, _spender, _approveAmount, _data);
        return result;
    }

    function approveThenExecute(
        address _target,
        address _to,
        uint256 _ethAmount,
        address _erc20,
        address _spender,
        uint256 _approveAmount,
        bytes calldata _data
    ) external {
        if (!_isDelegated(_target)) {
            revert NotDelegated();
        }
        ITKGasDelegate(_target).approveThenExecute(_to, _ethAmount, _erc20, _spender, _approveAmount, _data);
    }

    // Batch execute functions
    function executeBatchReturns(address _target, IBatchExecution.Call[] calldata _calls, bytes calldata _data)
        external
        returns (bytes[] memory)
    {
        if (!_isDelegated(_target)) {
            revert NotDelegated();
        }
        bytes[] memory results = ITKGasDelegate(_target).executeBatchReturns(_calls, _data);
        return results;
    }

    function executeBatch(address _target, IBatchExecution.Call[] calldata _calls, bytes calldata _data) external {
        if (!_isDelegated(_target)) {
            revert NotDelegated();
        }
        ITKGasDelegate(_target).executeBatch(_calls, _data);
    }

    function burnNonce(address _targetEoA, bytes calldata _signature, uint128 _nonce) external {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        ITKGasDelegate(_targetEoA).burnNonce(_signature, _nonce);
    }

    /* Lense Functions */

    function getNonce(address _targetEoA) external view returns (uint128) {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        uint128 nonce = ITKGasDelegate(_targetEoA).nonce();
        return nonce;
    }

    function isDelegated(address _targetEoA) external view returns (bool) {
        return _isDelegated(_targetEoA);
    }

    function validateSignature(address _targetEoA, bytes32 _hash, bytes calldata _signature)
        external
        view
        returns (bool)
    {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).validateSignature(_hash, _signature);
    }

    // Hash function lenses
    function hashExecution(
        address _targetEoA,
        uint128 _nonce,
        uint32 _deadline,
        address _outputContract,
        uint256 _ethAmount,
        bytes calldata _arguments
    ) external view returns (bytes32) {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).hashExecution(_nonce, _deadline, _outputContract, _ethAmount, _arguments);
    }

    function hashBurnNonce(address _targetEoA, uint128 _nonce) external view returns (bytes32) {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).hashBurnNonce(_nonce);
    }

    function hashApproveThenExecute(
        address _targetEoA,
        uint128 _nonce,
        uint32 _deadline,
        address _erc20Contract,
        address _spender,
        uint256 _approveAmount,
        address _outputContract,
        uint256 _ethAmount,
        bytes calldata _arguments
    ) external view returns (bytes32) {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).hashApproveThenExecute(
            _nonce, _deadline, _erc20Contract, _spender, _approveAmount, _outputContract, _ethAmount, _arguments
        );
    }

    function hashSessionExecution(
        address _targetEoA,
        uint128 _counter,
        uint32 _deadline,
        address _sender,
        address _outputContract
    ) external view returns (bytes32) {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).hashSessionExecution(_counter, _deadline, _sender, _outputContract);
    }

    function hashArbitrarySessionExecution(address _targetEoA, uint128 _counter, uint32 _deadline, address _sender)
        external
        view
        returns (bytes32)
    {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).hashArbitrarySessionExecution(_counter, _deadline, _sender);
    }

    function hashBatchExecution(
        address _targetEoA,
        uint128 _nonce,
        uint32 _deadline,
        IBatchExecution.Call[] calldata _calls
    ) external view returns (bytes32) {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).hashBatchExecution(_nonce, _deadline, _calls);
    }

    function hashBurnSessionCounter(address _targetEoA, uint128 _counter) external view returns (bytes32) {
        if (!_isDelegated(_targetEoA)) {
            revert NotDelegated();
        }
        return ITKGasDelegate(_targetEoA).hashBurnSessionCounter(_counter);
    }
}

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

import {IBatchExecution} from "./IBatchExecution.sol";

interface ITKGasDelegate is IBatchExecution {
    function nonce() external view returns (uint128);

    function validateSignature(bytes32 _hash, bytes calldata _signature) external view returns (bool);

    function checkSessionCounterExpired(uint128 _counter) external view returns (bool);

    function supportsInterface(bytes4 _interfaceId) external pure returns (bool);

    // Execute functions
    function executeReturns(bytes calldata _data) external returns (bytes memory);

    function execute(bytes calldata _data) external;

    function executeNoValueNoReturn(bytes calldata _data) external;

    function executeReturns(address _to, uint256 _value, bytes calldata _data) external returns (bytes memory);

    function execute(address _to, uint256 _value, bytes calldata _data) external;

    //ApproveThenExecute functions

    function approveThenExecuteReturns(bytes calldata _data) external returns (bytes memory);

    function approveThenExecute(bytes calldata _data) external;

    function approveThenExecuteReturns(
        address _to,
        uint256 _value,
        address _erc20,
        address _spender,
        uint256 _approveAmount,
        bytes calldata _data
    ) external returns (bytes memory);

    function approveThenExecute(
        address _to,
        uint256 _value,
        address _erc20,
        address _spender,
        uint256 _approveAmount,
        bytes calldata _data
    ) external;

    // Batch execute functions

    function executeBatchReturns(bytes calldata _data) external returns (bytes[] memory);

    function executeBatch(bytes calldata _data) external;

    function executeBatchReturns(IBatchExecution.Call[] calldata _calls, bytes calldata _data)
        external
        returns (bytes[] memory);

    function executeBatch(IBatchExecution.Call[] calldata _calls, bytes calldata _data) external;

    // Batch session execute functions
    function executeBatchSessionReturns(bytes calldata _data) external returns (bytes[] memory);

    function executeBatchSession(bytes calldata _data) external;

    function executeBatchSessionReturns(IBatchExecution.Call[] calldata _calls, bytes calldata _data)
        external
        returns (bytes[] memory);

    function executeBatchSession(IBatchExecution.Call[] calldata _calls, bytes calldata _data) external;

    // Session execute functions
    function executeSessionReturns(bytes calldata _data) external returns (bytes memory);

    function executeSession(bytes calldata _data) external;

    function executeSessionReturns(address _to, uint256 _value, bytes calldata _data) external returns (bytes memory);

    function executeSession(address _to, uint256 _value, bytes calldata _data) external;

    // Arbitrary session functions
    function executeSessionArbitraryReturns(bytes calldata _data) external returns (bytes memory);

    function executeSessionArbitrary(bytes calldata _data) external;

    function executeSessionArbitraryReturns(address _to, uint256 _value, bytes calldata _data)
        external
        returns (bytes memory);

    function executeSessionArbitrary(address _to, uint256 _value, bytes calldata _data) external;

    // Arbitrary batch session functions

    function executeBatchSessionArbitraryReturns(bytes calldata _data) external returns (bytes[] memory);

    function executeBatchSessionArbitrary(bytes calldata _data) external;

    function executeBatchSessionArbitraryReturns(IBatchExecution.Call[] calldata _calls, bytes calldata _data)
        external
        returns (bytes[] memory);

    function executeBatchSessionArbitrary(IBatchExecution.Call[] calldata _calls, bytes calldata _data) external;

    // Burn functions
    function burnNonce(bytes calldata _signature, uint128 _nonce) external;
    function burnSessionCounter(bytes calldata _signature, uint128 _counter) external;
    function burnNonce() external;
    function burnSessionCounter(uint128 _counter) external;

    // Hash functions
    function hashExecution(uint128 _nonce, uint32 _deadline, address _to, uint256 _value, bytes calldata _data)
        external
        view
        returns (bytes32);

    function hashBurnNonce(uint128 _nonce) external view returns (bytes32);

    function hashApproveThenExecute(
        uint128 _nonce,
        uint32 _deadline,
        address _erc20Contract,
        address _spender,
        uint256 _approveAmount,
        address _to,
        uint256 _value,
        bytes calldata _data
    ) external view returns (bytes32);

    function hashSessionExecution(uint128 _counter, uint32 _deadline, address _sender, address _to)
        external
        view
        returns (bytes32);

    function hashArbitrarySessionExecution(uint128 _counter, uint32 _deadline, address _sender)
        external
        view
        returns (bytes32);

    function hashBatchExecution(uint128 _nonce, uint32 _deadline, IBatchExecution.Call[] calldata _calls)
        external
        view
        returns (bytes32);

    function hashBurnSessionCounter(uint128 _counter) external view returns (bytes32);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

import {IBatchExecution} from "./IBatchExecution.sol";

interface ITKGasStation is IBatchExecution {
    function TK_GAS_DELEGATE() external view returns (address);

    // Execute functions
    function executeReturns(address _target, address _to, uint256 _ethAmount, bytes calldata _data)
        external
        returns (bytes memory);
    function execute(address _target, address _to, uint256 _ethAmount, bytes calldata _data) external;

    // ApproveThenExecute functions
    function approveThenExecuteReturns(
        address _target,
        address _to,
        uint256 _ethAmount,
        address _erc20,
        address _spender,
        uint256 _approveAmount,
        bytes calldata _data
    ) external returns (bytes memory);
    function approveThenExecute(
        address _target,
        address _to,
        uint256 _ethAmount,
        address _erc20,
        address _spender,
        uint256 _approveAmount,
        bytes calldata _data
    ) external;

    // Batch execute functions
    function executeBatchReturns(address _target, IBatchExecution.Call[] calldata _calls, bytes calldata _data)
        external
        returns (bytes[] memory);
    function executeBatch(address _target, IBatchExecution.Call[] calldata _calls, bytes calldata _data) external;

    function burnNonce(address _targetEoA, bytes calldata _signature, uint128 _nonce) external;

    function getNonce(address _targetEoA) external view returns (uint128);

    function isDelegated(address _targetEoA) external view returns (bool);
}

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

interface IBatchExecution {
    struct Call {
        address to;
        uint256 value;
        bytes data;
    }
}

Settings
{
  "remappings": [
    "solady/=lib/solady/src/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "account-abstraction/=lib/account-abstraction/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "prague",
  "viaIR": true
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_tkGasDelegate","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ExecutionFailed","type":"error"},{"inputs":[],"name":"InvalidFunctionSelector","type":"error"},{"inputs":[],"name":"NotDelegated","type":"error"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"TK_GAS_DELEGATE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"address","name":"_erc20","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_approveAmount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"approveThenExecute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"address","name":"_erc20","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_approveAmount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"approveThenExecuteReturns","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint128","name":"_nonce","type":"uint128"}],"name":"burnNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IBatchExecution.Call[]","name":"_calls","type":"tuple[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"executeBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IBatchExecution.Call[]","name":"_calls","type":"tuple[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"executeBatchReturns","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"executeReturns","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"uint128","name":"_nonce","type":"uint128"},{"internalType":"uint32","name":"_deadline","type":"uint32"},{"internalType":"address","name":"_erc20Contract","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_approveAmount","type":"uint256"},{"internalType":"address","name":"_outputContract","type":"address"},{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"bytes","name":"_arguments","type":"bytes"}],"name":"hashApproveThenExecute","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"uint128","name":"_counter","type":"uint128"},{"internalType":"uint32","name":"_deadline","type":"uint32"},{"internalType":"address","name":"_sender","type":"address"}],"name":"hashArbitrarySessionExecution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"uint128","name":"_nonce","type":"uint128"},{"internalType":"uint32","name":"_deadline","type":"uint32"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IBatchExecution.Call[]","name":"_calls","type":"tuple[]"}],"name":"hashBatchExecution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"uint128","name":"_nonce","type":"uint128"}],"name":"hashBurnNonce","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"uint128","name":"_counter","type":"uint128"}],"name":"hashBurnSessionCounter","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"uint128","name":"_nonce","type":"uint128"},{"internalType":"uint32","name":"_deadline","type":"uint32"},{"internalType":"address","name":"_outputContract","type":"address"},{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"bytes","name":"_arguments","type":"bytes"}],"name":"hashExecution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"uint128","name":"_counter","type":"uint128"},{"internalType":"uint32","name":"_deadline","type":"uint32"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_outputContract","type":"address"}],"name":"hashSessionExecution","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"}],"name":"isDelegated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_targetEoA","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"validateSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

0x60a034606d57601f611d6d38819003918201601f19168301916001600160401b03831184841017607157808492602094604052833981010312606d57516001600160a01b0381168103606d57608052604051611ce7908161008682396080518181816111460152611bfb0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610028575b346100245761001c3661193b565b602081519101f35b5f80fd5b5f3560e01c80632b98ba0c146101475780632d0335ab146101425780633e28391d1461013d5780633f67163e1461013857806355abb7cd1461013357806361724fbb1461012e5780636386d306146101295780636cbef16d14610124578063835f7bf71461011f578063971604c61461011a5780639aefaff814610115578063a3396ade14610110578063b4eb7c251461010b578063c1a8853a14610106578063cf26488a14610101578063df0d3eaf146100fc578063e10a3566146100f75763e5925a000361000e576112ef565b6111e9565b61116a565b6110fc565b610f9c565b610eaf565b610db8565b610d3d565b610b8e565b610ac7565b6109f6565b6108e4565b610813565b6106c5565b6105fd565b6104f3565b6103fe565b61030a565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b6084359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b9181601f840112156100245782359167ffffffffffffffff8311610024576020838186019501011161002457565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100245760043573ffffffffffffffffffffffffffffffffffffffff81168103610024579160243573ffffffffffffffffffffffffffffffffffffffff8116810361002457916044359160643573ffffffffffffffffffffffffffffffffffffffff81168103610024579161029f60846101b5565b9160a4359160c4359067ffffffffffffffff8211610024576102c3916004016101d6565b9091565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b346100245761031836610204565b91956103278895969498611b39565b156103d6576103805f979373ffffffffffffffffffffffffffffffffffffffff9389956040519b8c9a8b998a977f8d0598d200000000000000000000000000000000000000000000000000000000895260048901611558565b0393165af180156103d1576103ab915f916103af575b506040519182916020835260208301906102c7565b0390f35b6103cb91503d805f833e6103c38183611430565b8101906114f1565b5f610396565b6115a1565b7f9ccd6d76000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100245760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761043561014c565b61043e81611b39565b156103d657602073ffffffffffffffffffffffffffffffffffffffff916004604051809481937faffed0e0000000000000000000000000000000000000000000000000000000008352165afa80156103d1575f906104b6575b6040516fffffffffffffffffffffffffffffffff919091168152602090f35b506020813d6020116104eb575b816104d060209383611430565b81010312610024576103ab90516104e681610698565b610497565b3d91506104c3565b346100245760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457602061053461052f61014c565b611b39565b6040519015158152f35b9181601f840112156100245782359167ffffffffffffffff8311610024576020808501948460051b01011161002457565b9060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100245760043573ffffffffffffffffffffffffffffffffffffffff81168103610024579160243567ffffffffffffffff811161002457816105da9160040161053e565b929092916044359067ffffffffffffffff8211610024576102c3916004016101d6565b346100245761060b3661056f565b929161061685611b39565b15945f956103d65773ffffffffffffffffffffffffffffffffffffffff1690813b15610024575f8094610678604051978896879586947f5885bbcf000000000000000000000000000000000000000000000000000000008652600486016116d3565b03925af180156103d15761068a575080f35b61069691505f90611430565b005b6fffffffffffffffffffffffffffffffff81160361002457565b6044359063ffffffff8216820361002457565b346100245760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610024576106fc61014c565b60243561070881610698565b6107106106b2565b60643567ffffffffffffffff81116100245761073090369060040161053e565b61073b859295611b39565b156103d65773ffffffffffffffffffffffffffffffffffffffff6020946107bd63ffffffff976fffffffffffffffffffffffffffffffff94604051998a98899788967f0cb980670000000000000000000000000000000000000000000000000000000088521660048701521660248501526060604485015260648401916115ac565b0392165afa80156103d1576103ab915f916107e4575b506040519081529081906020820190565b610806915060203d60201161080c575b6107fe8183611430565b8101906116fa565b5f6107d3565b503d6107f4565b346100245760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761084a61014c565b60243561085681610698565b61085f82611b39565b156103d6576fffffffffffffffffffffffffffffffff602460209273ffffffffffffffffffffffffffffffffffffffff60405195869485937f2397a131000000000000000000000000000000000000000000000000000000008552166004840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b346100245760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761091b61014c565b60243561092781610698565b61092f6106b2565b61093761016f565b9260843560a43567ffffffffffffffff81116100245761095b9036906004016101d6565b91909461096784611b39565b156103d6576107bd6020966fffffffffffffffffffffffffffffffff9473ffffffffffffffffffffffffffffffffffffffff948563ffffffff9b6040519c8d9b8c9a8b997f2a1af0a2000000000000000000000000000000000000000000000000000000008b521660048a0152166024880152166044860152606485015260a0608485015260a484019161151a565b346100245760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610a2d61014c565b602435610a3981610698565b610a4282611b39565b156103d6576fffffffffffffffffffffffffffffffff602460209273ffffffffffffffffffffffffffffffffffffffff60405195869485937f922cf8a9000000000000000000000000000000000000000000000000000000008552166004840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b34610024576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610aff61014c565b60243590610b0c82610698565b610b146106b2565b91610b1d61016f565b91610b26610192565b60c43560a43573ffffffffffffffffffffffffffffffffffffffff821682036100245760e43592610104359667ffffffffffffffff8811610024576103ab98610b76610b7e9936906004016101d6565b989097611709565b6040519081529081906020820190565b346100245760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610bc561014c565b60443567ffffffffffffffff811161002457610be59036906004016101d6565b90610bef83611b39565b156103d657610c559260209273ffffffffffffffffffffffffffffffffffffffff6040518096819582947f333daf92000000000000000000000000000000000000000000000000000000008452602435600485015260406024850152604484019161151a565b0392165afa80156103d1576103ab915f91610c7e575b5060405190151581529081906020820190565b610ca0915060203d602011610ca6575b610c988183611430565b81019061182a565b5f610c6b565b503d610c8e565b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100245760043573ffffffffffffffffffffffffffffffffffffffff81168103610024579160243573ffffffffffffffffffffffffffffffffffffffff811681036100245791604435916064359067ffffffffffffffff8211610024576102c3916004016101d6565b3461002457610d4b36610cad565b9291610d5685611b39565b15945f956103d65773ffffffffffffffffffffffffffffffffffffffff1690813b15610024575f8094610678604051978896879586947fb61d27f600000000000000000000000000000000000000000000000000000000865260048601611842565b346100245760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610def61014c565b602435610dfb81610698565b610e036106b2565b91610e0c61016f565b90610e1681611b39565b156103d65760209273ffffffffffffffffffffffffffffffffffffffff606492816fffffffffffffffffffffffffffffffff9563ffffffff604051998a9889977fd81ea0bc000000000000000000000000000000000000000000000000000000008952166004880152166024860152166044840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b3461002457610ebd36610cad565b939091610ec982611b39565b156103d6575f73ffffffffffffffffffffffffffffffffffffffff8195610380604051988997889687947fcc83c72e00000000000000000000000000000000000000000000000000000000865260048601611842565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310610f5157505050505090565b9091929394602080610f8d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516102c7565b97019301930191939290610f42565b3461002457610faa3661056f565b939091610fb682611b39565b156103d6575f73ffffffffffffffffffffffffffffffffffffffff819561100c604051988997889687947f0ab96bb1000000000000000000000000000000000000000000000000000000008652600486016116d3565b0393165af180156103d1575f9061102e575b6103ab9060405191829182610f1f565b503d805f833e61103e8183611430565b8101906020818303126100245780519067ffffffffffffffff8211610024570181601f820112156100245780519067ffffffffffffffff82116110ed578160051b90604051926110916020840185611430565b8352602080840192820101918483116100245760208201905b8382106110bf57505050506103ab915061101e565b815167ffffffffffffffff8111610024576020916110e2888480948801016114ab565b8152019101906110aa565b611403565b5f91031261002457565b34610024575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100245761117836610204565b9491929561118588611b39565b15975f986103d65773ffffffffffffffffffffffffffffffffffffffff1693843b15610024575f968793610678926040519a8b998a9889977f8cee772500000000000000000000000000000000000000000000000000000000895260048901611558565b346100245760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761122061014c565b60243561122c81610698565b6112346106b2565b9161123d61016f565b611245610192565b9261124f83611b39565b156103d65773ffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff93816020968160849663ffffffff6040519b8c9a8b997f2c4d6dcf000000000000000000000000000000000000000000000000000000008b521660048a0152166024880152166044860152166064840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b346100245760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761132661014c565b60243567ffffffffffffffff8111610024576113469036906004016101d6565b6044929192359161135683610698565b61135f81611b39565b156103d65773ffffffffffffffffffffffffffffffffffffffff16803b15610024576fffffffffffffffffffffffffffffffff935f6113d8938195604051978896879586947f195e307b00000000000000000000000000000000000000000000000000000000865260406004870152604486019161151a565b9116602483015203925af180156103d1576113ef57005b806113fd5f61069693611430565b806110f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110ed57604052565b67ffffffffffffffff81116110ed57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215610024578051906114c282611471565b926114d06040519485611430565b8284526020838301011161002457815f9260208093018386015e8301015290565b9060208282031261002457815167ffffffffffffffff81116100245761151792016114ab565b90565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b929373ffffffffffffffffffffffffffffffffffffffff60c095611517999794828095168752602087015216604085015216606083015260808201528160a0820152019161151a565b6040513d5f823e3d90fd5b906020838281520160208260051b85010193835f915b8483106115d25750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820301855286357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18436030181121561002457830173ffffffffffffffffffffffffffffffffffffffff61164d826101b5565b1682526020810135602083015260408101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561002457016020813591019067ffffffffffffffff8111610024578036038213610024576116c560209283926060868160406001990152019161151a565b9801969501930191906115c2565b92906116ec9061151795936040865260408601916115ac565b92602081850391015261151a565b90816020910312610024575190565b97949095919692989361171b89611b39565b156103d657604051998a9889987fddb72afd000000000000000000000000000000000000000000000000000000008a526fffffffffffffffffffffffffffffffff1660048a015263ffffffff16602489015273ffffffffffffffffffffffffffffffffffffffff16604488015273ffffffffffffffffffffffffffffffffffffffff166064870152608486015273ffffffffffffffffffffffffffffffffffffffff1660a485015260c484015260e4830161010090526101048301906117e09261151a565b039173ffffffffffffffffffffffffffffffffffffffff1691815a93602094fa9081156103d1575f91611811575090565b611517915060203d60201161080c576107fe8183611430565b90816020910312610024575180151581036100245790565b611517949273ffffffffffffffffffffffffffffffffffffffff6060931682526020820152816040820152019161151a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90601510156118b05760150190565b611874565b90601610156118b05760160190565b909291928360151161002457831161002457601501917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb0190565b908092918237015f815290565b3d15611936573d9061191d82611471565b9161192b6040519384611430565b82523d5f602084013e565b606090565b60013560601c9061195261194e83611b39565b1590565b6103d6577fff000000000000000000000000000000000000000000000000000000000000006119aa611984835f6118a1565b357fff000000000000000000000000000000000000000000000000000000000000001690565b16156119d9575b7f42868c9b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7ff000000000000000000000000000000000000000000000000000000000000000611a07611984835f6118b5565b168015908115611aa2575b8115611a78575b50156119b1575f9182611a2e838294836118c4565b9190611a3f604051809481936118ff565b03925af1611a4b61190c565b90611517577facfdb444000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f20000000000000000000000000000000000000000000000000000000000000009150145f611a19565b7f100000000000000000000000000000000000000000000000000000000000000081149150611a12565b60408051909190611add8382611430565b60178152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b8051156118b05760200190565b8051600110156118b05760210190565b8051600210156118b05760220190565b6017813b03611c1f5760175f611b4d611acc565b9260208401903c7fef000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000611bc8611ba284611b0c565b517fff000000000000000000000000000000000000000000000000000000000000001690565b1614801590611c5a575b8015611c24575b611c1f576023015160601c73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161490565b505f90565b507fff00000000000000000000000000000000000000000000000000000000000000611c52611ba283611b29565b161515611bd9565b507f01000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000611ca9611ba284611b19565b161415611bd256fea26469706673582212206a88cba76571534b5641434a7e1d3ccf0391bb0e6c690095e457719cb0dcae9164736f6c634300081e0033000000000000000000000000000066a00056cd44008768e2af00696e19a30084

Deployed Bytecode

0x60806040526004361015610028575b346100245761001c3661193b565b602081519101f35b5f80fd5b5f3560e01c80632b98ba0c146101475780632d0335ab146101425780633e28391d1461013d5780633f67163e1461013857806355abb7cd1461013357806361724fbb1461012e5780636386d306146101295780636cbef16d14610124578063835f7bf71461011f578063971604c61461011a5780639aefaff814610115578063a3396ade14610110578063b4eb7c251461010b578063c1a8853a14610106578063cf26488a14610101578063df0d3eaf146100fc578063e10a3566146100f75763e5925a000361000e576112ef565b6111e9565b61116a565b6110fc565b610f9c565b610eaf565b610db8565b610d3d565b610b8e565b610ac7565b6109f6565b6108e4565b610813565b6106c5565b6105fd565b6104f3565b6103fe565b61030a565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b6084359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b359073ffffffffffffffffffffffffffffffffffffffff8216820361002457565b9181601f840112156100245782359167ffffffffffffffff8311610024576020838186019501011161002457565b60e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100245760043573ffffffffffffffffffffffffffffffffffffffff81168103610024579160243573ffffffffffffffffffffffffffffffffffffffff8116810361002457916044359160643573ffffffffffffffffffffffffffffffffffffffff81168103610024579161029f60846101b5565b9160a4359160c4359067ffffffffffffffff8211610024576102c3916004016101d6565b9091565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b346100245761031836610204565b91956103278895969498611b39565b156103d6576103805f979373ffffffffffffffffffffffffffffffffffffffff9389956040519b8c9a8b998a977f8d0598d200000000000000000000000000000000000000000000000000000000895260048901611558565b0393165af180156103d1576103ab915f916103af575b506040519182916020835260208301906102c7565b0390f35b6103cb91503d805f833e6103c38183611430565b8101906114f1565b5f610396565b6115a1565b7f9ccd6d76000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100245760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761043561014c565b61043e81611b39565b156103d657602073ffffffffffffffffffffffffffffffffffffffff916004604051809481937faffed0e0000000000000000000000000000000000000000000000000000000008352165afa80156103d1575f906104b6575b6040516fffffffffffffffffffffffffffffffff919091168152602090f35b506020813d6020116104eb575b816104d060209383611430565b81010312610024576103ab90516104e681610698565b610497565b3d91506104c3565b346100245760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457602061053461052f61014c565b611b39565b6040519015158152f35b9181601f840112156100245782359167ffffffffffffffff8311610024576020808501948460051b01011161002457565b9060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100245760043573ffffffffffffffffffffffffffffffffffffffff81168103610024579160243567ffffffffffffffff811161002457816105da9160040161053e565b929092916044359067ffffffffffffffff8211610024576102c3916004016101d6565b346100245761060b3661056f565b929161061685611b39565b15945f956103d65773ffffffffffffffffffffffffffffffffffffffff1690813b15610024575f8094610678604051978896879586947f5885bbcf000000000000000000000000000000000000000000000000000000008652600486016116d3565b03925af180156103d15761068a575080f35b61069691505f90611430565b005b6fffffffffffffffffffffffffffffffff81160361002457565b6044359063ffffffff8216820361002457565b346100245760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610024576106fc61014c565b60243561070881610698565b6107106106b2565b60643567ffffffffffffffff81116100245761073090369060040161053e565b61073b859295611b39565b156103d65773ffffffffffffffffffffffffffffffffffffffff6020946107bd63ffffffff976fffffffffffffffffffffffffffffffff94604051998a98899788967f0cb980670000000000000000000000000000000000000000000000000000000088521660048701521660248501526060604485015260648401916115ac565b0392165afa80156103d1576103ab915f916107e4575b506040519081529081906020820190565b610806915060203d60201161080c575b6107fe8183611430565b8101906116fa565b5f6107d3565b503d6107f4565b346100245760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761084a61014c565b60243561085681610698565b61085f82611b39565b156103d6576fffffffffffffffffffffffffffffffff602460209273ffffffffffffffffffffffffffffffffffffffff60405195869485937f2397a131000000000000000000000000000000000000000000000000000000008552166004840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b346100245760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761091b61014c565b60243561092781610698565b61092f6106b2565b61093761016f565b9260843560a43567ffffffffffffffff81116100245761095b9036906004016101d6565b91909461096784611b39565b156103d6576107bd6020966fffffffffffffffffffffffffffffffff9473ffffffffffffffffffffffffffffffffffffffff948563ffffffff9b6040519c8d9b8c9a8b997f2a1af0a2000000000000000000000000000000000000000000000000000000008b521660048a0152166024880152166044860152606485015260a0608485015260a484019161151a565b346100245760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610a2d61014c565b602435610a3981610698565b610a4282611b39565b156103d6576fffffffffffffffffffffffffffffffff602460209273ffffffffffffffffffffffffffffffffffffffff60405195869485937f922cf8a9000000000000000000000000000000000000000000000000000000008552166004840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b34610024576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610aff61014c565b60243590610b0c82610698565b610b146106b2565b91610b1d61016f565b91610b26610192565b60c43560a43573ffffffffffffffffffffffffffffffffffffffff821682036100245760e43592610104359667ffffffffffffffff8811610024576103ab98610b76610b7e9936906004016101d6565b989097611709565b6040519081529081906020820190565b346100245760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610bc561014c565b60443567ffffffffffffffff811161002457610be59036906004016101d6565b90610bef83611b39565b156103d657610c559260209273ffffffffffffffffffffffffffffffffffffffff6040518096819582947f333daf92000000000000000000000000000000000000000000000000000000008452602435600485015260406024850152604484019161151a565b0392165afa80156103d1576103ab915f91610c7e575b5060405190151581529081906020820190565b610ca0915060203d602011610ca6575b610c988183611430565b81019061182a565b5f610c6b565b503d610c8e565b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100245760043573ffffffffffffffffffffffffffffffffffffffff81168103610024579160243573ffffffffffffffffffffffffffffffffffffffff811681036100245791604435916064359067ffffffffffffffff8211610024576102c3916004016101d6565b3461002457610d4b36610cad565b9291610d5685611b39565b15945f956103d65773ffffffffffffffffffffffffffffffffffffffff1690813b15610024575f8094610678604051978896879586947fb61d27f600000000000000000000000000000000000000000000000000000000865260048601611842565b346100245760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457610def61014c565b602435610dfb81610698565b610e036106b2565b91610e0c61016f565b90610e1681611b39565b156103d65760209273ffffffffffffffffffffffffffffffffffffffff606492816fffffffffffffffffffffffffffffffff9563ffffffff604051998a9889977fd81ea0bc000000000000000000000000000000000000000000000000000000008952166004880152166024860152166044840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b3461002457610ebd36610cad565b939091610ec982611b39565b156103d6575f73ffffffffffffffffffffffffffffffffffffffff8195610380604051988997889687947fcc83c72e00000000000000000000000000000000000000000000000000000000865260048601611842565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310610f5157505050505090565b9091929394602080610f8d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516102c7565b97019301930191939290610f42565b3461002457610faa3661056f565b939091610fb682611b39565b156103d6575f73ffffffffffffffffffffffffffffffffffffffff819561100c604051988997889687947f0ab96bb1000000000000000000000000000000000000000000000000000000008652600486016116d3565b0393165af180156103d1575f9061102e575b6103ab9060405191829182610f1f565b503d805f833e61103e8183611430565b8101906020818303126100245780519067ffffffffffffffff8211610024570181601f820112156100245780519067ffffffffffffffff82116110ed578160051b90604051926110916020840185611430565b8352602080840192820101918483116100245760208201905b8382106110bf57505050506103ab915061101e565b815167ffffffffffffffff8111610024576020916110e2888480948801016114ab565b8152019101906110aa565b611403565b5f91031261002457565b34610024575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261002457602060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000066a00056cd44008768e2af00696e19a30084168152f35b346100245761117836610204565b9491929561118588611b39565b15975f986103d65773ffffffffffffffffffffffffffffffffffffffff1693843b15610024575f968793610678926040519a8b998a9889977f8cee772500000000000000000000000000000000000000000000000000000000895260048901611558565b346100245760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761122061014c565b60243561122c81610698565b6112346106b2565b9161123d61016f565b611245610192565b9261124f83611b39565b156103d65773ffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff93816020968160849663ffffffff6040519b8c9a8b997f2c4d6dcf000000000000000000000000000000000000000000000000000000008b521660048a0152166024880152166044860152166064840152165afa80156103d1576103ab915f916107e457506040519081529081906020820190565b346100245760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100245761132661014c565b60243567ffffffffffffffff8111610024576113469036906004016101d6565b6044929192359161135683610698565b61135f81611b39565b156103d65773ffffffffffffffffffffffffffffffffffffffff16803b15610024576fffffffffffffffffffffffffffffffff935f6113d8938195604051978896879586947f195e307b00000000000000000000000000000000000000000000000000000000865260406004870152604486019161151a565b9116602483015203925af180156103d1576113ef57005b806113fd5f61069693611430565b806110f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110ed57604052565b67ffffffffffffffff81116110ed57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215610024578051906114c282611471565b926114d06040519485611430565b8284526020838301011161002457815f9260208093018386015e8301015290565b9060208282031261002457815167ffffffffffffffff81116100245761151792016114ab565b90565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b929373ffffffffffffffffffffffffffffffffffffffff60c095611517999794828095168752602087015216604085015216606083015260808201528160a0820152019161151a565b6040513d5f823e3d90fd5b906020838281520160208260051b85010193835f915b8483106115d25750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820301855286357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18436030181121561002457830173ffffffffffffffffffffffffffffffffffffffff61164d826101b5565b1682526020810135602083015260408101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561002457016020813591019067ffffffffffffffff8111610024578036038213610024576116c560209283926060868160406001990152019161151a565b9801969501930191906115c2565b92906116ec9061151795936040865260408601916115ac565b92602081850391015261151a565b90816020910312610024575190565b97949095919692989361171b89611b39565b156103d657604051998a9889987fddb72afd000000000000000000000000000000000000000000000000000000008a526fffffffffffffffffffffffffffffffff1660048a015263ffffffff16602489015273ffffffffffffffffffffffffffffffffffffffff16604488015273ffffffffffffffffffffffffffffffffffffffff166064870152608486015273ffffffffffffffffffffffffffffffffffffffff1660a485015260c484015260e4830161010090526101048301906117e09261151a565b039173ffffffffffffffffffffffffffffffffffffffff1691815a93602094fa9081156103d1575f91611811575090565b611517915060203d60201161080c576107fe8183611430565b90816020910312610024575180151581036100245790565b611517949273ffffffffffffffffffffffffffffffffffffffff6060931682526020820152816040820152019161151a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90601510156118b05760150190565b611874565b90601610156118b05760160190565b909291928360151161002457831161002457601501917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb0190565b908092918237015f815290565b3d15611936573d9061191d82611471565b9161192b6040519384611430565b82523d5f602084013e565b606090565b60013560601c9061195261194e83611b39565b1590565b6103d6577fff000000000000000000000000000000000000000000000000000000000000006119aa611984835f6118a1565b357fff000000000000000000000000000000000000000000000000000000000000001690565b16156119d9575b7f42868c9b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7ff000000000000000000000000000000000000000000000000000000000000000611a07611984835f6118b5565b168015908115611aa2575b8115611a78575b50156119b1575f9182611a2e838294836118c4565b9190611a3f604051809481936118ff565b03925af1611a4b61190c565b90611517577facfdb444000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f20000000000000000000000000000000000000000000000000000000000000009150145f611a19565b7f100000000000000000000000000000000000000000000000000000000000000081149150611a12565b60408051909190611add8382611430565b60178152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b8051156118b05760200190565b8051600110156118b05760210190565b8051600210156118b05760220190565b6017813b03611c1f5760175f611b4d611acc565b9260208401903c7fef000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000611bc8611ba284611b0c565b517fff000000000000000000000000000000000000000000000000000000000000001690565b1614801590611c5a575b8015611c24575b611c1f576023015160601c73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000066a00056cd44008768e2af00696e19a30084161490565b505f90565b507fff00000000000000000000000000000000000000000000000000000000000000611c52611ba283611b29565b161515611bd9565b507f01000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000611ca9611ba284611b19565b161415611bd256fea26469706673582212206a88cba76571534b5641434a7e1d3ccf0391bb0e6c690095e457719cb0dcae9164736f6c634300081e0033

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

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.