ETH Price: $2,449.18 (+1.21%)

Contract

0x4F85E00dADDbf83233a6A3beB0EC5Bc460899d2f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Enable Fee200131732024-06-03 18:46:11125 days ago1717440371IN
0x4F85E00d...460899d2f
0 ETH0.000525911.47251361
Set Manager197235872024-04-24 6:55:35166 days ago1713941735IN
0x4F85E00d...460899d2f
0 ETH0.00039978.60958216
Set Manager193245432024-02-28 7:27:59222 days ago1709105279IN
0x4F85E00d...460899d2f
0 ETH0.001528132.91477766
Set Manager189890032024-01-12 6:22:59269 days ago1705040579IN
0x4F85E00d...460899d2f
0 ETH0.0007957417.14451732
Set Manager189890002024-01-12 6:22:23269 days ago1705040543IN
0x4F85E00d...460899d2f
0 ETH0.0004675917.62782013
Set Manager189433582024-01-05 20:11:35275 days ago1704485495IN
0x4F85E00d...460899d2f
0 ETH0.0008833119.02621137
Set Manager187821542023-12-14 4:58:47298 days ago1702529927IN
0x4F85E00d...460899d2f
0 ETH0.0018036838.85078108
Set Manager187634412023-12-11 14:04:23300 days ago1702303463IN
0x4F85E00d...460899d2f
0 ETH0.001899740.91903779
Set Manager187634332023-12-11 14:02:47300 days ago1702303367IN
0x4F85E00d...460899d2f
0 ETH0.0018651140.17395366
Transfer Ownersh...187633832023-12-11 13:52:35300 days ago1702302755IN
0x4F85E00d...460899d2f
0 ETH0.0011637340.61484545
0x60806040187633572023-12-11 13:47:11300 days ago1702302431IN
 Contract Creation
0 ETH0.0531288642

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

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

Contract Name:
LCBridgev2LQDX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-11
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;

abstract contract Context {
  function _msgSender() internal view virtual returns (address) {
    return msg.sender;
  }
  function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
  }
}

abstract contract Ownable is Context {
  address private _owner;

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

  constructor() {
    _transferOwnership(_msgSender());
  }

  modifier onlyOwner() {
    _checkOwner();
    _;
  }

  function owner() public view virtual returns (address) {
    return _owner;
  }

  function _checkOwner() internal view virtual {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
  }

  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }

  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal virtual {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
}

interface IERC20 {
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);

  function totalSupply() external view returns (uint256);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address to, uint256 amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(
    address from,
    address to,
    uint256 amount
  ) external returns (bool);
}

