ETH Price: $3,439.79 (+3.32%)
Gas: 0.27 Gwei

Contract

0xC322CDd03F34B6d25633C2ABBC8716A058c7fE9e
 

Overview

ETH Balance

0.252 ETH

Eth Value

$866.83 (@ $3,439.79/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Pause213796612024-12-11 13:48:11329 days ago1733924891IN
KnownOrigin: Token Marketplace
0 ETH0.0007067323.68643744
Delist Token212468502024-11-23 0:27:59348 days ago1732321679IN
KnownOrigin: Token Marketplace
0 ETH0.0004946313.92697806
Disable Auction210715162024-10-29 13:13:35372 days ago1730207615IN
KnownOrigin: Token Marketplace
0 ETH0.0012681521.49303766
Disable Auction210715132024-10-29 13:12:59372 days ago1730207579IN
KnownOrigin: Token Marketplace
0 ETH0.0012901521.86593419
Disable Auction210715092024-10-29 13:12:11372 days ago1730207531IN
KnownOrigin: Token Marketplace
0 ETH0.0013424322.751908
Disable Auction210715062024-10-29 13:11:35372 days ago1730207495IN
KnownOrigin: Token Marketplace
0 ETH0.0013158622.30170251
Disable Auction210715042024-10-29 13:11:11372 days ago1730207471IN
KnownOrigin: Token Marketplace
0 ETH0.0013892423.54540999
Disable Auction210714992024-10-29 13:10:11372 days ago1730207411IN
KnownOrigin: Token Marketplace
0 ETH0.0011658619.75946843
Disable Auction210714972024-10-29 13:09:47372 days ago1730207387IN
KnownOrigin: Token Marketplace
0 ETH0.0012527921.23704572
Disable Auction210714952024-10-29 13:09:23372 days ago1730207363IN
KnownOrigin: Token Marketplace
0 ETH0.0013078622.16605588
Disable Auction210714932024-10-29 13:08:59372 days ago1730207339IN
KnownOrigin: Token Marketplace
0 ETH0.0013157422.29964612
Disable Auction210714912024-10-29 13:08:35372 days ago1730207315IN
KnownOrigin: Token Marketplace
0 ETH0.0013129522.25238953
Disable Auction210714872024-10-29 13:07:47372 days ago1730207267IN
KnownOrigin: Token Marketplace
0 ETH0.0014338324.30110876
Disable Auction210714842024-10-29 13:07:11372 days ago1730207231IN
KnownOrigin: Token Marketplace
0 ETH0.0014728824.96290802
Disable Auction210714822024-10-29 13:06:47372 days ago1730207207IN
KnownOrigin: Token Marketplace
0 ETH0.0014084923.87150651
Disable Auction210714802024-10-29 13:06:23372 days ago1730207183IN
KnownOrigin: Token Marketplace
0 ETH0.0015615326.46527028
Disable Auction210714772024-10-29 13:05:47372 days ago1730207147IN
KnownOrigin: Token Marketplace
0 ETH0.0015394226.09054802
Disable Auction210714722024-10-29 13:04:47372 days ago1730207087IN
KnownOrigin: Token Marketplace
0 ETH0.0015951227.03457443
Disable Auction210711862024-10-29 12:07:11372 days ago1730203631IN
KnownOrigin: Token Marketplace
0 ETH0.000586739.94416626
Disable Auction210711452024-10-29 11:58:59372 days ago1730203139IN
KnownOrigin: Token Marketplace
0 ETH0.000532079.01778883
Disable Auction210711392024-10-29 11:57:47372 days ago1730203067IN
KnownOrigin: Token Marketplace
0 ETH0.000539519.14392435
Disable Auction210711352024-10-29 11:56:59372 days ago1730203019IN
KnownOrigin: Token Marketplace
0 ETH0.000488478.27876126
Disable Auction210711332024-10-29 11:56:35372 days ago1730202995IN
KnownOrigin: Token Marketplace
0 ETH0.000538329.12375192
Disable Auction210711302024-10-29 11:55:59372 days ago1730202959IN
KnownOrigin: Token Marketplace
0 ETH0.000524488.88910572
Disable Auction210711282024-10-29 11:55:35372 days ago1730202935IN
KnownOrigin: Token Marketplace
0 ETH0.000532349.02226215
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer210715162024-10-29 13:13:35372 days ago1730207615
KnownOrigin: Token Marketplace
0.03 ETH
Transfer210715132024-10-29 13:12:59372 days ago1730207579
KnownOrigin: Token Marketplace
0.03 ETH
Transfer210715092024-10-29 13:12:11372 days ago1730207531
KnownOrigin: Token Marketplace
0.04 ETH
Transfer210715062024-10-29 13:11:35372 days ago1730207495
KnownOrigin: Token Marketplace
0.04 ETH
Transfer210715042024-10-29 13:11:11372 days ago1730207471
KnownOrigin: Token Marketplace
0.05 ETH
Transfer210714992024-10-29 13:10:11372 days ago1730207411
KnownOrigin: Token Marketplace
0.05 ETH
Transfer210714972024-10-29 13:09:47372 days ago1730207387
KnownOrigin: Token Marketplace
0.066 ETH
Transfer210714952024-10-29 13:09:23372 days ago1730207363
KnownOrigin: Token Marketplace
0.07 ETH
Transfer210714932024-10-29 13:08:59372 days ago1730207339
KnownOrigin: Token Marketplace
0.08 ETH
Transfer210714912024-10-29 13:08:35372 days ago1730207315
KnownOrigin: Token Marketplace
0.085 ETH
Transfer210714872024-10-29 13:07:47372 days ago1730207267
KnownOrigin: Token Marketplace
0.08 ETH
Transfer210714842024-10-29 13:07:11372 days ago1730207231
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210714822024-10-29 13:06:47372 days ago1730207207
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210714802024-10-29 13:06:23372 days ago1730207183
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210714772024-10-29 13:05:47372 days ago1730207147
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210714722024-10-29 13:04:47372 days ago1730207087
KnownOrigin: Token Marketplace
0.8 ETH
Transfer210711862024-10-29 12:07:11372 days ago1730203631
KnownOrigin: Token Marketplace
0.13 ETH
Transfer210711452024-10-29 11:58:59372 days ago1730203139
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210711392024-10-29 11:57:47372 days ago1730203067
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210711352024-10-29 11:56:59372 days ago1730203019
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210711332024-10-29 11:56:35372 days ago1730202995
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210711302024-10-29 11:55:59372 days ago1730202959
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210711282024-10-29 11:55:35372 days ago1730202935
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210711212024-10-29 11:54:11372 days ago1730202851
KnownOrigin: Token Marketplace
0.1 ETH
Transfer210711182024-10-29 11:53:35372 days ago1730202815
KnownOrigin: Token Marketplace
0.1 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
TokenMarketplaceV2

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-11-15
*/

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

pragma solidity ^0.4.24;


/**
 * @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: openzeppelin-solidity/contracts/lifecycle/Pausable.sol

pragma solidity ^0.4.24;



/**
 * @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() public onlyOwner whenNotPaused {
    paused = true;
    emit Pause();
  }

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

// File: openzeppelin-solidity/contracts/access/rbac/Roles.sol

pragma solidity ^0.4.24;


/**
 * @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)
    internal
    view
  {
    require(has(_role, _addr));
  }

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

// File: openzeppelin-solidity/contracts/access/rbac/RBAC.sol

pragma solidity ^0.4.24;



/**
 * @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.
 */
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)
    public
    view
  {
    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)
    public
    view
    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: openzeppelin-solidity/contracts/access/Whitelist.sol

pragma solidity ^0.4.24;




/**
 * @title Whitelist
 * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions.
 * This simplifies the implementation of "user permissions".
 */
