Contract 0x800ecA21614dA02Df076981Bca9c664dBE19089A

 
Txn Hash Method
Block
From
To
Value
0xe65ce0ae17469f147a22485d7ef2ab28375ea88243098daae718ffbf50926cc10xb438bae1111778762020-11-02 13:20:09187 days 1 hr ago0xfea866bb84f652a7198c87b2d1cd917f6bd0e01a IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.01350783539455.000001605
0xd51b3ffe6a50a72276176db91a3a38f290cca4eb5640e558320b088f3f9293810xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0xc9230b9d9bc73db2b34fec33186f6f1ce8851fa8 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0x3588c455474266d2a168cf82b3f9dbf9094e867c69aa212210cc6a9d461f4eb60xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0xc9468f11b2efa68901a7d017da4199f74e9b9688 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.0223612488
0x6e49489f71dee1f33bea4ee55e8023ee3c35fb920c5974d46b38b203c16c304a0xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0x578627473d4b39560ca40952d500ba228aced647 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0x9dfa21fe56e05231660698a4db847a2be8c1769ea4eb843886e8042e9b2ed5d80xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0xd5182c269955682c41edcbab24d684a39410f66c IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0xd0ffc621c4616c23f40dad9d38a3348583769e7a29bf0dc292eb953d6037cdb10xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0x93b522707b40dc4b0483681d5641dbf9782d3387 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.0223612488
0xd752cacb9cb0780273235f1160e8ef25a62d706df4d862a86ce593ccaae6a3f30xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0x616825d90c8bd19c3d4a961221ea80a936690e47 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0xd919838bd86ffbdcc0c24018bf674051f1d83efbc9296877586cf422646c47490xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0xd34b288b2a16942bc3a85e4bc18842019a23617f IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0x050ab9026004d0570fd549d814df67d6bd7652ea53e5a6934cd4ce1c0a58aaf30xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0x096c59fbbde5a74d5090ed3ea306cce33e307e2a IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0x49009cf28584d2a319d2dfbeae2d9ad927a6e4a25e1b75de0573687916ed9c800xb438bae1110475512020-10-13 13:24:51207 days 1 hr ago0x95b9ce4c74ccd5a462b63bb75e57279e52979525 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.0223612488
0x38eee6454f3f158346eccd32987e1ad98b36d873ce1e7b28e9b99fb3ed4c5b130xb438bae1110475442020-10-13 13:24:15207 days 1 hr ago0x616825d90c8bd19c3d4a961221ea80a936690e47 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0xd5be18c5b01de5c6ade183205ff7e617b52173abfcbc00668ae2c704cb247bb40xb438bae1110475442020-10-13 13:24:15207 days 1 hr ago0xd5182c269955682c41edcbab24d684a39410f66c IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0xdb39539ee4857b41ad7ce3ff660954ee51a6657c98ef63ad3a299900f5d180fa0xb438bae1110475442020-10-13 13:24:15207 days 1 hr ago0x096c59fbbde5a74d5090ed3ea306cce33e307e2a IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0xeca8043ff1723b1b76b92d9b6eb91a23e7a76e51b183ed9c0abb350c6b8019030xb438bae1110475442020-10-13 13:24:15207 days 1 hr ago0xd34b288b2a16942bc3a85e4bc18842019a23617f IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0xfdf4df22d822bec8fcbc82c354252384ad721279ff45c70a62bbe422e2e744a00xb438bae1110475442020-10-13 13:24:15207 days 1 hr ago0x95b9ce4c74ccd5a462b63bb75e57279e52979525 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0x93da0845aef0f0f93a00f798ac3ddf94861aca5865540b32308b378529079f5d0xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0x096c59fbbde5a74d5090ed3ea306cce33e307e2a IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0x151c667c236fd1c090370ad26f5ceed3961638ed5e42776d911e3dbfab380ca30xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0xf383771bf5ba42b85996a73d79b6902eb4d4435e IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0x490428c9b53890e3249d0d3c8d09cc166f39af2f755c1cc6232bd536be699fb20xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0xc9230b9d9bc73db2b34fec33186f6f1ce8851fa8 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0x95c3f55453a4f5aa3c0570615eb55b030a103e1d114ba840b127da7528cc1acc0xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0x93b522707b40dc4b0483681d5641dbf9782d3387 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0x70bfbc8e35602a7843df98ee06aa2e43ad980da3b8a74bbc527c310f44423bbe0xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0xd5182c269955682c41edcbab24d684a39410f66c IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.0223612488
0x3eb637a4870f70eab29976941fe4d38f010d871a0f9ed8b2aa1c8c2043c1d7530xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0xfad43c604e78fb899144fba716c68052ac163521 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0x215e945994bc09bf92e0c75d688867a573094df38cecffd79adc2902e1d8e0bb0xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0x92cd44667190d29f5dd152f649cc718fe103c46e IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0x39de6dbb2d223318ec14fd8a55507f4a35d7ec0d49bd657e5c67cae481801ae60xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0x578627473d4b39560ca40952d500ba228aced647 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
0xeaa41105676046e7231590a02b8dbbd1422021eedb403f7279ff5e09c79ff4e70xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0xc9468f11b2efa68901a7d017da4199f74e9b9688 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236335288
0xea464d88e4244712e38c0014f06771a22ec459001cde10e10b81abf5ca4c82540xb438bae1110475392020-10-13 13:23:16207 days 1 hr ago0x95b9ce4c74ccd5a462b63bb75e57279e52979525 IN  0x800eca21614da02df076981bca9c664dbe19089a0 Ether0.02236229688
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ActionsGateway

Compiler Version
v0.6.1+commit.e6f7d5a4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-26
*/

pragma solidity 0.6.1;
pragma experimental ABIEncoderV2;


interface Proxy {

  
  function execute(
    address _target,
    address _a,
    address _b,
    uint256 _c
  )
    external;
    
}

interface Xcert {

  
  function create(
    address _to,
    uint256 _id,
    bytes32 _imprint
  )
    external;

  
  function setUri(
    string calldata _uriPrefix,
    string calldata _uriPostfix
  )
    external;

}

library SafeMath {

  
  string constant OVERFLOW = "008001";
  string constant SUBTRAHEND_GREATER_THEN_MINUEND = "008002";
  string constant DIVISION_BY_ZERO = "008003";

  
  function mul(
    uint256 _factor1,
    uint256 _factor2
  )
    internal
    pure
    returns (uint256 product)
  {
    
    
    
    if (_factor1 == 0)
    {
      return 0;
    }

    product = _factor1 * _factor2;
    require(product / _factor1 == _factor2, OVERFLOW);
  }

  
  function div(
    uint256 _dividend,
    uint256 _divisor
  )
    internal
    pure
    returns (uint256 quotient)
  {
    
    require(_divisor > 0, DIVISION_BY_ZERO);
    quotient = _dividend / _divisor;
    
  }

  
  function sub(
    uint256 _minuend,
    uint256 _subtrahend
  )
    internal
    pure
    returns (uint256 difference)
  {
    require(_subtrahend <= _minuend, SUBTRAHEND_GREATER_THEN_MINUEND);
    difference = _minuend - _subtrahend;
  }

  
  function add(
    uint256 _addend1,
    uint256 _addend2
  )
    internal
    pure
    returns (uint256 sum)
  {
    sum = _addend1 + _addend2;
    require(sum >= _addend1, OVERFLOW);
  }

  
  function mod(
    uint256 _dividend,
    uint256 _divisor
  )
    internal
    pure
    returns (uint256 remainder)
  {
    require(_divisor != 0, DIVISION_BY_ZERO);
    remainder = _dividend % _divisor;
  }

}

contract Abilitable {
  using SafeMath for uint;

  
  string constant NOT_AUTHORIZED = "017001";
  string constant INVALID_INPUT = "017002";

  
  uint8 constant SUPER_ABILITY = 1;

  
  uint8 constant ALLOW_SUPER_ABILITY = 2;

  
  uint8 constant EMPTY_SLOT_1 = 4;

  
  uint8 constant EMPTY_SLOT_2 = 8;

  
  uint8 constant ALL_DEFAULT_ABILITIES = 15;

  
  mapping(address => uint256) public addressToAbility;

  
  event SetAbilities(
    address indexed _target,
    uint256 indexed _abilities
  );

  
  modifier hasAbilities(
    uint256 _abilities
  )
  {
    require(_abilities > 0, INVALID_INPUT);
    require(
      addressToAbility[msg.sender] & _abilities == _abilities,
      NOT_AUTHORIZED
    );
    _;
  }

  
  constructor()
    public
  {
    addressToAbility[msg.sender] = ALL_DEFAULT_ABILITIES;
  }

  
  function grantAbilities(
    address _target,
    uint256 _abilities
  )
    external
    hasAbilities(SUPER_ABILITY)
  {
    addressToAbility[_target] |= _abilities;
    emit SetAbilities(_target, addressToAbility[_target]);
  }

  
  function revokeAbilities(
    address _target,
    uint256 _abilities
  )
    external
    hasAbilities(SUPER_ABILITY)
  {
    addressToAbility[_target] &= ~_abilities;
    emit SetAbilities(_target, addressToAbility[_target]);
  }

  
  function setAbilities(
    address _target,
    uint256 _abilities
  )
    external
    hasAbilities(SUPER_ABILITY)
  {
    addressToAbility[_target] = _abilities;
    emit SetAbilities(_target, _abilities);
  }

  
  function isAble(
    address _target,
    uint256 _abilities
  )
    external
    view
    returns (bool)
  {
    require(_abilities > 0, INVALID_INPUT);
    return (addressToAbility[_target] & _abilities) == _abilities;
  }

}

contract XcertCreateProxy is
  Abilitable
{

  
  uint8 constant ABILITY_TO_EXECUTE = 16;

  
  function create(
    address _xcert,
    address _to,
    uint256 _id,
    bytes32 _tokenURIIntegrityDigest
  )
    external
    hasAbilities(ABILITY_TO_EXECUTE)
  {
    Xcert(_xcert).create(_to, _id, _tokenURIIntegrityDigest);
  }

}

