Contract 0x4dd4e86C7BbDf03787f8e51026b6F2b2c8caB228

  Note: Our ether balance display is temporarily unavailable. Please check back later.

Contract Overview

Balance:
Txn Hash
Method
Block
From
To
Value
0x927bfbf004b35af0ff76fa14d6aa1a0f3e5d0b8f9003cb0a29a041b2903644f40x60806040124078572022-06-16 19:28:12175 days 9 hrs ago0xb8cd93c83a974649d76b1c19f311f639e62272bc IN  Create: AxelarGasService0 Ether0.00232016 1.5
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3abb7751b9845532b3a45ec090c77aae1739d20b46bbca657934546b176ec6fc130927952022-10-04 9:38:4865 days 19 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x49ced105e426afbdba3a300ce9b23bff19b77956cc18dfa812d9e5fdc1071a8d130927272022-10-04 9:20:0065 days 19 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x2d0fb8505653452c2e9d3efaf29dbd2eefc36e8be575e3b8c6f301e4bd3789ba130924232022-10-04 8:00:0065 days 21 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0xe417cf48dab0a998e614516aed5aad3db0253cdb65c7fe57a188e9189ae4dc63130906622022-10-03 23:58:2466 days 5 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x95e439fdb064fd3c4d63ec2ec280a1f005d0156b49b9d2927f035f17e222977c130906622022-10-03 23:58:2466 days 5 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0xbc213c76aec4a52570a9d0fca978681905594bfc008b021129edc7eea029d418130886292022-10-03 14:55:0066 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0xd5e5d68e91158a71b85de0fbe8ffad8b890b147621be8e94eaf77b3134fa278e130885192022-10-03 14:26:0066 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x33677723c9f3840cadadb984753309819c2eff934018b9e35ed4a8047b7bc5c1130885042022-10-03 14:22:0066 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x4f93a881a62032587ac5feee34c6516204a38d7df3a2106557000bd7114ff15c130884952022-10-03 14:19:4866 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0xff3beafcc68d2083f8eca1d06d0b4ec96dca7ec14077ab8a6640f6b200ef97b7130883582022-10-03 13:42:2466 days 15 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x95d8bd6d85550c8cfb3181cb9da665a8199d579a655cdd0199f94b1963bead7c130828062022-10-02 13:11:2467 days 16 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0xd469ecbd08c1159a8353fdf1b1d9d23df80b4fcd61d326a74156b6f1767fc587130813182022-10-02 6:39:3667 days 22 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0xf63f029b5cd54568ba1d46c1ed3125a957d93934d39dbb23ceb30ebfc5071742130758742022-10-01 7:05:2468 days 22 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x617dd117246eaac2029a97359e171ab0d729e082ccaf3ea8bb0fd0f09b182285130757982022-10-01 6:45:2468 days 22 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x537b6fbebc3881c386391f3dd28fce6f308d3ed9b5ba4ff067983b6c34e0abcf130705842022-09-30 7:56:3669 days 21 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x1db7b11e51d7980666d4b4598042420284c59453eaa81c1ee523c8d8b95d4b32130705082022-09-30 7:37:2469 days 21 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x0918fad51b3d62b85081dc03b75b328f39c0da811707a98169dfaa36479c7595130667682022-09-29 15:08:1270 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x052a69da61066555de98abfd1e344abe675a5a43163f020b53acc9528fced7bb130665792022-09-29 14:15:0070 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x58579c96ba8ff5d87142d438a1d4a83663bd165286a5273c8794bbc58ad71571130665012022-09-29 13:52:3670 days 15 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x1ccae93a657d2eabc69117a05451e583828aa6d869e8e2b87aa0e5aaf44c4d0d130656702022-09-29 10:17:1270 days 18 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x85054814bd2cb0217c840178fd50ce31741ac6feacc821c469dc77e349e03d64130655742022-09-29 9:51:2470 days 19 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x30991a3ad63a605b6e0395663a045cd0045b8673f1828fa5a4a14a84b1bb4447130596612022-09-28 7:02:1271 days 22 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x8f5c8250e861ea8b0ccf538c41e937f97a8bb13423c0c13a554b1f1fb1b362fb130594782022-09-28 6:16:1271 days 22 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0x45f4c60686e7070abc46a6d922026bcc9d9c04b6094aa869d0ef4321374a450f130557522022-09-27 14:49:0072 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
0xaa8481a2aa710303c5314685d7b8b77309fcd34ec411f2a8bd6e7d2cb6967715130557242022-09-27 14:42:0072 days 14 hrs ago 0xbe406f0189a0b4cf3a05c286473d23791dd44cc60x4dd4e86c7bbdf03787f8e51026b6f2b2c8cab2280 Ether
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
AxelarGasService

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-20
*/

// Sources flattened with hardhat v2.9.7 https://hardhat.org

// File contracts/interfaces/IUpgradable.sol

// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

// General interface for upgradable contracts
interface IUpgradable {
    error NotOwner();
    error InvalidOwner();
    error InvalidCodeHash();
    error InvalidImplementation();
    error SetupFailed();
    error NotProxy();

    event Upgraded(address indexed newImplementation);
    event OwnershipTransferred(address indexed newOwner);

    // Get current owner
    function owner() external view returns (address);

    function contractId() external view returns (bytes32);

    function upgrade(
        address newImplementation,
        bytes32 newImplementationCodeHash,
        bytes calldata params
    ) external;

    function setup(bytes calldata data) external;
}


// File contracts/interfaces/IAxelarGasService.sol



pragma solidity 0.8.9;

// This should be owned by the microservice that is paying for gas.
interface IAxelarGasService is IUpgradable {
    error NothingReceived();
    error TransferFailed();

    event GasPaidForContractCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasPaidForContractCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForContractCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForContractCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasAdded(bytes32 indexed txHash, uint256 indexed logIndex, address gasToken, uint256 gasFeeAmount, address refundAddress);

    event NativeGasAdded(bytes32 indexed txHash, uint256 indexed logIndex, uint256 gasFeeAmount, address refundAddress);

    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payNativeGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address refundAddress
    ) external payable;

    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payNativeGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address refundAddress
    ) external payable;

    function addGas(
        bytes32 txHash,
        uint256 txIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    function addNativeGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable;

    function collectFees(address payable receiver, address[] calldata tokens) external;

    function refund(
        address payable receiver,
        address token,
        uint256 amount
    ) external;
}


