Contract 0x186f803024f1dd1dbbc5760c120592c4a565b8a9

Contract Overview

Balance:
0 Ether
TxHash Block Age From To Value [TxFee]
0x4b4c2bce9f9a00b915b50eba601f2ff8458484a87c43fa3d89827269c18dc6b540616992 days 13 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003705856
0x7184d1faf9f08f2962961edc7d81e629e1d8e6a9e6c39ebfb573c1bb2e69a84e40326487 days 14 hrs ago0xe94b5c047d553e7836bead85e0b18cb32bb16806 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.004088282
0x2153a845aa386e59fa8173e7fdd7f1ac91aa8e4cd8c405075eadffc85ec96d4340326487 days 14 hrs ago0x01f7480086edb45ef259dbf079b6f604ad7f1506 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.00400939
0x827e1e4dfbfc68c7004eb2358d58a3ec0244b7a207c7447ef0f6966c2bcfa1c640326487 days 14 hrs ago0xc5b1947a6b2d0f3a71095a31a4e4e549c5b1bee0 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003985454
0xd3971350f7ff2adec90ded9af541922eb08e4ae627905e3d2f2c736a23914b2b40326477 days 14 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.004068394
0x5f40bcb4ca0449492f2a2a37805ddd58d7014f7ace44eb984fa9881ea5a7357e40326477 days 14 hrs ago0x2fcacf697b593103389d07fedfb1b54bd6853165 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.00415239
0xec7d66cf70a566593c0861d8bfff9081c1c72ae0edf41a5d5d803324b70d33fc40273888 days 12 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003604436
0xbd1f170a346abbdee36ff2e1a3179b0ae80d8b75f4e4494998e5fb6b20802cc6401053311 days 10 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003895298
0x65a487e2c696bafd84219d66495577e37e2916b6473a9b9c21ceb2314520c13c398086016 days 13 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003871362
0x9b6c402b7b37d4126b26a15deb02587dce47e9ebaa9ddf674c93de1fa595748c397574317 days 11 hrs ago0x74f565642666dee97d2ec4f4add390a5e6f67db5 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003721344
0x38d274b0f3571db94cfaa9679657e046d72defe204944e2be68999af4fcd0ba4397574317 days 11 hrs ago0x01f7480086edb45ef259dbf079b6f604ad7f1506 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003671866
0xec13e24de18d8171c202f0aeb6375e7e8f83b5420147bb5759e09f30991b4573397574217 days 11 hrs ago0xe94b5c047d553e7836bead85e0b18cb32bb16806 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003637546
0xb3626b1f6319c5d0ad24cf07cd42d586c3eb0125f88a4df96183fa52d6489cca397574217 days 11 hrs ago0xc5b1947a6b2d0f3a71095a31a4e4e549c5b1bee0 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003572052
0x99ab37a30884b33810d6ad870a48ecd10cd8832cdb5508e758ae85a6e57aa4b9397574217 days 11 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003693184
0x57d9ea7957fe7f9011a3be0c958be5d5e5068de101392a6b2330a7db74c4e9e1397574217 days 11 hrs ago0x2fcacf697b593103389d07fedfb1b54bd6853165 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003722752
0x3ffaa04d57e14b4921f2673e8cb136af2809ecf8cfc2c52b274743c664885e4a394133023 days 10 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003690368
0x248e0f43e2402d907be86d8d9aee4603b866a64d0c00cd4ffba2ecf1def54523394133023 days 10 hrs ago0x2fcacf697b593103389d07fedfb1b54bd6853165 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003555838
0xd397018262c8d30a72e57efb63be2a11dac04918f937691b8ade4c75aaaff809392923425 days 13 hrs ago0x400c61f87f973561a55599ed2021dd01f777ffda IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003538942
0x1dfd0b6bd5e78c71ba672b1c924e53170468303513bcdd2ba60d641380ae682a392923425 days 13 hrs ago0x18fe2a4c3d014ea287d201d99073e4b3f076e6ef IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.00363473
0x390f61fbc2334d8a682d4a252e821ee3b5fa972b425dc28ebb110fcb10d84c4e392923425 days 13 hrs ago0xc5b1947a6b2d0f3a71095a31a4e4e549c5b1bee0 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003704448
0xfbbfdeb47b749f3f880ace5bd47968e4c225bfaedb18f3455c7679290f083f7e392923425 days 13 hrs ago0x9bae7bedb827baedab58f2394c3372aba5386171 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003862914
0xf91fc2a41ffd18b61f28217d945eebc1037068e3bf9435f4e9d32601b921c89f389517631 days 11 hrs ago0x400c61f87f973561a55599ed2021dd01f777ffda IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003583316
0x33b1a90bc3cd43a5db215c2b98c13511ad4c0f3bbf1ec5f3784120393657feba375164256 days 9 hrs ago0x400c61f87f973561a55599ed2021dd01f777ffda IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003690368
0x8af89d0ed5e3fc9ff66a548fb74376816fb4f6e920b511eb761b82880d8bd38a375069456 days 13 hrs ago0x9bae7bedb827baedab58f2394c3372aba5386171 IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003753046
0xc24e3ccfe82162538dd38b10e43e84d5f41a54673f7573ae6d5c6b7a6ccb9fee375069456 days 13 hrs ago0x400c61f87f973561a55599ed2021dd01f777ffda IN  0x186f803024f1dd1dbbc5760c120592c4a565b8a90 Ether0.003815724
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x4b4c2bce9f9a00b915b50eba601f2ff8458484a87c43fa3d89827269c18dc6b540616992 days 13 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x4b4c2bce9f9a00b915b50eba601f2ff8458484a87c43fa3d89827269c18dc6b540616992 days 13 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x7184d1faf9f08f2962961edc7d81e629e1d8e6a9e6c39ebfb573c1bb2e69a84e40326487 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x7184d1faf9f08f2962961edc7d81e629e1d8e6a9e6c39ebfb573c1bb2e69a84e40326487 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x2153a845aa386e59fa8173e7fdd7f1ac91aa8e4cd8c405075eadffc85ec96d4340326487 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x2153a845aa386e59fa8173e7fdd7f1ac91aa8e4cd8c405075eadffc85ec96d4340326487 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x827e1e4dfbfc68c7004eb2358d58a3ec0244b7a207c7447ef0f6966c2bcfa1c640326487 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x827e1e4dfbfc68c7004eb2358d58a3ec0244b7a207c7447ef0f6966c2bcfa1c640326487 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xd3971350f7ff2adec90ded9af541922eb08e4ae627905e3d2f2c736a23914b2b40326477 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xd3971350f7ff2adec90ded9af541922eb08e4ae627905e3d2f2c736a23914b2b40326477 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x5f40bcb4ca0449492f2a2a37805ddd58d7014f7ace44eb984fa9881ea5a7357e40326477 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x5f40bcb4ca0449492f2a2a37805ddd58d7014f7ace44eb984fa9881ea5a7357e40326477 days 14 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xec7d66cf70a566593c0861d8bfff9081c1c72ae0edf41a5d5d803324b70d33fc40273888 days 12 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xec7d66cf70a566593c0861d8bfff9081c1c72ae0edf41a5d5d803324b70d33fc40273888 days 12 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xbd1f170a346abbdee36ff2e1a3179b0ae80d8b75f4e4494998e5fb6b20802cc6401053311 days 10 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xbd1f170a346abbdee36ff2e1a3179b0ae80d8b75f4e4494998e5fb6b20802cc6401053311 days 10 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x65a487e2c696bafd84219d66495577e37e2916b6473a9b9c21ceb2314520c13c398086016 days 13 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x65a487e2c696bafd84219d66495577e37e2916b6473a9b9c21ceb2314520c13c398086016 days 13 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x9b6c402b7b37d4126b26a15deb02587dce47e9ebaa9ddf674c93de1fa595748c397574317 days 11 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x9b6c402b7b37d4126b26a15deb02587dce47e9ebaa9ddf674c93de1fa595748c397574317 days 11 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x38d274b0f3571db94cfaa9679657e046d72defe204944e2be68999af4fcd0ba4397574317 days 11 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0x38d274b0f3571db94cfaa9679657e046d72defe204944e2be68999af4fcd0ba4397574317 days 11 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xec13e24de18d8171c202f0aeb6375e7e8f83b5420147bb5759e09f30991b4573397574217 days 11 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xec13e24de18d8171c202f0aeb6375e7e8f83b5420147bb5759e09f30991b4573397574217 days 11 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
0xb3626b1f6319c5d0ad24cf07cd42d586c3eb0125f88a4df96183fa52d6489cca397574217 days 11 hrs ago0x186f803024f1dd1dbbc5760c120592c4a565b8a90xe233f64a911394c82a1318606a86ae74f87d64550 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)