interface XcertBurnable {

  
  function destroy(
    uint256 _tokenId
  )
    external;

}

contract XcertBurnProxy is
  Abilitable
{

  
  uint8 constant ABILITY_TO_EXECUTE = 16;

  
  function destroy(
    address _xcert,
    uint256 _id
  )
    external
    hasAbilities(ABILITY_TO_EXECUTE)
  {
    XcertBurnable(_xcert).destroy(_id);
  }

}

interface XcertMutable {

  
  function updateTokenURIIntegrityDigest(
    uint256 _tokenId,
    bytes32 _tokenURIIntegrityDigest
  )
    external;

}

contract XcertUpdateProxy is
  Abilitable
{

  
  uint8 constant ABILITY_TO_EXECUTE = 16;

  
  function update(
    address _xcert,
    uint256 _id,
    bytes32 _tokenURIIntegrityDigest
  )
    external
    hasAbilities(ABILITY_TO_EXECUTE)
  {
    XcertMutable(_xcert).updateTokenURIIntegrityDigest(_id, _tokenURIIntegrityDigest);
  }

}

contract AbilitableManageProxy is
  Abilitable
{

  
  uint8 constant ABILITY_TO_EXECUTE = 16;

  
  function set(
    address _target,
    address _to,
    uint256 _abilities
  )
    public
    hasAbilities(ABILITY_TO_EXECUTE)
  {
    Abilitable(_target).setAbilities(_to, _abilities);
  }

}

library BytesType {
  
  function toAddress(
    uint _offst,
    bytes memory _input
  )
    internal
    pure
  returns (address _output)
  {
    assembly { _output := mload(add(_input, _offst)) } 
  }

  
  function toBool(
    uint _offst,
    bytes memory _input
  )
    internal
    pure
    returns (bool _output)
  {
    uint8 x;
    assembly { x := mload(add(_input, _offst)) } 
    if (x == 0) {
      _output = false;
    } else {
      _output = true;
    }
  }

  
  function toBytes32(
    uint _offst,
    bytes memory _input
  )
    internal
    pure
    returns (bytes32 _output)
  {
    assembly { _output := mload(add(_input, _offst)) } 
  }

  
  function toUint8(
    uint _offst,
    bytes memory _input
  )
    internal
    pure
    returns (uint8 _output)
  {
    assembly { _output := mload(add(_input, _offst)) } 
  }

  
  function toUint16(
    uint _offst,
    bytes memory _input
  )
    internal
    pure
    returns (uint16 _output)
  {
    assembly { _output := mload(add(_input, _offst)) } 
  }

  
  function toUint256(
    uint _offst,
    bytes memory _input
  )
    internal
    pure
    returns (uint256 _output)
  {
    assembly { _output := mload(add(_input, _offst)) } 
  }
}

interface ERC721 {

  
  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 indexed _tokenId
  );

  
  event Approval(
    address indexed _owner,
    address indexed _approved,
    uint256 indexed _tokenId
  );

  
  event ApprovalForAll(
    address indexed _owner,
    address indexed _operator,
    bool _approved
  );

  
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes calldata _data
  )
    external;

  
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  
  function approve(
    address _approved,
    uint256 _tokenId
  )
    external;

  
  function setApprovalForAll(
    address _operator,
    bool _approved
  )
    external;

  
  function balanceOf(
    address _owner
  )
    external
    view
    returns (uint256);

  
  function ownerOf(
    uint256 _tokenId
  )
    external
    view
    returns (address);

  
  function getApproved(
    uint256 _tokenId
  )
    external
    view
    returns (address);

  
  function isApprovedForAll(
    address _owner,
    address _operator
  )
    external
    view
    returns (bool);

}