// File contracts/interfaces/IERC20.sol



pragma solidity 0.8.9;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    error InvalidAccount();

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File contracts/util/Upgradable.sol



pragma solidity 0.8.9;

abstract contract Upgradable is IUpgradable {
    // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
    // keccak256('owner')
    bytes32 internal constant _OWNER_SLOT = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0;

    modifier onlyOwner() {
        if (owner() != msg.sender) revert NotOwner();
        _;
    }

    function owner() public view returns (address owner_) {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            owner_ := sload(_OWNER_SLOT)
        }
    }

    function transferOwnership(address newOwner) external virtual onlyOwner {
        if (newOwner == address(0)) revert InvalidOwner();

        emit OwnershipTransferred(newOwner);
        assembly {
            sstore(_OWNER_SLOT, newOwner)
        }
    }

    function implementation() public view returns (address implementation_) {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            implementation_ := sload(_IMPLEMENTATION_SLOT)
        }
    }

    function upgrade(
        address newImplementation,
        bytes32 newImplementationCodeHash,
        bytes calldata params
    ) external override onlyOwner {
        if (IUpgradable(newImplementation).contractId() != IUpgradable(this).contractId()) revert InvalidImplementation();
        if (newImplementationCodeHash != newImplementation.codehash) revert InvalidCodeHash();

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, ) = newImplementation.delegatecall(abi.encodeWithSelector(this.setup.selector, params));

        if (!success) revert SetupFailed();

        emit Upgraded(newImplementation);
        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(_IMPLEMENTATION_SLOT, newImplementation)
        }
    }

    function setup(bytes calldata data) external override {
        // Prevent setup from being called on the implementation
        if (implementation() == address(0)) revert NotProxy();

        _setup(data);
    }

    function _setup(bytes calldata data) internal virtual {}
}


// File contracts/gas-service/AxelarGasService.sol



pragma solidity 0.8.9;



// This should be owned by the microservice that is paying for gas.
contract AxelarGasService is Upgradable, IAxelarGasService {
    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external override {
        _safeTransferFrom(gasToken, msg.sender, gasFeeAmount);

        emit GasPaidForContractCall(
            sender,
            destinationChain,
            destinationAddress,
            keccak256(payload),
            gasToken,
            gasFeeAmount,
            refundAddress
        );
    }

    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string memory symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external override {
        {
            _safeTransferFrom(gasToken, msg.sender, gasFeeAmount);
        }

        emit GasPaidForContractCallWithToken(
            sender,
            destinationChain,
            destinationAddress,
            keccak256(payload),
            symbol,
            amount,
            gasToken,
            gasFeeAmount,
            refundAddress
        );
    }

    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payNativeGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address refundAddress
    ) external payable override {
        if (msg.value == 0) revert NothingReceived();

        emit NativeGasPaidForContractCall(sender, destinationChain, destinationAddress, keccak256(payload), msg.value, refundAddress);
    }

    // This is called on the source chain before calling the gateway to execute a remote contract.
    function payNativeGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address refundAddress
    ) external payable override {
        if (msg.value == 0) revert NothingReceived();

        emit NativeGasPaidForContractCallWithToken(
            sender,
            destinationChain,
            destinationAddress,
            keccak256(payload),
            symbol,
            amount,
            msg.value,
            refundAddress
        );
    }

    function addGas(
        bytes32 txHash,
        uint256 logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external override {
        _safeTransferFrom(gasToken, msg.sender, gasFeeAmount);

        emit GasAdded(txHash, logIndex, gasToken, gasFeeAmount, refundAddress);
    }

    function addNativeGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable override {
        if (msg.value == 0) revert NothingReceived();

        emit NativeGasAdded(txHash, logIndex, msg.value, refundAddress);
    }

    function collectFees(address payable receiver, address[] calldata tokens) external onlyOwner {
        for (uint256 i; i < tokens.length; i++) {
            address token = tokens[i];

            if (token == address(0)) {
                receiver.transfer(address(this).balance);
            } else {
                uint256 amount = IERC20(token).balanceOf(address(this));
                _safeTransfer(token, receiver, amount);
            }
        }
    }

    function refund(
        address payable receiver,
        address token,
        uint256 amount
    ) external onlyOwner {
        if (token == address(0)) {
            receiver.transfer(amount);
        } else {
            _safeTransfer(token, receiver, amount);
        }
    }

    function _safeTransfer(
        address tokenAddress,
        address receiver,
        uint256 amount
    ) internal {
        (bool success, bytes memory returnData) = tokenAddress.call(abi.encodeWithSelector(IERC20.transfer.selector, receiver, amount));
        bool transferred = success && (returnData.length == uint256(0) || abi.decode(returnData, (bool)));

        if (!transferred || tokenAddress.code.length == 0) revert TransferFailed();
    }

    function _safeTransferFrom(
        address tokenAddress,
        address from,
        uint256 amount
    ) internal {
        (bool success, bytes memory returnData) = tokenAddress.call(
            abi.encodeWithSelector(IERC20.transferFrom.selector, from, address(this), amount)
        );
        bool transferred = success && (returnData.length == uint256(0) || abi.decode(returnData, (bool)));

        if (!transferred || tokenAddress.code.length == 0) revert TransferFailed();
    }

    function contractId() public pure returns (bytes32) {
        return keccak256('axelar-gas-service');
    }
}

Contract ABI