Contract Name:
Soar

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.24;

// File: node_modules/openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: node_modules/openzeppelin-solidity/contracts/lifecycle/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

// File: node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender)
    public view returns (uint256);

  function transferFrom(address from, address to, uint256 value)
    public returns (bool);

  function approve(address spender, uint256 value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: node_modules/openzeppelin-solidity/contracts/ownership/rbac/Roles.sol

/**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 * See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage role, address addr)
    internal
  {
    role.bearer[addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage role, address addr)
    internal
  {
    role.bearer[addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage role, address addr)
    view
    internal
  {
    require(has(role, addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage role, address addr)
    view
    internal
    returns (bool)
  {
    return role.bearer[addr];
  }
}

// File: node_modules/openzeppelin-solidity/contracts/ownership/rbac/RBAC.sol

/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 * Supports unlimited numbers of roles and addresses.
 * See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 * for you to write your own implementation of this interface using Enums or similar.
 * It's also recommended that you define constants in the contract, like ROLE_ADMIN below,
 * to avoid typos.
 */
contract RBAC {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address indexed operator, string role);
  event RoleRemoved(address indexed operator, string role);

  /**
   * @dev reverts if addr does not have role
   * @param _operator address
   * @param _role the name of the role
   * // reverts
   */
  function checkRole(address _operator, string _role)
    view
    public
  {
    roles[_role].check(_operator);
  }

  /**
   * @dev determine if addr has role
   * @param _operator address
   * @param _role the name of the role
   * @return bool
   */
  function hasRole(address _operator, string _role)
    view
    public
    returns (bool)
  {
    return roles[_role].has(_operator);
  }

  /**
   * @dev add a role to an address
   * @param _operator address
   * @param _role the name of the role
   */
  function addRole(address _operator, string _role)
    internal
  {
    roles[_role].add(_operator);
    emit RoleAdded(_operator, _role);
  }

  /**
   * @dev remove a role from an address
   * @param _operator address
   * @param _role the name of the role
   */
  function removeRole(address _operator, string _role)
    internal
  {
    roles[_role].remove(_operator);
    emit RoleRemoved(_operator, _role);
  }

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param _role the name of the role
   * // reverts
   */
  modifier onlyRole(string _role)
  {
    checkRole(msg.sender, _role);
    _;
  }

  /**
   * @dev modifier to scope access to a set of roles (uses msg.sender as addr)
   * @param _roles the names of the roles to scope access to
   * // reverts
   *
   * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
   *  see: https://github.com/ethereum/solidity/issues/2467
   */
  // modifier onlyRoles(string[] _roles) {
  //     bool hasAnyRole = false;
  //     for (uint8 i = 0; i < _roles.length; i++) {
  //         if (hasRole(msg.sender, _roles[i])) {
  //             hasAnyRole = true;
  //             break;
  //         }
  //     }

  //     require(hasAnyRole);

  //     _;
  // }
}

// File: contracts/Adminable.sol

contract Adminable is RBAC {

    string public constant ROLE_ADMIN = "admin";
    uint256 public counter;
    
    constructor() public {
        addRole(msg.sender, ROLE_ADMIN);
        counter = 1;
    }

    modifier onlyAdmin() {
        checkRole(msg.sender, ROLE_ADMIN);        
        _;
    }

    function isAdmin(address _address) public view
        returns (bool)
    {
        return hasRole(_address, ROLE_ADMIN);
    }

    function admin() public view
        returns (bool)
    {
        return hasRole(msg.sender, ROLE_ADMIN);
    }

    function addAdmin(address _admin) onlyAdmin public {
        addRole(_admin, ROLE_ADMIN);
        counter++;
    }

    function removeAdmin(address _admin) onlyAdmin public {
        require(msg.sender != _admin);
        require(counter > 1);
        removeRole(_admin, ROLE_ADMIN);
        counter--;
    }

    function removeLastAdmin(address _admin) onlyAdmin public {
        require(counter == 1);
        require(msg.sender == _admin);
        removeRole(_admin, ROLE_ADMIN);
        counter--;
    }

}

// File: contracts/IPricing.sol

contract IPricing {
    function getPrice(bytes12 _geoHash) public view returns ( uint256 price_);
}

// File: contracts/ISoarStorage.sol

contract ISoarStorage {

    function putListing (
        bytes32 _filehash,
        address _owner,
        address _sponsor,
        string _previewUrl, 
        string _url, 
        string _pointWKT, 
        bytes12 _geohash, 
        string _metadata
    ) 
        public;
    
    function updateListing (
        bytes32 _filehash,
        address _owner,
        address _sponsor,
        string _previewUrl, 
        string _url, 
        string _pointWKT, 
        bytes12 _geohash, 
        string _metadata 
    ) 
        public;

    function deleteListing(
        bytes32 _filehash 
    )
        public;
    
    function putSale (
        address _buyer,
        bytes32 _id,
        bytes32 _filehash, 
        uint256 _price
    ) 
        public;

    function getListingDetails(bytes32 _filehash, address _user, bytes32 _id) 
        public view
        returns (
            address owner_,
            address sponsor_,
            bytes12 geohash_,
            uint8 status_,
            uint256 sale_
        );
}