contract ActionsGateway is
  Abilitable
{

  
  uint8 constant ABILITY_TO_SET_PROXIES = 16;

  
  uint8 constant ABILITY_ALLOW_MANAGE_ABILITIES = 2;
  uint16 constant ABILITY_ALLOW_CREATE_ASSET = 512;
  uint16 constant ABILITY_ALLOW_UPDATE_ASSET = 1024;

  
  string constant INVALID_SIGNATURE_KIND = "015001";
  string constant INVALID_PROXY = "015002";
  string constant SENDER_NOT_A_SIGNER = "015003";
  string constant CLAIM_EXPIRED = "015004";
  string constant INVALID_SIGNATURE = "015005";
  string constant ORDER_CANCELED = "015006";
  string constant ORDER_ALREADY_PERFORMED = "015007";
  string constant SIGNERS_DOES_NOT_INCLUDE_SENDER = "015008";
  string constant SIGNER_DOES_NOT_HAVE_ALLOW_CREATE_ASSET_ABILITY = "015009";
  string constant SIGNER_DOES_NOT_HAVE_ALLOW_UPDATE_ASSET_ABILITY = "015010";
  string constant SIGNER_DOES_NOT_HAVE_ALLOW_MANAGE_ABILITIES_ABILITY = "015011";
  string constant SIGNER_IS_NOT_DESTROY_ASSET_OWNER = "015012";

  
  uint8 constant ACTION_CREATE_BYTES_FROM_INDEX = 85;
  uint8 constant ACTION_CREATE_BYTES_RECEIVER = 84;
  uint8 constant ACTION_CREATE_BYTES_ID = 64;
  uint8 constant ACTION_CREATE_BYTES_IMPRINT = 32;
  uint8 constant ACTION_TRANSFER_BYTES_FROM_INDEX = 53;
  uint8 constant ACTION_TRANSFER_BYTES_RECEIVER = 52;
  uint8 constant ACTION_TRANSFER_BYTES_ID = 32;
  uint8 constant ACTION_UPDATE_BYTES_FROM_INDEX = 65;
  uint8 constant ACTION_UPDATE_BYTES_ID = 64;
  uint8 constant ACTION_UPDATE_BYTES_IMPRINT = 32;
  uint8 constant ACTION_MANAGE_ABILITIES_BYTES_FROM_INDEX = 53;
  uint8 constant ACTION_MANAGE_ABILITIES_BYTES_RECEIVER = 52;
  uint8 constant ACTION_MANAGE_ABILITIES_BYTES_ABILITIES = 32;
  uint8 constant ACTION_BURN_BYTES_FROM_INDEX = 33;
  uint8 constant ACTION_BURN_BYTES_ID = 32;

  
  enum SignatureKind
  {
    eth_sign,
    trezor,
    no_prefix
  }

  
  enum ActionKind
  {
    create,
    transfer,
    update,
    manage_abilities,
    burn
  }

  
  struct ProxyData
  {
    address proxyAddress;
    ActionKind kind;
  }

  
  struct ActionData
  {
    uint32 proxyId;
    address contractAddress;
    bytes params;
  }

  
  struct SignatureData
  {
    bytes32 r;
    bytes32 s;
    uint8 v;
    SignatureKind kind;
  }

  
  struct OrderData
  {
    address[] signers;
    ActionData[] actions;
    uint256 seed;
    uint256 expiration;
  }

  
  ProxyData[] public proxies;

  
  mapping(bytes32 => bool) public orderCancelled;

  
  mapping(bytes32 => bool) public orderPerformed;

  
  event Perform(
    bytes32 indexed _claim
  );

  
  event Cancel(
    bytes32 indexed _claim
  );

  
  event ProxyChange(
    uint256 indexed _index,
    address _proxy
  );

  
  function addProxy(
    address _proxy,
    ActionKind _kind
  )
    external
    hasAbilities(ABILITY_TO_SET_PROXIES)
  {
    proxies.push(ProxyData(_proxy, _kind));
    emit ProxyChange(proxies.length - 1, _proxy);
  }

  
  function removeProxy(
    uint256 _index
  )
    external
    hasAbilities(ABILITY_TO_SET_PROXIES)
  {
    proxies[_index].proxyAddress = address(0);
    emit ProxyChange(_index, address(0));
  }

  
  function perform(
    OrderData memory _data,
    SignatureData[] memory _signatures
  )
    public
  {
    require(_data.expiration > now, CLAIM_EXPIRED);
    bytes32 claim = getOrderDataClaim(_data);
    
    
    
    
    uint256 signersLength = _data.signers.length - 1;
    
    address anyAddress;
    
    
    if (_data.signers[signersLength] == address(0))
    {
      
      
      if (signersLength == _signatures.length) {
        anyAddress = msg.sender;
      } else {
        anyAddress = recoverSigner(claim, _signatures[signersLength]);
      }
      _data.signers[signersLength] = anyAddress;
      
      
    } else if (signersLength == _signatures.length) {
      require(_data.signers[signersLength] == msg.sender, SENDER_NOT_A_SIGNER);
      
    } else { 
      signersLength += 1;
    }

    for (uint8 i = 0; i < signersLength; i++)
    {
      require(
        isValidSignature(
          _data.signers[i],
          claim,
          _signatures[i]
        ),
        INVALID_SIGNATURE
      );
    }

    require(!orderCancelled[claim], ORDER_CANCELED);
    require(!orderPerformed[claim], ORDER_ALREADY_PERFORMED);

    orderPerformed[claim] = true;
    _doActionsReplaceZeroAddress(_data, anyAddress);

    emit Perform(claim);
  }

  
  function cancel(
    OrderData memory _data
  )
    public
  {
    bool present = false;
    for (uint8 i = 0; i < _data.signers.length; i++) {
      if (_data.signers[i] == msg.sender) {
        present = true;
        break;
      }
    }
    require(present, SIGNERS_DOES_NOT_INCLUDE_SENDER);

    bytes32 claim = getOrderDataClaim(_data);
    require(!orderPerformed[claim], ORDER_ALREADY_PERFORMED);

    orderCancelled[claim] = true;
    emit Cancel(claim);
  }

  
  function getOrderDataClaim(
    OrderData memory _orderData
  )
    public
    view
    returns (bytes32)
  {
    bytes32 actionsHash = 0x0;

    for(uint256 i = 0; i < _orderData.actions.length; i++)
    {
      actionsHash = keccak256(
        abi.encodePacked(
          actionsHash,
          _orderData.actions[i].proxyId,
          _orderData.actions[i].contractAddress,
          _orderData.actions[i].params
        )
      );
    }

    return keccak256(
      abi.encodePacked(
        address(this),
        _orderData.signers,
        actionsHash,
        _orderData.seed,
        _orderData.expiration
      )
    );
  }

  
  function isValidSignature(
    address _signer,
    bytes32 _claim,
    SignatureData memory _signature
  )
    public
    pure
    returns (bool)
  {
    return _signer == recoverSigner(_claim, _signature);
  }

  
  function recoverSigner(
    bytes32 _claim,
    SignatureData memory _signature
  )
    public
    pure
    returns (address)
  {
    if (_signature.kind == SignatureKind.eth_sign)
    {
      return ecrecover(
        keccak256(
          abi.encodePacked(
            "\x19Ethereum Signed Message:\n32",
            _claim
          )
        ),
        _signature.v,
        _signature.r,
        _signature.s
      );
    } else if (_signature.kind == SignatureKind.trezor)
    {
      return ecrecover(
        keccak256(
          abi.encodePacked(
            "\x19Ethereum Signed Message:\n\x20",
            _claim
          )
        ),
        _signature.v,
        _signature.r,
        _signature.s
      );
    } else if (_signature.kind == SignatureKind.no_prefix)
    {
      return ecrecover(
        _claim,
        _signature.v,
        _signature.r,
        _signature.s
      );
    }

    revert(INVALID_SIGNATURE_KIND);
  }

  
  function _doActionsReplaceZeroAddress(
    OrderData memory _order,
    address _anyAddress
  )
    private
  {
    for(uint256 i = 0; i < _order.actions.length; i++)
    {
      require(
        proxies[_order.actions[i].proxyId].proxyAddress != address(0),
        INVALID_PROXY
      );

      if (proxies[_order.actions[i].proxyId].kind == ActionKind.create)
      {
        require(
          Abilitable(_order.actions[i].contractAddress).isAble(
            _order.signers[
              BytesType.toUint8(ACTION_CREATE_BYTES_FROM_INDEX, _order.actions[i].params)
            ],
            ABILITY_ALLOW_CREATE_ASSET
          ),
          SIGNER_DOES_NOT_HAVE_ALLOW_CREATE_ASSET_ABILITY
        );

        address to = BytesType.toAddress(ACTION_CREATE_BYTES_RECEIVER, _order.actions[i].params);
        if (to == address(0)) {
          to = _anyAddress;
        }

        XcertCreateProxy(proxies[_order.actions[i].proxyId].proxyAddress).create(
          _order.actions[i].contractAddress,
          to,
          BytesType.toUint256(ACTION_CREATE_BYTES_ID, _order.actions[i].params),
          BytesType.toBytes32(ACTION_CREATE_BYTES_IMPRINT, _order.actions[i].params)
        );
      }
      else if (proxies[_order.actions[i].proxyId].kind == ActionKind.transfer)
      {
        address from = _order.signers[
          BytesType.toUint8(ACTION_TRANSFER_BYTES_FROM_INDEX, _order.actions[i].params)
        ];
        address to = BytesType.toAddress(ACTION_TRANSFER_BYTES_RECEIVER, _order.actions[i].params);
        if (to == address(0)) {
          to = _anyAddress;
        }

        Proxy(proxies[_order.actions[i].proxyId].proxyAddress).execute(
          _order.actions[i].contractAddress,
          from,
          to,
          BytesType.toUint256(ACTION_TRANSFER_BYTES_ID, _order.actions[i].params)
        );
      }
      else if (proxies[_order.actions[i].proxyId].kind == ActionKind.update)
      {
        require(
          Abilitable(_order.actions[i].contractAddress).isAble(
            _order.signers[
              BytesType.toUint8(ACTION_UPDATE_BYTES_FROM_INDEX, _order.actions[i].params)
            ],
            ABILITY_ALLOW_UPDATE_ASSET
          ),
          SIGNER_DOES_NOT_HAVE_ALLOW_UPDATE_ASSET_ABILITY
        );

        XcertUpdateProxy(proxies[_order.actions[i].proxyId].proxyAddress).update(
          _order.actions[i].contractAddress,
          BytesType.toUint256(ACTION_UPDATE_BYTES_ID, _order.actions[i].params),
          BytesType.toBytes32(ACTION_UPDATE_BYTES_IMPRINT, _order.actions[i].params)
        );
      }
      else if (proxies[_order.actions[i].proxyId].kind == ActionKind.manage_abilities)
      {
        require(
          Abilitable(_order.actions[i].contractAddress).isAble(
            _order.signers[
              BytesType.toUint8(ACTION_MANAGE_ABILITIES_BYTES_FROM_INDEX, _order.actions[i].params)
            ],
            ABILITY_ALLOW_MANAGE_ABILITIES
          ),
          SIGNER_DOES_NOT_HAVE_ALLOW_MANAGE_ABILITIES_ABILITY
        );

        address to = BytesType.toAddress(
          ACTION_MANAGE_ABILITIES_BYTES_RECEIVER,
          _order.actions[i].params
        );

        if (to == address(0)) {
          to = _anyAddress;
        }

        AbilitableManageProxy(proxies[_order.actions[i].proxyId].proxyAddress).set(
          _order.actions[i].contractAddress,
          to,
          BytesType.toUint256(ACTION_MANAGE_ABILITIES_BYTES_ABILITIES, _order.actions[i].params)
        );
      } else if (proxies[_order.actions[i].proxyId].kind == ActionKind.burn)
      {
        uint256 id = BytesType.toUint256(ACTION_BURN_BYTES_ID, _order.actions[i].params);
        require(
          _order.signers[
            BytesType.toUint8(ACTION_BURN_BYTES_FROM_INDEX, _order.actions[i].params)
          ] == ERC721(_order.actions[i].contractAddress).ownerOf(id),
          SIGNER_IS_NOT_DESTROY_ASSET_OWNER
        );

        XcertBurnProxy(proxies[_order.actions[i].proxyId].proxyAddress).destroy(
          _order.actions[i].contractAddress,
          id
        );
      }
    }
  }

}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_claim","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_claim","type":"bytes32"}],"name":"Perform","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_index","type":"uint256"},{"indexed":false,"internalType":"address","name":"_proxy","type":"address"}],"name":"ProxyChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"SetAbilities","type":"event"},{"inputs":[{"internalType":"address","name":"_proxy","type":"address"},{"internalType":"enum ActionsGateway.ActionKind","name":"_kind","type":"uint8"}],"name":"addProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToAbility","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"components":[{"internalType":"uint32","name":"proxyId","type":"uint32"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ActionsGateway.ActionData[]","name":"actions","type":"tuple[]"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct ActionsGateway.OrderData","name":"_data","type":"tuple"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"components":[{"internalType":"uint32","name":"proxyId","type":"uint32"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ActionsGateway.ActionData[]","name":"actions","type":"tuple[]"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct ActionsGateway.OrderData","name":"_orderData","type":"tuple"}],"name":"getOrderDataClaim","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"grantAbilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"isAble","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes32","name":"_claim","type":"bytes32"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"enum ActionsGateway.SignatureKind","name":"kind","type":"uint8"}],"internalType":"struct ActionsGateway.SignatureData","name":"_signature","type":"tuple"}],"name":"isValidSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orderCancelled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orderPerformed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"components":[{"internalType":"uint32","name":"proxyId","type":"uint32"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ActionsGateway.ActionData[]","name":"actions","type":"tuple[]"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct ActionsGateway.OrderData","name":"_data","type":"tuple"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"enum ActionsGateway.SignatureKind","name":"kind","type":"uint8"}],"internalType":"struct ActionsGateway.SignatureData[]","name":"_signatures","type":"tuple[]"}],"name":"perform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proxies","outputs":[{"internalType":"address","name":"proxyAddress","type":"address"},{"internalType":"enum ActionsGateway.ActionKind","name":"kind","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_claim","type":"bytes32"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"enum ActionsGateway.SignatureKind","name":"kind","type":"uint8"}],"internalType":"struct ActionsGateway.SignatureData","name":"_signature","type":"tuple"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"removeProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"revokeAbilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_abilities","type":"uint256"}],"name":"setAbilities","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040908152336000908152602081905220600f90556121e4806100256000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638fa76d8d11610097578063b6865c4d11610066578063b6865c4d1461020b578063ba00a3301461021e578063d981e73614610231578063f394b6df14610244576100f5565b80638fa76d8d146101a4578063a34e6721146101b7578063abd90f85146101d7578063b438bae1146101f8576100f5565b80633ab7d841116100d35780633ab7d8411461013557806345a32c86146101485780635889bf5e146101715780635f2aa50314610191576100f5565b80630ab319e8146100fa57806315ec3b8b1461010f57806338a9bfcd14610122575b600080fd5b61010d610108366004611ca0565b610257565b005b61010d61011d366004611ca0565b610325565b61010d610130366004611d2f565b6103da565b61010d610143366004611ceb565b61050a565b61015b610156366004611be8565b6105ec565b6040516101689190612083565b60405180910390f35b61018461017f366004611ceb565b6105fe565b6040516101689190612078565b61015b61019f366004611d2f565b610613565b6101846101b2366004611c27565b6106f3565b6101ca6101c5366004611d03565b61071c565b6040516101689190611f53565b6101ea6101e5366004611ceb565b610869565b604051610168929190611fde565b61010d610206366004611d6a565b61089b565b61010d610219366004611c65565b610b83565b61018461022c366004611ca0565b610cbd565b61018461023f366004611ceb565b610d22565b61010d610252366004611ca0565b610d37565b60408051808201909152600681526518189b98181960d11b6020820152600190610285565b60405180910390fd5b503360009081526020818152604091829020548251808401909352600683526530313730303160d01b91830191909152821682146102d65760405162461bcd60e51b815260040161027c91906120aa565b506001600160a01b038316600081815260208190526040808220805486179081905590519092917fd1d59d2d212a435434e7a4a4676427610dfe2b6268b01e541d280d65bf3d6b9091a3505050565b60408051808201825260068082526518189b98181960d11b6020928301523360009081528083528390205483518085019094529083526530313730303160d01b9183019190915260019190821682146103915760405162461bcd60e51b815260040161027c91906120aa565b506001600160a01b038316600081815260208190526040808220859055518492917fd1d59d2d212a435434e7a4a4676427610dfe2b6268b01e541d280d65bf3d6b9091a3505050565b6000805b82515160ff82161015610427578251805133919060ff84169081106103ff57fe5b60200260200101516001600160a01b0316141561041f5760019150610427565b6001016103de565b50604080518082019091526006815265060626a6060760d31b6020820152816104635760405162461bcd60e51b815260040161027c91906120aa565b50600061046f83610613565b600081815260036020908152604091829020548251808401909352600683526530313530303760d01b918301919091529192509060ff16156104c45760405162461bcd60e51b815260040161027c91906120aa565b50600081815260026020526040808220805460ff191660011790555182917fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a91a2505050565b60408051808201825260068082526518189b98181960d11b6020928301523360009081528083528390205483518085019094529083526530313730303160d01b9183019190915260109190821682146105765760405162461bcd60e51b815260040161027c91906120aa565b5060006001838154811061058657fe5b6000918252602082200180546001600160a01b0319166001600160a01b03939093169290921790915560405183917f8edda873a8ad561ecebeb71ceb3ae6bcb70c2b76a3fcb869859895c4d4fc7416916105e09190611f53565b60405180910390a25050565b60006020819052908152604090205481565b60026020526000908152604090205460ff1681565b600080805b8360200151518110156106af57818460200151828151811061063657fe5b6020026020010151600001518560200151838151811061065257fe5b6020026020010151602001518660200151848151811061066e57fe5b60200260200101516040015160405160200161068d9493929190611e9f565b60408051601f1981840301815291905280516020909101209150600101610618565b5030836000015182856040015186606001516040516020016106d5959493929190611e34565b60405160208183030381529060405280519060200120915050919050565b60006106ff838361071c565b6001600160a01b0316846001600160a01b03161490509392505050565b6000808260600151600281111561072f57fe5b14156107bd576001836040516020016107489190611ef1565b604051602081830303815290604052805190602001208360400151846000015185602001516040516000815260200160405260405161078a949392919061208c565b6020604051602081039080840390855afa1580156107ac573d6000803e3d6000fd5b505050602060405103519050610863565b6001826060015160028111156107cf57fe5b14156107e8576001836040516020016107489190611f22565b6002826060015160028111156107fa57fe5b141561082f576001838360400151846000015185602001516040516000815260200160405260405161078a949392919061208c565b604080518082018252600681526530313530303160d01b6020820152905162461bcd60e51b815261027c91906004016120aa565b92915050565b6001818154811061087657fe5b6000918252602090912001546001600160a01b0381169150600160a01b900460ff1682565b42826060015111604051806040016040528060068152602001650c0c4d4c0c0d60d21b815250906108df5760405162461bcd60e51b815260040161027c91906120aa565b5060006108eb83610613565b8351805191925060001982019160009182918490811061090757fe5b60200260200101516001600160a01b0316141561098457835182141561092e57503361094e565b61094b8385848151811061093e57fe5b602002602001015161071c565b90505b808560000151838151811061095f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506109fa565b83518214156109f357845180513391908490811061099e57fe5b60200260200101516001600160a01b0316146040518060400160405280600681526020016530313530303360d01b815250906109ed5760405162461bcd60e51b815260040161027c91906120aa565b506109fa565b6001820191505b60005b828160ff161015610a8957610a4386600001518260ff1681518110610a1e57fe5b602002602001015185878460ff1681518110610a3657fe5b60200260200101516106f3565b6040518060400160405280600681526020016530313530303560d01b81525090610a805760405162461bcd60e51b815260040161027c91906120aa565b506001016109fd565b50600083815260026020908152604091829020548251808401909352600683526518189a98181b60d11b9183019190915260ff1615610adb5760405162461bcd60e51b815260040161027c91906120aa565b50600083815260036020908152604091829020548251808401909352600683526530313530303760d01b9183019190915260ff1615610b2d5760405162461bcd60e51b815260040161027c91906120aa565b506000838152600360205260409020805460ff19166001179055610b518582610df3565b60405183907fa4be90ab47bcea0c591eaa7dd28b8ba0329e7ebddac48c5f2ca9fed68d08cf0890600090a25050505050565b60408051808201825260068082526518189b98181960d11b6020928301523360009081528083528390205483518085019094529083526530313730303160d01b918301919091526010919082168214610bef5760405162461bcd60e51b815260040161027c91906120aa565b5060016040518060400160405280856001600160a01b03168152602001846004811115610c1857fe5b9052815460018101835560009283526020928390208251910180546001600160a01b0319166001600160a01b0390921691909117808255928201519192909190829060ff60a01b1916600160a01b836004811115610c7257fe5b0217905550505060018080549050037f8edda873a8ad561ecebeb71ceb3ae6bcb70c2b76a3fcb869859895c4d4fc741684604051610cb09190611f53565b60405180910390a2505050565b60008082116040518060400160405280600681526020016518189b98181960d11b81525090610cff5760405162461bcd60e51b815260040161027c91906120aa565b50506001600160a01b039190911660009081526020819052604090205481161490565b60036020526000908152604090205460ff1681565b60408051808201825260068082526518189b98181960d11b6020928301523360009081528083528390205483518085019094529083526530313730303160d01b918301919091526001919082168214610da35760405162461bcd60e51b815260040161027c91906120aa565b506001600160a01b03831660008181526020819052604080822080548619169081905590519092917fd1d59d2d212a435434e7a4a4676427610dfe2b6268b01e541d280d65bf3d6b9091a3505050565b60005b82602001515181101561198a5760006001600160a01b0316600184602001518381518110610e2057fe5b60200260200101516000015163ffffffff1681548110610e3c57fe5b6000918252602091829020015460408051808201909152600681526518189a98181960d11b9281019290925290916001600160a01b039091161415610e945760405162461bcd60e51b815260040161027c91906120aa565b506000600184602001518381518110610ea957fe5b60200260200101516000015163ffffffff1681548110610ec557fe5b600091825260209091200154600160a01b900460ff166004811115610ee657fe5b14156111265782602001518181518110610efc57fe5b6020026020010151602001516001600160a01b031663ba00a3308460000151610f44605560ff1687602001518681518110610f3357fe5b60200260200101516040015161198f565b60ff1681518110610f5157fe5b60200260200101516102006040518363ffffffff1660e01b8152600401610f79929190612005565b60206040518083038186803b158015610f9157600080fd5b505afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fc99190810190611ccb565b6040518060400160405280600681526020016530313530303960d01b815250906110065760405162461bcd60e51b815260040161027c91906120aa565b506000611021605460ff1685602001518481518110610f3357fe5b90506001600160a01b0381166110345750815b60018460200151838151811061104657fe5b60200260200101516000015163ffffffff168154811061106257fe5b600091825260209182902001549085015180516001600160a01b03909216916346009b0e91908590811061109257fe5b602002602001015160200151836110b7604060ff1689602001518881518110610f3357fe5b6110cf602060ff168a602001518981518110610f3357fe5b6040518563ffffffff1660e01b81526004016110ee9493929190611fb5565b600060405180830381600087803b15801561110857600080fd5b505af115801561111c573d6000803e3d6000fd5b5050505050611982565b6001808460200151838151811061113957fe5b60200260200101516000015163ffffffff168154811061115557fe5b600091825260209091200154600160a01b900460ff16600481111561117657fe5b14156112bb576000836000015161119b603560ff1686602001518581518110610f3357fe5b60ff16815181106111a857fe5b6020026020010151905060006111cc603460ff1686602001518581518110610f3357fe5b90506001600160a01b0381166111df5750825b6001856020015184815181106111f157fe5b60200260200101516000015163ffffffff168154811061120d57fe5b600091825260209182902001549086015180516001600160a01b039092169163239aee0691908690811061123d57fe5b6020026020010151602001518484611263602060ff168b602001518a81518110610f3357fe5b6040518563ffffffff1660e01b81526004016112829493929190611f67565b600060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b505050505050611982565b60026001846020015183815181106112cf57fe5b60200260200101516000015163ffffffff16815481106112eb57fe5b600091825260209091200154600160a01b900460ff16600481111561130c57fe5b141561150b578260200151818151811061132257fe5b6020026020010151602001516001600160a01b031663ba00a3308460000151611359604160ff1687602001518681518110610f3357fe5b60ff168151811061136657fe5b60200260200101516104006040518363ffffffff1660e01b815260040161138e929190612005565b60206040518083038186803b1580156113a657600080fd5b505afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113de9190810190611ccb565b6040518060400160405280600681526020016503031353031360d41b8152509061141b5760405162461bcd60e51b815260040161027c91906120aa565b5060018360200151828151811061142e57fe5b60200260200101516000015163ffffffff168154811061144a57fe5b600091825260209182902001549084015180516001600160a01b039092169163760f9d8691908490811061147a57fe5b60200260200101516020015161149e604060ff1687602001518681518110610f3357fe5b6114b6602060ff1688602001518781518110610f3357fe5b6040518463ffffffff1660e01b81526004016114d49392919061203b565b600060405180830381600087803b1580156114ee57600080fd5b505af1158015611502573d6000803e3d6000fd5b50505050611982565b600360018460200151838151811061151f57fe5b60200260200101516000015163ffffffff168154811061153b57fe5b600091825260209091200154600160a01b900460ff16600481111561155c57fe5b1415611739578260200151818151811061157257fe5b6020026020010151602001516001600160a01b031663ba00a33084600001516115a9603560ff1687602001518681518110610f3357fe5b60ff16815181106115b657fe5b602002602001015160026040518363ffffffff1660e01b81526004016115dd92919061205c565b60206040518083038186803b1580156115f557600080fd5b505afa158015611609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061162d9190810190611ccb565b6040518060400160405280600681526020016530313530313160d01b8152509061166a5760405162461bcd60e51b815260040161027c91906120aa565b506000611685603460ff1685602001518481518110610f3357fe5b90506001600160a01b0381166116985750815b6001846020015183815181106116aa57fe5b60200260200101516000015163ffffffff16815481106116c657fe5b600091825260209182902001549085015180516001600160a01b03909216916319f02ceb9190859081106116f657fe5b6020026020010151602001518361171b602060ff1689602001518881518110610f3357fe5b6040518463ffffffff1660e01b81526004016110ee93929190611f91565b600460018460200151838151811061174d57fe5b60200260200101516000015163ffffffff168154811061176957fe5b600091825260209091200154600160a01b900460ff16600481111561178a57fe5b14156119825760006117aa602060ff1685602001518481518110610f3357fe5b9050836020015182815181106117bc57fe5b6020026020010151602001516001600160a01b0316636352211e826040518263ffffffff1660e01b81526004016117f39190612083565b60206040518083038186803b15801561180b57600080fd5b505afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118439190810190611c0b565b6001600160a01b03168460000151611869602160ff1687602001518681518110610f3357fe5b60ff168151811061187657fe5b60200260200101516001600160a01b0316146040518060400160405280600681526020016518189a98189960d11b815250906118c55760405162461bcd60e51b815260040161027c91906120aa565b506001846020015183815181106118d857fe5b60200260200101516000015163ffffffff16815481106118f457fe5b600091825260209182902001549085015180516001600160a01b039092169163a24835d191908590811061192457fe5b602002602001015160200151836040518363ffffffff1660e01b815260040161194e929190612022565b600060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b50505050505b600101610df6565b505050565b015190565b600082601f8301126119a4578081fd5b81356119b76119b282612104565b6120dd565b818152915060208083019084810160005b84811015611a9157813587016060818a03601f190112156119e857600080fd5b6119f260606120dd565b848201356119ff8161219c565b81526040820135611a0f81612184565b81860152606082013567ffffffffffffffff811115611a2d57600080fd5b8083018b603f820112611a3f57600080fd5b868101359350611a516119b285612124565b91508382528b6040858301011115611a6857600080fd5b611a788488840160408401612148565b50604082015285525092820192908201906001016119c8565b505050505092915050565b600060808284031215611aad578081fd5b611ab760806120dd565b9050813567ffffffffffffffff80821115611ad157600080fd5b81840185601f820112611ae357600080fd5b80359250611af36119b284612104565b808482526020808301925080840189828389028701011115611b1457600080fd5b600094505b86851015611b40578035611b2c81612184565b845260019490940193928101928101611b19565b5081875280880135955084861115611b5757600080fd5b611b6389878a01611994565b81880152505050505050604082013560408201526060820135606082015292915050565b600060808284031215611b98578081fd5b611ba260806120dd565b90508135815260208201356020820152604082013560ff81168114611bc657600080fd5b6040820152606082013560038110611bdd57600080fd5b606082015292915050565b600060208284031215611bf9578081fd5b8135611c0481612184565b9392505050565b600060208284031215611c1c578081fd5b8151611c0481612184565b600080600060c08486031215611c3b578182fd5b8335611c4681612184565b925060208401359150611c5c8560408601611b87565b90509250925092565b60008060408385031215611c77578182fd5b8235611c8281612184565b9150602083013560058110611c95578182fd5b809150509250929050565b60008060408385031215611cb2578182fd5b8235611cbd81612184565b946020939093013593505050565b600060208284031215611cdc578081fd5b81518015158114611c04578182fd5b600060208284031215611cfc578081fd5b5035919050565b60008060a08385031215611d15578182fd5b82359150611d268460208501611b87565b90509250929050565b600060208284031215611d40578081fd5b813567ffffffffffffffff811115611d56578182fd5b611d6284828501611a9c565b949350505050565b60008060408385031215611d7c578182fd5b823567ffffffffffffffff80821115611d93578384fd5b611d9f86838701611a9c565b93506020850135915080821115611db4578283fd5b5080840185601f820112611dc6578283fd5b80359150611dd66119b283612104565b8083825260208201915060208301886020608087028601011115611df8578586fd5b8593505b84841015611e2557611e0e8982611b87565b835260019390930192602090920191608001611dfc565b50809450505050509250929050565b606086901b6bffffffffffffffffffffffff191681528451600090601483019060208801835b82811015611e815781516001600160a01b0316845260209384019390910190600101611e5a565b50505094855250506020830191909152604082015260600192915050565b600085825263ffffffff60e01b8560e01b1660208301526bffffffffffffffffffffffff198460601b1660248301528251611ee1816038850160208701612154565b9190910160380195945050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b7f19457468657265756d205369676e6564204d6573736167653a0a2000000000008152601b810191909152603b0190565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03831681526040810160058310611ff857fe5b8260208301529392505050565b6001600160a01b0392909216825261ffff16602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0392909216825260ff16602082015260400190565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825282518060208401526120c9816040850160208701612154565b601f01601f19169190910160400192915050565b60405181810167ffffffffffffffff811182821017156120fc57600080fd5b604052919050565b600067ffffffffffffffff82111561211a578081fd5b5060209081020190565b600067ffffffffffffffff82111561213a578081fd5b50601f01601f191660200190565b82818337506000910152565b60005b8381101561216f578181015183820152602001612157565b8381111561217e576000848401525b50505050565b6001600160a01b038116811461219957600080fd5b50565b63ffffffff8116811461219957600080fdfea2646970667358221220ae62effa4ed4377964d04a7e641df69cee144444cd9d9b392339f26b9f66479764736f6c63430006010033