[{"inputs":[],"name":"InvalidCodeHash","type":"error"},{"inputs":[],"name":"InvalidImplementation","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotProxy","type":"error"},{"inputs":[],"name":"NothingReceived","type":"error"},{"inputs":[],"name":"SetupFailed","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"logIndex","type":"uint256"},{"indexed":false,"internalType":"address","name":"gasToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"refundAddress","type":"address"}],"name":"GasAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sourceAddress","type":"address"},{"indexed":false,"internalType":"string","name":"destinationChain","type":"string"},{"indexed":false,"internalType":"string","name":"destinationAddress","type":"string"},{"indexed":true,"internalType":"bytes32","name":"payloadHash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"gasToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"refundAddress","type":"address"}],"name":"GasPaidForContractCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sourceAddress","type":"address"},{"indexed":false,"internalType":"string","name":"destinationChain","type":"string"},{"indexed":false,"internalType":"string","name":"destinationAddress","type":"string"},{"indexed":true,"internalType":"bytes32","name":"payloadHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"gasToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"refundAddress","type":"address"}],"name":"GasPaidForContractCallWithToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"logIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"refundAddress","type":"address"}],"name":"NativeGasAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sourceAddress","type":"address"},{"indexed":false,"internalType":"string","name":"destinationChain","type":"string"},{"indexed":false,"internalType":"string","name":"destinationAddress","type":"string"},{"indexed":true,"internalType":"bytes32","name":"payloadHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"refundAddress","type":"address"}],"name":"NativeGasPaidForContractCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sourceAddress","type":"address"},{"indexed":false,"internalType":"string","name":"destinationChain","type":"string"},{"indexed":false,"internalType":"string","name":"destinationAddress","type":"string"},{"indexed":true,"internalType":"bytes32","name":"payloadHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"refundAddress","type":"address"}],"name":"NativeGasPaidForContractCallWithToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newImplementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint256","name":"logIndex","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"addGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint256","name":"logIndex","type":"uint256"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"addNativeGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"collectFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"destinationChain","type":"string"},{"internalType":"string","name":"destinationAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"payGasForContractCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"destinationChain","type":"string"},{"internalType":"string","name":"destinationAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"gasToken","type":"address"},{"internalType":"uint256","name":"gasFeeAmount","type":"uint256"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"payGasForContractCallWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"destinationChain","type":"string"},{"internalType":"string","name":"destinationAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"payNativeGasForContractCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"destinationChain","type":"string"},{"internalType":"string","name":"destinationAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"refundAddress","type":"address"}],"name":"payNativeGasForContractCallWithToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes32","name":"newImplementationCodeHash","type":"bytes32"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50611b25806100206000396000f3fe6080604052600436106100dd5760003560e01c8063ab1999ba1161007f578063da854d7511610059578063da854d7514610266578063edb6b3a514610286578063f2fde38b146102a6578063fd09e3bd146102c657600080fd5b8063ab1999ba14610220578063c62c200214610240578063cd433ada1461025357600080fd5b806382ad6f35116100bb57806382ad6f351461018c5780638da5cb5b146101ac5780639ded06df146101e0578063a3499c731461020057600080fd5b80630c93e3bb146100e25780635c60da1b146100f75780638291286c14610151575b600080fd5b6100f56100f03660046110eb565b6102e6565b005b34801561010357600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015d57600080fd5b506040517ffaa2f015f2ce5aee225904728de2def86eb8837491efd21f1a04fc20d8e923f68152602001610148565b34801561019857600080fd5b506100f56101a73660046111ab565b610397565b3480156101b857600080fd5b507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c054610127565b3480156101ec57600080fd5b506100f56101fb3660046111ec565b610481565b34801561020c57600080fd5b506100f561021b36600461122e565b6104fd565b34801561022c57600080fd5b506100f561023b36600461128a565b610899565b6100f561024e3660046112e0565b610906565b6100f56102613660046113d3565b6109c0565b34801561027257600080fd5b506100f561028136600461140c565b610a4e565b34801561029257600080fd5b506100f56102a136600461156e565b610c1f565b3480156102b257600080fd5b506100f56102c136600461168c565b610cae565b3480156102d257600080fd5b506100f56102e13660046116b0565b610dd6565b3461031d576040517fb5c74a2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828260405161032d929190611788565b60405180910390208873ffffffffffffffffffffffffffffffffffffffff167f617332c1832058df6ee45fcbdf471251474c9945a8e5d229287a21a5f67ccf0a898989893488604051610385969594939291906117e1565b60405180910390a35050505050505050565b336103c07f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff161461040d576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166104715760405173ffffffffffffffffffffffffffffffffffffffff84169082156108fc029083906000818181858888f1935050505015801561046b573d6000803e3d6000fd5b50505050565b61047c828483610e5f565b505050565b60006104ab7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff1614156104f9576040517fbf10dd3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b336105267f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610573576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b957600080fd5b505afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f19190611838565b8473ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561063757600080fd5b505afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f9190611838565b146106a6576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163f83146106f6576040517f8f84fb2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16639ded06df60e01b848460405160240161072a929190611851565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516107b39190611899565b600060405180830381855af49150503d80600081146107ee576040519150601f19603f3d011682016040523d82523d6000602084013e6107f3565b606091505b505090508061082e576040517f97905dfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8616907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc555050505050565b6108a483338461100e565b6040805173ffffffffffffffffffffffffffffffffffffffff8581168252602082018590528316818301529051859187917f2275e75614080f9782f72563c2c1688c901c5339c7f9f436d323f9386fed700a9181900360600190a35050505050565b3461093d576040517fb5c74a2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b858560405161094d929190611788565b60405180910390208b73ffffffffffffffffffffffffffffffffffffffff167f999d431b58761213cf53af96262b67a069cbd963499fd8effd1e21556217b8418c8c8c8c8a8a8a348b6040516109ab999897969594939291906118b5565b60405180910390a35050505050505050505050565b346109f7576040517fb5c74a2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805134815273ffffffffffffffffffffffffffffffffffffffff83166020820152839185917ffeb6b00343feee0f29a1a4345f8bf93ca1c73ee922248a4237a4e50d6447604e910160405180910390a3505050565b33610a777f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610ac4576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561046b576000838383818110610ae357610ae3611929565b9050602002016020810190610af8919061168c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b5d5760405173ffffffffffffffffffffffffffffffffffffffff8616904780156108fc02916000818181858888f19350505050158015610b57573d6000803e3d6000fd5b50610c0c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a082319060240160206040518083038186803b158015610bc557600080fd5b505afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd9190611838565b9050610c0a828783610e5f565b505b5080610c1781611958565b915050610ac7565b610c2a83338461100e565b8686604051610c3a929190611788565b60405180910390208c73ffffffffffffffffffffffffffffffffffffffff167f8875f9764f28fa82d3e7ff1b80bd5c8f665e1f42fcd8c2faebc7c400a4ba1bbd8d8d8d8d8b8b8b8b8b604051610c98999897969594939291906119b8565b60405180910390a3505050505050505050505050565b33610cd77f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610d24576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610d71576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390600090a27f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c055565b610de183338461100e565b8484604051610df1929190611788565b60405180910390208a73ffffffffffffffffffffffffffffffffffffffff167f99206760f0be19dd093729bd35e5924daff5e217bcedc5223ed067b60008cf8a8b8b8b8b898989604051610e4b9796959493929190611a6c565b60405180910390a350505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905260009182918616907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610f3d9190611899565b6000604051808303816000865af19150503d8060008114610f7a576040519150601f19603f3d011682016040523d82523d6000602084013e610f7f565b606091505b50915091506000828015610fab575081511580610fab575081806020019051810190610fab9190611acd565b9050801580610fcf575073ffffffffffffffffffffffffffffffffffffffff86163b155b15611006576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301523060448301526064820183905260009182918616907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610eb4565b73ffffffffffffffffffffffffffffffffffffffff8116811461108f57600080fd5b50565b803561109d8161106d565b919050565b60008083601f8401126110b457600080fd5b50813567ffffffffffffffff8111156110cc57600080fd5b6020830191508360208285010111156110e457600080fd5b9250929050565b60008060008060008060008060a0898b03121561110757600080fd5b88356111128161106d565b9750602089013567ffffffffffffffff8082111561112f57600080fd5b61113b8c838d016110a2565b909950975060408b013591508082111561115457600080fd5b6111608c838d016110a2565b909750955060608b013591508082111561117957600080fd5b506111868b828c016110a2565b909450925050608089013561119a8161106d565b809150509295985092959890939650565b6000806000606084860312156111c057600080fd5b83356111cb8161106d565b925060208401356111db8161106d565b929592945050506040919091013590565b600080602083850312156111ff57600080fd5b823567ffffffffffffffff81111561121657600080fd5b611222858286016110a2565b90969095509350505050565b6000806000806060858703121561124457600080fd5b843561124f8161106d565b935060208501359250604085013567ffffffffffffffff81111561127257600080fd5b61127e878288016110a2565b95989497509550505050565b600080600080600060a086880312156112a257600080fd5b853594506020860135935060408601356112bb8161106d565b92506060860135915060808601356112d28161106d565b809150509295509295909350565b600080600080600080600080600080600060e08c8e03121561130157600080fd5b61130a8c611092565b9a5067ffffffffffffffff8060208e0135111561132657600080fd5b6113368e60208f01358f016110a2565b909b50995060408d013581101561134c57600080fd5b61135c8e60408f01358f016110a2565b909950975060608d013581101561137257600080fd5b6113828e60608f01358f016110a2565b909750955060808d013581101561139857600080fd5b506113a98d60808e01358e016110a2565b909450925060a08c013591506113c160c08d01611092565b90509295989b509295989b9093969950565b6000806000606084860312156113e857600080fd5b833592506020840135915060408401356114018161106d565b809150509250925092565b60008060006040848603121561142157600080fd5b833561142c8161106d565b9250602084013567ffffffffffffffff8082111561144957600080fd5b818601915086601f83011261145d57600080fd5b81358181111561146c57600080fd5b8760208260051b850101111561148157600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126114d457600080fd5b813567ffffffffffffffff808211156114ef576114ef611494565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561153557611535611494565b8160405283815286602085880101111561154e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000806000806000806101208d8f03121561159157600080fd5b61159a8d611092565b9b5067ffffffffffffffff60208e013511156115b557600080fd5b6115c58e60208f01358f016110a2565b909b50995067ffffffffffffffff60408e013511156115e357600080fd5b6115f38e60408f01358f016110a2565b909950975067ffffffffffffffff60608e0135111561161157600080fd5b6116218e60608f01358f016110a2565b909750955067ffffffffffffffff60808e0135111561163f57600080fd5b61164f8e60808f01358f016114c3565b945060a08d0135935061166460c08e01611092565b925060e08d0135915061167a6101008e01611092565b90509295989b509295989b509295989b565b60006020828403121561169e57600080fd5b81356116a98161106d565b9392505050565b60008060008060008060008060008060e08b8d0312156116cf57600080fd5b8a356116da8161106d565b995060208b013567ffffffffffffffff808211156116f757600080fd5b6117038e838f016110a2565b909b50995060408d013591508082111561171c57600080fd5b6117288e838f016110a2565b909950975060608d013591508082111561174157600080fd5b5061174e8d828e016110a2565b90965094505060808b01356117628161106d565b925060a08b0135915061177760c08c01611092565b90509295989b9194979a5092959850565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6080815260006117f560808301888a611798565b8281036020840152611808818789611798565b91505083604083015273ffffffffffffffffffffffffffffffffffffffff83166060830152979650505050505050565b60006020828403121561184a57600080fd5b5051919050565b602081526000611865602083018486611798565b949350505050565b60005b83811015611888578181015183820152602001611870565b8381111561046b5750506000910152565b600082516118ab81846020870161186d565b9190910192915050565b60c0815260006118c960c083018b8d611798565b82810360208401526118dc818a8c611798565b905082810360408401526118f181888a611798565b60608401969096525050608081019290925273ffffffffffffffffffffffffffffffffffffffff1660a0909101529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156119b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60e0815260006119cc60e083018b8d611798565b82810360208401526119df818a8c611798565b9050828103604084015287518082526119ff816020840160208c0161186d565b606084019790975273ffffffffffffffffffffffffffffffffffffffff958616608084015260a083019490945250921660c0909201919091526020601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010195945050505050565b60a081526000611a8060a08301898b611798565b8281036020840152611a9381888a611798565b73ffffffffffffffffffffffffffffffffffffffff9687166040850152606084019590955250509216608090920191909152949350505050565b600060208284031215611adf57600080fd5b815180151581146116a957600080fdfea26469706673582212202bec435caf77233ba3fa3cc9235e8203173f7b25cf946d0c5b699242e6a47dc364736f6c63430008090033