contract Whitelist is Ownable, RBAC {
  string public constant ROLE_WHITELISTED = "whitelist";

  /**
   * @dev Throws if operator is not whitelisted.
   * @param _operator address
   */
  modifier onlyIfWhitelisted(address _operator) {
    checkRole(_operator, ROLE_WHITELISTED);
    _;
  }

  /**
   * @dev add an address to the whitelist
   * @param _operator address
   * @return true if the address was added to the whitelist, false if the address was already in the whitelist
   */
  function addAddressToWhitelist(address _operator)
    public
    onlyOwner
  {
    addRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev getter to determine if address is in whitelist
   */
  function whitelist(address _operator)
    public
    view
    returns (bool)
  {
    return hasRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev add addresses to the whitelist
   * @param _operators addresses
   * @return true if at least one address was added to the whitelist,
   * false if all addresses were already in the whitelist
   */
  function addAddressesToWhitelist(address[] _operators)
    public
    onlyOwner
  {
    for (uint256 i = 0; i < _operators.length; i++) {
      addAddressToWhitelist(_operators[i]);
    }
  }

  /**
   * @dev remove an address from the whitelist
   * @param _operator address
   * @return true if the address was removed from the whitelist,
   * false if the address wasn't in the whitelist in the first place
   */
  function removeAddressFromWhitelist(address _operator)
    public
    onlyOwner
  {
    removeRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev remove addresses from the whitelist
   * @param _operators addresses
   * @return true if at least one address was removed from the whitelist,
   * false if all addresses weren't in the whitelist in the first place
   */
  function removeAddressesFromWhitelist(address[] _operators)
    public
    onlyOwner
  {
    for (uint256 i = 0; i < _operators.length; i++) {
      removeAddressFromWhitelist(_operators[i]);
    }
  }

}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.4.24;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // assert(_b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold
    return _a / _b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    assert(_b <= _a);
    return _a - _b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}

// File: contracts/v2/ReentrancyGuard.sol

pragma solidity ^0.4.24;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
contract ReentrancyGuard {
  bool private _notEntered = true;

  /**
   * @dev Prevents a contract from calling itself, directly or indirectly.
   * Calling a `nonReentrant` function from another `nonReentrant`
   * function is not supported. It is possible to prevent this from happening
   * by making the `nonReentrant` function external, and make it call a
   * `private` function that does the actual work.
   */
  modifier nonReentrant() {
    // On the first call to nonReentrant, _notEntered will be true
    require(_notEntered, "ReentrancyGuard: reentrant call");

    // Any calls to nonReentrant after this point will fail
    _notEntered = false;

    _;

    // By storing the original value once again, a refund is triggered (see
    // https://eips.ethereum.org/EIPS/eip-2200)
    _notEntered = true;
  }
}

// File: contracts/v2/marketplace/TokenMarketplaceV2.sol

pragma solidity ^0.4.24;





interface IKODAV2Methods {
  function ownerOf(uint256 _tokenId) external view returns (address _owner);

  function exists(uint256 _tokenId) external view returns (bool _exists);

  function editionOfTokenId(uint256 _tokenId) external view returns (uint256 tokenId);

  function artistCommission(uint256 _tokenId) external view returns (address _artistAccount, uint256 _artistCommission);

  function editionOptionalCommission(uint256 _tokenId) external view returns (uint256 _rate, address _recipient);

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

// Based on ITokenMarketplace.sol
contract TokenMarketplaceV2 is Whitelist, Pausable, ReentrancyGuard {
  using SafeMath for uint256;

  event UpdatePlatformPercentageFee(uint256 _oldPercentage, uint256 _newPercentage);
  event UpdateRoyaltyPercentageFee(uint256 _oldPercentage, uint256 _newPercentage);
  event UpdateMinBidAmount(uint256 minBidAmount);

  event TokenListed(
    uint256 indexed _tokenId,
    address indexed _seller,
    uint256 _price
  );

  event TokenDeListed(
    uint256 indexed _tokenId
  );

  event TokenPurchased(
    uint256 indexed _tokenId,
    address indexed _buyer,
    address indexed _seller,
    uint256 _price
  );

  event BidPlaced(
    uint256 indexed _tokenId,
    address indexed _currentOwner,
    address indexed _bidder,
    uint256 _amount
  );

  event BidWithdrawn(
    uint256 indexed _tokenId,
    address indexed _bidder
  );

  event BidAccepted(
    uint256 indexed _tokenId,
    address indexed _currentOwner,
    address indexed _bidder,
    uint256 _amount
  );

  event BidRejected(
    uint256 indexed _tokenId,
    address indexed _currentOwner,
    address indexed _bidder,
    uint256 _amount
  );

  event AuctionEnabled(
    uint256 indexed _tokenId,
    address indexed _auctioneer
  );

  event AuctionDisabled(
    uint256 indexed _tokenId,
    address indexed _auctioneer
  );

  event ListingEnabled(
    uint256 indexed _tokenId
  );

  event ListingDisabled(
    uint256 indexed _tokenId
  );

  struct Offer {
    address bidder;
    uint256 offer;
  }

  struct Listing {
    uint256 price;
    address seller;
  }

  // Min increase in bid/list amount
  uint256 public minBidAmount = 0.04 ether;

  // Interface into the KODA world
  IKODAV2Methods public kodaAddress;

  // KO account which can receive commission
  address public koCommissionAccount;

  uint256 public artistRoyaltyPercentage = 100;
  uint256 public platformFeePercentage = 25;

  // Token ID to Offer mapping
  mapping(uint256 => Offer) public offers;

  // Token ID to Listing
  mapping(uint256 => Listing) public listings;

  // Explicitly disable sales for specific tokens
  mapping(uint256 => bool) public disabledTokens;

  // Explicitly disable listings for specific tokens
  mapping(uint256 => bool) public disabledListings;

  ///////////////
  // Modifiers //
  ///////////////

  modifier onlyWhenOfferOwner(uint256 _tokenId) {
    require(offers[_tokenId].bidder == msg.sender, "Not offer maker");
    _;
  }

  modifier onlyWhenTokenExists(uint256 _tokenId) {
    require(kodaAddress.exists(_tokenId), "Token does not exist");
    _;
  }

  modifier onlyWhenBidOverMinAmount(uint256 _tokenId) {
    require(msg.value >= offers[_tokenId].offer.add(minBidAmount), "Offer not enough");
    _;
  }

  modifier onlyWhenTokenAuctionEnabled(uint256 _tokenId) {
    require(!disabledTokens[_tokenId], "Token not enabled for offers");
    _;
  }

  /////////////////
  // Constructor //
  /////////////////

  // Set the caller as the default KO account
  constructor(IKODAV2Methods _kodaAddress, address _koCommissionAccount) public {
    kodaAddress = _kodaAddress;
    koCommissionAccount = _koCommissionAccount;
    super.addAddressToWhitelist(msg.sender);
  }

  //////////////////////////
  // User Bidding Actions //
  //////////////////////////

  function placeBid(uint256 _tokenId)
  public
  payable
  whenNotPaused
  nonReentrant
  onlyWhenTokenExists(_tokenId)
  onlyWhenBidOverMinAmount(_tokenId)
  onlyWhenTokenAuctionEnabled(_tokenId)
  {
    require(!isContract(msg.sender), "Unable to place a bid as a contract");
    _refundHighestBidder(_tokenId);

    offers[_tokenId] = Offer({bidder : msg.sender, offer : msg.value});

    address currentOwner = kodaAddress.ownerOf(_tokenId);

    emit BidPlaced(_tokenId, currentOwner, msg.sender, msg.value);
  }

  function withdrawBid(uint256 _tokenId)
  public
  whenNotPaused
  nonReentrant
  onlyWhenTokenExists(_tokenId)
  onlyWhenOfferOwner(_tokenId)
  {
    _refundHighestBidder(_tokenId);

    emit BidWithdrawn(_tokenId, msg.sender);
  }

  function rejectBid(uint256 _tokenId)
  public
  whenNotPaused
  nonReentrant
  {
    address currentOwner = kodaAddress.ownerOf(_tokenId);
    require(currentOwner == msg.sender, "Not token owner");

    uint256 currentHighestBiddersAmount = offers[_tokenId].offer;
    require(currentHighestBiddersAmount > 0, "No offer open");

    address currentHighestBidder = offers[_tokenId].bidder;

    _refundHighestBidder(_tokenId);

    emit BidRejected(_tokenId, currentOwner, currentHighestBidder, currentHighestBiddersAmount);
  }

  function acceptBid(uint256 _tokenId, uint256 _acceptedAmount)
  public
  whenNotPaused
  nonReentrant
  {
    address currentOwner = kodaAddress.ownerOf(_tokenId);
    require(currentOwner == msg.sender, "Not token owner");

    Offer storage offer = offers[_tokenId];

    uint256 winningOffer = offer.offer;

    // Check valid offer and offer not replaced whilst inflight
    require(winningOffer > 0 && _acceptedAmount >= winningOffer, "Offer amount not satisfied");

    address winningBidder = offer.bidder;

    delete offers[_tokenId];

    // Get edition no.
    uint256 editionNumber = kodaAddress.editionOfTokenId(_tokenId);

    _handleFunds(editionNumber, winningOffer, currentOwner);

    kodaAddress.safeTransferFrom(msg.sender, winningBidder, _tokenId);

    emit BidAccepted(_tokenId, currentOwner, winningBidder, winningOffer);
  }

  function _refundHighestBidder(uint256 _tokenId) internal {
    // Get current highest bidder
    address currentHighestBidder = offers[_tokenId].bidder;

    if (currentHighestBidder != address(0)) {

      // Get current highest bid amount
      uint256 currentHighestBiddersAmount = offers[_tokenId].offer;

      if (currentHighestBiddersAmount > 0) {

        // Clear out highest bidder
        delete offers[_tokenId];

        // Refund it
        currentHighestBidder.transfer(currentHighestBiddersAmount);
      }
    }
  }

  //////////////////////////
  // User Listing Actions //
  //////////////////////////

  function listToken(uint256 _tokenId, uint256 _listingPrice)
  public
  whenNotPaused {
    require(!disabledListings[_tokenId], "Listing disabled");

    // Check ownership before listing
    address tokenOwner = kodaAddress.ownerOf(_tokenId);
    require(tokenOwner == msg.sender, "Not token owner");

    // Check price over min bid
    require(_listingPrice >= minBidAmount, "Listing price not enough");

    // List the token
    listings[_tokenId] = Listing({
    price : _listingPrice,
    seller : msg.sender
    });

    emit TokenListed(_tokenId, msg.sender, _listingPrice);
  }

  function delistToken(uint256 _tokenId)
  public
  whenNotPaused {

    // check listing found
    require(listings[_tokenId].seller != address(0), "No listing found");

    // check owner is msg.sender
    require(kodaAddress.ownerOf(_tokenId) == msg.sender, "Only the current owner can delist");

    _delistToken(_tokenId);
  }

  function buyToken(uint256 _tokenId)
  public
  payable
  nonReentrant
  whenNotPaused {
    Listing storage listing = listings[_tokenId];

    // check token is listed
    require(listing.seller != address(0), "No listing found");

    // check current owner is the lister as it may have changed hands
    address currentOwner = kodaAddress.ownerOf(_tokenId);
    require(listing.seller == currentOwner, "Listing not valid, token owner has changed");

    // check listing satisfied
    uint256 listingPrice = listing.price;
    require(msg.value == listingPrice, "List price not satisfied");

    // Get edition no.
    uint256 editionNumber = kodaAddress.editionOfTokenId(_tokenId);

    // refund any open offers on it
    Offer storage offer = offers[_tokenId];
    _refundHighestBidder(_tokenId);

    // split funds
    _handleFunds(editionNumber, listingPrice, currentOwner);

    // transfer token to buyer
    kodaAddress.safeTransferFrom(currentOwner, msg.sender, _tokenId);

    // de-list the token
    _delistToken(_tokenId);

    // Fire confirmation event
    emit TokenPurchased(_tokenId, msg.sender, currentOwner, listingPrice);
  }

  function _delistToken(uint256 _tokenId) private {
    delete listings[_tokenId];

    emit TokenDeListed(_tokenId);
  }

  ////////////////////
  // Funds handling //
  ////////////////////

  function _handleFunds(uint256 _editionNumber, uint256 _offer, address _currentOwner) internal {

    // Get existing artist commission
    (address artistAccount, uint256 artistCommissionRate) = kodaAddress.artistCommission(_editionNumber);

    // Get existing optional commission
    (uint256 optionalCommissionRate, address optionalCommissionRecipient) = kodaAddress.editionOptionalCommission(_editionNumber);

    _splitFunds(artistAccount, artistCommissionRate, optionalCommissionRecipient, optionalCommissionRate, _offer, _currentOwner);
  }

  function _splitFunds(
    address _artistAccount,
    uint256 _artistCommissionRate,
    address _optionalCommissionRecipient,
    uint256 _optionalCommissionRate,
    uint256 _offer,
    address _currentOwner
  ) internal {

    // Work out total % of royalties to payout = creator royalties + KO commission
    uint256 totalCommissionPercentageToPay = platformFeePercentage.add(artistRoyaltyPercentage);

    // Send current owner majority share of the offer
    uint256 totalToSendToOwner = _offer.sub(
      _offer.div(1000).mul(totalCommissionPercentageToPay)
    );
    _currentOwner.transfer(totalToSendToOwner);

    // Send % to KO
    uint256 koCommission = _offer.div(1000).mul(platformFeePercentage);
    koCommissionAccount.transfer(koCommission);

    // Send to seller minus royalties and commission
    uint256 remainingRoyalties = _offer.sub(koCommission).sub(totalToSendToOwner);

    if (_optionalCommissionRecipient == address(0)) {
      // After KO and Seller - send the rest to the original artist
      _artistAccount.transfer(remainingRoyalties);
    } else {
      _handleOptionalSplits(_artistAccount, _artistCommissionRate, _optionalCommissionRecipient, _optionalCommissionRate, remainingRoyalties);
    }
  }

  function _handleOptionalSplits(
    address _artistAccount,
    uint256 _artistCommissionRate,
    address _optionalCommissionRecipient,
    uint256 _optionalCommissionRate,
    uint256 _remainingRoyalties
  ) internal {
    uint256 _totalCollaboratorsRate = _artistCommissionRate.add(_optionalCommissionRate);
    uint256 _scaledUpCommission = _artistCommissionRate.mul(10 ** 18);

    // work out % of royalties total to split e.g. 43 / 85 = 50.5882353%
    uint256 primaryArtistPercentage = _scaledUpCommission.div(_totalCollaboratorsRate);

    uint256 totalPrimaryRoyaltiesToArtist = _remainingRoyalties.mul(primaryArtistPercentage).div(10 ** 18);
    _artistAccount.transfer(totalPrimaryRoyaltiesToArtist);

    uint256 remainingRoyaltiesToCollaborator = _remainingRoyalties.sub(totalPrimaryRoyaltiesToArtist);
    _optionalCommissionRecipient.transfer(remainingRoyaltiesToCollaborator);
  }

  ///////////////////
  // Query Methods //
  ///////////////////

  function tokenOffer(uint256 _tokenId) external view returns (address _bidder, uint256 _offer, address _owner, bool _enabled, bool _paused) {
    Offer memory offer = offers[_tokenId];
    return (
    offer.bidder,
    offer.offer,
    kodaAddress.ownerOf(_tokenId),
    !disabledTokens[_tokenId],
    paused
    );
  }

  function determineSaleValues(uint256 _tokenId) external view returns (uint256 _sellerTotal, uint256 _platformFee, uint256 _royaltyFee) {
    Offer memory offer = offers[_tokenId];
    uint256 offerValue = offer.offer;
    uint256 fee = offerValue.div(1000).mul(platformFeePercentage);
    uint256 royalties = offerValue.div(1000).mul(artistRoyaltyPercentage);

    return (
    offer.offer.sub(fee).sub(royalties),
    fee,
    royalties
    );
  }

  function tokenListingDetails(uint256 _tokenId) external view returns (uint256 _price, address _lister, address _currentOwner) {
    Listing memory listing = listings[_tokenId];
    return (
    listing.price,
    listing.seller,
    kodaAddress.ownerOf(_tokenId)
    );
  }

  function isContract(address account) internal view returns (bool) {
    // This method relies in extcodesize, which returns 0 for contracts in
    // construction, since the code is only stored at the end of the
    // constructor execution.
    uint256 size;
    // solhint-disable-next-line no-inline-assembly
    assembly {size := extcodesize(account)}
    return size > 0;
  }

  ///////////////////
  // Admin Actions //
  ///////////////////

  function disableAuction(uint256 _tokenId)
  public
  onlyIfWhitelisted(msg.sender)
  {
    _refundHighestBidder(_tokenId);

    disabledTokens[_tokenId] = true;

    emit AuctionDisabled(_tokenId, msg.sender);
  }

  function enableAuction(uint256 _tokenId)
  public
  onlyIfWhitelisted(msg.sender)
  {
    _refundHighestBidder(_tokenId);

    disabledTokens[_tokenId] = false;

    emit AuctionEnabled(_tokenId, msg.sender);
  }

  function disableListing(uint256 _tokenId)
  public
  onlyIfWhitelisted(msg.sender)
  {
    _delistToken(_tokenId);

    disabledListings[_tokenId] = true;

    emit ListingDisabled(_tokenId);
  }

  function enableListing(uint256 _tokenId)
  public
  onlyIfWhitelisted(msg.sender)
  {
    disabledListings[_tokenId] = false;

    emit ListingEnabled(_tokenId);
  }

  function setMinBidAmount(uint256 _minBidAmount) onlyIfWhitelisted(msg.sender) public {
    minBidAmount = _minBidAmount;
    emit UpdateMinBidAmount(minBidAmount);
  }

  function setKodavV2(IKODAV2Methods _kodaAddress) onlyIfWhitelisted(msg.sender) public {
    kodaAddress = _kodaAddress;
  }

  function setKoCommissionAccount(address _koCommissionAccount) public onlyIfWhitelisted(msg.sender) {
    require(_koCommissionAccount != address(0), "Invalid address");
    koCommissionAccount = _koCommissionAccount;
  }

  function setArtistRoyaltyPercentage(uint256 _artistRoyaltyPercentage) public onlyIfWhitelisted(msg.sender) {
    emit UpdateRoyaltyPercentageFee(artistRoyaltyPercentage, _artistRoyaltyPercentage);
    artistRoyaltyPercentage = _artistRoyaltyPercentage;
  }

  function setPlatformPercentage(uint256 _platformFeePercentage) public onlyIfWhitelisted(msg.sender) {
    emit UpdatePlatformPercentageFee(platformFeePercentage, _platformFeePercentage);
    platformFeePercentage = _platformFeePercentage;
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_acceptedAmount","type":"uint256"}],"name":"acceptBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"enableAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"withdrawBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_platformFeePercentage","type":"uint256"}],"name":"setPlatformPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_WHITELISTED","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"disabledTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"name":"_operators","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"determineSaleValues","outputs":[{"name":"_sellerTotal","type":"uint256"},{"name":"_platformFee","type":"uint256"},{"name":"_royaltyFee","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"buyToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_minBidAmount","type":"uint256"}],"name":"setMinBidAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minBidAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"artistRoyaltyPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"disableListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"rejectBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"koCommissionAccount","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_listingPrice","type":"uint256"}],"name":"listToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"}],"name":"addAddressToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"enableListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenOffer","outputs":[{"name":"_bidder","type":"address"},{"name":"_offer","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_enabled","type":"bool"},{"name":"_paused","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"offers","outputs":[{"name":"bidder","type":"address"},{"name":"offer","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_koCommissionAccount","type":"address"}],"name":"setKoCommissionAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_artistRoyaltyPercentage","type":"uint256"}],"name":"setArtistRoyaltyPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"placeBid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"disabledListings","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"disableAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kodaAddress","type":"address"}],"name":"setKodavV2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"delistToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"platformFeePercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenListingDetails","outputs":[{"name":"_price","type":"uint256"},{"name":"_lister","type":"address"},{"name":"_currentOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"listings","outputs":[{"name":"price","type":"uint256"},{"name":"seller","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kodaAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operators","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_kodaAddress","type":"address"},{"name":"_koCommissionAccount","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_oldPercentage","type":"uint256"},{"indexed":false,"name":"_newPercentage","type":"uint256"}],"name":"UpdatePlatformPercentageFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_oldPercentage","type":"uint256"},{"indexed":false,"name":"_newPercentage","type":"uint256"}],"name":"UpdateRoyaltyPercentageFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minBidAmount","type":"uint256"}],"name":"UpdateMinBidAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_seller","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"TokenListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"TokenDeListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_buyer","type":"address"},{"indexed":true,"name":"_seller","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"TokenPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_currentOwner","type":"address"},{"indexed":true,"name":"_bidder","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"BidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_bidder","type":"address"}],"name":"BidWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_currentOwner","type":"address"},{"indexed":true,"name":"_bidder","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"BidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_currentOwner","type":"address"},{"indexed":true,"name":"_bidder","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"BidRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_auctioneer","type":"address"}],"name":"AuctionEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_auctioneer","type":"address"}],"name":"AuctionDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"ListingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"ListingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","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":[{"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"}]

60806040526002805461ffff1916610100179055668e1bc9bf040000600355606460065560196007553480156200003557600080fd5b50604051604080620031828339810160405280516020909101516000805433600160a060020a03199182168117909255600480548216600160a060020a038087169190911790915560058054909216908416179055620000a390640100000000620000ab810262001ba81704565b505062000261565b600054600160a060020a03163314620000c357600080fd5b62000113816040805190810160405280600981526020017f77686974656c697374000000000000000000000000000000000000000000000081525062000116640100000000026401000000009004565b50565b62000192826001836040518082805190602001908083835b602083106200014f5780518252601f1990920191602091820191016200012e565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506401000000006200023c810262002d6d1704565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620001fd578181015183820152602001620001e3565b50505050905090810190601f1680156200022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b612f1180620002716000396000f3006080604052600436106102035763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302e9d5e481146102085780630872ef6e146102255780630988ca8c1461023d5780630eaaf4c8146102a457806314d39bad146102bc57806318b919e9146102d4578063210d61011461035e578063217fe6c61461038a57806324953eaa146103f157806326aa594214610446578063286dd3f51461047c5780632d296bf11461049d5780633f4ba83a146104a8578063417fd6b6146104bd57806349751788146104d55780635c06d0e0146104fc5780635c3fec1e146105115780635c975abb146105295780636e3341b31461053e5780636e93dbdc14610556578063715018a61461058757806375c1631d1461059c5780637b9417c8146105b7578063811adfbe146105d85780638456cb59146105f05780638795dcff146106055780638a72ea6a146106595780638da5cb5b14610694578063953e474a146106a95780639841ee39146106ca5780639979ef45146106e25780639b19251a146106ed578063baea69441461070e578063bb435c8d14610726578063bbee17a31461073e578063bed659bc1461075f578063cdd78cfc14610777578063cfc307381461078c578063de74e57b146107cc578063e0758c9d14610805578063e2ec6ec31461081a578063f2fde38b1461086f575b600080fd5b34801561021457600080fd5b50610223600435602435610890565b005b34801561023157600080fd5b50610223600435610c15565b34801561024957600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610223958335600160a060020a0316953695604494919390910191908190840183828082843750949750610c909650505050505050565b3480156102b057600080fd5b50610223600435610cfe565b3480156102c857600080fd5b50610223600435610f0b565b3480156102e057600080fd5b506102e9610f7c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036a57600080fd5b50610376600435610fa1565b604080519115158252519081900360200190f35b34801561039657600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610376958335600160a060020a0316953695604494919390910191908190840183828082843750949750610fb69650505050505050565b3480156103fd57600080fd5b50604080516020600480358082013583810280860185019096528085526102239536959394602494938501929182918501908490808284375094975061102b9650505050505050565b34801561045257600080fd5b5061045e600435611078565b60408051938452602084019290925282820152519081900360600190f35b34801561048857600080fd5b50610223600160a060020a0360043516611132565b610223600435611179565b3480156104b457600080fd5b50610223611575565b3480156104c957600080fd5b506102236004356115d2565b3480156104e157600080fd5b506104ea61163c565b60408051918252519081900360200190f35b34801561050857600080fd5b506104ea611642565b34801561051d57600080fd5b50610223600435611648565b34801561053557600080fd5b506103766116c3565b34801561054a57600080fd5b506102236004356116cc565b34801561056257600080fd5b5061056b611907565b60408051600160a060020a039092168252519081900360200190f35b34801561059357600080fd5b50610223611916565b3480156105a857600080fd5b50610223600435602435611975565b3480156105c357600080fd5b50610223600160a060020a0360043516611ba8565b3480156105e457600080fd5b50610223600435611bec565b3480156105fc57600080fd5b50610223611c5b565b34801561061157600080fd5b5061061d600435611cba565b60408051600160a060020a0396871681526020810195909552929094168383015215156060830152911515608082015290519081900360a00190f35b34801561066557600080fd5b50610671600435611da1565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3480156106a057600080fd5b5061056b611dc6565b3480156106b557600080fd5b50610223600160a060020a0360043516611dd5565b3480156106d657600080fd5b50610223600435611e86565b610223600435611ef7565b3480156106f957600080fd5b50610376600160a060020a03600435166122d2565b34801561071a57600080fd5b50610376600435612301565b34801561073257600080fd5b50610223600435612316565b34801561074a57600080fd5b50610223600160a060020a0360043516612394565b34801561076b57600080fd5b506102236004356123e5565b34801561078357600080fd5b506104ea612570565b34801561079857600080fd5b506107a4600435612576565b60408051938452600160a060020a039283166020850152911682820152519081900360600190f35b3480156107d857600080fd5b506107e460043561263c565b60408051928352600160a060020a0390911660208301528051918290030190f35b34801561081157600080fd5b5061056b61265e565b34801561082657600080fd5b50604080516020600480358082013583810280860185019096528085526102239536959394602494938501929182918501908490808284375094975061266d9650505050505050565b34801561087b57600080fd5b50610223600160a060020a03600435166126ba565b600254600090819081908190819060ff16156108ab57600080fd5b600254610100900460ff1615156108fa576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff0019169055600480546040805160e160020a6331a9108f0281529283018a905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506040513d602081101561097e57600080fd5b50519450600160a060020a03851633146109e2576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b60008781526008602052604081206001810154909550935083118015610a085750828610155b1515610a5e576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6666657220616d6f756e74206e6f7420736174697366696564000000000000604482015290519081900360640190fd5b835460008881526008602090815260408083208054600160a060020a03191681556001018390556004805482517f824eec3b0000000000000000000000000000000000000000000000000000000081529182018d90529151600160a060020a039586169750949091169363824eec3b93602480840194938390030190829087803b158015610aeb57600080fd5b505af1158015610aff573d6000803e3d6000fd5b505050506040513d6020811015610b1557600080fd5b50519050610b248184876126da565b60048054604080517f42842e0e0000000000000000000000000000000000000000000000000000000081523393810193909352600160a060020a038581166024850152604484018b905290519116916342842e0e91606480830192600092919082900301818387803b158015610b9957600080fd5b505af1158015610bad573d6000803e3d6000fd5b5050505081600160a060020a031685600160a060020a0316887fe6d56779a392535d3a591e92b65ba36f2ecc424bbf5220d0176a7da29385b504866040518082815260200191505060405180910390a450506002805461ff0019166101001790555050505050565b33610c4381604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b610c4c8261282e565b6000828152600a6020526040808220805460ff1916905551339184917fdeb115d202a55795fb5e47cee9ce6c0bd792a016a2d1251f937b1bb24e92332e9190a35050565b610cfa826001836040518082805190602001908083835b60208310610cc65780518252601f199092019160209182019101610ca7565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506128c4565b5050565b60025460ff1615610d0e57600080fd5b600254610100900460ff161515610d5d576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff001916905560048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301849052518392600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b158015610dcf57600080fd5b505af1158015610de3573d6000803e3d6000fd5b505050506040513d6020811015610df957600080fd5b50511515610e51576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6000828152600860205260409020548290600160a060020a03163314610ec1576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f74206f66666572206d616b65720000000000000000000000000000000000604482015290519081900360640190fd5b610eca8361282e565b604051339084907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a90600090a350506002805461ff00191661010017905550565b33610f3981604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b600754604080519182526020820184905280517feacf709830352fe1a96d6837caea6476163d682a42a64eb621b34d9b901b50009281900390910190a150600755565b6040805180820190915260098152600080516020612ea6833981519152602082015281565b600a6020526000908152604090205460ff1681565b6000611022836001846040518082805190602001908083835b60208310610fee5780518252601f199092019160209182019101610fcf565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506128d9565b90505b92915050565b60008054600160a060020a0316331461104357600080fd5b5060005b8151811015610cfa57611070828281518110151561106157fe5b90602001906020020151611132565b600101611047565b6000806000611085612e8e565b50600084815260086020908152604080832081518083019092528054600160a060020a031682526001015491810182905260075490929081906110e0906110d4856103e863ffffffff6128f816565b9063ffffffff61290d16565b6006549092506110fc906110d4856103e863ffffffff6128f816565b90506111258161111984876020015161293690919063ffffffff16565b9063ffffffff61293616565b9891975095509350505050565b600054600160a060020a0316331461114957600080fd5b61117681604080519081016040528060098152602001600080516020612ea6833981519152815250612948565b50565b6000806000806000600260019054906101000a900460ff1615156111d5576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff0019811690915560ff16156111ef57600080fd5b60008681526009602052604090206001810154909550600160a060020a03161515611264576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f206c697374696e6720666f756e6400000000000000000000000000000000604482015290519081900360640190fd5b600480546040805160e160020a6331a9108f02815292830189905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b505050506040513d60208110156112dd57600080fd5b50516001860154909450600160a060020a0380861691161461136f576040805160e560020a62461bcd02815260206004820152602a60248201527f4c697374696e67206e6f742076616c69642c20746f6b656e206f776e6572206860448201527f6173206368616e67656400000000000000000000000000000000000000000000606482015290519081900360840190fd5b845492503483146113ca576040805160e560020a62461bcd02815260206004820152601860248201527f4c697374207072696365206e6f74207361746973666965640000000000000000604482015290519081900360640190fd5b60048054604080517f824eec3b00000000000000000000000000000000000000000000000000000000815292830189905251600160a060020a039091169163824eec3b9160248083019260209291908290030181600087803b15801561142f57600080fd5b505af1158015611443573d6000803e3d6000fd5b505050506040513d602081101561145957600080fd5b5051600087815260086020526040902090925090506114778661282e565b6114828284866126da565b60048054604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452336024820152604481018a9052905192909116916342842e0e9160648082019260009290919082900301818387803b1580156114fa57600080fd5b505af115801561150e573d6000803e3d6000fd5b5050505061151b86612a59565b604080518481529051600160a060020a03861691339189917f704cf6cb1221490022185412a0f82fd80ca9ccf7b5f84482727d0f6924265bd8919081900360200190a450506002805461ff00191661010017905550505050565b600054600160a060020a0316331461158c57600080fd5b60025460ff16151561159d57600080fd5b6002805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b3361160081604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b60038290556040805183815290517f2bc4b9fa5449471c716310263f78104dee5bcb66018bcdb48fd1f61f5de81a1b9181900360200190a15050565b60035481565b60065481565b3361167681604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b61167f82612a59565b6000828152600b6020526040808220805460ff191660011790555183917ff50274e1c6256cf77899d9c47b15ab288f85c61c6582acb8ffc3af541eac10a391a25050565b60025460ff1681565b6002546000908190819060ff16156116e357600080fd5b600254610100900460ff161515611732576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff0019169055600480546040805160e160020a6331a9108f02815292830187905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b15801561178c57600080fd5b505af11580156117a0573d6000803e3d6000fd5b505050506040513d60208110156117b657600080fd5b50519250600160a060020a038316331461181a576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b60008481526008602052604081206001015492508211611884576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f206f66666572206f70656e00000000000000000000000000000000000000604482015290519081900360640190fd5b50600083815260086020526040902054600160a060020a03166118a68461282e565b80600160a060020a031683600160a060020a0316857f6d699e170cc72516120ba19fe48e744504798d1afc2ffb65ff1154a6f4fa4d15856040518082815260200191505060405180910390a450506002805461ff0019166101001790555050565b600554600160a060020a031681565b600054600160a060020a0316331461192d57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b60025460009060ff161561198857600080fd5b6000838152600b602052604090205460ff16156119ef576040805160e560020a62461bcd02815260206004820152601060248201527f4c697374696e672064697361626c656400000000000000000000000000000000604482015290519081900360640190fd5b600480546040805160e160020a6331a9108f02815292830186905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b158015611a3e57600080fd5b505af1158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b50519050600160a060020a0381163314611acc576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b600354821015611b26576040805160e560020a62461bcd02815260206004820152601860248201527f4c697374696e67207072696365206e6f7420656e6f7567680000000000000000604482015290519081900360640190fd5b604080518082018252838152336020808301828152600088815260098352859020935184555160019093018054600160a060020a031916600160a060020a039094169390931790925582518581529251909286927f7765a1c07bdce3390c521eaeb86030b188b77cbaba2d76bd7c9c32d906bfbcba92918290030190a3505050565b600054600160a060020a03163314611bbf57600080fd5b61117681604080519081016040528060098152602001600080516020612ea6833981519152815250612aa5565b33611c1a81604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b6000828152600b6020526040808220805460ff191690555183917f1e0a714b72e06f5169923cf6ffd0cd8a38954de64e275012265e0e5150d280cf91a25050565b600054600160a060020a03163314611c7257600080fd5b60025460ff1615611c8257600080fd5b6002805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6000806000806000611cca612e8e565b506000868152600860209081526040808320815180830183528154600160a060020a0390811680835260019093015482860181905260048054865160e160020a6331a9108f0281529182018f9052955193979496919590921693636352211e936024808501949192918390030190829087803b158015611d4957600080fd5b505af1158015611d5d573d6000803e3d6000fd5b505050506040513d6020811015611d7357600080fd5b50516000998a52600a602052604090992054600254929a9199985060ff908116159750909116945092505050565b60086020526000908152604090208054600190910154600160a060020a039091169082565b600054600160a060020a031681565b33611e0381604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b600160a060020a0382161515611e63576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b5060058054600160a060020a031916600160a060020a0392909216919091179055565b33611eb481604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b600654604080519182526020820184905280517f3d843ef224be86afeee7f914f0fa9ddae84d6d9df67ca5edcb781900ee88bff49281900390910190a150600655565b60025460009060ff1615611f0a57600080fd5b600254610100900460ff161515611f59576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff001916905560048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301859052518492600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b158015611fcb57600080fd5b505af1158015611fdf573d6000803e3d6000fd5b505050506040513d6020811015611ff557600080fd5b5051151561204d576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6003546000848152600860205260409020600101548491612074919063ffffffff612b7716565b3410156120cb576040805160e560020a62461bcd02815260206004820152601060248201527f4f66666572206e6f7420656e6f75676800000000000000000000000000000000604482015290519081900360640190fd5b6000848152600a6020526040902054849060ff1615612134576040805160e560020a62461bcd02815260206004820152601c60248201527f546f6b656e206e6f7420656e61626c656420666f72206f666665727300000000604482015290519081900360640190fd5b61213d33612b84565b156121b8576040805160e560020a62461bcd02815260206004820152602360248201527f556e61626c6520746f20706c616365206120626964206173206120636f6e747260448201527f6163740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6121c18561282e565b60408051808201825233815234602080830191825260008981526008825284812093518454600160a060020a031916600160a060020a03918216178555925160019094019390935560048054855160e160020a6331a9108f0281529182018b905294519490921693636352211e936024808501948390030190829087803b15801561224b57600080fd5b505af115801561225f573d6000803e3d6000fd5b505050506040513d602081101561227557600080fd5b50516040805134815290519195503391600160a060020a0387169188917f3d87e1d02e187b9fe1095bc12567b7485b6cf54c47eea3dc9b5fd64d03cb67509181900360200190a450506002805461ff001916610100179055505050565b600061102582604080519081016040528060098152602001600080516020612ea6833981519152815250610fb6565b600b6020526000908152604090205460ff1681565b3361234481604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b61234d8261282e565b6000828152600a6020526040808220805460ff1916600117905551339184917fe0c56951f00a75f5139f9af608a2ae603fe7c340a8f4b4b3125e9a7018041b609190a35050565b336123c281604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b5060048054600160a060020a031916600160a060020a0392909216919091179055565b60025460ff16156123f557600080fd5b600081815260096020526040902060010154600160a060020a03161515612466576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f206c697374696e6720666f756e6400000000000000000000000000000000604482015290519081900360640190fd5b600480546040805160e160020a6331a9108f028152928301849052513392600160a060020a0390921691636352211e9160248083019260209291908290030181600087803b1580156124b757600080fd5b505af11580156124cb573d6000803e3d6000fd5b505050506040513d60208110156124e157600080fd5b5051600160a060020a031614612567576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79207468652063757272656e74206f776e65722063616e2064656c697360448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61117681612a59565b60075481565b6000806000612583612e8e565b506000848152600960209081526040808320815180830183528154808252600190920154600160a060020a0390811682860181905260048054865160e160020a6331a9108f0281529182018d9052955193979496919590921693636352211e936024808501949192918390030190829087803b15801561260257600080fd5b505af1158015612616573d6000803e3d6000fd5b505050506040513d602081101561262c57600080fd5b5051919790965090945092505050565b60096020526000908152604090208054600190910154600160a060020a031682565b600454600160a060020a031681565b60008054600160a060020a0316331461268557600080fd5b5060005b8151811015610cfa576126b282828151811015156126a357fe5b90602001906020020151611ba8565b600101612689565b600054600160a060020a031633146126d157600080fd5b61117681612b8c565b60048054604080517f32fd84780000000000000000000000000000000000000000000000000000000081529283018690528051600093849384938493600160a060020a03909216926332fd8478926024808301939282900301818787803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b505050506040513d604081101561276e57600080fd5b50805160209091015160048054604080517fde56a2450000000000000000000000000000000000000000000000000000000081529283018c90528051949850929650600160a060020a03169263de56a245926024808401939192918290030181600087803b1580156127df57600080fd5b505af11580156127f3573d6000803e3d6000fd5b505050506040513d604081101561280957600080fd5b5080516020909101519092509050612825848483858a8a612bfc565b50505050505050565b600081815260086020526040812054600160a060020a03169081156128bf5750600082815260086020526040812060010154908111156128bf576000838152600860205260408082208054600160a060020a031916815560010182905551600160a060020a0384169183156108fc02918491818181858888f193505050501580156128bd573d6000803e3d6000fd5b505b505050565b6128ce82826128d9565b1515610cfa57600080fd5b600160a060020a03166000908152602091909152604090205460ff1690565b6000818381151561290557fe5b049392505050565b600082151561291e57506000611025565b5081810281838281151561292e57fe5b041461102557fe5b60008282111561294257fe5b50900390565b6129b2826001836040518082805190602001908083835b6020831061297e5780518252601f19909201916020918201910161295f565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612d4b565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015612a1b578181015183820152602001612a03565b50505050905090810190601f168015612a485780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6000818152600960205260408082208281556001018054600160a060020a03191690555182917f6caa49919a8c0059b871ec5c8b81a13a285b53cd92216d310fcdcf9c893e5a4591a250565b612b0f826001836040518082805190602001908083835b60208310612adb5780518252601f199092019160209182019101612abc565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612d6d565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898260405180806020018281038252838181518152602001915080519060200190808383600083811015612a1b578181015183820152602001612a03565b8181018281101561102557fe5b6000903b1190565b600160a060020a0381161515612ba157600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600080600080612c19600654600754612b7790919063ffffffff16565b9350612c41612c34856110d4896103e863ffffffff6128f816565b879063ffffffff61293616565b604051909350600160a060020a0386169084156108fc029085906000818181858888f19350505050158015612c7a573d6000803e3d6000fd5b50600754612c94906110d4886103e863ffffffff6128f816565b600554604051919350600160a060020a03169083156108fc029084906000818181858888f19350505050158015612ccf573d6000803e3d6000fd5b50612ce483611119888563ffffffff61293616565b9050600160a060020a0388161515612d3257604051600160a060020a038b169082156108fc029083906000818181858888f19350505050158015612d2c573d6000803e3d6000fd5b50612d3f565b612d3f8a8a8a8a85612d92565b50505050505050505050565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600080808080612da8898863ffffffff612b7716565b9450612dc289670de0b6b3a764000063ffffffff61290d16565b9350612dd4848663ffffffff6128f816565b9250612dfe670de0b6b3a7640000612df2888663ffffffff61290d16565b9063ffffffff6128f816565b604051909250600160a060020a038b169083156108fc029084906000818181858888f19350505050158015612e37573d6000803e3d6000fd5b50612e48868363ffffffff61293616565b604051909150600160a060020a0389169082156108fc029083906000818181858888f19350505050158015612e81573d6000803e3d6000fd5b5050505050505050505050565b604080518082019091526000808252602082015290560077686974656c69737400000000000000000000000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c00a165627a7a72305820dc7bca7fc1bcc57fe46f1f5be14011e066bfac45dffb58a4a34d57e2296a6a610029000000000000000000000000fbeef911dc5821886e1dda71586d90ed28174b7d0000000000000000000000003f8c962eb167ad2f80c72b5f933511ccdf0719d4

Deployed Bytecode

0x6080604052600436106102035763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302e9d5e481146102085780630872ef6e146102255780630988ca8c1461023d5780630eaaf4c8146102a457806314d39bad146102bc57806318b919e9146102d4578063210d61011461035e578063217fe6c61461038a57806324953eaa146103f157806326aa594214610446578063286dd3f51461047c5780632d296bf11461049d5780633f4ba83a146104a8578063417fd6b6146104bd57806349751788146104d55780635c06d0e0146104fc5780635c3fec1e146105115780635c975abb146105295780636e3341b31461053e5780636e93dbdc14610556578063715018a61461058757806375c1631d1461059c5780637b9417c8146105b7578063811adfbe146105d85780638456cb59146105f05780638795dcff146106055780638a72ea6a146106595780638da5cb5b14610694578063953e474a146106a95780639841ee39146106ca5780639979ef45146106e25780639b19251a146106ed578063baea69441461070e578063bb435c8d14610726578063bbee17a31461073e578063bed659bc1461075f578063cdd78cfc14610777578063cfc307381461078c578063de74e57b146107cc578063e0758c9d14610805578063e2ec6ec31461081a578063f2fde38b1461086f575b600080fd5b34801561021457600080fd5b50610223600435602435610890565b005b34801561023157600080fd5b50610223600435610c15565b34801561024957600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610223958335600160a060020a0316953695604494919390910191908190840183828082843750949750610c909650505050505050565b3480156102b057600080fd5b50610223600435610cfe565b3480156102c857600080fd5b50610223600435610f0b565b3480156102e057600080fd5b506102e9610f7c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032357818101518382015260200161030b565b50505050905090810190601f1680156103505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036a57600080fd5b50610376600435610fa1565b604080519115158252519081900360200190f35b34801561039657600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610376958335600160a060020a0316953695604494919390910191908190840183828082843750949750610fb69650505050505050565b3480156103fd57600080fd5b50604080516020600480358082013583810280860185019096528085526102239536959394602494938501929182918501908490808284375094975061102b9650505050505050565b34801561045257600080fd5b5061045e600435611078565b60408051938452602084019290925282820152519081900360600190f35b34801561048857600080fd5b50610223600160a060020a0360043516611132565b610223600435611179565b3480156104b457600080fd5b50610223611575565b3480156104c957600080fd5b506102236004356115d2565b3480156104e157600080fd5b506104ea61163c565b60408051918252519081900360200190f35b34801561050857600080fd5b506104ea611642565b34801561051d57600080fd5b50610223600435611648565b34801561053557600080fd5b506103766116c3565b34801561054a57600080fd5b506102236004356116cc565b34801561056257600080fd5b5061056b611907565b60408051600160a060020a039092168252519081900360200190f35b34801561059357600080fd5b50610223611916565b3480156105a857600080fd5b50610223600435602435611975565b3480156105c357600080fd5b50610223600160a060020a0360043516611ba8565b3480156105e457600080fd5b50610223600435611bec565b3480156105fc57600080fd5b50610223611c5b565b34801561061157600080fd5b5061061d600435611cba565b60408051600160a060020a0396871681526020810195909552929094168383015215156060830152911515608082015290519081900360a00190f35b34801561066557600080fd5b50610671600435611da1565b60408051600160a060020a03909316835260208301919091528051918290030190f35b3480156106a057600080fd5b5061056b611dc6565b3480156106b557600080fd5b50610223600160a060020a0360043516611dd5565b3480156106d657600080fd5b50610223600435611e86565b610223600435611ef7565b3480156106f957600080fd5b50610376600160a060020a03600435166122d2565b34801561071a57600080fd5b50610376600435612301565b34801561073257600080fd5b50610223600435612316565b34801561074a57600080fd5b50610223600160a060020a0360043516612394565b34801561076b57600080fd5b506102236004356123e5565b34801561078357600080fd5b506104ea612570565b34801561079857600080fd5b506107a4600435612576565b60408051938452600160a060020a039283166020850152911682820152519081900360600190f35b3480156107d857600080fd5b506107e460043561263c565b60408051928352600160a060020a0390911660208301528051918290030190f35b34801561081157600080fd5b5061056b61265e565b34801561082657600080fd5b50604080516020600480358082013583810280860185019096528085526102239536959394602494938501929182918501908490808284375094975061266d9650505050505050565b34801561087b57600080fd5b50610223600160a060020a03600435166126ba565b600254600090819081908190819060ff16156108ab57600080fd5b600254610100900460ff1615156108fa576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff0019169055600480546040805160e160020a6331a9108f0281529283018a905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506040513d602081101561097e57600080fd5b50519450600160a060020a03851633146109e2576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b60008781526008602052604081206001810154909550935083118015610a085750828610155b1515610a5e576040805160e560020a62461bcd02815260206004820152601a60248201527f4f6666657220616d6f756e74206e6f7420736174697366696564000000000000604482015290519081900360640190fd5b835460008881526008602090815260408083208054600160a060020a03191681556001018390556004805482517f824eec3b0000000000000000000000000000000000000000000000000000000081529182018d90529151600160a060020a039586169750949091169363824eec3b93602480840194938390030190829087803b158015610aeb57600080fd5b505af1158015610aff573d6000803e3d6000fd5b505050506040513d6020811015610b1557600080fd5b50519050610b248184876126da565b60048054604080517f42842e0e0000000000000000000000000000000000000000000000000000000081523393810193909352600160a060020a038581166024850152604484018b905290519116916342842e0e91606480830192600092919082900301818387803b158015610b9957600080fd5b505af1158015610bad573d6000803e3d6000fd5b5050505081600160a060020a031685600160a060020a0316887fe6d56779a392535d3a591e92b65ba36f2ecc424bbf5220d0176a7da29385b504866040518082815260200191505060405180910390a450506002805461ff0019166101001790555050505050565b33610c4381604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b610c4c8261282e565b6000828152600a6020526040808220805460ff1916905551339184917fdeb115d202a55795fb5e47cee9ce6c0bd792a016a2d1251f937b1bb24e92332e9190a35050565b610cfa826001836040518082805190602001908083835b60208310610cc65780518252601f199092019160209182019101610ca7565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506128c4565b5050565b60025460ff1615610d0e57600080fd5b600254610100900460ff161515610d5d576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff001916905560048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301849052518392600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b158015610dcf57600080fd5b505af1158015610de3573d6000803e3d6000fd5b505050506040513d6020811015610df957600080fd5b50511515610e51576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6000828152600860205260409020548290600160a060020a03163314610ec1576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f74206f66666572206d616b65720000000000000000000000000000000000604482015290519081900360640190fd5b610eca8361282e565b604051339084907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a90600090a350506002805461ff00191661010017905550565b33610f3981604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b600754604080519182526020820184905280517feacf709830352fe1a96d6837caea6476163d682a42a64eb621b34d9b901b50009281900390910190a150600755565b6040805180820190915260098152600080516020612ea6833981519152602082015281565b600a6020526000908152604090205460ff1681565b6000611022836001846040518082805190602001908083835b60208310610fee5780518252601f199092019160209182019101610fcf565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506128d9565b90505b92915050565b60008054600160a060020a0316331461104357600080fd5b5060005b8151811015610cfa57611070828281518110151561106157fe5b90602001906020020151611132565b600101611047565b6000806000611085612e8e565b50600084815260086020908152604080832081518083019092528054600160a060020a031682526001015491810182905260075490929081906110e0906110d4856103e863ffffffff6128f816565b9063ffffffff61290d16565b6006549092506110fc906110d4856103e863ffffffff6128f816565b90506111258161111984876020015161293690919063ffffffff16565b9063ffffffff61293616565b9891975095509350505050565b600054600160a060020a0316331461114957600080fd5b61117681604080519081016040528060098152602001600080516020612ea6833981519152815250612948565b50565b6000806000806000600260019054906101000a900460ff1615156111d5576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff0019811690915560ff16156111ef57600080fd5b60008681526009602052604090206001810154909550600160a060020a03161515611264576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f206c697374696e6720666f756e6400000000000000000000000000000000604482015290519081900360640190fd5b600480546040805160e160020a6331a9108f02815292830189905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b505050506040513d60208110156112dd57600080fd5b50516001860154909450600160a060020a0380861691161461136f576040805160e560020a62461bcd02815260206004820152602a60248201527f4c697374696e67206e6f742076616c69642c20746f6b656e206f776e6572206860448201527f6173206368616e67656400000000000000000000000000000000000000000000606482015290519081900360840190fd5b845492503483146113ca576040805160e560020a62461bcd02815260206004820152601860248201527f4c697374207072696365206e6f74207361746973666965640000000000000000604482015290519081900360640190fd5b60048054604080517f824eec3b00000000000000000000000000000000000000000000000000000000815292830189905251600160a060020a039091169163824eec3b9160248083019260209291908290030181600087803b15801561142f57600080fd5b505af1158015611443573d6000803e3d6000fd5b505050506040513d602081101561145957600080fd5b5051600087815260086020526040902090925090506114778661282e565b6114828284866126da565b60048054604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452336024820152604481018a9052905192909116916342842e0e9160648082019260009290919082900301818387803b1580156114fa57600080fd5b505af115801561150e573d6000803e3d6000fd5b5050505061151b86612a59565b604080518481529051600160a060020a03861691339189917f704cf6cb1221490022185412a0f82fd80ca9ccf7b5f84482727d0f6924265bd8919081900360200190a450506002805461ff00191661010017905550505050565b600054600160a060020a0316331461158c57600080fd5b60025460ff16151561159d57600080fd5b6002805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b3361160081604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b60038290556040805183815290517f2bc4b9fa5449471c716310263f78104dee5bcb66018bcdb48fd1f61f5de81a1b9181900360200190a15050565b60035481565b60065481565b3361167681604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b61167f82612a59565b6000828152600b6020526040808220805460ff191660011790555183917ff50274e1c6256cf77899d9c47b15ab288f85c61c6582acb8ffc3af541eac10a391a25050565b60025460ff1681565b6002546000908190819060ff16156116e357600080fd5b600254610100900460ff161515611732576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff0019169055600480546040805160e160020a6331a9108f02815292830187905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b15801561178c57600080fd5b505af11580156117a0573d6000803e3d6000fd5b505050506040513d60208110156117b657600080fd5b50519250600160a060020a038316331461181a576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b60008481526008602052604081206001015492508211611884576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f206f66666572206f70656e00000000000000000000000000000000000000604482015290519081900360640190fd5b50600083815260086020526040902054600160a060020a03166118a68461282e565b80600160a060020a031683600160a060020a0316857f6d699e170cc72516120ba19fe48e744504798d1afc2ffb65ff1154a6f4fa4d15856040518082815260200191505060405180910390a450506002805461ff0019166101001790555050565b600554600160a060020a031681565b600054600160a060020a0316331461192d57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b60025460009060ff161561198857600080fd5b6000838152600b602052604090205460ff16156119ef576040805160e560020a62461bcd02815260206004820152601060248201527f4c697374696e672064697361626c656400000000000000000000000000000000604482015290519081900360640190fd5b600480546040805160e160020a6331a9108f02815292830186905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b158015611a3e57600080fd5b505af1158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b50519050600160a060020a0381163314611acc576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b600354821015611b26576040805160e560020a62461bcd02815260206004820152601860248201527f4c697374696e67207072696365206e6f7420656e6f7567680000000000000000604482015290519081900360640190fd5b604080518082018252838152336020808301828152600088815260098352859020935184555160019093018054600160a060020a031916600160a060020a039094169390931790925582518581529251909286927f7765a1c07bdce3390c521eaeb86030b188b77cbaba2d76bd7c9c32d906bfbcba92918290030190a3505050565b600054600160a060020a03163314611bbf57600080fd5b61117681604080519081016040528060098152602001600080516020612ea6833981519152815250612aa5565b33611c1a81604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b6000828152600b6020526040808220805460ff191690555183917f1e0a714b72e06f5169923cf6ffd0cd8a38954de64e275012265e0e5150d280cf91a25050565b600054600160a060020a03163314611c7257600080fd5b60025460ff1615611c8257600080fd5b6002805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6000806000806000611cca612e8e565b506000868152600860209081526040808320815180830183528154600160a060020a0390811680835260019093015482860181905260048054865160e160020a6331a9108f0281529182018f9052955193979496919590921693636352211e936024808501949192918390030190829087803b158015611d4957600080fd5b505af1158015611d5d573d6000803e3d6000fd5b505050506040513d6020811015611d7357600080fd5b50516000998a52600a602052604090992054600254929a9199985060ff908116159750909116945092505050565b60086020526000908152604090208054600190910154600160a060020a039091169082565b600054600160a060020a031681565b33611e0381604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b600160a060020a0382161515611e63576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b5060058054600160a060020a031916600160a060020a0392909216919091179055565b33611eb481604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b600654604080519182526020820184905280517f3d843ef224be86afeee7f914f0fa9ddae84d6d9df67ca5edcb781900ee88bff49281900390910190a150600655565b60025460009060ff1615611f0a57600080fd5b600254610100900460ff161515611f59576040805160e560020a62461bcd02815260206004820152601f6024820152600080516020612ec6833981519152604482015290519081900360640190fd5b6002805461ff001916905560048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301859052518492600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b158015611fcb57600080fd5b505af1158015611fdf573d6000803e3d6000fd5b505050506040513d6020811015611ff557600080fd5b5051151561204d576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6003546000848152600860205260409020600101548491612074919063ffffffff612b7716565b3410156120cb576040805160e560020a62461bcd02815260206004820152601060248201527f4f66666572206e6f7420656e6f75676800000000000000000000000000000000604482015290519081900360640190fd5b6000848152600a6020526040902054849060ff1615612134576040805160e560020a62461bcd02815260206004820152601c60248201527f546f6b656e206e6f7420656e61626c656420666f72206f666665727300000000604482015290519081900360640190fd5b61213d33612b84565b156121b8576040805160e560020a62461bcd02815260206004820152602360248201527f556e61626c6520746f20706c616365206120626964206173206120636f6e747260448201527f6163740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6121c18561282e565b60408051808201825233815234602080830191825260008981526008825284812093518454600160a060020a031916600160a060020a03918216178555925160019094019390935560048054855160e160020a6331a9108f0281529182018b905294519490921693636352211e936024808501948390030190829087803b15801561224b57600080fd5b505af115801561225f573d6000803e3d6000fd5b505050506040513d602081101561227557600080fd5b50516040805134815290519195503391600160a060020a0387169188917f3d87e1d02e187b9fe1095bc12567b7485b6cf54c47eea3dc9b5fd64d03cb67509181900360200190a450506002805461ff001916610100179055505050565b600061102582604080519081016040528060098152602001600080516020612ea6833981519152815250610fb6565b600b6020526000908152604090205460ff1681565b3361234481604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b61234d8261282e565b6000828152600a6020526040808220805460ff1916600117905551339184917fe0c56951f00a75f5139f9af608a2ae603fe7c340a8f4b4b3125e9a7018041b609190a35050565b336123c281604080519081016040528060098152602001600080516020612ea6833981519152815250610c90565b5060048054600160a060020a031916600160a060020a0392909216919091179055565b60025460ff16156123f557600080fd5b600081815260096020526040902060010154600160a060020a03161515612466576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f206c697374696e6720666f756e6400000000000000000000000000000000604482015290519081900360640190fd5b600480546040805160e160020a6331a9108f028152928301849052513392600160a060020a0390921691636352211e9160248083019260209291908290030181600087803b1580156124b757600080fd5b505af11580156124cb573d6000803e3d6000fd5b505050506040513d60208110156124e157600080fd5b5051600160a060020a031614612567576040805160e560020a62461bcd02815260206004820152602160248201527f4f6e6c79207468652063757272656e74206f776e65722063616e2064656c697360448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61117681612a59565b60075481565b6000806000612583612e8e565b506000848152600960209081526040808320815180830183528154808252600190920154600160a060020a0390811682860181905260048054865160e160020a6331a9108f0281529182018d9052955193979496919590921693636352211e936024808501949192918390030190829087803b15801561260257600080fd5b505af1158015612616573d6000803e3d6000fd5b505050506040513d602081101561262c57600080fd5b5051919790965090945092505050565b60096020526000908152604090208054600190910154600160a060020a031682565b600454600160a060020a031681565b60008054600160a060020a0316331461268557600080fd5b5060005b8151811015610cfa576126b282828151811015156126a357fe5b90602001906020020151611ba8565b600101612689565b600054600160a060020a031633146126d157600080fd5b61117681612b8c565b60048054604080517f32fd84780000000000000000000000000000000000000000000000000000000081529283018690528051600093849384938493600160a060020a03909216926332fd8478926024808301939282900301818787803b15801561274457600080fd5b505af1158015612758573d6000803e3d6000fd5b505050506040513d604081101561276e57600080fd5b50805160209091015160048054604080517fde56a2450000000000000000000000000000000000000000000000000000000081529283018c90528051949850929650600160a060020a03169263de56a245926024808401939192918290030181600087803b1580156127df57600080fd5b505af11580156127f3573d6000803e3d6000fd5b505050506040513d604081101561280957600080fd5b5080516020909101519092509050612825848483858a8a612bfc565b50505050505050565b600081815260086020526040812054600160a060020a03169081156128bf5750600082815260086020526040812060010154908111156128bf576000838152600860205260408082208054600160a060020a031916815560010182905551600160a060020a0384169183156108fc02918491818181858888f193505050501580156128bd573d6000803e3d6000fd5b505b505050565b6128ce82826128d9565b1515610cfa57600080fd5b600160a060020a03166000908152602091909152604090205460ff1690565b6000818381151561290557fe5b049392505050565b600082151561291e57506000611025565b5081810281838281151561292e57fe5b041461102557fe5b60008282111561294257fe5b50900390565b6129b2826001836040518082805190602001908083835b6020831061297e5780518252601f19909201916020918201910161295f565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612d4b565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015612a1b578181015183820152602001612a03565b50505050905090810190601f168015612a485780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6000818152600960205260408082208281556001018054600160a060020a03191690555182917f6caa49919a8c0059b871ec5c8b81a13a285b53cd92216d310fcdcf9c893e5a4591a250565b612b0f826001836040518082805190602001908083835b60208310612adb5780518252601f199092019160209182019101612abc565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050612d6d565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898260405180806020018281038252838181518152602001915080519060200190808383600083811015612a1b578181015183820152602001612a03565b8181018281101561102557fe5b6000903b1190565b600160a060020a0381161515612ba157600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600080600080612c19600654600754612b7790919063ffffffff16565b9350612c41612c34856110d4896103e863ffffffff6128f816565b879063ffffffff61293616565b604051909350600160a060020a0386169084156108fc029085906000818181858888f19350505050158015612c7a573d6000803e3d6000fd5b50600754612c94906110d4886103e863ffffffff6128f816565b600554604051919350600160a060020a03169083156108fc029084906000818181858888f19350505050158015612ccf573d6000803e3d6000fd5b50612ce483611119888563ffffffff61293616565b9050600160a060020a0388161515612d3257604051600160a060020a038b169082156108fc029083906000818181858888f19350505050158015612d2c573d6000803e3d6000fd5b50612d3f565b612d3f8a8a8a8a85612d92565b50505050505050505050565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600080808080612da8898863ffffffff612b7716565b9450612dc289670de0b6b3a764000063ffffffff61290d16565b9350612dd4848663ffffffff6128f816565b9250612dfe670de0b6b3a7640000612df2888663ffffffff61290d16565b9063ffffffff6128f816565b604051909250600160a060020a038b169083156108fc029084906000818181858888f19350505050158015612e37573d6000803e3d6000fd5b50612e48868363ffffffff61293616565b604051909150600160a060020a0389169082156108fc029083906000818181858888f19350505050158015612e81573d6000803e3d6000fd5b5050505050505050505050565b604080518082019091526000808252602082015290560077686974656c69737400000000000000000000000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c00a165627a7a72305820dc7bca7fc1bcc57fe46f1f5be14011e066bfac45dffb58a4a34d57e2296a6a610029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fbeef911dc5821886e1dda71586d90ed28174b7d0000000000000000000000003f8c962eb167ad2f80c72b5f933511ccdf0719d4

-----Decoded View---------------
Arg [0] : _kodaAddress (address): 0xFBeef911Dc5821886e1dda71586d90eD28174B7d
Arg [1] : _koCommissionAccount (address): 0x3f8C962eb167aD2f80C72b5F933511CcDF0719D4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fbeef911dc5821886e1dda71586d90ed28174b7d
Arg [1] : 0000000000000000000000003f8c962eb167ad2f80c72b5f933511ccdf0719d4


Deployed Bytecode Sourcemap

13059:14897:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17804:876;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17804:876:0;;;;;;;;;26292:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26292:221:0;;;;;4847:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4847:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4847:119:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4847:119:0;;-1:-1:-1;4847:119:0;;-1:-1:-1;;;;;;;4847:119:0;17007:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17007:241:0;;;;;27708:245;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27708:245:0;;;;;7074:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7074:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7074:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15244:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15244:46:0;;;;;;;;;;;;;;;;;;;;;;;5114:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5114:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5114:142:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5114:142:0;;-1:-1:-1;5114:142:0;;-1:-1:-1;;;;;;;5114:142:0;8931:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8931:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8931:208:0;;-1:-1:-1;8931:208:0;;-1:-1:-1;;;;;;;8931:208:0;24848:459;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24848:459:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8545:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8545:137:0;-1:-1:-1;;;;;8545:137:0;;;;;20292:1185;;;;;;2729:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2729:95:0;;;;26907:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26907:170:0;;;;;14732:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14732:40:0;;;;;;;;;;;;;;;;;;;;14942:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14942:44:0;;;;26519:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26519:204:0;;;;;2108:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2108:26:0;;;;17254:544;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17254:544:0;;;;;14901:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14901:34:0;;;;;;;;-1:-1:-1;;;;;14901:34:0;;;;;;;;;;;;;;1108:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1108:114:0;;;;19334:606;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19334:606:0;;;;;;;7540:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7540:129:0;-1:-1:-1;;;;;7540:129:0;;;;;26729:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26729:172:0;;;;;2549:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2549:93:0;;;;24514:328;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24514:328:0;;;;;;;;;-1:-1:-1;;;;;24514:328:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15071:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15071:39:0;;;;;;;;;-1:-1:-1;;;;;15071:39:0;;;;;;;;;;;;;;;;;;;;;313:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;313:20:0;;;;27214:223;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27214:223:0;-1:-1:-1;;;;;27214:223:0;;;;;27443:259;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27443:259:0;;;;;16469:532;;;;;;7747:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7747:139:0;-1:-1:-1;;;;;7747:139:0;;;;;15351:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15351:48:0;;;;;26064:222;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26064:222:0;;;;;27083:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27083:125:0;-1:-1:-1;;;;;27083:125:0;;;;;19946:340;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19946:340:0;;;;;14991:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14991:41:0;;;;25313:280;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25313:280:0;;;;;;;;;;;;-1:-1:-1;;;;;25313:280:0;;;;;;;;;;;;;;;;;;;;;;15143:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15143:43:0;;;;;;;;;;;;-1:-1:-1;;;;;15143:43:0;;;;;;;;;;;;;;;;14815:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14815:33:0;;;;8112:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8112:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8112:198:0;;-1:-1:-1;8112:198:0;;-1:-1:-1;;;;;;;8112:198:0;1390:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1390:105:0;-1:-1:-1;;;;;1390:105:0;;;;;17804:876;2284:6;;17919:20;;;;;;;;;;2284:6;;2283:7;2275:16;;;;;;12010:11;;;;;;;12002:55;;;;;;;-1:-1:-1;;;;;12002:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12002:55:0;;;;;;;;;;;;;;;12127:11;:19;;-1:-1:-1;;12127:19:0;;;17942:11;;;:29;;;-1:-1:-1;;;;;17942:29:0;;;;;;;;;-1:-1:-1;;;;;17942:11:0;;;;:19;;:29;;;;;;;;;;;;;;12141:5;17942:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;17942:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17942:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17942:29:0;;-1:-1:-1;;;;;;17986:26:0;;18002:10;17986:26;17978:54;;;;;-1:-1:-1;;;;;17978:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18063:16;;;;:6;:16;;;;;18111:11;;;;18063:16;;-1:-1:-1;18111:11:0;-1:-1:-1;18204:16:0;;:51;;;;;18243:12;18224:15;:31;;18204:51;18196:90;;;;;;;-1:-1:-1;;;;;18196:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18319:12;;;18347:16;;;:6;:16;;;;;;;;18340:23;;-1:-1:-1;;;;;;18340:23:0;;;-1:-1:-1;18340:23:0;;;;18420:11;;;:38;;;;;;;;;;;;;-1:-1:-1;;;;;18319:12:0;;;;-1:-1:-1;18420:11:0;;;;;:28;;:38;;;;;18347:16;18420:38;;;;;;;:11;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;18420:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18420:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18420:38:0;;-1:-1:-1;18467:55:0;18420:38;18495:12;18509;18467;:55::i;:::-;18531:11;;;:65;;;;;;18560:10;18531:65;;;;;;;-1:-1:-1;;;;;18531:65:0;;;;;;;;;;;;;;;:11;;;:28;;:65;;;;;:11;;:65;;;;;;;:11;;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;18531:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18531:65:0;;;;18646:13;-1:-1:-1;;;;;18610:64:0;18632:12;-1:-1:-1;;;;;18610:64:0;18622:8;18610:64;18661:12;18610:64;;;;;;;;;;;;;;;;;;-1:-1:-1;;12291:11:0;:18;;-1:-1:-1;;12291:18:0;;;;;-1:-1:-1;;;;;17804:876:0:o;26292:221::-;26364:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;26386:30;26407:8;26386:20;:30::i;:::-;26452:5;26425:24;;;:14;:24;;;;;;:32;;-1:-1:-1;;26425:32:0;;;26471:36;26496:10;;26440:8;;26471:36;;26452:5;26471:36;26292:221;;:::o;4847:119::-;4931:29;4950:9;4931:5;4937;4931:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;4931:12:0;;;;;-1:-1:-1;4931:12:0;;;;;;;;;;;;-1:-1:-1;;4931:18:0;:29::i;:::-;4847:119;;:::o;17007:241::-;2284:6;;;;2283:7;2275:16;;;;;;12010:11;;;;;;;12002:55;;;;;;;-1:-1:-1;;;;;12002:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12002:55:0;;;;;;;;;;;;;;;12127:11;:19;;-1:-1:-1;;12127:19:0;;;15665:11;;;:28;;;;;;;;;;;;;17112:8;;-1:-1:-1;;;;;15665:11:0;;;;:18;;:28;;;;;;;;;;;;;;12141:5;15665:11;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;15665:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15665:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15665:28:0;15657:61;;;;;;;-1:-1:-1;;;;;15657:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15526:16;;;;:6;:16;;;;;:23;17144:8;;-1:-1:-1;;;;;15526:23:0;15553:10;15526:37;15518:65;;;;;-1:-1:-1;;;;;15518:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17164:30;17185:8;17164:20;:30::i;:::-;17208:34;;17231:10;;17221:8;;17208:34;;;;;-1:-1:-1;;12291:11:0;:18;;-1:-1:-1;;12291:18:0;;;;;-1:-1:-1;17007:241:0:o;27708:245::-;27796:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;27848:21;;27820:74;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27901:21:0;:46;27708:245::o;7074:53::-;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7074:53:0;;;;;:::o;15244:46::-;;;;;;;;;;;;;;;:::o;5114:142::-;5200:4;5223:27;5240:9;5223:5;5229;5223:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5223:12:0;;;;;-1:-1:-1;5223:12:0;;;;;;;;;;;;-1:-1:-1;;5223:16:0;:27::i;:::-;5216:34;;5114:142;;;;;:::o;8931:208::-;9033:9;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;-1:-1:-1;9045:1:0;9028:106;9052:10;:17;9048:1;:21;9028:106;;;9085:41;9112:10;9123:1;9112:13;;;;;;;;;;;;;;;;;;9085:26;:41::i;:::-;9071:3;;9028:106;;24848:459;24918:20;24940;24962:19;24990:18;;:::i;:::-;-1:-1:-1;25034:18:0;25011:16;;;:6;:16;;;;;;;;24990:37;;;;;;;;;;-1:-1:-1;;;;;24990:37:0;;;;;;;;;;;;25112:21;;24990:37;;25034:18;;;25087:47;;:20;24990:37;25102:4;25087:20;:14;:20;:::i;:::-;:24;:47;:24;:47;:::i;:::-;25186:23;;25073:61;;-1:-1:-1;25161:49:0;;:20;:10;25176:4;25161:20;:14;:20;:::i;:49::-;25141:69;;25233:35;25258:9;25233:20;25249:3;25233:5;:11;;;:15;;:20;;;;:::i;:::-;:24;:35;:24;:35;:::i;:::-;25219:82;25275:3;;-1:-1:-1;25285:9:0;-1:-1:-1;24848:459:0;-1:-1:-1;;;;24848:459:0:o;8545:137::-;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;8637:39;8648:9;8659:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8659:16:0;;;8637:10;:39::i;:::-;8545:137;:::o;20292:1185::-;20389:23;20609:20;20794;20932:21;21040:19;12010:11;;;;;;;;;;;12002:55;;;;;;;-1:-1:-1;;;;;12002:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12002:55:0;;;;;;;;;;;;;;;12127:11;:19;;-1:-1:-1;;12127:19:0;;;;;;2284:6;2283:7;2275:16;;;;;;20415:18;;;;:8;:18;;;;;20480:14;;;;20415:18;;-1:-1:-1;;;;;;20480:14:0;:28;;20472:57;;;;;-1:-1:-1;;;;;20472:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20632:11;;;:29;;;-1:-1:-1;;;;;20632:29:0;;;;;;;;;-1:-1:-1;;;;;20632:11:0;;;;:19;;:29;;;;;;;;;;;;;;:11;;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;20632:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20632:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20632:29:0;20676:14;;;;20632:29;;-1:-1:-1;;;;;;20676:30:0;;;:14;;:30;20668:85;;;;;-1:-1:-1;;;;;20668:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20817:13;;;-1:-1:-1;20845:9:0;:25;;20837:62;;;;;-1:-1:-1;;;;;20837:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20956:11;;;:38;;;;;;;;;;;;;-1:-1:-1;;;;;20956:11:0;;;;:28;;:38;;;;;;;;;;;;;;:11;;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;20956:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20956:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20956:38:0;21062:16;;;;:6;20956:38;21062:16;;;;20956:38;;-1:-1:-1;21062:16:0;-1:-1:-1;21085:30:0;21069:8;21085:20;:30::i;:::-;21144:55;21157:13;21172:12;21186;21144;:55::i;:::-;21240:11;;;:64;;;;;;-1:-1:-1;;;;;21240:64:0;;;;;;;;;;21283:10;21240:64;;;;;;;;;;;;:11;;;;;:28;;:64;;;;;:11;;:64;;;;;;;;:11;;:64;;;5:2:-1;;;;30:1;27;20:12;5:2;21240:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21240:64:0;;;;21339:22;21352:8;21339:12;:22::i;:::-;21407:64;;;;;;;;-1:-1:-1;;;;;21407:64:0;;;21432:10;;21422:8;;21407:64;;;;;;;;;;-1:-1:-1;;12291:11:0;:18;;-1:-1:-1;;12291:18:0;;;;;-1:-1:-1;;;;20292:1185:0:o;2729:95::-;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;2444:6;;;;2436:15;;;;;;;;2783:6;:14;;-1:-1:-1;;2783:14:0;;;2809:9;;;;2792:5;;2809:9;2729:95::o;26907:170::-;26973:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;26999:12;:28;;;27039:32;;;;;;;;;;;;;;;;;26907:170;;:::o;14732:40::-;;;;:::o;14942:44::-;;;;:::o;26519:204::-;26592:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;26614:22;26627:8;26614:12;:22::i;:::-;26645:26;;;;:16;:26;;;;;;:33;;-1:-1:-1;;26645:33:0;26674:4;26645:33;;;26692:25;26662:8;;26692:25;;;26519:204;;:::o;2108:26::-;;;;;;:::o;17254:544::-;2284:6;;17344:20;;;;;;2284:6;;2283:7;2275:16;;;;;;12010:11;;;;;;;12002:55;;;;;;;-1:-1:-1;;;;;12002:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12002:55:0;;;;;;;;;;;;;;;12127:11;:19;;-1:-1:-1;;12127:19:0;;;17367:11;;;:29;;;-1:-1:-1;;;;;17367:29:0;;;;;;;;;-1:-1:-1;;;;;17367:11:0;;;;:19;;:29;;;;;;;;;;;;;;12141:5;17367:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;17367:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17367:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17367:29:0;;-1:-1:-1;;;;;;17411:26:0;;17427:10;17411:26;17403:54;;;;;-1:-1:-1;;;;;17403:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17504:16;;;;:6;:16;;;;;:22;;;;-1:-1:-1;17541:31:0;;17533:57;;;;;-1:-1:-1;;;;;17533:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17630:16:0;;;;:6;:16;;;;;:23;-1:-1:-1;;;;;17630:23:0;17662:30;17637:8;17662:20;:30::i;:::-;17742:20;-1:-1:-1;;;;;17706:86:0;17728:12;-1:-1:-1;;;;;17706:86:0;17718:8;17706:86;17764:27;17706:86;;;;;;;;;;;;;;;;;;-1:-1:-1;;12291:11:0;:18;;-1:-1:-1;;12291:18:0;;;;;-1:-1:-1;;17254:544:0:o;14901:34::-;;;-1:-1:-1;;;;;14901:34:0;;:::o;1108:114::-;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;1185:5;;;1166:25;;-1:-1:-1;;;;;1185:5:0;;;;1166:25;;;1214:1;1198:18;;-1:-1:-1;;;;;;1198:18:0;;;1108:114::o;19334:606::-;2284:6;;19532:18;;2284:6;;2283:7;2275:16;;;;;;19437:26;;;;:16;:26;;;;;;;;19436:27;19428:56;;;;;-1:-1:-1;;;;;19428:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19553:11;;;:29;;;-1:-1:-1;;;;;19553:29:0;;;;;;;;;-1:-1:-1;;;;;19553:11:0;;;;:19;;:29;;;;;;;;;;;;;;:11;;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19553:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19553:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19553:29:0;;-1:-1:-1;;;;;;19597:24:0;;19611:10;19597:24;19589:52;;;;;-1:-1:-1;;;;;19589:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19708:12;;19691:29;;;19683:66;;;;;-1:-1:-1;;;;;19683:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19802:70;;;;;;;;;;;19854:10;19802:70;;;;;;;-1:-1:-1;19781:18:0;;;:8;:18;;;;;:91;;;;;;;;;;;-1:-1:-1;;;;;;19781:91:0;-1:-1:-1;;;;;19781:91:0;;;;;;;;;;19886:48;;;;;;;19854:10;;19781:18;;19886:48;;;;;;;;;19334:606;;;:::o;7540:129::-;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;7627:36;7635:9;7646:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7646:16:0;;;7627:7;:36::i;26729:172::-;26801:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;26852:5;26823:26;;;:16;:26;;;;;;:34;;-1:-1:-1;;26823:34:0;;;26871:24;26840:8;;26871:24;;;26729:172;;:::o;2549:93::-;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;2284:6;;;;2283:7;2275:16;;;;;;2604:6;:13;;-1:-1:-1;;2604:13:0;2613:4;2604:13;;;2629:7;;;;2604:6;;2629:7;2549:93::o;24514:328::-;24575:15;24592:14;24608;24624:13;24639:12;24660:18;;:::i;:::-;-1:-1:-1;24681:16:0;;;;:6;:16;;;;;;;;24660:37;;;;;;;;;-1:-1:-1;;;;;24660:37:0;;;;;;;;;;;;;;;;;24755:11;;;:29;;-1:-1:-1;;;;;24755:29:0;;;;;;;;;;24660:37;;;;;;24755:11;;;;:19;;:29;;;;;;;;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;24755:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24755:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24755:29:0;24792:24;;;;:14;24755:29;24792:24;;;;;;24823:6;;24704:132;;;;24755:29;-1:-1:-1;24792:24:0;;;;24791:25;;-1:-1:-1;24823:6:0;;;;-1:-1:-1;24514:328:0;-1:-1:-1;;;24514:328:0:o;15071:39::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15071:39:0;;;;;:::o;313:20::-;;;-1:-1:-1;;;;;313:20:0;;:::o;27214:223::-;27301:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;-1:-1:-1;;;;;27328:34:0;;;;27320:62;;;;;-1:-1:-1;;;;;27320:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27389:19:0;:42;;-1:-1:-1;;;;;;27389:42:0;-1:-1:-1;;;;;27389:42:0;;;;;;;;;;27214:223::o;27443:259::-;27538:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;27589:23;;27562:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27646:23:0;:50;27443:259::o;16469:532::-;2284:6;;16873:20;;2284:6;;2283:7;2275:16;;;;;;12010:11;;;;;;;12002:55;;;;;;;-1:-1:-1;;;;;12002:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12002:55:0;;;;;;;;;;;;;;;12127:11;:19;;-1:-1:-1;;12127:19:0;;;15665:11;;;:28;;;;;;;;;;;;;16582:8;;-1:-1:-1;;;;;15665:11:0;;;;:18;;:28;;;;;;;;;;;;;;12141:5;15665:11;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;15665:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15665:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15665:28:0;15657:61;;;;;;;-1:-1:-1;;;;;15657:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15845:12;;15818:16;;;;:6;:16;;;;;:22;;;16620:8;;15818:40;;:22;:40;:26;:40;:::i;:::-;15805:9;:53;;15797:82;;;;;-1:-1:-1;;;;;15797:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15970:24;;;;:14;:24;;;;;;16661:8;;15970:24;;15969:25;15961:66;;;;;-1:-1:-1;;;;;15961:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16690:22;16701:10;16690;:22::i;:::-;16689:23;16681:71;;;;;-1:-1:-1;;;;;16681:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16759:30;16780:8;16759:20;:30::i;:::-;16817:47;;;;;;;;16833:10;16817:47;;16853:9;16817:47;;;;;;;-1:-1:-1;16798:16:0;;;:6;:16;;;;;:66;;;;-1:-1:-1;;;;;;16798:66:0;-1:-1:-1;;;;;16798:66:0;;;;;;;;-1:-1:-1;16798:66:0;;;;;;;16896:11;;;:29;;-1:-1:-1;;;;;16896:29:0;;;;;;;;;;:11;;;;;:19;;:29;;;;;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;16896:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16896:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16896:29:0;16939:56;;;16985:9;16939:56;;;;16896:29;;-1:-1:-1;16973:10:0;;-1:-1:-1;;;;;16939:56:0;;;16949:8;;16939:56;;;;;16896:29;16939:56;;;-1:-1:-1;;12291:11:0;:18;;-1:-1:-1;;12291:18:0;;;;;-1:-1:-1;;;16469:532:0:o;7747:139::-;7821:4;7844:36;7852:9;7863:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7863:16:0;;;7844:7;:36::i;15351:48::-;;;;;;;;;;;;;;;:::o;26064:222::-;26137:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;26159:30;26180:8;26159:20;:30::i;:::-;26198:24;;;;:14;:24;;;;;;:31;;-1:-1:-1;;26198:31:0;26225:4;26198:31;;;26243:37;26269:10;;26213:8;;26243:37;;26198:24;26243:37;26064:222;;:::o;27083:125::-;27150:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;-1:-1:-1;27176:11:0;:26;;-1:-1:-1;;;;;;27176:26:0;-1:-1:-1;;;;;27176:26:0;;;;;;;;;;27083:125::o;19946:340::-;2284:6;;;;2283:7;2275:16;;;;;;20094:1;20057:18;;;:8;:18;;;;;:25;;;-1:-1:-1;;;;;20057:25:0;:39;;20049:68;;;;;-1:-1:-1;;;;;20049:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20168:11;;;:29;;;-1:-1:-1;;;;;20168:29:0;;;;;;;;;20201:10;;-1:-1:-1;;;;;20168:11:0;;;;:19;;:29;;;;;;;;;;;;;;-1:-1:-1;20168:11:0;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;20168:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20168:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20168:29:0;-1:-1:-1;;;;;20168:43:0;;20160:89;;;;;-1:-1:-1;;;;;20160:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20258:22;20271:8;20258:12;:22::i;14991:41::-;;;;:::o;25313:280::-;25383:14;25399:15;25416:21;25446:22;;:::i;:::-;-1:-1:-1;25471:18:0;;;;:8;:18;;;;;;;;25446:43;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25446:43:0;;;;;;;;;25551:11;;;:29;;-1:-1:-1;;;;;25551:29:0;;;;;;;;;;25446:43;;;;;;25551:11;;;;:19;;:29;;;;;;;;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;25551:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25551:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25551:29:0;25496:91;;;;-1:-1:-1;25551:29:0;;-1:-1:-1;25313:280:0;-1:-1:-1;;;25313:280:0:o;15143:43::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15143:43:0;;:::o;14815:33::-;;;-1:-1:-1;;;;;14815:33:0;;:::o;8112:198::-;8209:9;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;-1:-1:-1;8221:1:0;8204:101;8228:10;:17;8224:1;:21;8204:101;;;8261:36;8283:10;8294:1;8283:13;;;;;;;;;;;;;;;;;;8261:21;:36::i;:::-;8247:3;;8204:101;;1390:105;816:5;;-1:-1:-1;;;;;816:5:0;802:10;:19;794:28;;;;;;1460:29;1479:9;1460:18;:29::i;21686:556::-;21884:11;;;:44;;;;;;;;;;;;;;21829:21;;;;;;;;-1:-1:-1;;;;;21884:11:0;;;;:28;;:44;;;;;;;;;;;21829:21;21884:11;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;21884:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21884:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21884:44:0;;;;;;;22050:11;;;21884:44;22050:53;;;;;;;;;;;;;21884:44;;-1:-1:-1;21884:44:0;;-1:-1:-1;;;;;;22050:11:0;;:37;;:53;;;;;21884:44;;22050:53;;;;;;:11;;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;22050:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22050:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22050:53:0;;;;;;;;;-1:-1:-1;22050:53:0;-1:-1:-1;22112:124:0;22124:13;22139:20;22050:53;;22214:6;22222:13;22112:11;:124::i;:::-;21686:556;;;;;;;:::o;18686:550::-;18785:28;18816:16;;;:6;:16;;;;;:23;-1:-1:-1;;;;;18816:23:0;;18852:34;;18848:383;;-1:-1:-1;18978:16:0;;;;:6;:16;;;;;:22;;;;19015:31;;19011:213;;;19105:16;;;;:6;:16;;;;;;19098:23;;-1:-1:-1;;;;;;19098:23:0;;;;;;;;19156:58;-1:-1:-1;;;;;19156:29:0;;;:58;;;;;19186:27;;19156:58;19105:16;19156:58;19186:27;19156:29;:58;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19156:58:0;19011:213;18686:550;;;:::o;3599:116::-;3691:17;3695:5;3702;3691:3;:17::i;:::-;3683:26;;;;;;;3799:134;-1:-1:-1;;;;;3908:19:0;3885:4;3908:19;;;;;;;;;;;;;;;3799:134::o;9903:288::-;9963:7;10183:2;10178;:7;;;;;;;;;9903:288;-1:-1:-1;;;9903:288:0:o;9425:391::-;9485:9;9715:7;;9711:38;;;-1:-1:-1;9740:1:0;9733:8;;9711:38;-1:-1:-1;9761:7:0;;;9766:2;9761;:7;9782:6;;;;;;;;:12;9775:20;;;10308:119;10368:7;10391:8;;;;10384:16;;;;-1:-1:-1;10414:7:0;;;10308:119::o;5661:154::-;5738:30;5758:9;5738:5;5744;5738:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5738:12:0;;;;;-1:-1:-1;5738:12:0;;;;;;;;;;;;-1:-1:-1;;5738:19:0;:30::i;:::-;5792:9;-1:-1:-1;;;;;5780:29:0;;5803:5;5780:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5780:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:154;;:::o;21483:123::-;21545:18;;;;:8;:18;;;;;;21538:25;;;;;;;-1:-1:-1;;;;;;21538:25:0;;;21577:23;21554:8;;21577:23;;;21483:123;:::o;5383:146::-;5457:27;5474:9;5457:5;5463;5457:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5457:12:0;;;;;-1:-1:-1;5457:12:0;;;;;;;;;;;;-1:-1:-1;;5457:16:0;:27::i;:::-;5506:9;-1:-1:-1;;;;;5496:27:0;;5517:5;5496:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;10494:132:0;10576:7;;;10597;;;;10590:15;;;25599:388;25659:4;25939:20;;25973:8;;25599:388::o;1636:175::-;-1:-1:-1;;;;;1707:23:0;;;;1699:32;;;;;;1764:5;;;1743:38;;-1:-1:-1;;;;;1743:38:0;;;;1764:5;;;1743:38;;;1788:5;:17;;-1:-1:-1;;;;;;1788:17:0;-1:-1:-1;;;;;1788:17:0;;;;;;;;;;1636:175::o;22248:1268::-;22571:38;22726:26;22912:20;23090:26;22612:50;22638:23;;22612:21;;:25;;:50;;;;:::i;:::-;22571:91;-1:-1:-1;22755:78:0;22774:52;22571:91;22774:16;:6;22785:4;22774:16;:10;:16;:::i;:52::-;22755:6;;:78;:10;:78;:::i;:::-;22840:42;;22726:107;;-1:-1:-1;;;;;;22840:22:0;;;:42;;;;;22726:107;;22840:42;;;;22726:107;22840:22;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;22956:21:0;;22935:43;;:16;:6;22946:4;22935:16;:10;:16;:::i;:43::-;22985:19;;:42;;22912:66;;-1:-1:-1;;;;;;22985:19:0;;:42;;;;;22912:66;;22985:19;:42;:19;:42;22912:66;22985:19;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;23119:48:0;23148:18;23119:24;:6;23130:12;23119:24;:10;:24;:::i;:48::-;23090:77;-1:-1:-1;;;;;;23180:42:0;;;23176:335;;;23302:43;;-1:-1:-1;;;;;23302:23:0;;;:43;;;;;23326:18;;23302:43;;;;23326:18;23302:23;:43;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23302:43:0;23176:335;;;23368:135;23390:14;23406:21;23429:28;23459:23;23484:18;23368:21;:135::i;:::-;22248:1268;;;;;;;;;;:::o;3409:108::-;-1:-1:-1;;;;;3484:19:0;3506:5;3484:19;;;;;;;;;;;:27;;-1:-1:-1;;3484:27:0;;;3409:108::o;3235:104::-;-1:-1:-1;;;;;3307:19:0;:12;:19;;;;;;;;;;;:26;;-1:-1:-1;;3307:26:0;3329:4;3307:26;;;3235:104::o;23522:915::-;23754:31;;;;;23788:50;:21;23814:23;23788:50;:25;:50;:::i;:::-;23754:84;-1:-1:-1;23875:35:0;:21;23901:8;23875:35;:25;:35;:::i;:::-;23845:65;-1:-1:-1;24027:48:0;23845:65;24051:23;24027:48;:23;:48;:::i;:::-;23993:82;-1:-1:-1;24124:62:0;24177:8;24124:48;:19;23993:82;24124:48;:23;:48;:::i;:::-;:52;:62;:52;:62;:::i;:::-;24193:54;;24084:102;;-1:-1:-1;;;;;;24193:23:0;;;:54;;;;;24084:102;;24193:54;;;;24084:102;24193:23;:54;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;24299:54:0;:19;24323:29;24299:54;:23;:54;:::i;:::-;24360:71;;24256:97;;-1:-1:-1;;;;;;24360:37:0;;;:71;;;;;24256:97;;24360:71;;;;24256:97;24360:37;:71;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24360:71:0;23522:915;;;;;;;;;;:::o;13059:14897::-;;;;;;;;;;-1:-1:-1;13059:14897:0;;;;;;;;:::o

Swarm Source

bzzr://dc7bca7fc1bcc57fe46f1f5be14011e066bfac45dffb58a4a34d57e2296a6a61

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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