Deployed ByteCode Sourcemap

7978:11168:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7978:11168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2750:238;;;;;;;;;:::i;:::-;;3248:220;;;;;;;;;:::i;12540:486::-;;;;;;;;;:::i;11000:203::-;;;;;;;;;:::i;2255:51::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10450:46;;;;;;;;;:::i;:::-;;;;;;;;13036:663;;;;;;;;;:::i;13709:221::-;;;;;;;;;:::i;13940:991::-;;;;;;;;;:::i;:::-;;;;;;;;10413:26;;;;;;;;;:::i;:::-;;;;;;;;;11213:1317;;;;;;;;;:::i;10762:228::-;;;;;;;;;:::i;3478:234::-;;;;;;;;;:::i;10507:46::-;;;;;;;;;:::i;2998:240::-;;;;;;;;;:::i;2750:238::-;2500:13;;;;;;;;;;;;-1:-1:-1;;;2500:13:0;;;;2058:1;;2476:38;;;;;;;;;;;-1:-1:-1;2554:10:0;2537:16;:28;;;;;;;;;;;;;2601:14;;;;;;;;;;;-1:-1:-1;;;2601:14:0;;;;;;;2537:41;;:55;;2521:101;;;;-1:-1:-1;;;2521:101:0;;;;;;;;;;-1:-1:-1;;;;;;2883:25:0;::::1;:16;:25:::0;;;::::1;::::0;;;;;;;:39;;;::::1;::::0;;;;2934:48;;2883:39;;:25;2934:48:::1;::::0;::::1;2750:238:::0;;;:::o;3248:220::-;2500:13;;;;;;;;;;;;-1:-1:-1;;;2500:13:0;;;;;2554:10;-1:-1:-1;2537:28:0;;;;;;;;;;2601:14;;;;;;;;;;;-1:-1:-1;;;2601:14:0;;;;;;;2058:1;;2601:14;2537:41;;:55;;2521:101;;;;-1:-1:-1;;;2521:101:0;;;;;;;;;;-1:-1:-1;;;;;;3379:25:0;::::1;:16;:25:::0;;;::::1;::::0;;;;;;;:38;;;3429:33;3407:10;;3379:25;3429:33:::1;::::0;::::1;3248:220:::0;;;:::o;12540:486::-;12612:12;;12639:152;12661:13;;:20;12657:24;;;;12639:152;;;12701:13;;:16;;12721:10;;12701:13;:16;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12701:30:0;;12697:87;;;12754:4;12744:14;;12769:5;;12697:87;12683:3;;12639:152;;;-1:-1:-1;12814:31:0;;;;;;;;;;;;-1:-1:-1;;;12814:31:0;;;;12805:7;12797:49;;;;-1:-1:-1;;;12797:49:0;;;;;;;;;;;12855:13;12871:24;12889:5;12871:17;:24::i;:::-;12911:21;;;;:14;:21;;;;;;;;;;12934:23;;;;;;;;;;;-1:-1:-1;;;12934:23:0;;;;;;;12855:40;;-1:-1:-1;12934:23:0;12911:21;;12910:22;12902:56;;;;-1:-1:-1;;;12902:56:0;;;;;;;;;;-1:-1:-1;12967:21:0;;;;:14;:21;;;;;;:28;;-1:-1:-1;;12967:28:0;12991:4;12967:28;;;13007:13;12982:5;;13007:13;;;12540:486;;;:::o;11000:203::-;2500:13;;;;;;;;;;;;-1:-1:-1;;;2500:13:0;;;;;2554:10;-1:-1:-1;2537:28:0;;;;;;;;;;2601:14;;;;;;;;;;;-1:-1:-1;;;2601:14:0;;;;;;;8071:2;;2601:14;2537:41;;:55;;2521:101;;;;-1:-1:-1;;;2521:101:0;;;;;;;;;;;11152:1:::1;11113:7;11121:6;11113:15;;;;;;;;;::::0;;;::::1;::::0;;::::1;:41:::0;;-1:-1:-1;;;;;;11113:41:0::1;-1:-1:-1::0;;;;;11113:41:0;;;::::1;::::0;;;::::1;::::0;;;11166:31:::1;::::0;11178:6;;11166:31:::1;::::0;::::1;::::0;11113:15;11166:31:::1;;;;;;;;;;11000:203:::0;;:::o;2255:51::-;;;;;;;;;;;;;;:::o;10450:46::-;;;;;;;;;;;;;;;:::o;13036:663::-;13138:7;;;13191:304;13214:10;:18;;;:25;13210:1;:29;13191:304;;;13323:11;13347:10;:18;;;13366:1;13347:21;;;;;;;;;;;;;;:29;;;13389:10;:18;;;13408:1;13389:21;;;;;;;;;;;;;;:37;;;13439:10;:18;;;13458:1;13439:21;;;;;;;;;;;;;;:28;;;13294:184;;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;13294:184:0;;;13274:213;;49:4:-1;13274:213:0;;;;;-1:-1:-1;13241:3:0;;13191:304;;;;13563:4;13579:10;:18;;;13608:11;13630:10;:15;;;13656:10;:21;;;13528:158;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13528:158:0;;;13510:183;;;;;;13503:190;;;13036:663;;;:::o;13709:221::-;13857:4;13891:33;13905:6;13913:10;13891:13;:33::i;:::-;-1:-1:-1;;;;;13880:44:0;:7;-1:-1:-1;;;;;13880:44:0;;13873:51;;13709:221;;;;;:::o;13940:991::-;14063:7;;14086:10;:15;;;:41;;;;;;;;;14082:805;;;14150:230;14272:6;14192:99;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14192:99:0;;;14170:132;;;;;;14313:10;:12;;;14336:10;:12;;;14359:10;:12;;;14150:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14150:230:0;;;;;;;;14143:237;;;;14082:805;14417:20;14398:10;:15;;;:39;;;;;;;;;14394:493;;;14460:232;14584:6;14502:101;;;;;;;;;14394:493;14729:23;14710:10;:15;;;:42;;;;;;;;;14706:181;;;14775:104;14795:6;14812:10;:12;;;14835:10;:12;;;14858:10;:12;;;14775:104;;;;;;;;;;;;;;;;;;;14706:181;14902:22;;;;;;;;;;;-1:-1:-1;;;14902:22:0;;;;14895:30;;-1:-1:-1;;;14895:30:0;;;;14902:22;14895:30;;;;13940:991;;;;;:::o;10413:26::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10413:26:0;;;-1:-1:-1;;;;10413:26:0;;;;;:::o;11213:1317::-;11354:3;11335:5;:16;;;:22;11359:13;;;;;;;;;;;;;-1:-1:-1;;;11359:13:0;;;11327:46;;;;;-1:-1:-1;;;11327:46:0;;;;;;;;;;;11380:13;11396:24;11414:5;11396:17;:24::i;:::-;11475:13;;:20;;11380:40;;-1:-1:-1;;;11475:24:0;;;11451:21;;;;11475:24;;11553:28;;;;;;;;;;;;-1:-1:-1;;;;;11553:42:0;;11549:510;;;11648:11;:18;11631:13;:35;11627:173;;;-1:-1:-1;11692:10:0;11627:173;;;11742:48;11756:5;11763:11;11775:13;11763:26;;;;;;;;;;;;;;11742:13;:48::i;:::-;11729:61;;11627:173;11839:10;11808:5;:13;;;11822;11808:28;;;;;;;;;;;;;:41;-1:-1:-1;;;;;11808:41:0;;;-1:-1:-1;;;;;11808:41:0;;;;;11549:510;;;11900:11;:18;11883:13;:35;11879:180;;;11937:13;;:28;;11969:10;;11937:13;11951;;11937:28;;;;;;;;;;;;-1:-1:-1;;;;;11937:42:0;;11981:19;;;;;;;;;;;;;-1:-1:-1;;;11981:19:0;;;11929:72;;;;;-1:-1:-1;;;11929:72:0;;;;;;;;;;;11879:180;;;12050:1;12033:18;;;;11879:180;12072:7;12067:220;12089:13;12085:1;:17;;;12067:220;;;12141:101;12170:5;:13;;;12184:1;12170:16;;;;;;;;;;;;;;;;12199:5;12217:11;12229:1;12217:14;;;;;;;;;;;;;;;;12141:16;:101::i;:::-;12253:17;;;;;;;;;;;;;-1:-1:-1;;;12253:17:0;;;12123:156;;;;;-1:-1:-1;;;12123:156:0;;;;;;;;;;-1:-1:-1;12104:3:0;;12067:220;;;-1:-1:-1;12304:21:0;;;;:14;:21;;;;;;;;;;12327:14;;;;;;;;;;;-1:-1:-1;;;12327:14:0;;;;;;;12304:21;;12303:22;12295:47;;;;-1:-1:-1;;;12295:47:0;;;;;;;;;;-1:-1:-1;12358:21:0;;;;:14;:21;;;;;;;;;;12381:23;;;;;;;;;;;-1:-1:-1;;;12381:23:0;;;;;;;12358:21;;12357:22;12349:56;;;;-1:-1:-1;;;12349:56:0;;;;;;;;;;-1:-1:-1;12414:21:0;;;;:14;:21;;;;;:28;;-1:-1:-1;;12414:28:0;12438:4;12414:28;;;12449:47;12478:5;12485:10;12449:28;:47::i;:::-;12510:14;;12518:5;;12510:14;;;;;11213:1317;;;;;:::o;10762:228::-;2500:13;;;;;;;;;;;;-1:-1:-1;;;2500:13:0;;;;;2554:10;-1:-1:-1;2537:28:0;;;;;;;;;;2601:14;;;;;;;;;;;-1:-1:-1;;;2601:14:0;;;;;;;8071:2;;2601:14;2537:41;;:55;;2521:101;;;;-1:-1:-1;;;2521:101:0;;;;;;;;;;;10895:7:::1;10908:24;;;;;;;;10918:6;-1:-1:-1::0;;;;;10908:24:0::1;;;;;10926:5;10908:24;;;;;;;;::::0;;27:10:-1;;39:1:::1;23:18:::0;::::1;45:23:::0;;-1:-1;10895:38:0;;;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;10895:38:0::1;-1:-1:-1::0;;;;;10895:38:0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;10895:38:0::1;-1:-1:-1::0;;;10895:38:0;::::1;::::0;::::1;;;;;;;;;;;;;10974:1;10957:7:::0;:14:::1;;;;:18;10945:39;10977:6;10945:39;;;;;;;;;;;;;;;10762:228:::0;;;:::o;3478:234::-;3584:4;3621:1;3608:10;:14;3624:13;;;;;;;;;;;;;-1:-1:-1;;;3624:13:0;;;3600:38;;;;;-1:-1:-1;;;3600:38:0;;;;;;;;;;-1:-1:-1;;;;;;;3653:25:0;;;;:16;:25;;;;;;;;;;;:38;;3652:54;;3478:234::o;10507:46::-;;;;;;;;;;;;;;;:::o;2998:240::-;2500:13;;;;;;;;;;;;-1:-1:-1;;;2500:13:0;;;;;2554:10;-1:-1:-1;2537:28:0;;;;;;;;;;2601:14;;;;;;;;;;;-1:-1:-1;;;2601:14:0;;;;;;;2058:1;;2601:14;2537:41;;:55;;2521:101;;;;-1:-1:-1;;;2521:101:0;;;;;;;;;;-1:-1:-1;;;;;;3132:25:0;::::1;:16;:25:::0;;;::::1;::::0;;;;;;;:40;;3161:11;::::1;3132:40;::::0;;;;3184:48;;3132:40;;:25;3184:48:::1;::::0;::::1;2998:240:::0;;;:::o;14941:4200::-;15067:9;15063:4073;15086:6;:14;;;:21;15082:1;:25;15063:4073;;;15205:1;-1:-1:-1;;;;;15146:61:0;:7;15154:6;:14;;;15169:1;15154:17;;;;;;;;;;;;;;:25;;;15146:34;;;;;;;;;;;;;;;;;;;;:47;15218:13;;;;;;;;;;;;-1:-1:-1;;;15218:13:0;;;;;;;;;-1:-1:-1;;;;;15146:47:0;;;:61;;15128:112;;;;-1:-1:-1;;;15128:112:0;;;;;;;;;;-1:-1:-1;15298:17:0;15255:7;15263:6;:14;;;15278:1;15263:17;;;;;;;;;;;;;;:25;;;15255:34;;;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;15255:39:0;;;;:60;;;;;;;;;15251:3878;;;15366:6;:14;;;15381:1;15366:17;;;;;;;;;;;;;;:33;;;-1:-1:-1;;;;;15355:52:0;;15422:6;:14;;;15453:75;9019:2;15453:75;;15503:6;:14;;;15518:1;15503:17;;;;;;;;;;;;;;:24;;;15453:17;:75::i;:::-;15422:121;;;;;;;;;;;;;;;;8183:3;15355:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15355:242:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15355:242:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15355:242:0;;;;;;;;;15610:47;;;;;;;;;;;;;-1:-1:-1;;;15610:47:0;;;15335:333;;;;;-1:-1:-1;;;15335:333:0;;;;;;;;;;;15681:10;15694:75;9072:2;15694:75;;15744:6;:14;;;15759:1;15744:17;;;;;;;15694:75;15681:88;-1:-1:-1;;;;;;15784:16:0;;15780:63;;-1:-1:-1;15820:11:0;15780:63;15872:7;15880:6;:14;;;15895:1;15880:17;;;;;;;;;;;;;;:25;;;15872:34;;;;;;;;;;;;;;;;;;;;:47;15940:14;;;;:17;;-1:-1:-1;;;;;15872:47:0;;;;15855:72;;15940:14;15955:1;;15940:17;;;;;;;;;;;;:33;;;15986:2;16001:69;9119:2;16001:69;;16045:6;:14;;;16060:1;16045:17;;;;;;;16001:69;16083:74;9171:2;16083:74;;16132:6;:14;;;16147:1;16132:17;;;;;;;16083:74;15855:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15855:313:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15855:313:0;;;;15251:3878;;;;16238:19;16195:7;16203:6;:14;;;16218:1;16203:17;;;;;;;;;;;;;;:25;;;16195:34;;;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;16195:39:0;;;;:62;;;;;;;;;16191:2938;;;16277:12;16292:6;:14;;;16319:77;9228:2;16319:77;;16371:6;:14;;;16386:1;16371:17;;;;;;;16319:77;16292:115;;;;;;;;;;;;;;;;16277:130;;16418:10;16431:77;9283:2;16431:77;;16483:6;:14;;;16498:1;16483:17;;;;;;;16431:77;16418:90;-1:-1:-1;;;;;;16523:16:0;;16519:63;;-1:-1:-1;16559:11:0;16519:63;16600:7;16608:6;:14;;;16623:1;16608:17;;;;;;;;;;;;;;:25;;;16600:34;;;;;;;;;;;;;;;;;;;;:47;16669:14;;;;:17;;-1:-1:-1;;;;;16600:47:0;;;;16594:62;;16669:14;16684:1;;16669:17;;;;;;;;;;;;:33;;;16715:4;16732:2;16747:71;9332:2;16747:71;;16793:6;:14;;;16808:1;16793:17;;;;;;;16747:71;16594:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16594:235:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16594:235:0;;;;16191:2938;;;;;16899:17;16856:7;16864:6;:14;;;16879:1;16864:17;;;;;;;;;;;;;;:25;;;16856:34;;;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;16856:39:0;;;;:60;;;;;;;;;16852:2277;;;16967:6;:14;;;16982:1;16967:17;;;;;;;;;;;;;;:33;;;-1:-1:-1;;;;;16956:52:0;;17023:6;:14;;;17054:75;9387:2;17054:75;;17104:6;:14;;;17119:1;17104:17;;;;;;;17054:75;17023:121;;;;;;;;;;;;;;;;8236:4;16956:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16956:242:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16956:242:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16956:242:0;;;;;;;;;17211:47;;;;;;;;;;;;;-1:-1:-1;;;17211:47:0;;;16936:333;;;;;-1:-1:-1;;;16936:333:0;;;;;;;;;;;17299:7;17307:6;:14;;;17322:1;17307:17;;;;;;;;;;;;;;:25;;;17299:34;;;;;;;;;;;;;;;;;;;;:47;17367:14;;;;:17;;-1:-1:-1;;;;;17299:47:0;;;;17282:72;;17367:14;17382:1;;17367:17;;;;;;;;;;;;:33;;;17413:69;9434:2;17413:69;;17457:6;:14;;;17472:1;17457:17;;;;;;;17413:69;17495:74;9486:2;17495:74;;17544:6;:14;;;17559:1;17544:17;;;;;;;17495:74;17282:298;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17282:298:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17282:298:0;;;;16852:2277;;;17650:27;17607:7;17615:6;:14;;;17630:1;17615:17;;;;;;;;;;;;;;:25;;;17607:34;;;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;17607:39:0;;;;:70;;;;;;;;;17603:1526;;;17728:6;:14;;;17743:1;17728:17;;;;;;;;;;;;;;:33;;;-1:-1:-1;;;;;17717:52:0;;17784:6;:14;;;17815:85;9551:2;17815:85;;17875:6;:14;;;17890:1;17875:17;;;;;;;17815:85;17784:131;;;;;;;;;;;;;;;;8132:1;17717:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17717:256:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17717:256:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17717:256:0;;;;;;;;;17986:51;;;;;;;;;;;;;-1:-1:-1;;;17986:51:0;;;17697:351;;;;;-1:-1:-1;;;17697:351:0;;;;;;;;;;;18061:10;18074:118;9614:2;18074:118;;18157:6;:14;;;18172:1;18157:17;;;;;;;18074:118;18061:131;-1:-1:-1;;;;;;18209:16:0;;18205:63;;-1:-1:-1;18245:11:0;18205:63;18302:7;18310:6;:14;;;18325:1;18310:17;;;;;;;;;;;;;;:25;;;18302:34;;;;;;;;;;;;;;;;;;;;:47;18367:14;;;;:17;;-1:-1:-1;;;;;18302:47:0;;;;18280:74;;18367:14;18382:1;;18367:17;;;;;;;;;;;;:33;;;18413:2;18428:86;9678:2;18428:86;;18489:6;:14;;;18504:1;18489:17;;;;;;;18428:86;18280:245;;;;;;;;;;;;;;;;;;17603:1526;18588:15;18545:7;18553:6;:14;;;18568:1;18553:17;;;;;;;;;;;;;;:25;;;18545:34;;;;;;;;;;;;;;;;;;;:39;-1:-1:-1;;;18545:39:0;;;;:58;;;;;;;;;18541:588;;;18623:10;18636:67;9776:2;18636:67;;18678:6;:14;;;18693:1;18678:17;;;;;;;18636:67;18623:80;;18860:6;:14;;;18875:1;18860:17;;;;;;;;;;;;;;:33;;;-1:-1:-1;;;;;18853:49:0;;18903:2;18853:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18853:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18853:53:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18853:53:0;;;;;;;;;-1:-1:-1;;;;;18734:172:0;:6;:14;;;18763:73;9731:2;18763:73;;18811:6;:14;;;18826:1;18811:17;;;;;;;18763:73;18734:115;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18734:172:0;;18919:33;;;;;;;;;;;;;-1:-1:-1;;;18919:33:0;;;18714:249;;;;;-1:-1:-1;;;18714:249:0;;;;;;;;;;;18991:7;18999:6;:14;;;19014:1;18999:17;;;;;;;;;;;;;;:25;;;18991:34;;;;;;;;;;;;;;;;;;;;:47;19060:14;;;;:17;;-1:-1:-1;;;;;18991:47:0;;;;18976:71;;19060:14;19075:1;;19060:17;;;;;;;;;;;;:33;;;19106:2;18976:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18976:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18976:143:0;;;;18541:588;;15109:3;;15063:4073;;;;14941:4200;;:::o;6003:185::-;6160:19;6154:26;;6141:41::o;1051:739:-1:-;;1187:3;1180:4;1172:6;1168:17;1164:27;1154:2;;-1:-1;;1195:12;1154:2;1242:6;1229:20;1264:99;1279:83;1355:6;1279:83;;;1264:99;;;1391:21;;;1255:108;-1:-1;1435:4;1448:14;;;;1423:17;;;1543:1;1528:256;1553:6;1550:1;1547:13;1528:256;;;1623:17;;1611:30;;3837:4;3816:19;;;-1:-1;;3816:19;3812:30;3809:2;;;1543:1;;3845:12;3809:2;3873:20;3837:4;3873:20;;;1435:4;1611:30;;7326:20;7351:32;7377:5;7351:32;;;3953:74;;4153:22;;;72:20;97:33;72:20;97:33;;;4114:16;;;4107:75;3837:4;4258:18;;4245:32;4297:18;4286:30;;4283:2;;;1543:1;;4319:12;4283:2;4405:6;1611:30;4390:22;3007:3;2988:17;4390:22;2988:17;2984:27;2974:2;;1543:1;;3015:12;2974:2;1435:4;4390:22;;3049:20;3035:34;;3084:60;3099:44;3136:6;3099:44;;3084:60;3075:69;;3164:6;3157:5;3150:21;3268:3;4153:22;3259:6;4390:22;3250:16;;3247:25;3244:2;;;1543:1;;3275:12;3244:2;3295:41;3329:6;1435:4;3226:5;3222:16;4153:22;4390;3188:17;3295:41;;;-1:-1;4153:22;4346:16;;4339:80;1648:73;;-1:-1;1735:14;;;;1763;;;;1575:1;1568:9;1528:256;;;1532:14;;;;;1147:643;;;;;4485:1005;;4600:4;4588:9;4583:3;4579:19;4575:30;4572:2;;;-1:-1;;4608:12;4572:2;4636:20;4600:4;4636:20;;;4627:29;;4722:17;4709:31;4760:18;;4752:6;4749:30;4746:2;;;4737:1;;4782:12;4746:2;4884:6;4873:9;4869:22;414:3;407:4;399:6;395:17;391:27;381:2;;-1:-1;;422:12;381:2;469:6;456:20;442:34;;491:76;506:60;559:6;506:60;;491:76;573:16;609:6;602:5;595:21;639:4;;656:3;652:14;645:21;;639:4;631:6;627:17;761:3;639:4;;745:6;741:17;631:6;732:27;;729:36;726:2;;;-1:-1;;768:12;726:2;-1:-1;794:10;;788:206;813:6;810:1;807:13;788:206;;;85:6;72:20;97:33;124:5;97:33;;;881:50;;835:1;828:9;;;;;945:14;;;;973;;788:206;;;792:14;4827:70;4809:16;4802:96;639:4;4979:9;4975:18;4962:32;4948:46;;4760:18;5006:6;5003:30;5000:2;;;-1:-1;;5036:12;5000:2;5081:93;5170:3;5161:6;5150:9;5146:22;5081:93;;;639:4;5067:5;5063:16;5056:119;;;;;;;5236:2;5294:9;5290:22;7190:20;5236:2;5255:5;5251:16;5244:75;5386:2;5444:9;5440:22;7190:20;5386:2;5405:5;5401:16;5394:75;4566:924;;;;;5539:762;;5654:4;5642:9;5637:3;5633:19;5629:30;5626:2;;;-1:-1;;5662:12;5626:2;5690:20;5654:4;5690:20;;;5681:29;;2852:6;2839:20;5771:16;5764:75;5897:2;5955:9;5951:22;2839:20;5897:2;5916:5;5912:16;5905:75;6038:2;6094:9;6090:22;7460:20;27644:4;30643:5;27633:16;30620:5;30617:33;30607:2;;-1:-1;;30654:12;30607:2;6038;6053:16;;6046:73;6180:2;6251:22;;3599:20;30282:1;30272:12;;30262:2;;30298:1;;30288:12;30262:2;6180;6195:16;;6188:92;6199:5;5620:681;-1:-1;;5620:681;7528:241;;7632:2;7620:9;7611:7;7607:23;7603:32;7600:2;;;-1:-1;;7638:12;7600:2;85:6;72:20;97:33;124:5;97:33;;;7690:63;7594:175;-1:-1;;;7594:175;7776:263;;7891:2;7879:9;7870:7;7866:23;7862:32;7859:2;;;-1:-1;;7897:12;7859:2;226:6;220:13;238:33;265:5;238:33;;8046:552;;;;8214:3;8202:9;8193:7;8189:23;8185:33;8182:2;;;-1:-1;;8221:12;8182:2;85:6;72:20;97:33;124:5;97:33;;;8273:63;-1:-1;8373:2;8412:22;;2839:20;;-1:-1;8499:83;8574:7;8481:2;8550:22;;8499:83;;;8489:93;;8176:422;;;;;;8605:394;;;8740:2;8728:9;8719:7;8715:23;8711:32;8708:2;;;-1:-1;;8746:12;8708:2;85:6;72:20;97:33;124:5;97:33;;;8798:63;-1:-1;8898:2;8951:22;;3431:20;30164:1;30154:12;;30144:2;;-1:-1;;30170:12;30144:2;8906:77;;;;8702:297;;;;;;9006:366;;;9127:2;9115:9;9106:7;9102:23;9098:32;9095:2;;;-1:-1;;9133:12;9095:2;85:6;72:20;97:33;124:5;97:33;;;9185:63;9285:2;9324:22;;;;7190:20;;-1:-1;;;9089:283;9379:257;;9491:2;9479:9;9470:7;9466:23;9462:32;9459:2;;;-1:-1;;9497:12;9459:2;2718:6;2712:13;29920:5;26934:13;26927:21;29898:5;29895:32;29885:2;;-1:-1;;29931:12;9643:241;;9747:2;9735:9;9726:7;9722:23;9718:32;9715:2;;;-1:-1;;9753:12;9715:2;-1:-1;2839:20;;9709:175;-1:-1;9709:175;9891:427;;;10042:3;10030:9;10021:7;10017:23;10013:33;10010:2;;;-1:-1;;10049:12;10010:2;2852:6;2839:20;10101:63;;10219:83;10294:7;10201:2;10274:9;10270:22;10219:83;;;10209:93;;10004:314;;;;;;10325:379;;10455:2;10443:9;10434:7;10430:23;10426:32;10423:2;;;-1:-1;;10461:12;10423:2;10519:17;10506:31;10557:18;10549:6;10546:30;10543:2;;;-1:-1;;10579:12;10543:2;10609:79;10680:7;10671:6;10660:9;10656:22;10609:79;;;10599:89;10417:287;-1:-1;;;;10417:287;10711:692;;;10909:2;10897:9;10888:7;10884:23;10880:32;10877:2;;;-1:-1;;10915:12;10877:2;10973:17;10960:31;11011:18;;11003:6;11000:30;10997:2;;;-1:-1;;11033:12;10997:2;11063:79;11134:7;11125:6;11114:9;11110:22;11063:79;;;11053:89;;11207:2;11196:9;11192:18;11179:32;11165:46;;11011:18;11223:6;11220:30;11217:2;;;-1:-1;;11253:12;11217:2;;11370:6;11359:9;11355:22;1987:3;1980:4;1972:6;1968:17;1964:27;1954:2;;-1:-1;;1995:12;1954:2;2042:6;2029:20;2015:34;;2064:106;2079:90;2162:6;2079:90;;2064:106;2176:16;2212:6;2205:5;2198:21;11207:2;2259:3;2255:14;2248:21;;11207:2;2234:6;2230:17;2364:3;11207:2;2356:4;2348:6;2344:17;2234:6;2335:27;;2332:36;2329:2;;;-1:-1;;2371:12;2329:2;-1:-1;2397:10;;2391:232;2416:6;2413:1;2410:13;2391:232;;;2496:63;2555:3;2543:10;2496:63;;;2484:76;;2438:1;2431:9;;;;;11207:2;2574:14;;;;2356:4;2602:14;2391:232;;;2395:14;11273:114;;;;;;;10871:532;;;;;;16033:874;29575:2;29571:14;;;-1:-1;;29571:14;12332:58;;25721:12;;16033:874;;16407:2;16398:12;;;25588:4;25579:14;;16033:874;12865:264;12890:6;12887:1;12884:13;12865:264;;;12951:13;;-1:-1;;;;;27333:54;12076:37;;25588:4;11828:14;;;;26096;;;;4297:18;12905:9;12865:264;;;-1:-1;;;13341:37;;;-1:-1;;25588:4;16648:12;;13341:37;;;;16759:12;;;13341:37;29575:2;16870:12;;16298:609;-1:-1;;16298:609;16914:666;;13371:5;13348:3;13341:37;29468:15;;;15770:5;29472:3;29468:15;;17226:2;17221:3;17217:12;15722:56;29571:14;;12382:5;29575:2;29571:14;;17326:11;17221:3;17326:11;12332:58;13701:5;25721:12;13812:52;13857:6;17436:12;17221:3;17436:12;17226:2;13838:5;13834:16;13812:52;;;13876:16;;;;17436:12;13876:16;;17117:463;-1:-1;;;;;17117:463;17587:511;14704:66;14684:87;;14668:2;14790:12;;13341:37;;;;18061:12;;;17795:303;18105:511;15113:66;15093:87;;15077:2;15199:12;;13341:37;;;;18579:12;;;18313:303;18623:213;-1:-1;;;;;27333:54;;;;12076:37;;18741:2;18726:18;;18712:124;19079:547;-1:-1;;;;;27333:54;;;12076:37;;27333:54;;;19446:2;19431:18;;12076:37;27333:54;;19529:2;19514:18;;12076:37;19612:2;19597:18;;13341:37;;;;19281:3;19266:19;;19252:374;19633:435;-1:-1;;;;;27333:54;;;12076:37;;27333:54;;;;19971:2;19956:18;;12076:37;20054:2;20039:18;;13341:37;;;;19807:2;19792:18;;19778:290;20075:547;-1:-1;;;;;27333:54;;;12076:37;;27333:54;;;;20442:2;20427:18;;12076:37;20525:2;20510:18;;13341:37;20608:2;20593:18;;13341:37;;;;20277:3;20262:19;;20248:374;20629:348;-1:-1;;;;;27333:54;;12076:37;;20787:2;20772:18;;29686:1;29676:12;;29666:2;;29692:9;29666:2;27888:38;20963:2;20952:9;20948:18;13987:62;20758:219;;;;;;20984:322;-1:-1;;;;;27333:54;;;;12076:37;;27252:6;27241:18;21292:2;21277:18;;15295:49;21129:2;21114:18;;21100:206;21313:324;-1:-1;;;;;27333:54;;;;12076:37;;21623:2;21608:18;;13341:37;21459:2;21444:18;;21430:207;21644:435;-1:-1;;;;;27333:54;;;;12076:37;;21982:2;21967:18;;13341:37;;;;22065:2;22050:18;;13341:37;21818:2;21803:18;;21789:290;22086:320;-1:-1;;;;;27333:54;;;;12076:37;;27644:4;27633:16;22392:2;22377:18;;15859:48;22230:2;22215:18;;22201:205;22413:201;26934:13;;26927:21;13224:34;;22525:2;22510:18;;22496:118;22621:213;13341:37;;;22739:2;22724:18;;22710:124;22841:539;13341:37;;;27644:4;27633:16;;;;23200:2;23185:18;;15986:35;23283:2;23268:18;;13341:37;23366:2;23351:18;;13341:37;23039:3;23024:19;;23010:370;23387:293;;23521:2;23542:17;23535:47;14198:5;25721:12;26560:6;23521:2;23510:9;23506:18;26548:19;14292:52;14337:6;26588:14;23510:9;26588:14;23521:2;14318:5;14314:16;14292:52;;;3816:19;29360:14;-1:-1;;29356:28;14356:39;;;;26588:14;14356:39;;23492:188;-1:-1;;23492:188;23907:256;23969:2;23963:9;23995:17;;;24070:18;24055:34;;24091:22;;;24052:62;24049:2;;;24127:1;;24117:12;24049:2;23969;24136:22;23947:216;;-1:-1;23947:216;24170:300;;24325:18;24317:6;24314:30;24311:2;;;-1:-1;;24347:12;24311:2;-1:-1;24392:4;24380:17;;;24445:15;;24248:222;25144:317;;25283:18;25275:6;25272:30;25269:2;;;-1:-1;;25305:12;25269:2;-1:-1;3816:19;25359:17;-1:-1;;25355:33;25446:4;25436:15;;25206:255;28406:145;28487:6;28482:3;28477;28464:30;-1:-1;28543:1;28525:16;;28518:27;28457:94;28560:268;28625:1;28632:101;28646:6;28643:1;28640:13;28632:101;;;28713:11;;;28707:18;28694:11;;;28687:39;28668:2;28661:10;28632:101;;;28748:6;28745:1;28742:13;28739:2;;;28625:1;28804:6;28799:3;28795:16;28788:27;28739:2;;28609:219;;;;29715:117;-1:-1;;;;;27333:54;;29774:35;;29764:2;;29823:1;;29813:12;29764:2;29758:74;;30438:115;27550:10;30523:5;27539:22;30499:5;30496:34;30486:2;;30544:1;;30534:12

Swarm Source

ipfs://ae62effa4ed4377964d04a7e641df69cee144444cd9d9b392339f26b9f664797
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.