// File: contracts/IProfiles.sol

contract IProfiles {

    function updateSponsor(address _sponsor, string _metadata) public;

    function updateSponsoredProfile(address _sponsor, address _owner, string _metadata) public;
    
}

// File: contracts/Soar.sol

/**
    @title Soar
    @author Marek Tlacbaba ([email protected])
    @dev Main Soar smart contract with bussiness logic composing
    all other parts together and it is by design upgradable. When all
    development is finished then all admins can be removed no more 
    upgrade will be allowed.

*/
 
contract Soar is Pausable, Adminable {

    // attributes
    address public wallet;
    address public pricingAddress;
    address public skymapTokenAddress;
    address public soarStorageAddress;
    address public profilesAddress;

    // contracts
    IPricing private pricingContract;
    ERC20 private skymapTokenContract;
    ISoarStorage private soarStorageContract;
    IProfiles private profilesContract;

    bytes32 private emptyUserId = "00000000000000000000000000000000";
    address private emptySponsor = address(0);

    mapping (address => mapping ( address => bool)) private sponsors;

    event SponsorAdminAdded(address indexed sponsor, address admin);
    event SponsorAdminRemoved(address indexed sponsor, address admin);

    /**
    Action:
        - upload
        - sale
    */
    event Verification(address account, bytes32 indexed challenge, bytes32 filehash, string action);

    modifier listingExistAndNotDeleted(bytes32 _filehash) {
        (,,,uint8 status,) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        require(status == 1 || status == 2, "Listing must exist and not be deleted");
        _;
    }

    modifier listingExist(bytes32 _filehash) {
        (,,,uint8 status,) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        require(status != 0, "Listing must exist");
        _;
    }

    modifier listingNotExistOrDeleted(bytes32 _filehash) {
        (,,,uint8 status,) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        require(status == 0 || status == 3, "Listing can not exist or must be deleted");
        _;
    }

    modifier listingPurchased(bytes32 _filehash) {
        (,,,,uint256 price) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        require(price > 0, "Listing is not purchased");
        _;
    }

    modifier onlyListingOwner(bytes32 _filehash) {
        (address owner, address sponsor,,uint8 status,) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        require(status == 1 || status == 2, "Listing must exist and not be deleted");
        require(owner == msg.sender, "Only listing owner");
        require(sponsor == emptySponsor, "Sponsor must be empty for user listing");
        _;
    }

    modifier onlySponsor(address _sponsor) {
        require(sponsors[_sponsor][msg.sender] == true, "Only sponsor");
        _;
    }

    modifier onlySponsorListingOwner(bytes32 _filehash, address _sponsor) {
        require(sponsors[_sponsor][msg.sender] == true, "Only sponsor");
        (,address sponsor,,uint8 status,) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        require(status == 1 || status == 2, "Listing must exist and not be deleted");
        require(sponsor == _sponsor, "Incorrect sponsor");
        _;
    }
    
    constructor() public {
        wallet = msg.sender;
    }

    /**
        @dev Verifies user and emit Verification event offchain storage service
    */
    function verifyUpload(bytes32 _filehash, bytes32 _challenge) 
        public
        whenNotPaused
        listingNotExistOrDeleted(_filehash) 
    {
        emit Verification(msg.sender, _challenge, _filehash, "upload");
    }

    /**
        @dev Create listing and put it in storage.
    */
    function createListing(
        bytes32 _filehash,
        string _previewUrl, 
        string _url, 
        string _pointWKT, 
        bytes12 _geohash, 
        string _metadata) 
        public
        whenNotPaused
        listingNotExistOrDeleted(_filehash) 
    {
        soarStorageContract.putListing(_filehash, msg.sender, emptySponsor, _previewUrl, _url, _pointWKT, _geohash, _metadata);
    }

    /**
        @dev Update listing in storage.
    */
    function updateListing(
        bytes32 _filehash,
        string _previewUrl, 
        string _url, 
        string _pointWKT, 
        bytes12 _geohash, 
        string _metadata) 
        public
        whenNotPaused
        onlyListingOwner(_filehash)
    {
        soarStorageContract.updateListing(_filehash, msg.sender, emptySponsor, _previewUrl, _url, _pointWKT, _geohash, _metadata);
    }

    /**
        @dev Delete listing in storage.
    */
    function deleteListing(
        bytes32 _filehash) 
        public
        whenNotPaused
        onlyListingOwner(_filehash)
    {
        soarStorageContract.deleteListing(_filehash);
    }

        /**
        @dev Create listing as sponsor and put it in storage.
    */
    function sponsorCreateListing(
        address _sponsor,
        address _owner,
        bytes32 _filehash,
        string _previewUrl, 
        string _url, 
        string _pointWKT, 
        bytes12 _geohash, 
        string _metadata) 
        public
        whenNotPaused
        listingNotExistOrDeleted(_filehash)
        onlySponsor(_sponsor)
    {
        soarStorageContract.putListing(_filehash, _owner, _sponsor, _previewUrl, _url, _pointWKT, _geohash, _metadata);
    }

    /**
        @dev Update listing as sponsor in storage.
    */
    function sponsorUpdateListing(
        address _sponsor,
        address _owner,
        bytes32 _filehash,
        string _previewUrl, 
        string _url, 
        string _pointWKT, 
        bytes12 _geohash, 
        string _metadata) 
        public
        whenNotPaused
        onlySponsorListingOwner(_filehash, _sponsor)
    {
        soarStorageContract.updateListing(_filehash, _owner, _sponsor, _previewUrl, _url, _pointWKT, _geohash, _metadata);
    }

    /**
        @dev Delete listing as sponsor in storage.
    */
    function sponsorDeleteListing(
        address _sponsor,
        bytes32 _filehash) 
        public
        whenNotPaused
        onlySponsorListingOwner(_filehash, _sponsor)
    {
        soarStorageContract.deleteListing(_filehash);
    }

    function sponsorUpdateSponsoredProfile(
        address _sponsor,
        address _owner,
        string _metadata) 
        public
        whenNotPaused
        onlySponsor(_sponsor)
    {
        profilesContract.updateSponsoredProfile(_sponsor, _owner, _metadata);
    }

    function sponsorUpdateProfile(
        address _sponsor,
        string _metadata) 
        public
        whenNotPaused
        onlySponsor(_sponsor)
    {
        profilesContract.updateSponsor(_sponsor, _metadata);
    }
    
    /**
        @dev Returns price for given geohash
    */
    function getPrice(bytes12 _geoHash) 
        public view
        whenNotPaused  
        returns (uint256 price_) 
    {
        price_ = pricingContract.getPrice(_geoHash);
    }

    /**
      * @dev Returns price for given filehash if exists in platform.
      */
    function getListingPrice(bytes32 _filehash)
        public view
        whenNotPaused
        listingExistAndNotDeleted(_filehash)
        returns (uint256 price_) 
    {
        (,,bytes12 geohash,,) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        price_ = pricingContract.getPrice(geohash);
    }

    /**
      * @dev Verifies and emit Verification event to allow backend purchase verification.
      */
    function verifySale(bytes32 _filehash, bytes32 _challenge) 
        public
        whenNotPaused 
        listingPurchased(_filehash)
    {
        emit Verification(msg.sender, _challenge, _filehash, "sale");
    }

    /**
      * @dev Allows to buy listing using pre-approve SKYM and split price between owner and Soar wallet.
      * After succesfull purchase the verification event is fired.
      */
    function buyListing(bytes32 _filehash, bytes32 _challenge) 
        external
        whenNotPaused
    {
        (address owner,, bytes12 geohash,,uint256 sale) = soarStorageContract.getListingDetails(_filehash, msg.sender, "");
        
        // verify user is not owner
        require(owner != msg.sender);
        // verify user has not bought file
        require(sale == 0);
        uint256 allowance = skymapTokenContract.allowance(msg.sender, this);
        uint256 balance = skymapTokenContract.balanceOf(msg.sender);
        uint256 price = pricingContract.getPrice(geohash);
        // verify balance and allowance are higher than price
        require(balance >= price);
        require(allowance >= price);

        // calculate cut for owner and for wallet
        uint256 ownerCut = (price / 100) * 95;
        uint256 walletCut = price - ownerCut;

        // tranfer skymap to file owner and soar
        skymapTokenContract.transferFrom(msg.sender, owner, ownerCut);
        skymapTokenContract.transferFrom(msg.sender, wallet, walletCut);
        // // update contract state
        soarStorageContract.putSale(msg.sender, emptyUserId, _filehash, price);
        // fire event
        emit Verification(msg.sender, _challenge, _filehash, "sale");
    }

    function listingExists(bytes32 _filehash) 
        public view
        whenNotPaused  
        returns (bool exists_) 
    {
        (,,,uint8 status,) = soarStorageContract.getListingDetails(_filehash, msg.sender, emptyUserId);
        exists_ = (status == 1 || status == 2);
    }

    /**
    ADMIN FUNCTIONS
     */

    function addSponsorAdmin(address _sponsor, address _admin) 
        public 
        whenNotPaused
        onlyAdmin 
    {
        sponsors[_sponsor][_admin] = true;
        emit SponsorAdminAdded(_sponsor, _admin);
    }

    function removeSponsorAdmin(address _sponsor, address _admin) 
        public
        whenNotPaused
        onlyAdmin 
    {
        sponsors[_sponsor][_admin] = false;
        emit SponsorAdminRemoved(_sponsor, _admin);
    }

    function isSponsorAdmin(address _sponsor) 
        public view
        returns (bool isSponsorAdmin_)
    {
        isSponsorAdmin_ = sponsors[_sponsor][msg.sender] == true;
    }

    function setWalletAddress(address _walletAddress) 
        public
        whenNotPaused 
        onlyAdmin 
    {
        wallet = _walletAddress;
    }
    
    function setSoarStorageContract(address _address) 
        public
        whenNotPaused 
        onlyAdmin 
    {
        soarStorageContract = ISoarStorage(_address);
        soarStorageAddress = _address;
    }

    function setPricingContract(address _address) 
        public
        whenNotPaused 
        onlyAdmin     
    {
        pricingContract = IPricing(_address);
        pricingAddress = _address;
    }

    function setSkymapTokenContract(address _address) 
        public
        whenNotPaused 
        onlyAdmin 
    {
        skymapTokenContract = ERC20(_address);
        skymapTokenAddress = _address;
    }
    
    function setProfilesContract(address _address) 
        public
        whenNotPaused 
        onlyAdmin     
    {
        profilesContract = IProfiles(_address);
        profilesAddress = _address;
    }

}