library Address {
  function isContract(address account) internal view returns (bool) {
    return account.code.length > 0;
  }

  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

    (bool success, ) = recipient.call{value: amount}("");
    require(success, "Address: unable to send value, recipient may have reverted");
  }

  function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCallWithValue(target, data, 0, "Address: low-level call failed");
  }

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

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

  function functionCallWithValue(
    address target,
    bytes memory data,
    uint256 value,
    string memory errorMessage
  ) internal returns (bytes memory) {
    require(address(this).balance >= value, "Address: insufficient balance for call");
    (bool success, bytes memory returndata) = target.call{value: value}(data);
    return verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
    return functionStaticCall(target, data, "Address: low-level static call failed");
  }

  function functionStaticCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal view returns (bytes memory) {
    (bool success, bytes memory returndata) = target.staticcall(data);
    return verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
    return functionDelegateCall(target, data, "Address: low-level delegate call failed");
  }

  function functionDelegateCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    (bool success, bytes memory returndata) = target.delegatecall(data);
    return verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function verifyCallResultFromTarget(
    address target,
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal view returns (bytes memory) {
    if (success) {
      if (returndata.length == 0) {
        require(isContract(target), "Address: call to non-contract");
      }
      return returndata;
    } else {
      _revert(returndata, errorMessage);
    }
  }

  function verifyCallResult(
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal pure returns (bytes memory) {
    if (success) {
      return returndata;
    } else {
      _revert(returndata, errorMessage);
    }
  }

  function _revert(bytes memory returndata, string memory errorMessage) private pure {
    if (returndata.length > 0) {
      assembly {
        let returndata_size := mload(returndata)
        revert(add(32, returndata), returndata_size)
      }
    } else {
      revert(errorMessage);
    }
  }
}

interface IERC20Permit {
  function permit(
    address owner,
    address spender,
    uint256 value,
    uint256 deadline,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external;
  function nonces(address owner) external view returns (uint256);
  function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
  using Address for address;

  function safeTransfer(
    IERC20 token,
    address to,
    uint256 value
  ) internal {
    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
  }

  function safeTransferFrom(
    IERC20 token,
    address from,
    address to,
    uint256 value
  ) internal {
    _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
  }

  function safeApprove(
    IERC20 token,
    address spender,
    uint256 value
  ) internal {
    require(
      (value == 0) || (token.allowance(address(this), spender) == 0),
      "SafeERC20: approve from non-zero to non-zero allowance"
    );
    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
  }

  function safeIncreaseAllowance(
    IERC20 token,
    address spender,
    uint256 value
  ) internal {
    uint256 newAllowance = token.allowance(address(this), spender) + value;
    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
  }

  function safeDecreaseAllowance(
    IERC20 token,
    address spender,
    uint256 value
  ) internal {
    unchecked {
      uint256 oldAllowance = token.allowance(address(this), spender);
      require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
      uint256 newAllowance = oldAllowance - value;
      _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
  }

  function safePermit(
    IERC20Permit token,
    address owner,
    address spender,
    uint256 value,
    uint256 deadline,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) internal {
    uint256 nonceBefore = token.nonces(owner);
    token.permit(owner, spender, value, deadline, v, r, s);
    uint256 nonceAfter = token.nonces(owner);
    require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
  }

  function _callOptionalReturn(IERC20 token, bytes memory data) private {
    bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
    if (returndata.length > 0) {
      require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
    }
  }
}

interface ILQDX is IERC20 {
  function mint(address account, uint256 amount) external;
  function burn(address account, uint256 amount) external;
}

contract LCBridgev2LQDX is Ownable {
  using SafeERC20 for IERC20;
  using SafeERC20 for ILQDX;

  address public poolToken;
  uint256 public chainId;
  address public treasury;

  mapping (address => bool) public noFeeWallets;
  mapping (address => bool) public managers;

  bool public enableFee = false;
  uint256 public swapFee = 5000;
  uint256 private constant coreDecimal = 1000000;

  struct SwapVoucher {
    uint256 amount;
    uint256 outChain;
    address toAccount;
    address refundAccount;
  }

  uint256 private swapIndex = 1;
  mapping (uint256 => SwapVoucher) public voucherLists;

  modifier onlyManager() {
    require(managers[msg.sender], "LCBridgev2: !manager");
    _;
  }

  event Swap(address operator, address receiver, address refund, uint256 amount, uint256 srcChainId, uint256 desChainId, uint256 swapIndex);
  event Redeem(address operator, address account, uint256 amount, uint256 srcChainId, uint256 swapIndex);
  event Refund(address operator, address account, uint256 index, uint256 amount);
  event CutFee(address treasury, uint256 treasuryFee);

  constructor(
    address _poolToken,
    uint256 _chainId,
    address _treasury
  )
  {
    require(_poolToken != address(0), "LCBridgev2: Treasury");
    require(_treasury != address(0), "LCBridgev2: Treasury");
    
    poolToken = _poolToken;
    chainId = _chainId;
    treasury = _treasury;
    managers[msg.sender] = true;
  }

  function swap(address _to, uint256 _amount, address _refund, uint256 _outChainID) public payable returns(uint256) {
    uint256 amount = IERC20(poolToken).balanceOf(address(this));
    IERC20(poolToken).safeTransferFrom(msg.sender, address(this), _amount);
    amount = IERC20(poolToken).balanceOf(address(this)) - amount;
    if (enableFee && noFeeWallets[msg.sender] == false) {
      amount = _cutFee(amount);
    }
    voucherLists[swapIndex] = SwapVoucher(amount, _outChainID, _to, _refund);
    emit Swap(msg.sender, _to, _refund, amount, chainId, _outChainID, swapIndex);
    swapIndex ++;
    return amount;
  }

  function redeem(address account, uint256 amount, uint256 srcChainId, uint256 _swapIndex, uint256 operatorFee) public onlyManager returns(uint256) {
    require(amount >= operatorFee, "LCBridgev2: Few redeem liquidity");

    amount -= operatorFee;
    if (amount > 0) {
      uint256 balance = ILQDX(poolToken).balanceOf(address(this));
      if (balance < amount) {
        ILQDX(poolToken).mint(address(this), amount - balance);
      }
      ILQDX(poolToken).safeTransfer(account, amount);
      emit Redeem(msg.sender, account, amount, srcChainId, _swapIndex);
    }

    return amount;
  }

  function refund(uint256 _index) public onlyManager returns(uint256) {
    uint256 amount = voucherLists[_index].amount;
    uint256 balance = ILQDX(poolToken).balanceOf(address(this));
    if (balance < amount) {
      ILQDX(poolToken).mint(address(this), amount - balance);
    }
    ILQDX(poolToken).mint(voucherLists[_index].refundAccount, amount);
    emit Refund(msg.sender, voucherLists[_index].refundAccount, _index, amount);
    return amount;
  }

  function setManager(address account, bool access) public onlyOwner {
    managers[account] = access;
  }

  function setNoFeeWallets(address account, bool access) public onlyManager {
    noFeeWallets[account] = access;
  }

  function setSwapFee(uint256 _swapFee) public onlyManager {
    swapFee = _swapFee;
  }

  function setEnableFee(bool _enableFee) public onlyManager {
    enableFee = _enableFee;
  }

  function setTreasury(address _treasury) public onlyManager {
    treasury = _treasury;
  }

  function _cutFee(uint256 _amount) internal returns(uint256) {
    if (_amount > 0) {
      uint256 fee = _amount * swapFee / coreDecimal;
      if (fee > 0) {
        IERC20(poolToken).safeTransfer(treasury, fee);
      }
      emit CutFee(treasury, fee);
      return _amount - fee;
    }
    return 0;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_poolToken","type":"address"},{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"CutFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"srcChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapIndex","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Refund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"address","name":"refund","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"srcChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"desChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapIndex","type":"uint256"}],"name":"Swap","type":"event"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"managers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"noFeeWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"srcChainId","type":"uint256"},{"internalType":"uint256","name":"_swapIndex","type":"uint256"},{"internalType":"uint256","name":"operatorFee","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"refund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enableFee","type":"bool"}],"name":"setEnableFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"access","type":"bool"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"access","type":"bool"}],"name":"setNoFeeWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapFee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_refund","type":"address"},{"internalType":"uint256","name":"_outChainID","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"voucherLists","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"outChain","type":"uint256"},{"internalType":"address","name":"toAccount","type":"address"},{"internalType":"address","name":"refundAccount","type":"address"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x6080604052600436106101145760003560e01c80639a8a0592116100a0578063d8e0027111610064578063d8e0027114610350578063e3e715b414610370578063f0f4426014610390578063f2fde38b146103b0578063fdff9b4d146103d057600080fd5b80639a8a05921461025c578063a49fdb4914610272578063a5e90eee14610292578063c0e34105146102b2578063cbdf382c1461033057600080fd5b806354cf2aeb116100e757806354cf2aeb146101c857806361d027b3146101de578063715018a6146102165780638a0ccd561461022b5780638da5cb5b1461023e57600080fd5b8063278ecde1146101195780632df28dac1461014c57806330d2091d1461018c57806334e19907146101a6575b600080fd5b34801561012557600080fd5b50610139610134366004611021565b610400565b6040519081526020015b60405180910390f35b34801561015857600080fd5b5061017c610167366004611051565b60046020526000908152604090205460ff1681565b6040519015158152602001610143565b34801561019857600080fd5b5060065461017c9060ff1681565b3480156101b257600080fd5b506101c66101c1366004611021565b610621565b005b3480156101d457600080fd5b5061013960075481565b3480156101ea57600080fd5b506003546101fe906001600160a01b031681565b6040516001600160a01b039091168152602001610143565b34801561022257600080fd5b506101c6610655565b61013961023936600461106c565b610669565b34801561024a57600080fd5b506000546001600160a01b03166101fe565b34801561026857600080fd5b5061013960025481565b34801561027e57600080fd5b5061013961028d3660046110b0565b61089c565b34801561029e57600080fd5b506101c66102ad366004611100565b610a99565b3480156102be57600080fd5b506103016102cd366004611021565b6009602052600090815260409020805460018201546002830154600390930154919290916001600160a01b03918216911684565b6040805194855260208501939093526001600160a01b0391821692840192909252166060820152608001610143565b34801561033c57600080fd5b506001546101fe906001600160a01b031681565b34801561035c57600080fd5b506101c661036b366004611137565b610acc565b34801561037c57600080fd5b506101c661038b366004611100565b610b0e565b34801561039c57600080fd5b506101c66103ab366004611051565b610b68565b3480156103bc57600080fd5b506101c66103cb366004611051565b610bb9565b3480156103dc57600080fd5b5061017c6103eb366004611051565b60056020526000908152604090205460ff1681565b3360009081526005602052604081205460ff166104385760405162461bcd60e51b815260040161042f90611154565b60405180910390fd5b6000828152600960205260408082205460015491516370a0823160e01b81523060048201529092916001600160a01b0316906370a0823190602401602060405180830381865afa158015610490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b49190611182565b905081811015610539576001546001600160a01b03166340c10f19306104da84866111b1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050505b600154600085815260096020526040908190206003015490516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b15801561059957600080fd5b505af11580156105ad573d6000803e3d6000fd5b5050506000858152600960209081526040918290206003015482513381526001600160a01b0390911691810191909152908101869052606081018490527f82c4addd7df9bb5b801dcdeb0a67eb8bda3d9e213af78965d584b0be8cb63660915060800160405180910390a15090505b919050565b3360009081526005602052604090205460ff166106505760405162461bcd60e51b815260040161042f90611154565b600755565b61065d610c32565b6106676000610c8c565b565b6001546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156106b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106da9190611182565b6001549091506106f5906001600160a01b0316333088610cdc565b6001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa15801561073d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107619190611182565b61076b91906111b1565b60065490915060ff16801561079057503360009081526004602052604090205460ff16155b156107a15761079e81610d4d565b90505b604080516080808201835283825260208083018781526001600160a01b038b81168587018181528b8316606080890182815260088054600090815260098a528c90209a518b55965160018b015592516002808b0180549288166001600160a01b031993841617905593516003909a0180549a909616991698909817909355549254875133815294850191909152958301529281018590529081019190915260a0810185905260c08101919091527f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db9060e00160405180910390a16008805490600061088b836111ca565b90915550909150505b949350505050565b3360009081526005602052604081205460ff166108cb5760405162461bcd60e51b815260040161042f90611154565b8185101561091b5760405162461bcd60e51b815260206004820181905260248201527f4c4342726964676576323a204665772072656465656d206c6971756964697479604482015260640161042f565b61092582866111b1565b94508415610a8f576001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099a9190611182565b905085811015610a1f576001546001600160a01b03166340c10f19306109c0848a6111b1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610a0657600080fd5b505af1158015610a1a573d6000803e3d6000fd5b505050505b600154610a36906001600160a01b03168888610df7565b604080513381526001600160a01b038916602082015290810187905260608101869052608081018590527f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f9060a00160405180910390a1505b5092949350505050565b610aa1610c32565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b3360009081526005602052604090205460ff16610afb5760405162461bcd60e51b815260040161042f90611154565b6006805460ff1916911515919091179055565b3360009081526005602052604090205460ff16610b3d5760405162461bcd60e51b815260040161042f90611154565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b3360009081526005602052604090205460ff16610b975760405162461bcd60e51b815260040161042f90611154565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610bc1610c32565b6001600160a01b038116610c265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042f565b610c2f81610c8c565b50565b6000546001600160a01b031633146106675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0380851660248301528316604482015260648101829052610d479085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610e2c565b50505050565b60008115610def576000620f424060075484610d6991906111e3565b610d7391906111fa565b90508015610d9857600354600154610d98916001600160a01b03918216911683610df7565b600354604080516001600160a01b039092168252602082018390527f65a4757744f091de9e03e6f677c42621cdbe4eb8d7e8b5db0abef44cdfdbfcd4910160405180910390a1610de881846111b1565b9392505050565b506000919050565b6040516001600160a01b038316602482015260448101829052610e2790849063a9059cbb60e01b90606401610d10565b505050565b6000610e81826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610efe9092919063ffffffff16565b805190915015610e275780806020019051810190610e9f919061121c565b610e275760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161042f565b6060610894848460008585600080866001600160a01b03168587604051610f25919061125d565b60006040518083038185875af1925050503d8060008114610f62576040519150601f19603f3d011682016040523d82523d6000602084013e610f67565b606091505b5091509150610f7887838387610f83565b979650505050505050565b60608315610ff2578251600003610feb576001600160a01b0385163b610feb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161042f565b5081610894565b61089483838151156110075781518083602001fd5b8060405162461bcd60e51b815260040161042f9190611279565b60006020828403121561103357600080fd5b5035919050565b80356001600160a01b038116811461061c57600080fd5b60006020828403121561106357600080fd5b610de88261103a565b6000806000806080858703121561108257600080fd5b61108b8561103a565b9350602085013592506110a06040860161103a565b9396929550929360600135925050565b600080600080600060a086880312156110c857600080fd5b6110d18661103a565b97602087013597506040870135966060810135965060800135945092505050565b8015158114610c2f57600080fd5b6000806040838503121561111357600080fd5b61111c8361103a565b9150602083013561112c816110f2565b809150509250929050565b60006020828403121561114957600080fd5b8135610de8816110f2565b6020808252601490820152732621a13934b233b2bb191d1010b6b0b730b3b2b960611b604082015260600190565b60006020828403121561119457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156111c4576111c461119b565b92915050565b6000600182016111dc576111dc61119b565b5060010190565b80820281158282048414176111c4576111c461119b565b60008261121757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561122e57600080fd5b8151610de8816110f2565b60005b8381101561125457818101518382015260200161123c565b50506000910152565b6000825161126f818460208701611239565b9190910192915050565b6020815260008251806020840152611298816040850160208701611239565b601f01601f1916919091016040019291505056fea26469706673582212206bd0b203596b0717615eb4bdde5dc6e183fc49bff006658f0ce3feb0aa72f24464736f6c63430008130033

Deployed Bytecode Sourcemap

8360:4039:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11083:464;;;;;;;;;;-1:-1:-1;11083:464:0;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;11083:464:0;;;;;;;;8549:45;;;;;;;;;;-1:-1:-1;8549:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;915:14:1;;908:22;890:41;;878:2;863:18;8549:45:0;750:187:1;8647:29:0;;;;;;;;;;-1:-1:-1;8647:29:0;;;;;;;;11788:88;;;;;;;;;;-1:-1:-1;11788:88:0;;;;;:::i;:::-;;:::i;:::-;;8681:29;;;;;;;;;;;;;;;;8519:23;;;;;;;;;;-1:-1:-1;8519:23:0;;;;-1:-1:-1;;;;;8519:23:0;;;;;;-1:-1:-1;;;;;1106:32:1;;;1088:51;;1076:2;1061:18;8519:23:0;942:203:1;803:97:0;;;;;;;;;;;;;:::i;9833:630::-;;;;;;:::i;:::-;;:::i;584:81::-;;;;;;;;;;-1:-1:-1;630:7:0;653:6;-1:-1:-1;;;;;653:6:0;584:81;;8492:22;;;;;;;;;;;;;;;;10469:608;;;;;;;;;;-1:-1:-1;10469:608:0;;;;;:::i;:::-;;:::i;11553:106::-;;;;;;;;;;-1:-1:-1;11553:106:0;;;;;:::i;:::-;;:::i;8929:52::-;;;;;;;;;;-1:-1:-1;8929:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8929:52:0;;;;;;;;;;;2691:25:1;;;2747:2;2732:18;;2725:34;;;;-1:-1:-1;;;;;2833:15:1;;;2813:18;;;2806:43;;;;2885:15;2880:2;2865:18;;2858:43;2678:3;2663:19;8929:52:0;2460:447:1;8463:24:0;;;;;;;;;;-1:-1:-1;8463:24:0;;;;-1:-1:-1;;;;;8463:24:0;;;11882:93;;;;;;;;;;-1:-1:-1;11882:93:0;;;;;:::i;:::-;;:::i;11665:117::-;;;;;;;;;;-1:-1:-1;11665:117:0;;;;;:::i;:::-;;:::i;11981:92::-;;;;;;;;;;-1:-1:-1;11981:92:0;;;;;:::i;:::-;;:::i;906:191::-;;;;;;;;;;-1:-1:-1;906:191:0;;;;;:::i;:::-;;:::i;8599:41::-;;;;;;;;;;-1:-1:-1;8599:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11083:464;9035:10;11142:7;9026:20;;;:8;:20;;;;;;;;9018:53;;;;-1:-1:-1;;;9018:53:0;;;;;;;:::i;:::-;;;;;;;;;11158:14:::1;11175:20:::0;;;:12:::1;:20;::::0;;;;;:27;11233:9:::1;::::0;11227:41;;-1:-1:-1;;;11227:41:0;;11262:4:::1;11227:41;::::0;::::1;1088:51:1::0;11175:27:0;;11158:14;-1:-1:-1;;;;;11233:9:0::1;::::0;11227:26:::1;::::0;1061:18:1;;11227:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11209:59;;11289:6;11279:7;:16;11275:93;;;11312:9;::::0;-1:-1:-1;;;;;11312:9:0::1;11306:21;11336:4;11343:16;11352:7:::0;11343:6;:16:::1;:::i;:::-;11306:54;::::0;-1:-1:-1;;;;;;11306:54:0::1;::::0;;;;;;-1:-1:-1;;;;;4153:32:1;;;11306:54:0::1;::::0;::::1;4135:51:1::0;4202:18;;;4195:34;4108:18;;11306:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11275:93;11380:9;::::0;::::1;11396:20:::0;;;:12:::1;:20;::::0;;;;;;:34:::1;;::::0;11374:65;;-1:-1:-1;;;11374:65:0;;-1:-1:-1;;;;;11396:34:0;;::::1;11374:65;::::0;::::1;4135:51:1::0;4202:18;;;4195:34;;;11380:9:0;::::1;::::0;11374:21:::1;::::0;4108:18:1;;11374:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;11470:20:0::1;::::0;;;:12:::1;:20;::::0;;;;;;;;:34:::1;;::::0;11451:70;;11458:10:::1;4509:34:1::0;;-1:-1:-1;;;;;11470:34:0;;::::1;4559:18:1::0;;;4552:43;;;;4611:18;;;4604:34;;;4669:2;4654:18;;4647:34;;;11451:70:0::1;::::0;-1:-1:-1;4458:3:1;4443:19;11451:70:0::1;;;;;;;-1:-1:-1::0;11535:6:0;-1:-1:-1;9078:1:0::1;11083:464:::0;;;:::o;11788:88::-;9035:10;9026:20;;;;:8;:20;;;;;;;;9018:53;;;;-1:-1:-1;;;9018:53:0;;;;;;;:::i;:::-;11852:7:::1;:18:::0;11788:88::o;803:97::-;551:13;:11;:13::i;:::-;864:30:::1;891:1;864:18;:30::i;:::-;803:97::o:0;9833:630::-;9978:9;;9971:42;;-1:-1:-1;;;9971:42:0;;10007:4;9971:42;;;1088:51:1;9938:7:0;;;;-1:-1:-1;;;;;9978:9:0;;;;9971:27;;1061:18:1;;9971:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10027:9;;9954:59;;-1:-1:-1;10020:70:0;;-1:-1:-1;;;;;10027:9:0;10055:10;10075:4;10082:7;10020:34;:70::i;:::-;10113:9;;10106:42;;-1:-1:-1;;;10106:42:0;;10142:4;10106:42;;;1088:51:1;10151:6:0;;-1:-1:-1;;;;;10113:9:0;;10106:27;;1061:18:1;;10106:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;10168:9;;10097:60;;-1:-1:-1;10168:9:0;;:46;;;;-1:-1:-1;10194:10:0;10181:24;;;;:12;:24;;;;;;;;:33;10168:46;10164:93;;;10234:15;10242:6;10234:7;:15::i;:::-;10225:24;;10164:93;10289:46;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10289:46:0;;;;;;;;;;;;;;;;;;;10276:9;;;-1:-1:-1;10263:23:0;;;:12;:23;;;;;:72;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10263:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10386:7;10408:9;;10347:71;;10352:10;5045:34:1;;5095:18;;;5088:43;;;;5147:18;;;5140:43;5199:18;;;5192:34;;;5242:19;;;5235:35;;;;5025:3;5286:19;;5279:35;;;5345:3;5330:19;;5323:35;;;;10347:71:0;;4994:3:1;4979:19;10347:71:0;;;;;;;10425:9;:12;;;:9;:12;;;:::i;:::-;;;;-1:-1:-1;10451:6:0;;-1:-1:-1;;9833:630:0;;;;;;;:::o;10469:608::-;9035:10;10606:7;9026:20;;;:8;:20;;;;;;;;9018:53;;;;-1:-1:-1;;;9018:53:0;;;;;;;:::i;:::-;10640:11:::1;10630:6;:21;;10622:66;;;::::0;-1:-1:-1;;;10622:66:0;;5711:2:1;10622:66:0::1;::::0;::::1;5693:21:1::0;;;5730:18;;;5723:30;5789:34;5769:18;;;5762:62;5841:18;;10622:66:0::1;5509:356:1::0;10622:66:0::1;10697:21;10707:11:::0;10697:21;::::1;:::i;:::-;::::0;-1:-1:-1;10729:10:0;;10725:325:::1;;10774:9;::::0;10768:41:::1;::::0;-1:-1:-1;;;10768:41:0;;10803:4:::1;10768:41;::::0;::::1;1088:51:1::0;10750:15:0::1;::::0;-1:-1:-1;;;;;10774:9:0::1;::::0;10768:26:::1;::::0;1061:18:1;;10768:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10750:59;;10832:6;10822:7;:16;10818:97;;;10857:9;::::0;-1:-1:-1;;;;;10857:9:0::1;10851:21;10881:4;10888:16;10897:7:::0;10888:6;:16:::1;:::i;:::-;10851:54;::::0;-1:-1:-1;;;;;;10851:54:0::1;::::0;;;;;;-1:-1:-1;;;;;4153:32:1;;;10851:54:0::1;::::0;::::1;4135:51:1::0;4202:18;;;4195:34;4108:18;;10851:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10818:97;10929:9;::::0;10923:46:::1;::::0;-1:-1:-1;;;;;10929:9:0::1;10953:7:::0;10962:6;10923:29:::1;:46::i;:::-;10983:59;::::0;;10990:10:::1;6167:34:1::0;;-1:-1:-1;;;;;6237:15:1;;6232:2;6217:18;;6210:43;6269:18;;;6262:34;;;6327:2;6312:18;;6305:34;;;6370:3;6355:19;;6348:35;;;10983:59:0::1;::::0;6116:3:1;6101:19;10983:59:0::1;;;;;;;10741:309;10725:325;-1:-1:-1::0;11065:6:0;;10469:608;-1:-1:-1;;;;10469:608:0:o;11553:106::-;551:13;:11;:13::i;:::-;-1:-1:-1;;;;;11627:17:0;;;::::1;;::::0;;;:8:::1;:17;::::0;;;;:26;;-1:-1:-1;;11627:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11553:106::o;11882:93::-;9035:10;9026:20;;;;:8;:20;;;;;;;;9018:53;;;;-1:-1:-1;;;9018:53:0;;;;;;;:::i;:::-;11947:9:::1;:22:::0;;-1:-1:-1;;11947:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11882:93::o;11665:117::-;9035:10;9026:20;;;;:8;:20;;;;;;;;9018:53;;;;-1:-1:-1;;;9018:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11746:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:30;;-1:-1:-1;;11746:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11665:117::o;11981:92::-;9035:10;9026:20;;;;:8;:20;;;;;;;;9018:53;;;;-1:-1:-1;;;9018:53:0;;;;;;;:::i;:::-;12047:8:::1;:20:::0;;-1:-1:-1;;;;;;12047:20:0::1;-1:-1:-1::0;;;;;12047:20:0;;;::::1;::::0;;;::::1;::::0;;11981:92::o;906:191::-;551:13;:11;:13::i;:::-;-1:-1:-1;;;;;991:22:0;::::1;983:73;;;::::0;-1:-1:-1;;;983:73:0;;6596:2:1;983:73:0::1;::::0;::::1;6578:21:1::0;6635:2;6615:18;;;6608:30;6674:34;6654:18;;;6647:62;-1:-1:-1;;;6725:18:1;;;6718:36;6771:19;;983:73:0::1;6394:402:1::0;983:73:0::1;1063:28;1082:8;1063:18;:28::i;:::-;906:191:::0;:::o;671:126::-;630:7;653:6;-1:-1:-1;;;;;653:6:0;175:10;731:23;723:68;;;;-1:-1:-1;;;723:68:0;;7003:2:1;723:68:0;;;6985:21:1;;;7022:18;;;7015:30;7081:34;7061:18;;;7054:62;7133:18;;723:68:0;6801:356:1;1103:177:0;1173:16;1192:6;;-1:-1:-1;;;;;1205:17:0;;;-1:-1:-1;;;;;;1205:17:0;;;;;;1234:40;;1192:6;;;;;;;1234:40;;1173:16;1234:40;1166:114;1103:177;:::o;6100:224::-;6249:68;;-1:-1:-1;;;;;7420:15:1;;;6249:68:0;;;7402:34:1;7472:15;;7452:18;;;7445:43;7504:18;;;7497:34;;;6222:96:0;;6242:5;;-1:-1:-1;;;6272:27:0;7337:18:1;;6249:68:0;;;;-1:-1:-1;;6249:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;6249:68:0;-1:-1:-1;;;;;;6249:68:0;;;;;;;;;;6222:19;:96::i;:::-;6100:224;;;;:::o;12079:317::-;12130:7;12150:11;;12146:230;;12172:11;8754:7;12196;;12186;:17;;;;:::i;:::-;:31;;;;:::i;:::-;12172:45;-1:-1:-1;12230:7:0;;12226:79;;12281:8;;;12257:9;12250:45;;-1:-1:-1;;;;;12257:9:0;;;;12281:8;12291:3;12250:30;:45::i;:::-;12325:8;;12318:21;;;-1:-1:-1;;;;;12325:8:0;;;4135:51:1;;4217:2;4202:18;;4195:34;;;12318:21:0;;4108:18:1;12318:21:0;;;;;;;12355:13;12365:3;12355:7;:13;:::i;:::-;12348:20;12079:317;-1:-1:-1;;;12079:317:0:o;12146:230::-;-1:-1:-1;12389:1:0;;12079:317;-1:-1:-1;12079:317:0:o;5903:191::-;6029:58;;-1:-1:-1;;;;;4153:32:1;;6029:58:0;;;4135:51:1;4202:18;;;4195:34;;;6002:86:0;;6022:5;;-1:-1:-1;;;6052:23:0;4108:18:1;;6029:58:0;3961:274:1;6002:86:0;5903:191;;;:::o;7886:313::-;7963:23;7989:69;8017:4;7989:69;;;;;;;;;;;;;;;;;7997:5;-1:-1:-1;;;;;7989:27:0;;;:69;;;;;:::i;:::-;8069:17;;7963:95;;-1:-1:-1;8069:21:0;8065:129;;8120:10;8109:30;;;;;;;;;;;;:::i;:::-;8101:85;;;;-1:-1:-1;;;8101:85:0;;8389:2:1;8101:85:0;;;8371:21:1;8428:2;8408:18;;;8401:30;8467:34;8447:18;;;8440:62;-1:-1:-1;;;8518:18:1;;;8511:40;8568:19;;8101:85:0;8187:406:1;2588:217:0;2717:12;2747:52;2769:6;2777:4;2783:1;2786:12;2717;3325;3339:23;3366:6;-1:-1:-1;;;;;3366:11:0;3385:5;3392:4;3366:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3324:73;;;;3411:69;3438:6;3446:7;3455:10;3467:12;3411:26;:69::i;:::-;3404:76;3063:423;-1:-1:-1;;;;;;;3063:423:0:o;4520:413::-;4687:12;4712:7;4708:220;;;4734:10;:17;4755:1;4734:22;4730:109;;-1:-1:-1;;;;;2055:19:0;;;4769:60;;;;-1:-1:-1;;;4769:60:0;;9754:2:1;4769:60:0;;;9736:21:1;9793:2;9773:18;;;9766:30;9832:31;9812:18;;;9805:59;9881:18;;4769:60:0;9552:353:1;4769:60:0;-1:-1:-1;4854:10:0;4847:17;;4708:220;4887:33;4895:10;4907:12;5304:17;;:21;5300:209;;5385:10;5379:17;5434:15;5421:10;5417:2;5413:19;5406:44;5300:209;5488:12;5481:20;;-1:-1:-1;;;5481:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:173::-;449:20;;-1:-1:-1;;;;;498:31:1;;488:42;;478:70;;544:1;541;534:12;559:186;618:6;671:2;659:9;650:7;646:23;642:32;639:52;;;687:1;684;677:12;639:52;710:29;729:9;710:29;:::i;1150:397::-;1236:6;1244;1252;1260;1313:3;1301:9;1292:7;1288:23;1284:33;1281:53;;;1330:1;1327;1320:12;1281:53;1353:29;1372:9;1353:29;:::i;:::-;1343:39;;1429:2;1418:9;1414:18;1401:32;1391:42;;1452:38;1486:2;1475:9;1471:18;1452:38;:::i;:::-;1150:397;;;;-1:-1:-1;1442:48:1;;1537:2;1522:18;1509:32;;-1:-1:-1;;1150:397:1:o;1552:460::-;1647:6;1655;1663;1671;1679;1732:3;1720:9;1711:7;1707:23;1703:33;1700:53;;;1749:1;1746;1739:12;1700:53;1772:29;1791:9;1772:29;:::i;:::-;1762:39;1848:2;1833:18;;1820:32;;-1:-1:-1;1899:2:1;1884:18;;1871:32;;1950:2;1935:18;;1922:32;;-1:-1:-1;2001:3:1;1986:19;1973:33;;-1:-1:-1;1552:460:1;-1:-1:-1;;;1552:460:1:o;2017:118::-;2103:5;2096:13;2089:21;2082:5;2079:32;2069:60;;2125:1;2122;2115:12;2140:315;2205:6;2213;2266:2;2254:9;2245:7;2241:23;2237:32;2234:52;;;2282:1;2279;2272:12;2234:52;2305:29;2324:9;2305:29;:::i;:::-;2295:39;;2384:2;2373:9;2369:18;2356:32;2397:28;2419:5;2397:28;:::i;:::-;2444:5;2434:15;;;2140:315;;;;;:::o;2912:241::-;2968:6;3021:2;3009:9;3000:7;2996:23;2992:32;2989:52;;;3037:1;3034;3027:12;2989:52;3076:9;3063:23;3095:28;3117:5;3095:28;:::i;3158:344::-;3360:2;3342:21;;;3399:2;3379:18;;;3372:30;-1:-1:-1;;;3433:2:1;3418:18;;3411:50;3493:2;3478:18;;3158:344::o;3507:184::-;3577:6;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;-1:-1:-1;3669:16:1;;3507:184;-1:-1:-1;3507:184:1:o;3696:127::-;3757:10;3752:3;3748:20;3745:1;3738:31;3788:4;3785:1;3778:15;3812:4;3809:1;3802:15;3828:128;3895:9;;;3916:11;;;3913:37;;;3930:18;;:::i;:::-;3828:128;;;;:::o;5369:135::-;5408:3;5429:17;;;5426:43;;5449:18;;:::i;:::-;-1:-1:-1;5496:1:1;5485:13;;5369:135::o;7542:168::-;7615:9;;;7646;;7663:15;;;7657:22;;7643:37;7633:71;;7684:18;;:::i;7715:217::-;7755:1;7781;7771:132;;7825:10;7820:3;7816:20;7813:1;7806:31;7860:4;7857:1;7850:15;7888:4;7885:1;7878:15;7771:132;-1:-1:-1;7917:9:1;;7715:217::o;7937:245::-;8004:6;8057:2;8045:9;8036:7;8032:23;8028:32;8025:52;;;8073:1;8070;8063:12;8025:52;8105:9;8099:16;8124:28;8146:5;8124:28;:::i;9005:250::-;9090:1;9100:113;9114:6;9111:1;9108:13;9100:113;;;9190:11;;;9184:18;9171:11;;;9164:39;9136:2;9129:10;9100:113;;;-1:-1:-1;;9247:1:1;9229:16;;9222:27;9005:250::o;9260:287::-;9389:3;9427:6;9421:13;9443:66;9502:6;9497:3;9490:4;9482:6;9478:17;9443:66;:::i;:::-;9525:16;;;;;9260:287;-1:-1:-1;;9260:287:1:o;9910:396::-;10059:2;10048:9;10041:21;10022:4;10091:6;10085:13;10134:6;10129:2;10118:9;10114:18;10107:34;10150:79;10222:6;10217:2;10206:9;10202:18;10197:2;10189:6;10185:15;10150:79;:::i;:::-;10290:2;10269:15;-1:-1:-1;;10265:29:1;10250:45;;;;10297:2;10246:54;;9910:396;-1:-1:-1;;9910:396:1:o

Swarm Source

ipfs://6bd0b203596b0717615eb4bdde5dc6e183fc49bff006658f0ce3feb0aa72f244

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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