Deployed ByteCode Sourcemap

10140:5472:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11886:449;;;;;;:::i;:::-;;:::i;:::-;;8641:228;;;;;;;;;;-1:-1:-1;8830:20:0;8824:27;8641:228;;;2133:42:1;2121:55;;;2103:74;;2091:2;2076:18;8641:228:0;;;;;;;;15500:109;;;;;;;;;;-1:-1:-1;15500:109:0;;15570:31;2334:25:1;;2322:2;2307:18;15500:109:0;2188:177:1;14219:292:0;;;;;;;;;;-1:-1:-1;14219:292:0;;;;;:::i;:::-;;:::i;8171:192::-;;;;;;;;;;-1:-1:-1;8333:11:0;8327:18;8171:192;;9693:217;;;;;;;;;;-1:-1:-1;9693:217:0;;;;;:::i;:::-;;:::i;8877:808::-;;;;;;;;;;-1:-1:-1;8877:808:0;;;;;:::i;:::-;;:::i;13107:338::-;;;;;;;;;;-1:-1:-1;13107:338:0;;;;;:::i;:::-;;:::i;12443:656::-;;;;;;:::i;:::-;;:::i;13453:278::-;;;;;;:::i;:::-;;:::i;13739:472::-;;;;;;;;;;-1:-1:-1;13739:472:0;;;;;:::i;:::-;;:::i;11025:753::-;;;;;;;;;;-1:-1:-1;11025:753:0;;;;;:::i;:::-;;:::i;8371:262::-;;;;;;;;;;-1:-1:-1;8371:262:0;;;;;:::i;:::-;;:::i;10306:611::-;;;;;;;;;;-1:-1:-1;10306:611:0;;;;;:::i;:::-;;:::i;11886:449::-;12149:9;12145:44;;12172:17;;;;;;;;;;;;;;12145:44;12292:7;;12282:18;;;;;;;:::i;:::-;;;;;;;;12236:6;12207:120;;;12244:16;;12262:18;;12302:9;12313:13;12207:120;;;;;;;;;;;:::i;:::-;;;;;;;;11886:449;;;;;;;;:::o;14219:292::-;8114:10;8103:7;8333:11;8327:18;;8171:192;8103:7;:21;;;8099:44;;8133:10;;;;;;;;;;;;;;8099:44;14360:19:::1;::::0;::::1;14356:148;;14396:25;::::0;:17:::1;::::0;::::1;::::0;:25;::::1;;;::::0;14414:6;;14396:25:::1;::::0;;;14414:6;14396:17;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14219:292:::0;;;:::o;14356:148::-:1;14454:38;14468:5;14475:8;14485:6;14454:13;:38::i;:::-;14219:292:::0;;;:::o;9693:217::-;9856:1;9828:16;8830:20;8824:27;;8641:228;9828:16;:30;;;9824:53;;;9867:10;;;;;;;;;;;;;;9824:53;9693:217;;:::o;8877:808::-;8114:10;8103:7;8333:11;8327:18;;8171:192;8103:7;:21;;;8099:44;;8133:10;;;;;;;;;;;;;;8099:44;9115:4:::1;9103:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9068:17;9056:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;9052:113;;9142:23;;;;;;;;;;;;;;9052:113;9209:17;:26;;;9180:25;:55;9176:85;;9244:17;;;;;;;;;;;;;;9176:85;9335:12;9353:17;:30;;9407:19;;;9428:6;;9384:51;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;9353:83;;::::1;::::0;9384:51;9353:83:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9334:102;;;9454:7;9449:34;;9470:13;;;;;;;;;;;;;;9449:34;9501:27;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;9649:17;9627:20;9620:47;9605:73;8877:808:::0;;;;:::o;13107:338::-;13301:53;13319:8;13329:10;13341:12;13301:17;:53::i;:::-;13372:65;;;13793:42:1;13862:15;;;13844:34;;13909:2;13894:18;;13887:34;;;13957:15;;13937:18;;;13930:43;13372:65:0;;13389:8;;13381:6;;13372:65;;;;;13771:2:1;13372:65:0;;;13107:338;;;;;:::o;12443:656::-;12773:9;12769:44;;12796:17;;;;;;;;;;;;;;12769:44;12978:7;;12968:18;;;;;;;:::i;:::-;;;;;;;;12883:6;12831:260;;;12904:16;;12935:18;;13001:6;;13022;13043:9;13067:13;12831:260;;;;;;;;;;;;;;:::i;:::-;;;;;;;;12443:656;;;;;;;;;;;:::o;13453:278::-;13607:9;13603:44;;13630:17;;;;;;;;;;;;;;13603:44;13665:58;;;13698:9;15056:25:1;;15129:42;15117:55;;15112:2;15097:18;;15090:83;13688:8:0;;13680:6;;13665:58;;15029:18:1;13665:58:0;;;;;;;13453:278;;;:::o;13739:472::-;8114:10;8103:7;8333:11;8327:18;;8171:192;8103:7;:21;;;8099:44;;8133:10;;;;;;;;;;;;;;8099:44;13848:9:::1;13843:361;13859:17:::0;;::::1;13843:361;;;13898:13;13914:6;;13921:1;13914:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13898:25:::0;-1:-1:-1;13944:19:0::1;::::0;::::1;13940:253;;13984:40;::::0;:17:::1;::::0;::::1;::::0;14002:21:::1;13984:40:::0;::::1;;;::::0;::::1;::::0;;;14002:21;13984:17;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13940:253;;;14082:38;::::0;;;;14114:4:::1;14082:38;::::0;::::1;2103:74:1::0;14065:14:0::1;::::0;14082:23:::1;::::0;::::1;::::0;::::1;::::0;2076:18:1;;14082:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14065:55;;14139:38;14153:5;14160:8;14170:6;14139:13;:38::i;:::-;14046:147;13940:253;-1:-1:-1::0;13878:3:0;::::1;::::0;::::1;:::i;:::-;;;;13843:361;;11025:753:::0;11408:53;11426:8;11436:10;11448:12;11408:17;:53::i;:::-;11631:7;;11621:18;;;;;;;:::i;:::-;;;;;;;;11536:6;11490:280;;;11557:16;;11588:18;;11654:6;11675;11696:8;11719:12;11746:13;11490:280;;;;;;;;;;;;;;:::i;:::-;;;;;;;;11025:753;;;;;;;;;;;;:::o;8371:262::-;8114:10;8103:7;8333:11;8327:18;;8171:192;8103:7;:21;;;8099:44;;8133:10;;;;;;;;;;;;;;8099:44;8458:22:::1;::::0;::::1;8454:49;;8489:14;;;;;;;;;;;;;;8454:49;8521:30;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;8593:11;8586:29:::0;8371:262::o;10306:611::-;10609:53;10627:8;10637:10;10649:12;10609:17;:53::i;:::-;10812:7;;10802:18;;;;;;;:::i;:::-;;;;;;;;10717:6;10680:229;;;10738:16;;10769:18;;10835:8;10858:12;10885:13;10680:229;;;;;;;;;;;;:::i;:::-;;;;;;;;10306:611;;;;;;;;;;:::o;14519:463::-;14712:66;;14694:17;18034:55:1;;;14712:66:0;;;18016:74:1;18106:18;;;18099:34;;;14653:12:0;;;;14694:17;;;14735:24;;17989:18:1;;14712:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14694:85;;;;14712:66;14694:85;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14652:127;;;;14790:16;14809:7;:78;;;;-1:-1:-1;14821:17:0;;:31;;:65;;;14867:10;14856:30;;;;;;;;;;;;:::i;:::-;14790:97;;14905:11;14904:12;:45;;;-1:-1:-1;14920:24:0;;;;:29;14904:45;14900:74;;;14958:16;;;;;;;;;;;;;;14900:74;14641:341;;;14519:463;;;:::o;14990:502::-;15197:81;;15165:17;18707:15:1;;;15197:81:0;;;18689:34:1;15264:4:0;18739:18:1;;;18732:43;18791:18;;;18784:34;;;15124:12:0;;;;15165:17;;;15220:28;;18601:18:1;;15197:81:0;18426:398:1;14:154;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:134::-;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:348::-;364:8;374:6;428:3;421:4;413:6;409:17;405:27;395:55;;446:1;443;436:12;395:55;-1:-1:-1;469:20:1;;512:18;501:30;;498:50;;;544:1;541;534:12;498:50;581:4;573:6;569:17;557:29;;633:3;626:4;617:6;609;605:19;601:30;598:39;595:59;;;650:1;647;640:12;595:59;312:348;;;;;:::o;665:1287::-;795:6;803;811;819;827;835;843;851;904:3;892:9;883:7;879:23;875:33;872:53;;;921:1;918;911:12;872:53;960:9;947:23;979:31;1004:5;979:31;:::i;:::-;1029:5;-1:-1:-1;1085:2:1;1070:18;;1057:32;1108:18;1138:14;;;1135:34;;;1165:1;1162;1155:12;1135:34;1204:59;1255:7;1246:6;1235:9;1231:22;1204:59;:::i;:::-;1282:8;;-1:-1:-1;1178:85:1;-1:-1:-1;1370:2:1;1355:18;;1342:32;;-1:-1:-1;1386:16:1;;;1383:36;;;1415:1;1412;1405:12;1383:36;1454:61;1507:7;1496:8;1485:9;1481:24;1454:61;:::i;:::-;1534:8;;-1:-1:-1;1428:87:1;-1:-1:-1;1622:2:1;1607:18;;1594:32;;-1:-1:-1;1638:16:1;;;1635:36;;;1667:1;1664;1657:12;1635:36;;1706:61;1759:7;1748:8;1737:9;1733:24;1706:61;:::i;:::-;1786:8;;-1:-1:-1;1680:87:1;-1:-1:-1;;1873:3:1;1858:19;;1845:33;1887;1845;1887;:::i;:::-;1939:7;1929:17;;;665:1287;;;;;;;;;;;:::o;2370:464::-;2455:6;2463;2471;2524:2;2512:9;2503:7;2499:23;2495:32;2492:52;;;2540:1;2537;2530:12;2492:52;2579:9;2566:23;2598:31;2623:5;2598:31;:::i;:::-;2648:5;-1:-1:-1;2705:2:1;2690:18;;2677:32;2718:33;2677:32;2718:33;:::i;:::-;2370:464;;2770:7;;-1:-1:-1;;;2824:2:1;2809:18;;;;2796:32;;2370:464::o;2839:410::-;2909:6;2917;2970:2;2958:9;2949:7;2945:23;2941:32;2938:52;;;2986:1;2983;2976:12;2938:52;3026:9;3013:23;3059:18;3051:6;3048:30;3045:50;;;3091:1;3088;3081:12;3045:50;3130:59;3181:7;3172:6;3161:9;3157:22;3130:59;:::i;:::-;3208:8;;3104:85;;-1:-1:-1;2839:410:1;-1:-1:-1;;;;2839:410:1:o;3254:613::-;3342:6;3350;3358;3366;3419:2;3407:9;3398:7;3394:23;3390:32;3387:52;;;3435:1;3432;3425:12;3387:52;3474:9;3461:23;3493:31;3518:5;3493:31;:::i;:::-;3543:5;-1:-1:-1;3595:2:1;3580:18;;3567:32;;-1:-1:-1;3650:2:1;3635:18;;3622:32;3677:18;3666:30;;3663:50;;;3709:1;3706;3699:12;3663:50;3748:59;3799:7;3790:6;3779:9;3775:22;3748:59;:::i;:::-;3254:613;;;;-1:-1:-1;3826:8:1;-1:-1:-1;;;;3254:613:1:o;3872:594::-;3967:6;3975;3983;3991;3999;4052:3;4040:9;4031:7;4027:23;4023:33;4020:53;;;4069:1;4066;4059:12;4020:53;4105:9;4092:23;4082:33;;4162:2;4151:9;4147:18;4134:32;4124:42;;4216:2;4205:9;4201:18;4188:32;4229:31;4254:5;4229:31;:::i;:::-;4279:5;-1:-1:-1;4331:2:1;4316:18;;4303:32;;-1:-1:-1;4387:3:1;4372:19;;4359:33;4401;4359;4401;:::i;:::-;4453:7;4443:17;;;3872:594;;;;;;;;:::o;4471:1491::-;4631:6;4639;4647;4655;4663;4671;4679;4687;4695;4703;4711:7;4765:3;4753:9;4744:7;4740:23;4736:33;4733:53;;;4782:1;4779;4772:12;4733:53;4805:29;4824:9;4805:29;:::i;:::-;4795:39;;4853:18;4920:2;4914;4903:9;4899:18;4886:32;4883:40;4880:60;;;4936:1;4933;4926:12;4880:60;4975:85;5052:7;5045:2;5034:9;5030:18;5017:32;5006:9;5002:48;4975:85;:::i;:::-;5079:8;;-1:-1:-1;5106:8:1;-1:-1:-1;5157:2:1;5142:18;;5129:32;5126:40;-1:-1:-1;5123:60:1;;;5179:1;5176;5169:12;5123:60;5218:85;5295:7;5288:2;5277:9;5273:18;5260:32;5249:9;5245:48;5218:85;:::i;:::-;5322:8;;-1:-1:-1;5349:8:1;-1:-1:-1;5400:2:1;5385:18;;5372:32;5369:40;-1:-1:-1;5366:60:1;;;5422:1;5419;5412:12;5366:60;5461:85;5538:7;5531:2;5520:9;5516:18;5503:32;5492:9;5488:48;5461:85;:::i;:::-;5565:8;;-1:-1:-1;5592:8:1;-1:-1:-1;5643:3:1;5628:19;;5615:33;5612:41;-1:-1:-1;5609:61:1;;;5666:1;5663;5656:12;5609:61;;5705:86;5783:7;5775:3;5764:9;5760:19;5747:33;5736:9;5732:49;5705:86;:::i;:::-;5810:8;;-1:-1:-1;5837:8:1;-1:-1:-1;5892:3:1;5877:19;;5864:33;;-1:-1:-1;5917:39:1;5951:3;5936:19;;5917:39;:::i;:::-;5906:50;;4471:1491;;;;;;;;;;;;;;:::o;5967:383::-;6044:6;6052;6060;6113:2;6101:9;6092:7;6088:23;6084:32;6081:52;;;6129:1;6126;6119:12;6081:52;6165:9;6152:23;6142:33;;6222:2;6211:9;6207:18;6194:32;6184:42;;6276:2;6265:9;6261:18;6248:32;6289:31;6314:5;6289:31;:::i;:::-;6339:5;6329:15;;;5967:383;;;;;:::o;6355:758::-;6458:6;6466;6474;6527:2;6515:9;6506:7;6502:23;6498:32;6495:52;;;6543:1;6540;6533:12;6495:52;6582:9;6569:23;6601:31;6626:5;6601:31;:::i;:::-;6651:5;-1:-1:-1;6707:2:1;6692:18;;6679:32;6730:18;6760:14;;;6757:34;;;6787:1;6784;6777:12;6757:34;6825:6;6814:9;6810:22;6800:32;;6870:7;6863:4;6859:2;6855:13;6851:27;6841:55;;6892:1;6889;6882:12;6841:55;6932:2;6919:16;6958:2;6950:6;6947:14;6944:34;;;6974:1;6971;6964:12;6944:34;7027:7;7022:2;7012:6;7009:1;7005:14;7001:2;6997:23;6993:32;6990:45;6987:65;;;7048:1;7045;7038:12;6987:65;7079:2;7075;7071:11;7061:21;;7101:6;7091:16;;;;;6355:758;;;;;:::o;7118:184::-;7170:77;7167:1;7160:88;7267:4;7264:1;7257:15;7291:4;7288:1;7281:15;7307:778;7350:5;7403:3;7396:4;7388:6;7384:17;7380:27;7370:55;;7421:1;7418;7411:12;7370:55;7457:6;7444:20;7483:18;7520:2;7516;7513:10;7510:36;;;7526:18;;:::i;:::-;7660:2;7654:9;7722:4;7714:13;;7565:66;7710:22;;;7734:2;7706:31;7702:40;7690:53;;;7758:18;;;7778:22;;;7755:46;7752:72;;;7804:18;;:::i;:::-;7844:10;7840:2;7833:22;7879:2;7871:6;7864:18;7925:3;7918:4;7913:2;7905:6;7901:15;7897:26;7894:35;7891:55;;;7942:1;7939;7932:12;7891:55;8006:2;7999:4;7991:6;7987:17;7980:4;7972:6;7968:17;7955:54;8053:1;8046:4;8041:2;8033:6;8029:15;8025:26;8018:37;8073:6;8064:15;;;;;;7307:778;;;;:::o;8090:1575::-;8266:6;8274;8282;8290;8298;8306;8314;8322;8330;8338;8346:7;8355;8409:3;8397:9;8388:7;8384:23;8380:33;8377:53;;;8426:1;8423;8416:12;8377:53;8449:29;8468:9;8449:29;:::i;:::-;8439:39;;8527:18;8521:2;8510:9;8506:18;8493:32;8490:56;8487:76;;;8559:1;8556;8549:12;8487:76;8598:85;8675:7;8668:2;8657:9;8653:18;8640:32;8629:9;8625:48;8598:85;:::i;:::-;8702:8;;-1:-1:-1;8729:8:1;-1:-1:-1;8786:18:1;8780:2;8765:18;;8752:32;8749:56;8746:76;;;8818:1;8815;8808:12;8746:76;8857:85;8934:7;8927:2;8916:9;8912:18;8899:32;8888:9;8884:48;8857:85;:::i;:::-;8961:8;;-1:-1:-1;8988:8:1;-1:-1:-1;9045:18:1;9039:2;9024:18;;9011:32;9008:56;9005:76;;;9077:1;9074;9067:12;9005:76;9116:85;9193:7;9186:2;9175:9;9171:18;9158:32;9147:9;9143:48;9116:85;:::i;:::-;9220:8;;-1:-1:-1;9247:8:1;-1:-1:-1;9305:18:1;9298:3;9283:19;;9270:33;9267:57;9264:77;;;9337:1;9334;9327:12;9264:77;9360;9429:7;9421:3;9410:9;9406:19;9393:33;9382:9;9378:49;9360:77;:::i;:::-;9350:87;;9484:3;9473:9;9469:19;9456:33;9446:43;;9508:39;9542:3;9531:9;9527:19;9508:39;:::i;:::-;9498:49;;9595:3;9584:9;9580:19;9567:33;9556:44;;9620:39;9654:3;9643:9;9639:19;9620:39;:::i;:::-;9609:50;;8090:1575;;;;;;;;;;;;;;:::o;9670:247::-;9729:6;9782:2;9770:9;9761:7;9757:23;9753:32;9750:52;;;9798:1;9795;9788:12;9750:52;9837:9;9824:23;9856:31;9881:5;9856:31;:::i;:::-;9906:5;9670:247;-1:-1:-1;;;9670:247:1:o;9922:1431::-;10070:6;10078;10086;10094;10102;10110;10118;10126;10134;10142;10195:3;10183:9;10174:7;10170:23;10166:33;10163:53;;;10212:1;10209;10202:12;10163:53;10251:9;10238:23;10270:31;10295:5;10270:31;:::i;:::-;10320:5;-1:-1:-1;10376:2:1;10361:18;;10348:32;10399:18;10429:14;;;10426:34;;;10456:1;10453;10446:12;10426:34;10495:59;10546:7;10537:6;10526:9;10522:22;10495:59;:::i;:::-;10573:8;;-1:-1:-1;10469:85:1;-1:-1:-1;10661:2:1;10646:18;;10633:32;;-1:-1:-1;10677:16:1;;;10674:36;;;10706:1;10703;10696:12;10674:36;10745:61;10798:7;10787:8;10776:9;10772:24;10745:61;:::i;:::-;10825:8;;-1:-1:-1;10719:87:1;-1:-1:-1;10913:2:1;10898:18;;10885:32;;-1:-1:-1;10929:16:1;;;10926:36;;;10958:1;10955;10948:12;10926:36;;10997:61;11050:7;11039:8;11028:9;11024:24;10997:61;:::i;:::-;11077:8;;-1:-1:-1;10971:87:1;-1:-1:-1;;11164:3:1;11149:19;;11136:33;11178;11136;11178;:::i;:::-;11230:7;-1:-1:-1;11284:3:1;11269:19;;11256:33;;-1:-1:-1;11308:39:1;11342:3;11327:19;;11308:39;:::i;:::-;11298:49;;9922:1431;;;;;;;;;;;;;:::o;11358:271::-;11541:6;11533;11528:3;11515:33;11497:3;11567:16;;11592:13;;;11567:16;11358:271;-1:-1:-1;11358:271:1:o;11634:326::-;11723:6;11718:3;11711:19;11775:6;11768:5;11761:4;11756:3;11752:14;11739:43;;11827:1;11820:4;11811:6;11806:3;11802:16;11798:27;11791:38;11693:3;11949:4;11879:66;11874:2;11866:6;11862:15;11858:88;11853:3;11849:98;11845:109;11838:116;;11634:326;;;;:::o;11965:630::-;12238:3;12227:9;12220:22;12201:4;12265:63;12323:3;12312:9;12308:19;12300:6;12292;12265:63;:::i;:::-;12376:9;12368:6;12364:22;12359:2;12348:9;12344:18;12337:50;12404;12447:6;12439;12431;12404:50;:::i;:::-;12396:58;;;12490:6;12485:2;12474:9;12470:18;12463:34;12545:42;12537:6;12533:55;12528:2;12517:9;12513:18;12506:83;11965:630;;;;;;;;;:::o;12600:184::-;12670:6;12723:2;12711:9;12702:7;12698:23;12694:32;12691:52;;;12739:1;12736;12729:12;12691:52;-1:-1:-1;12762:16:1;;12600:184;-1:-1:-1;12600:184:1:o;12789:245::-;12946:2;12935:9;12928:21;12909:4;12966:62;13024:2;13013:9;13009:18;13001:6;12993;12966:62;:::i;:::-;12958:70;12789:245;-1:-1:-1;;;;12789:245:1:o;13039:258::-;13111:1;13121:113;13135:6;13132:1;13129:13;13121:113;;;13211:11;;;13205:18;13192:11;;;13185:39;13157:2;13150:10;13121:113;;;13252:6;13249:1;13246:13;13243:48;;;-1:-1:-1;;13287:1:1;13269:16;;13262:27;13039:258::o;13302:274::-;13431:3;13469:6;13463:13;13485:53;13531:6;13526:3;13519:4;13511:6;13507:17;13485:53;:::i;:::-;13554:16;;;;;13302:274;-1:-1:-1;;13302:274:1:o;13984:893::-;14343:3;14332:9;14325:22;14306:4;14370:63;14428:3;14417:9;14413:19;14405:6;14397;14370:63;:::i;:::-;14481:9;14473:6;14469:22;14464:2;14453:9;14449:18;14442:50;14515;14558:6;14550;14542;14515:50;:::i;:::-;14501:64;;14613:9;14605:6;14601:22;14596:2;14585:9;14581:18;14574:50;14641;14684:6;14676;14668;14641:50;:::i;:::-;14722:2;14707:18;;14700:34;;;;-1:-1:-1;;14765:3:1;14750:19;;14743:35;;;;14827:42;14815:55;14809:3;14794:19;;;14787:84;14633:58;13984:893;-1:-1:-1;;;;;;13984:893:1:o;15184:184::-;15236:77;15233:1;15226:88;15333:4;15330:1;15323:15;15357:4;15354:1;15347:15;15562:349;15601:3;15632:66;15625:5;15622:77;15619:257;;;15732:77;15729:1;15722:88;15833:4;15830:1;15823:15;15861:4;15858:1;15851:15;15619:257;-1:-1:-1;15903:1:1;15892:13;;15562:349::o;15916:1184::-;16293:3;16282:9;16275:22;16256:4;16320:63;16378:3;16367:9;16363:19;16355:6;16347;16320:63;:::i;:::-;16431:9;16423:6;16419:22;16414:2;16403:9;16399:18;16392:50;16465;16508:6;16500;16492;16465:50;:::i;:::-;16451:64;;16563:9;16555:6;16551:22;16546:2;16535:9;16531:18;16524:50;16603:6;16597:13;16634:6;16626;16619:22;16650:63;16706:6;16701:2;16693:6;16689:15;16684:2;16676:6;16672:15;16650:63;:::i;:::-;16871:2;16856:18;;16849:34;;;;16902:42;16981:15;;;16975:3;16960:19;;16953:44;17028:3;17013:19;;17006:35;;;;-1:-1:-1;17078:15:1;;17072:3;17057:19;;;17050:44;;;;16837:2;16762;16750:15;;;-1:-1:-1;16746:88:1;16734:101;16730:110;;;-1:-1:-1;;;;;15916:1184:1:o;17105:732::-;17406:3;17395:9;17388:22;17369:4;17433:63;17491:3;17480:9;17476:19;17468:6;17460;17433:63;:::i;:::-;17544:9;17536:6;17532:22;17527:2;17516:9;17512:18;17505:50;17572;17615:6;17607;17599;17572:50;:::i;:::-;17641:42;17719:15;;;17714:2;17699:18;;17692:43;17766:2;17751:18;;17744:34;;;;-1:-1:-1;;17815:15:1;;17809:3;17794:19;;;17787:44;;;;17564:58;17105:732;-1:-1:-1;;;;17105:732:1:o;18144:277::-;18211:6;18264:2;18252:9;18243:7;18239:23;18235:32;18232:52;;;18280:1;18277;18270:12;18232:52;18312:9;18306:16;18365:5;18358:13;18351:21;18344:5;18341:32;18331:60;;18387:1;18384;18377:12

Swarm Source

ipfs://2bec435caf77233ba3fa3cc9235e8203173f7b25cf946d0c5b699242e6a47dc3
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
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.