Contract ABI

[{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sponsor","type":"address"}],"name":"isSponsorAdmin","outputs":[{"name":"isSponsorAdmin_","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"soarStorageAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_filehash","type":"bytes32"},{"name":"_challenge","type":"bytes32"}],"name":"buyListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSkymapTokenContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sponsor","type":"address"},{"name":"_admin","type":"address"}],"name":"addSponsorAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sponsor","type":"address"},{"name":"_owner","type":"address"},{"name":"_filehash","type":"bytes32"},{"name":"_previewUrl","type":"string"},{"name":"_url","type":"string"},{"name":"_pointWKT","type":"string"},{"name":"_geohash","type":"bytes12"},{"name":"_metadata","type":"string"}],"name":"sponsorUpdateListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pricingAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"counter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_filehash","type":"bytes32"}],"name":"listingExists","outputs":[{"name":"exists_","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sponsor","type":"address"},{"name":"_admin","type":"address"}],"name":"removeSponsorAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_geoHash","type":"bytes12"}],"name":"getPrice","outputs":[{"name":"price_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_filehash","type":"bytes32"},{"name":"_previewUrl","type":"string"},{"name":"_url","type":"string"},{"name":"_pointWKT","type":"string"},{"name":"_geohash","type":"bytes12"},{"name":"_metadata","type":"string"}],"name":"updateListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"removeLastAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_walletAddress","type":"address"}],"name":"setWalletAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"profilesAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sponsor","type":"address"},{"name":"_filehash","type":"bytes32"}],"name":"sponsorDeleteListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setPricingContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setProfilesContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_filehash","type":"bytes32"},{"name":"_previewUrl","type":"string"},{"name":"_url","type":"string"},{"name":"_pointWKT","type":"string"},{"name":"_geohash","type":"bytes12"},{"name":"_metadata","type":"string"}],"name":"createListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_filehash","type":"bytes32"}],"name":"deleteListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_ADMIN","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_filehash","type":"bytes32"},{"name":"_challenge","type":"bytes32"}],"name":"verifyUpload","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sponsor","type":"address"},{"name":"_metadata","type":"string"}],"name":"sponsorUpdateProfile","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_filehash","type":"bytes32"}],"name":"getListingPrice","outputs":[{"name":"price_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_filehash","type":"bytes32"},{"name":"_challenge","type":"bytes32"}],"name":"verifySale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"skymapTokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sponsor","type":"address"},{"name":"_owner","type":"address"},{"name":"_filehash","type":"bytes32"},{"name":"_previewUrl","type":"string"},{"name":"_url","type":"string"},{"name":"_pointWKT","type":"string"},{"name":"_geohash","type":"bytes12"},{"name":"_metadata","type":"string"}],"name":"sponsorCreateListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSoarStorageContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sponsor","type":"address"},{"name":"_owner","type":"address"},{"name":"_metadata","type":"string"}],"name":"sponsorUpdateSponsoredProfile","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sponsor","type":"address"},{"indexed":false,"name":"admin","type":"address"}],"name":"SponsorAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sponsor","type":"address"},{"indexed":false,"name":"admin","type":"address"}],"name":"SponsorAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":true,"name":"challenge","type":"bytes32"},{"indexed":false,"name":"filehash","type":"bytes32"},{"indexed":false,"name":"action","type":"string"}],"name":"Verification","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code

60806040526000805460a060020a60ff02191690557f3030303030303030303030303030303030303030303030303030303030303030600c55600d8054600160a060020a03191690553480156200005557600080fd5b5060008054600160a060020a0319163390811790915560408051808201909152600581527f61646d696e0000000000000000000000000000000000000000000000000000006020820152620000b49190640100000000620000d1810204565b600160025560038054600160a060020a031916331790556200021c565b6200014d826001836040518082805190602001908083835b602083106200010a5780518252601f199092019160209182019101620000e9565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050640100000000620001f7810262003c7b1704565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620001b85781810151838201526020016200019e565b50505050905090810190601f168015620001e65780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b613d0c806200022c6000396000f3006080604052600436106101ea5763ffffffff60e060020a6000350416630988ca8c81146101ef5780631022f428146102585780631785f53c1461028d578063217fe6c6146102ae57806324d7806c14610315578063281e4f431461033657806328875d8914610367578063341271251461038257806334f02438146103a35780633e2aa33f146103ca5780633f4ba83a146105035780634e3751d614610518578063521eb2731461052d5780635c975abb1461054257806361bc221a14610557578063704802751461057e578063715018a61461059f57806375bd3237146105b457806383561cab146105cc5780638456cb59146105f35780638a2e4ed0146106085780638b44def21461062a5780638da5cb5b14610752578063a120723a14610767578063ac1a386a14610788578063b0379971146107a9578063b2597779146107be578063c08afe2a146107e2578063c56b4aed14610803578063c5f2419c14610824578063d0491b9b1461094c578063d391014b14610964578063d42b0617146109ee578063d70417ee14610a09578063dc4fb6d414610a70578063dd3279ae14610a88578063ddd27f5014610aa3578063eaf1c48e14610ab8578063ebf2380914610bf1578063f2fde38b14610c12578063f78cb04314610c33578063f851a44014610ca2575b600080fd5b3480156101fb57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610256958335600160a060020a0316953695604494919390910191908190840183828082843750949750610cb79650505050505050565b005b34801561026457600080fd5b50610279600160a060020a0360043516610d25565b604080519115158252519081900360200190f35b34801561029957600080fd5b50610256600160a060020a0360043516610d53565b3480156102ba57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610279958335600160a060020a0316953695604494919390910191908190840183828082843750949750610dd99650505050505050565b34801561032157600080fd5b50610279600160a060020a0360043516610e4c565b34801561034257600080fd5b5061034b610e7e565b60408051600160a060020a039092168252519081900360200190f35b34801561037357600080fd5b50610256600435602435610e8d565b34801561038e57600080fd5b50610256600160a060020a03600435166113b6565b3480156103af57600080fd5b50610256600160a060020a0360043581169060243516611423565b3480156103d657600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261025694600160a060020a03813581169560248035909216956044359536956084940191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a03198b35169b909a9099940197509195509182019350915081908401838280828437509497506114d09650505050505050565b34801561050f57600080fd5b5061025661193f565b34801561052457600080fd5b5061034b6119b5565b34801561053957600080fd5b5061034b6119c4565b34801561054e57600080fd5b506102796119d3565b34801561056357600080fd5b5061056c6119e3565b60408051918252519081900360200190f35b34801561058a57600080fd5b50610256600160a060020a03600435166119e9565b3480156105ab57600080fd5b50610256611a49565b3480156105c057600080fd5b50610279600435611aa8565b3480156105d857600080fd5b50610256600160a060020a0360043581169060243516611b6f565b3480156105ff57600080fd5b50610256611c19565b34801561061457600080fd5b5061056c600160a060020a031960043516611c94565b34801561063657600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261025695833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a03198b35169b909a909994019750919550918201935091508190840183828082843750949750611d4e9650505050505050565b34801561075e57600080fd5b5061034b6121ee565b34801561077357600080fd5b50610256600160a060020a03600435166121fd565b34801561079457600080fd5b50610256600160a060020a036004351661224b565b3480156107b557600080fd5b5061034b6122ae565b3480156107ca57600080fd5b50610256600160a060020a03600435166024356122bd565b3480156107ee57600080fd5b50610256600160a060020a0360043516612537565b34801561080f57600080fd5b50610256600160a060020a03600435166125a4565b34801561083057600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261025695833595369560449491939091019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a03198b35169b909a9099940197509195509182019350915081908401838280828437509497506126119650505050505050565b34801561095857600080fd5b506102566004356129aa565b34801561097057600080fd5b50610979612c41565b6040805160208082528351818301528351919283929083019185019080838360005b838110156109b357818101518382015260200161099b565b50505050905090810190601f1680156109e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109fa57600080fd5b50610256600435602435612c63565b348015610a1557600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610256958335600160a060020a0316953695604494919390910191908190840183828082843750949750612e169650505050505050565b348015610a7c57600080fd5b5061056c600435612f8b565b348015610a9457600080fd5b506102566004356024356131da565b348015610aaf57600080fd5b5061034b613356565b348015610ac457600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261025694600160a060020a03813581169560248035909216956044359536956084940191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b600160a060020a03198b35169b909a9099940197509195509182019350915081908401838280828437509497506133659650505050505050565b348015610bfd57600080fd5b50610256600160a060020a036004351661378b565b348015610c1e57600080fd5b50610256600160a060020a03600435166137f8565b348015610c3f57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610256948235600160a060020a039081169560248035909216953695946064949293019190819084018382808284375094975061381b9650505050505050565b348015610cae57600080fd5b506102796139a1565b610d21826001836040518082805190602001908083835b60208310610ced5780518252601f199092019160209182019101610cce565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506139d2565b5050565b600160a060020a03166000908152600e6020908152604080832033845290915290205460ff16151560011490565b610d7d3360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b33600160a060020a0382161415610d9357600080fd5b600254600110610da257600080fd5b610dcc8160408051908101604052806005815260200160d960020a6430b236b4b7028152506139e7565b5060028054600019019055565b6000610e45836001846040518082805190602001908083835b60208310610e115780518252601f199092019160209182019101610df2565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050613af8565b9392505050565b6000610e788260408051908101604052806005815260200160d960020a6430b236b4b702815250610dd9565b92915050565b600654600160a060020a031681565b600080600080600080600080600060149054906101000a900460ff16151515610eb557600080fd5b600a546040805160e160020a636f208455028152600481018d90523360248201529051600160a060020a039092169163de4108aa9160648082019260a0929091908290030181600087803b158015610f0c57600080fd5b505af1158015610f20573d6000803e3d6000fd5b505050506040513d60a0811015610f3657600080fd5b50805160408201516080909201519099509097509550600160a060020a038816331415610f6257600080fd5b8515610f6d57600080fd5b600954604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051600160a060020a039092169163dd62ed3e916044808201926020929091908290030181600087803b158015610fd957600080fd5b505af1158015610fed573d6000803e3d6000fd5b505050506040513d602081101561100357600080fd5b5051600954604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051929750600160a060020a03909116916370a08231916024808201926020929091908290030181600087803b15801561106e57600080fd5b505af1158015611082573d6000803e3d6000fd5b505050506040513d602081101561109857600080fd5b5051600854604080517f8a2e4ed0000000000000000000000000000000000000000000000000000000008152600160a060020a03198b1660048201529051929650600160a060020a0390911691638a2e4ed0916024808201926020929091908290030181600087803b15801561110d57600080fd5b505af1158015611121573d6000803e3d6000fd5b505050506040513d602081101561113757600080fd5b505192508284101561114857600080fd5b8285101561115557600080fd5b5050600954604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0389811660248301526064808604605f026044840181905293519394858703949216926323b872dd92828201926020928290030181600087803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b505050506040513d60208110156111fe57600080fd5b5050600954600354604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03928316602482015260448101859052905191909216916323b872dd9160648083019260209291908290030181600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b5050600a54600c54604080517f73596ee00000000000000000000000000000000000000000000000000000000081523360048201526024810192909252604482018d90526064820186905251600160a060020a03909216916373596ee09160848082019260009290919082900301818387803b15801561132157600080fd5b505af1158015611335573d6000803e3d6000fd5b505060408051338152602081018e905260608183018190526004908201527f73616c6500000000000000000000000000000000000000000000000000000000608082015290518c93507f80d472b1d29a1c3d3b0d52f1d1e83ebbdfbd3da27577ed905cb0ce07b8befcee92509081900360a00190a250505050505050505050565b60005460a060020a900460ff16156113cd57600080fd5b6113f73360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b60098054600160a060020a03909216600160a060020a0319928316811790915560058054909216179055565b60005460a060020a900460ff161561143a57600080fd5b6114643360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b600160a060020a038083166000818152600e6020908152604080832094861680845294825291829020805460ff191660011790558151938452905191927fc9e86b73f959b84690c19a9ff5a9aaf1432211643e764e7d23a904682a7bc1de929081900390910190a25050565b60005460a060020a900460ff16156114e757600080fd5b600160a060020a0388166000908152600e6020908152604080832033845290915281205487918a91819060ff16151560011461155b576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020613ca1833981519152604482015290519081900360640190fd5b600a54600c546040805160e160020a636f20845502815260048101889052336024820152604481019290925251600160a060020a039092169163de4108aa9160648082019260a0929091908290030181600087803b1580156115bc57600080fd5b505af11580156115d0573d6000803e3d6000fd5b505050506040513d60a08110156115e657600080fd5b5060208101516060909101519092509050600160ff8216148061160c57508060ff166002145b1515611661576040805160e560020a62461bcd0281526020600482015260256024820152600080516020613cc1833981519152604482015260da60020a641b195d195902606482015290519081900360840190fd5b600160a060020a03828116908416146116c4576040805160e560020a62461bcd02815260206004820152601160248201527f496e636f72726563742073706f6e736f72000000000000000000000000000000604482015290519081900360640190fd5b600a60009054906101000a9004600160a060020a0316600160a060020a0316635e6ea10f8b8d8f8d8d8d8d8d6040518963ffffffff1660e060020a02815260040180896000191660001916815260200188600160a060020a0316600160a060020a0316815260200187600160a060020a0316600160a060020a0316815260200180602001806020018060200186600160a060020a031916600160a060020a03191681526020018060200185810385528a818151815260200191508051906020019080838360005b838110156117a357818101518382015260200161178b565b50505050905090810190601f1680156117d05780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b838110156118035781810151838201526020016117eb565b50505050905090810190601f1680156118305780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b8381101561186357818101518382015260200161184b565b50505050905090810190601f1680156118905780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b838110156118c35781810151838201526020016118ab565b50505050905090810190601f1680156118f05780820380516001836020036101000a031916815260200191505b509c50505050505050505050505050600060405180830381600087803b15801561191957600080fd5b505af115801561192d573d6000803e3d6000fd5b50505050505050505050505050505050565b600054600160a060020a0316331461195657600080fd5b60005460a060020a900460ff16151561196e57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b600454600160a060020a031681565b600354600160a060020a031681565b60005460a060020a900460ff1681565b60025481565b611a133360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b611a3d8160408051908101604052806005815260200160d960020a6430b236b4b702815250613b17565b50600280546001019055565b600054600160a060020a03163314611a6057600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b60008054819060a060020a900460ff1615611ac257600080fd5b600a54600c546040805160e160020a636f20845502815260048101879052336024820152604481019290925251600160a060020a039092169163de4108aa9160648082019260a0929091908290030181600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d60a0811015611b4d57600080fd5b50606001519050600160ff82161480610e4557508060ff166002149392505050565b60005460a060020a900460ff1615611b8657600080fd5b611bb03360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b600160a060020a038083166000818152600e6020908152604080832094861680845294825291829020805460ff191690558151938452905191927fa37b03ffa9ca3e4e24d2a99b422f3ad39735da8bf07eb1c29479e730fe4878fc929081900390910190a25050565b600054600160a060020a03163314611c3057600080fd5b60005460a060020a900460ff1615611c4757600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b6000805460a060020a900460ff1615611cac57600080fd5b600854604080517f8a2e4ed0000000000000000000000000000000000000000000000000000000008152600160a060020a0319851660048201529051600160a060020a0390921691638a2e4ed0916024808201926020929091908290030181600087803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b505050506040513d6020811015611d4657600080fd5b505192915050565b60005460a060020a900460ff1615611d6557600080fd5b600a54600c546040805160e160020a636f208455028152600481018a9052336024820152604481019290925251889260009283928392600160a060020a03169163de4108aa9160648083019260a092919082900301818787803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505050506040513d60a0811015611df557600080fd5b50805160208201516060909201519094509092509050600160ff82161480611e2057508060ff166002145b1515611e75576040805160e560020a62461bcd0281526020600482015260256024820152600080516020613cc1833981519152604482015260da60020a641b195d195902606482015290519081900360840190fd5b600160a060020a0383163314611ed5576040805160e560020a62461bcd02815260206004820152601260248201527f4f6e6c79206c697374696e67206f776e65720000000000000000000000000000604482015290519081900360640190fd5b600d54600160a060020a03838116911614611f60576040805160e560020a62461bcd02815260206004820152602660248201527f53706f6e736f72206d75737420626520656d70747920666f722075736572206c60448201527f697374696e670000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600a60009054906101000a9004600160a060020a0316600160a060020a0316635e6ea10f8b33600d60009054906101000a9004600160a060020a03168d8d8d8d8d6040518963ffffffff1660e060020a02815260040180896000191660001916815260200188600160a060020a0316600160a060020a0316815260200187600160a060020a0316600160a060020a0316815260200180602001806020018060200186600160a060020a031916600160a060020a03191681526020018060200185810385528a818151815260200191508051906020019080838360005b8381101561205457818101518382015260200161203c565b50505050905090810190601f1680156120815780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b838110156120b457818101518382015260200161209c565b50505050905090810190601f1680156120e15780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b838110156121145781810151838201526020016120fc565b50505050905090810190601f1680156121415780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b8381101561217457818101518382015260200161215c565b50505050905090810190601f1680156121a15780820380516001836020036101000a031916815260200191505b509c50505050505050505050505050600060405180830381600087803b1580156121ca57600080fd5b505af11580156121de573d6000803e3d6000fd5b5050505050505050505050505050565b600054600160a060020a031681565b6122273360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b60025460011461223657600080fd5b33600160a060020a03821614610da257600080fd5b60005460a060020a900460ff161561226257600080fd5b61228c3360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b60038054600160a060020a031916600160a060020a0392909216919091179055565b600754600160a060020a031681565b60005460a060020a900460ff16156122d457600080fd5b600160a060020a0382166000908152600e6020908152604080832033845290915281205482918491819060ff161515600114612348576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020613ca1833981519152604482015290519081900360640190fd5b600a54600c546040805160e160020a636f20845502815260048101889052336024820152604481019290925251600160a060020a039092169163de4108aa9160648082019260a0929091908290030181600087803b1580156123a957600080fd5b505af11580156123bd573d6000803e3d6000fd5b505050506040513d60a08110156123d357600080fd5b5060208101516060909101519092509050600160ff821614806123f957508060ff166002145b151561244e576040805160e560020a62461bcd0281526020600482015260256024820152600080516020613cc1833981519152604482015260da60020a641b195d195902606482015290519081900360840190fd5b600160a060020a03828116908416146124b1576040805160e560020a62461bcd02815260206004820152601160248201527f496e636f72726563742073706f6e736f72000000000000000000000000000000604482015290519081900360640190fd5b600a54604080517fd0491b9b000000000000000000000000000000000000000000000000000000008152600481018890529051600160a060020a039092169163d0491b9b9160248082019260009290919082900301818387803b15801561251757600080fd5b505af115801561252b573d6000803e3d6000fd5b50505050505050505050565b60005460a060020a900460ff161561254e57600080fd5b6125783360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b60088054600160a060020a03909216600160a060020a0319928316811790915560048054909216179055565b60005460a060020a900460ff16156125bb57600080fd5b6125e53360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b600b8054600160a060020a03909216600160a060020a0319928316811790915560078054909216179055565b60005460a060020a900460ff161561262857600080fd5b600a54600c546040805160e160020a636f208455028152600481018a90523360248201526044810192909252518892600092600160a060020a039091169163de4108aa9160648082019260a09290919082900301818787803b15801561268d57600080fd5b505af11580156126a1573d6000803e3d6000fd5b505050506040513d60a08110156126b757600080fd5b5060600151905060ff811615806126d157508060ff166003145b151561274d576040805160e560020a62461bcd02815260206004820152602860248201527f4c697374696e672063616e206e6f74206578697374206f72206d75737420626560448201527f2064656c65746564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600a54600d546040517f741a1b0f000000000000000000000000000000000000000000000000000000008152600481018b81523360248301819052600160a060020a0393841660448401819052600160a060020a03198a1660c4850152610100606485019081528d516101048601528d51959096169563741a1b0f958f95939492938f938f938f938f938f939291608482019160a481019160e4820191610124019060208c019080838360005b838110156128125781810151838201526020016127fa565b50505050905090810190601f16801561283f5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b8381101561287257818101518382015260200161285a565b50505050905090810190601f16801561289f5780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b838110156128d25781810151838201526020016128ba565b50505050905090810190601f1680156128ff5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b8381101561293257818101518382015260200161291a565b50505050905090810190601f16801561295f5780820380516001836020036101000a031916815260200191505b509c50505050505050505050505050600060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b505050505050505050505050565b60005460a060020a900460ff16156129c157600080fd5b600a54600c546040805160e160020a636f20845502815260048101859052336024820152604481019290925251839260009283928392600160a060020a03169163de4108aa9160648083019260a092919082900301818787803b158015612a2757600080fd5b505af1158015612a3b573d6000803e3d6000fd5b505050506040513d60a0811015612a5157600080fd5b50805160208201516060909201519094509092509050600160ff82161480612a7c57508060ff166002145b1515612ad1576040805160e560020a62461bcd0281526020600482015260256024820152600080516020613cc1833981519152604482015260da60020a641b195d195902606482015290519081900360840190fd5b600160a060020a0383163314612b31576040805160e560020a62461bcd02815260206004820152601260248201527f4f6e6c79206c697374696e67206f776e65720000000000000000000000000000604482015290519081900360640190fd5b600d54600160a060020a03838116911614612bbc576040805160e560020a62461bcd02815260206004820152602660248201527f53706f6e736f72206d75737420626520656d70747920666f722075736572206c60448201527f697374696e670000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600a54604080517fd0491b9b000000000000000000000000000000000000000000000000000000008152600481018890529051600160a060020a039092169163d0491b9b9160248082019260009290919082900301818387803b158015612c2257600080fd5b505af1158015612c36573d6000803e3d6000fd5b505050505050505050565b604080518082019091526005815260d960020a6430b236b4b702602082015281565b60005460a060020a900460ff1615612c7a57600080fd5b600a54600c546040805160e160020a636f208455028152600481018690523360248201526044810192909252518492600092600160a060020a039091169163de4108aa9160648082019260a09290919082900301818787803b158015612cdf57600080fd5b505af1158015612cf3573d6000803e3d6000fd5b505050506040513d60a0811015612d0957600080fd5b5060600151905060ff81161580612d2357508060ff166003145b1515612d9f576040805160e560020a62461bcd02815260206004820152602860248201527f4c697374696e672063616e206e6f74206578697374206f72206d75737420626560448201527f2064656c65746564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604080513381526020810186905260608183018190526006908201527f75706c6f616400000000000000000000000000000000000000000000000000006080820152905184917f80d472b1d29a1c3d3b0d52f1d1e83ebbdfbd3da27577ed905cb0ce07b8befcee919081900360a00190a250505050565b60005460a060020a900460ff1615612e2d57600080fd5b600160a060020a0382166000908152600e60209081526040808320338452909152902054829060ff161515600114612e9d576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020613ca1833981519152604482015290519081900360640190fd5b600b54604080517f6a4256ae000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301908152602483019384528651604484015286519190941693636a4256ae9388938893606490910190602085019080838360005b83811015612f21578181015183820152602001612f09565b50505050905090810190601f168015612f4e5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015612f6e57600080fd5b505af1158015612f82573d6000803e3d6000fd5b50505050505050565b60008054819060a060020a900460ff1615612fa557600080fd5b600a54600c546040805160e160020a636f208455028152600481018790523360248201526044810192909252518592600092600160a060020a039091169163de4108aa9160648082019260a09290919082900301818787803b15801561300a57600080fd5b505af115801561301e573d6000803e3d6000fd5b505050506040513d60a081101561303457600080fd5b50606001519050600160ff8216148061305057508060ff166002145b15156130a5576040805160e560020a62461bcd0281526020600482015260256024820152600080516020613cc1833981519152604482015260da60020a641b195d195902606482015290519081900360840190fd5b600a54600c546040805160e160020a636f20845502815260048101899052336024820152604481019290925251600160a060020a039092169163de4108aa9160648082019260a0929091908290030181600087803b15801561310657600080fd5b505af115801561311a573d6000803e3d6000fd5b505050506040513d60a081101561313057600080fd5b5060409081015160085482517f8a2e4ed0000000000000000000000000000000000000000000000000000000008152600160a060020a0319831660048201529251919550600160a060020a031691638a2e4ed09160248083019260209291908290030181600087803b1580156131a557600080fd5b505af11580156131b9573d6000803e3d6000fd5b505050506040513d60208110156131cf57600080fd5b505195945050505050565b60005460a060020a900460ff16156131f157600080fd5b600a54600c546040805160e160020a636f208455028152600481018690523360248201526044810192909252518492600092600160a060020a039091169163de4108aa9160648082019260a09290919082900301818787803b15801561325657600080fd5b505af115801561326a573d6000803e3d6000fd5b505050506040513d60a081101561328057600080fd5b50608001519050600081116132df576040805160e560020a62461bcd02815260206004820152601860248201527f4c697374696e67206973206e6f74207075726368617365640000000000000000604482015290519081900360640190fd5b604080513381526020810186905260608183018190526004908201527f73616c65000000000000000000000000000000000000000000000000000000006080820152905184917f80d472b1d29a1c3d3b0d52f1d1e83ebbdfbd3da27577ed905cb0ce07b8befcee919081900360a00190a250505050565b600554600160a060020a031681565b60005460a060020a900460ff161561337c57600080fd5b600a54600c546040805160e160020a636f208455028152600481018a90523360248201526044810192909252518892600092600160a060020a039091169163de4108aa9160648082019260a09290919082900301818787803b1580156133e157600080fd5b505af11580156133f5573d6000803e3d6000fd5b505050506040513d60a081101561340b57600080fd5b5060600151905060ff8116158061342557508060ff166003145b15156134a1576040805160e560020a62461bcd02815260206004820152602860248201527f4c697374696e672063616e206e6f74206578697374206f72206d75737420626560448201527f2064656c65746564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038a166000908152600e602090815260408083203384529091529020548a9060ff161515600114613511576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020613ca1833981519152604482015290519081900360640190fd5b600a60009054906101000a9004600160a060020a0316600160a060020a031663741a1b0f8a8c8e8c8c8c8c8c6040518963ffffffff1660e060020a02815260040180896000191660001916815260200188600160a060020a0316600160a060020a0316815260200187600160a060020a0316600160a060020a0316815260200180602001806020018060200186600160a060020a031916600160a060020a03191681526020018060200185810385528a818151815260200191508051906020019080838360005b838110156135f05781810151838201526020016135d8565b50505050905090810190601f16801561361d5780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015613650578181015183820152602001613638565b50505050905090810190601f16801561367d5780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b838110156136b0578181015183820152602001613698565b50505050905090810190601f1680156136dd5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b838110156137105781810151838201526020016136f8565b50505050905090810190601f16801561373d5780820380516001836020036101000a031916815260200191505b509c50505050505050505050505050600060405180830381600087803b15801561376657600080fd5b505af115801561377a573d6000803e3d6000fd5b505050505050505050505050505050565b60005460a060020a900460ff16156137a257600080fd5b6137cc3360408051908101604052806005815260200160d960020a6430b236b4b702815250610cb7565b600a8054600160a060020a03909216600160a060020a0319928316811790915560068054909216179055565b600054600160a060020a0316331461380f57600080fd5b61381881613be9565b50565b60005460a060020a900460ff161561383257600080fd5b600160a060020a0383166000908152600e60209081526040808320338452909152902054839060ff1615156001146138a2576040805160e560020a62461bcd02815260206004820152600c6024820152600080516020613ca1833981519152604482015290519081900360640190fd5b600b546040517fddc0e829000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483019081528682166024840152606060448401908152865160648501528651929094169363ddc0e8299389938993899390929091608490910190602085019080838360005b8381101561393557818101518382015260200161391d565b50505050905090810190601f1680156139625780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561398357600080fd5b505af1158015613997573d6000803e3d6000fd5b5050505050505050565b60006139cd3360408051908101604052806005815260200160d960020a6430b236b4b702815250610dd9565b905090565b6139dc8282613af8565b1515610d2157600080fd5b613a51826001836040518082805190602001908083835b60208310613a1d5780518252601f1990920191602091820191016139fe565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050613c59565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015613aba578181015183820152602001613aa2565b50505050905090810190601f168015613ae75780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a03166000908152602091909152604090205460ff1690565b613b81826001836040518082805190602001908083835b60208310613b4d5780518252601f199092019160209182019101613b2e565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050613c7b565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898260405180806020018281038252838181518152602001915080519060200190808383600083811015613aba578181015183820152602001613aa2565b600160a060020a0381161515613bfe57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff1916600117905556004f6e6c792073706f6e736f7200000000000000000000000000000000000000004c697374696e67206d75737420657869737420616e64206e6f74206265206465a165627a7a72305820c24b4afc89205feaf7130f63e851429d3e23f3ad7983658aa1e94d9cb8009db30029

Swarm Source

bzzr://c24b4afc89205feaf7130f63e851429d3e23f3ad7983658aa1e94d9cb8009db3
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward