More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 10874476 | 1561 days ago | IN | 0 ETH | 0.00798912 | ||||
Unbundle | 7849954 | 2038 days ago | IN | 0 ETH | 0.00048066 | ||||
Approve And Call | 7122487 | 2161 days ago | IN | 0 ETH | 0.001638 | ||||
Approve And Call | 7048760 | 2175 days ago | IN | 0 ETH | 0.00262015 | ||||
Approve And Call | 6944623 | 2193 days ago | IN | 0 ETH | 0.00223976 | ||||
Approve And Call | 6566734 | 2255 days ago | IN | 0 ETH | 0.00310997 | ||||
Bundle First Tok... | 6531300 | 2261 days ago | IN | 0 ETH | 0.00109892 |
Latest 2 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
6530339 | 2261 days ago | Contract Creation | 0 ETH | |||
6530339 | 2261 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
AstraBasicMultiToken
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-10-17 */ pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @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/ext/CheckedERC20.sol library CheckedERC20 { using SafeMath for uint; function isContract(address addr) internal view returns(bool result) { // solium-disable-next-line security/no-inline-assembly assembly { result := gt(extcodesize(addr), 0) } } function handleReturnBool() internal pure returns(bool result) { // solium-disable-next-line security/no-inline-assembly assembly { switch returndatasize() case 0 { // not a std erc20 result := 1 } case 32 { // std erc20 returndatacopy(0, 0, 32) result := mload(0) } default { // anything else, should revert for safety revert(0, 0) } } } function handleReturnBytes32() internal pure returns(bytes32 result) { // solium-disable-next-line security/no-inline-assembly assembly { switch eq(returndatasize(), 32) // not a std erc20 case 1 { returndatacopy(0, 0, 32) result := mload(0) } switch gt(returndatasize(), 32) // std erc20 case 1 { returndatacopy(0, 64, 32) result := mload(0) } switch lt(returndatasize(), 32) // anything else, should revert for safety case 1 { revert(0, 0) } } } function asmTransfer(address token, address to, uint256 value) internal returns(bool) { require(isContract(token)); // solium-disable-next-line security/no-low-level-calls require(token.call(bytes4(keccak256("transfer(address,uint256)")), to, value)); return handleReturnBool(); } function asmTransferFrom(address token, address from, address to, uint256 value) internal returns(bool) { require(isContract(token)); // solium-disable-next-line security/no-low-level-calls require(token.call(bytes4(keccak256("transferFrom(address,address,uint256)")), from, to, value)); return handleReturnBool(); } function asmApprove(address token, address spender, uint256 value) internal returns(bool) { require(isContract(token)); // solium-disable-next-line security/no-low-level-calls require(token.call(bytes4(keccak256("approve(address,uint256)")), spender, value)); return handleReturnBool(); } // function checkedTransfer(ERC20 token, address to, uint256 value) internal { if (value > 0) { uint256 balance = token.balanceOf(this); asmTransfer(token, to, value); require(token.balanceOf(this) == balance.sub(value), "checkedTransfer: Final balance didn't match"); } } function checkedTransferFrom(ERC20 token, address from, address to, uint256 value) internal { if (value > 0) { uint256 toBalance = token.balanceOf(to); asmTransferFrom(token, from, to, value); require(token.balanceOf(to) == toBalance.add(value), "checkedTransfer: Final balance didn't match"); } } // function asmName(address token) internal view returns(bytes32) { require(isContract(token)); // solium-disable-next-line security/no-low-level-calls require(token.call(bytes4(keccak256("name()")))); return handleReturnBytes32(); } function asmSymbol(address token) internal view returns(bytes32) { require(isContract(token)); // solium-disable-next-line security/no-low-level-calls require(token.call(bytes4(keccak256("symbol()")))); return handleReturnBytes32(); } } // File: openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) internal balances; uint256 internal totalSupply_; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } // File: openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(_to != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: openzeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol /** * @title DetailedERC20 token * @dev The decimals are only for visualization purposes. * All the operations are done using the smallest and indivisible token unit, * just as on Ethereum all the operations are done in wei. */ contract DetailedERC20 is ERC20 { string public name; string public symbol; uint8 public decimals; constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } // File: openzeppelin-solidity/contracts/introspection/ERC165.sol /** * @title ERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface ERC165 { /** * @notice Query if a contract implements an interface * @param _interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 _interfaceId) external view returns (bool); } // File: openzeppelin-solidity/contracts/introspection/SupportsInterfaceWithLookup.sol /** * @title SupportsInterfaceWithLookup * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract SupportsInterfaceWithLookup is ERC165 { bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor() public { _registerInterface(InterfaceId_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 _interfaceId) external view returns (bool) { return supportedInterfaces[_interfaceId]; } /** * @dev private method for registering an interface */ function _registerInterface(bytes4 _interfaceId) internal { require(_interfaceId != 0xffffffff); supportedInterfaces[_interfaceId] = true; } } // File: contracts/ext/ERC1003Token.sol contract ERC1003Caller is Ownable { function makeCall(address target, bytes data) external payable onlyOwner returns (bool) { // solium-disable-next-line security/no-call-value return target.call.value(msg.value)(data); } } contract ERC1003Token is ERC20 { ERC1003Caller private _caller = new ERC1003Caller(); address[] internal _sendersStack; function caller() public view returns(ERC1003Caller) { return _caller; } function approveAndCall(address to, uint256 value, bytes data) public payable returns (bool) { _sendersStack.push(msg.sender); approve(to, value); require(_caller.makeCall.value(msg.value)(to, data)); _sendersStack.length -= 1; return true; } function transferAndCall(address to, uint256 value, bytes data) public payable returns (bool) { transfer(to, value); require(_caller.makeCall.value(msg.value)(to, data)); return true; } function transferFrom(address from, address to, uint256 value) public returns (bool) { address spender = (from != address(_caller)) ? from : _sendersStack[_sendersStack.length - 1]; return super.transferFrom(spender, to, value); } } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint i) public view returns(ERC20); function bundlingEnabled() public view returns(bool); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; // Owner methods function disableBundling() public; function enableBundling() public; bytes4 public constant InterfaceId_IBasicMultiToken = 0xd5c368b6; /** * 0xd5c368b6 === * bytes4(keccak256('tokensCount()')) ^ * bytes4(keccak256('tokens(uint256)')) ^ * bytes4(keccak256('bundlingEnabled()')) ^ * bytes4(keccak256('bundleFirstTokens(address,uint256,uint256[])')) ^ * bytes4(keccak256('bundle(address,uint256)')) ^ * bytes4(keccak256('unbundle(address,uint256)')) ^ * bytes4(keccak256('unbundleSome(address,uint256,address[])')) ^ * bytes4(keccak256('disableBundling()')) ^ * bytes4(keccak256('enableBundling()')) */ } // File: contracts/BasicMultiToken.sol contract BasicMultiToken is Ownable, StandardToken, DetailedERC20, ERC1003Token, IBasicMultiToken, SupportsInterfaceWithLookup { using CheckedERC20 for ERC20; using CheckedERC20 for DetailedERC20; ERC20[] private _tokens; uint private _inLendingMode; bool private _bundlingEnabled = true; event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); event BundlingStatus(bool enabled); modifier notInLendingMode { require(_inLendingMode == 0, "Operation can't be performed while lending"); _; } modifier whenBundlingEnabled { require(_bundlingEnabled, "Bundling is disabled"); _; } constructor() public DetailedERC20("", "", 0) { } function init(ERC20[] tokens, string theName, string theSymbol, uint8 theDecimals) public { require(decimals == 0, "constructor: decimals should be zero"); require(theDecimals > 0, "constructor: _decimals should not be zero"); require(bytes(theName).length > 0, "constructor: name should not be empty"); require(bytes(theSymbol).length > 0, "constructor: symbol should not be empty"); require(tokens.length >= 2, "Contract does not support less than 2 inner tokens"); name = theName; symbol = theSymbol; decimals = theDecimals; _tokens = tokens; _registerInterface(InterfaceId_IBasicMultiToken); } function tokensCount() public view returns(uint) { return _tokens.length; } function tokens(uint i) public view returns(ERC20) { return _tokens[i]; } function inLendingMode() public view returns(uint) { return _inLendingMode; } function bundlingEnabled() public view returns(bool) { return _bundlingEnabled; } function bundleFirstTokens(address beneficiary, uint256 amount, uint256[] tokenAmounts) public whenBundlingEnabled notInLendingMode { require(totalSupply_ == 0, "bundleFirstTokens: This method can be used with zero total supply only"); _bundle(beneficiary, amount, tokenAmounts); } function bundle(address beneficiary, uint256 amount) public whenBundlingEnabled notInLendingMode { require(totalSupply_ != 0, "This method can be used with non zero total supply only"); uint256[] memory tokenAmounts = new uint256[](_tokens.length); for (uint i = 0; i < _tokens.length; i++) { tokenAmounts[i] = _tokens[i].balanceOf(this).mul(amount).div(totalSupply_); } _bundle(beneficiary, amount, tokenAmounts); } function unbundle(address beneficiary, uint256 value) public notInLendingMode { unbundleSome(beneficiary, value, _tokens); } function unbundleSome(address beneficiary, uint256 value, ERC20[] someTokens) public notInLendingMode { _unbundle(beneficiary, value, someTokens); } // Admin methods function disableBundling() public onlyOwner { require(_bundlingEnabled, "Bundling is already disabled"); _bundlingEnabled = false; emit BundlingStatus(false); } function enableBundling() public onlyOwner { require(!_bundlingEnabled, "Bundling is already enabled"); _bundlingEnabled = true; emit BundlingStatus(true); } // Internal methods function _bundle(address beneficiary, uint256 amount, uint256[] tokenAmounts) internal { require(amount != 0, "Bundling amount should be non-zero"); require(_tokens.length == tokenAmounts.length, "Lenghts of _tokens and tokenAmounts array should be equal"); for (uint i = 0; i < _tokens.length; i++) { require(tokenAmounts[i] != 0, "Token amount should be non-zero"); _tokens[i].checkedTransferFrom(msg.sender, this, tokenAmounts[i]); } totalSupply_ = totalSupply_.add(amount); balances[beneficiary] = balances[beneficiary].add(amount); emit Bundle(msg.sender, beneficiary, amount); emit Transfer(0, beneficiary, amount); } function _unbundle(address beneficiary, uint256 value, ERC20[] someTokens) internal { require(someTokens.length > 0, "Array of someTokens can't be empty"); uint256 totalSupply = totalSupply_; balances[msg.sender] = balances[msg.sender].sub(value); totalSupply_ = totalSupply.sub(value); emit Unbundle(msg.sender, beneficiary, value); emit Transfer(msg.sender, 0, value); for (uint i = 0; i < someTokens.length; i++) { for (uint j = 0; j < i; j++) { require(someTokens[i] != someTokens[j], "unbundleSome: should not unbundle same token multiple times"); } uint256 tokenAmount = someTokens[i].balanceOf(this).mul(value).div(totalSupply); someTokens[i].checkedTransfer(beneficiary, tokenAmount); } } // Instant Loans function lend(address to, ERC20 token, uint256 amount, address target, bytes data) public payable { uint256 prevBalance = token.balanceOf(this); token.asmTransfer(to, amount); _inLendingMode += 1; require(caller().makeCall.value(msg.value)(target, data), "lend: arbitrary call failed"); _inLendingMode -= 1; require(token.balanceOf(this) >= prevBalance, "lend: lended token must be refilled"); } } // File: contracts/FeeBasicMultiToken.sol contract FeeBasicMultiToken is Ownable, BasicMultiToken { using CheckedERC20 for ERC20; uint256 constant public TOTAL_PERCRENTS = 1000000; uint256 internal _lendFee; function lendFee() public view returns(uint256) { return _lendFee; } function setLendFee(uint256 theLendFee) public onlyOwner { require(theLendFee <= 30000, "setLendFee: fee should be not greater than 3%"); _lendFee = theLendFee; } function lend(address to, ERC20 token, uint256 amount, address target, bytes data) public payable { uint256 expectedBalance = token.balanceOf(this).mul(TOTAL_PERCRENTS.add(_lendFee)).div(TOTAL_PERCRENTS); super.lend(to, token, amount, target, data); require(token.balanceOf(this) >= expectedBalance, "lend: tokens must be returned with lend fee"); } } // File: contracts/implementation/AstraBasicMultiToken.sol contract AstraBasicMultiToken is FeeBasicMultiToken { function init(ERC20[] tokens, string theName, string theSymbol, uint8 /*theDecimals*/) public { super.init(tokens, theName, theSymbol, 18); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"InterfaceId_ERC165","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"inLendingMode","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bundlingEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"},{"name":"tokenAmounts","type":"uint256[]"}],"name":"bundleFirstTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableBundling","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"tokens","type":"address[]"},{"name":"theName","type":"string"},{"name":"theSymbol","type":"string"},{"name":"","type":"uint8"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lendFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"i","type":"uint256"}],"name":"tokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"value","type":"uint256"}],"name":"unbundle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"target","type":"address"},{"name":"data","type":"bytes"}],"name":"lend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"value","type":"uint256"},{"name":"someTokens","type":"address[]"}],"name":"unbundleSome","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"theLendFee","type":"uint256"}],"name":"setLendFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"InterfaceId_IBasicMultiToken","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"}],"name":"bundle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableBundling","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_PERCRENTS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Bundle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Unbundle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"enabled","type":"bool"}],"name":"BundlingStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60806040526200000e62000175565b604051809103906000f0801580156200002b573d6000803e3d6000fd5b5060068054600160a060020a03929092166101000261010060a860020a0319909216919091179055600b805460ff19166001179055604080516020818101808452600080845284519283019094528382528354600160a060020a03191633178455825192939192620000a09160049162000186565b508151620000b690600590602085019062000186565b506006805460ff191660ff92909216919091179055506200010290507f01ffc9a70000000000000000000000000000000000000000000000000000000064010000000062000108810204565b6200022b565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200013857600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600860205260409020805460ff19166001179055565b6040516102bf806200305683390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001c957805160ff1916838001178555620001f9565b82800160010185558215620001f9579182015b82811115620001f9578251825591602001919060010190620001dc565b50620002079291506200020b565b5090565b6200022891905b8082111562000207576000815560010162000212565b90565b612e1b806200023b6000396000f30060806040526004361061019d5763ffffffff60e060020a60003504166301ffc9a781146101a257806306fdde03146101d8578063095ea7b31461026257806318160ddd1461028657806319fa8f50146102ad5780631f400477146102df57806321f38c6e146102f457806322393ef41461030957806323b872dd1461037257806330e26cb81461039c578063313ce567146103b15780634000aea0146103dc5780634686b4be146104385780634aea0aec1461050e5780634f64b2be14610523578063661884631461055757806370a082311461057b578063715018a61461059c5780638da5cb5b146105b157806395d89b41146105c6578063a64ed8ba146105db578063a9059cbb146105f0578063b4dc3dc714610614578063be5afb1a14610638578063be7e18ed146106a3578063cae9ca511461070a578063d73dd62314610766578063dd62ed3e1461078a578063df1614cf146107b1578063e8f88eaa146107c9578063eba3cdfe146107de578063eec0344414610802578063f2fde38b14610817578063f9f7d9de14610838578063fc9c8d391461084d575b600080fd5b3480156101ae57600080fd5b506101c4600160e060020a031960043516610862565b604080519115158252519081900360200190f35b3480156101e457600080fd5b506101ed610881565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022757818101518382015260200161020f565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026e57600080fd5b506101c4600160a060020a036004351660243561090f565b34801561029257600080fd5b5061029b610976565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102c261097d565b60408051600160e060020a03199092168252519081900360200190f35b3480156102eb57600080fd5b5061029b6109a1565b34801561030057600080fd5b506101c46109a7565b34801561031557600080fd5b506040805160206004604435818101358381028086018501909652808552610370958335600160a060020a03169560248035963696956064959394920192918291850190849080828437509497506109b09650505050505050565b005b34801561037e57600080fd5b506101c4600160a060020a0360043581169060243516604435610b1a565b3480156103a857600080fd5b50610370610b7e565b3480156103bd57600080fd5b506103c6610c31565b6040805160ff9092168252519081900360200190f35b604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610c3a9650505050505050565b34801561044457600080fd5b50604080516020600480358082013583810280860185019096528085526103709536959394602494938501929182918501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff169350610d6192505050565b34801561051a57600080fd5b5061029b610d74565b34801561052f57600080fd5b5061053b600435610d7a565b60408051600160a060020a039092168252519081900360200190f35b34801561056357600080fd5b506101c4600160a060020a0360043516602435610da6565b34801561058757600080fd5b5061029b600160a060020a0360043516610e95565b3480156105a857600080fd5b50610370610eb0565b3480156105bd57600080fd5b5061053b610f1c565b3480156105d257600080fd5b506101ed610f2b565b3480156105e757600080fd5b5061029b610f86565b3480156105fc57600080fd5b506101c4600160a060020a0360043516602435610f8c565b34801561062057600080fd5b50610370600160a060020a036004351660243561105b565b604080516020600460843581810135601f8101849004840285018401909552848452610370948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375094975061111e9650505050505050565b3480156106af57600080fd5b506040805160206004604435818101358381028086018501909652808552610370958335600160a060020a03169560248035963696956064959394920192918291850190849080828437509497506112de9650505050505050565b604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506113439650505050505050565b34801561077257600080fd5b506101c4600160a060020a03600435166024356114ca565b34801561079657600080fd5b5061029b600160a060020a0360043581169060243516611563565b3480156107bd57600080fd5b5061037060043561158e565b3480156107d557600080fd5b506102c261162a565b3480156107ea57600080fd5b50610370600160a060020a036004351660243561164e565b34801561080e57600080fd5b50610370611865565b34801561082357600080fd5b50610370600160a060020a036004351661191b565b34801561084457600080fd5b5061029b61193e565b34801561085957600080fd5b5061053b611945565b600160e060020a03191660009081526008602052604090205460ff1690565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b505050505081565b336000818152600360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6002545b90565b7f01ffc9a70000000000000000000000000000000000000000000000000000000081565b600a5490565b600b5460ff1690565b600b5460ff161515610a0c576040805160e560020a62461bcd02815260206004820152601460248201527f42756e646c696e672069732064697361626c6564000000000000000000000000604482015290519081900360640190fd5b600a5415610a66576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b60025415610b0a576040805160e560020a62461bcd02815260206004820152604660248201527f62756e646c654669727374546f6b656e733a2054686973206d6574686f64206360448201527f616e20626520757365642077697468207a65726f20746f74616c20737570706c60648201527f79206f6e6c790000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b610b15838383611959565b505050565b6006546000908190600160a060020a03868116610100909204161415610b6657600780546000198101908110610b4c57fe5b600091825260209091200154600160a060020a0316610b68565b845b9050610b75818585611bf4565b95945050505050565b600054600160a060020a03163314610b9557600080fd5b600b5460ff161515610bf1576040805160e560020a62461bcd02815260206004820152601c60248201527f42756e646c696e6720697320616c72656164792064697361626c656400000000604482015290519081900360640190fd5b600b805460ff19169055604080516000815290517fcd495a5e98995df10f680f215ceaac5420ab5f1e24457a3fcdf19a91ad1079f19181900360200190a1565b60065460ff1681565b6000610c468484610f8c565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b83811015610cd3578181015183820152602001610cbb565b50505050905090810190601f168015610d005780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b50505050506040513d6020811015610d4a57600080fd5b50511515610d5757600080fd5b5060019392505050565b610d6e8484846012611d59565b50505050565b600c5490565b6000600982815481101515610d8b57fe5b600091825260209091200154600160a060020a031692915050565b336000908152600360209081526040808320600160a060020a0386168452909152812054808310610dfa57336000908152600360209081526040808320600160a060020a0388168452909152812055610e2f565b610e0a818463ffffffff61204c16565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a031660009081526001602052604090205490565b600054600160a060020a03163314610ec757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109075780601f106108dc57610100808354040283529160200191610907565b60095490565b33600090815260016020526040812054821115610fa857600080fd5b600160a060020a0383161515610fbd57600080fd5b33600090815260016020526040902054610fdd908363ffffffff61204c16565b3360009081526001602052604080822092909255600160a060020a0385168152205461100f908363ffffffff61205e16565b600160a060020a038416600081815260016020908152604091829020939093558051858152905191923392600080516020612dd08339815191529281900390910190a350600192915050565b600a54156110b5576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b61111a8282600980548060200260200160405190810160405280929190818152602001828054801561111057602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116110f2575b50505050506112de565b5050565b60006111d1620f42406111c5611142600c54620f424061205e90919063ffffffff16565b6040805160e060020a6370a082310281523060048201529051600160a060020a038b16916370a082319160248083019260209291908290030181600087803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b50519063ffffffff61206b16565b9063ffffffff61209416565b90506111e086868686866120a9565b6040805160e060020a6370a0823102815230600482015290518291600160a060020a038816916370a08231916024808201926020929091908290030181600087803b15801561122e57600080fd5b505af1158015611242573d6000803e3d6000fd5b505050506040513d602081101561125857600080fd5b505110156112d6576040805160e560020a62461bcd02815260206004820152602b60248201527f6c656e643a20746f6b656e73206d7573742062652072657475726e656420776960448201527f7468206c656e6420666565000000000000000000000000000000000000000000606482015290519081900360840190fd5b505050505050565b600a5415611338576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b610b15838383612398565b6007805460018101825560009182527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805473ffffffffffffffffffffffffffffffffffffffff19163317905561139b848461090f565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b83811015611428578181015183820152602001611410565b50505050905090810190601f1680156114555780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561147457600080fd5b505af1158015611488573d6000803e3d6000fd5b50505050506040513d602081101561149f57600080fd5b505115156114ac57600080fd5b6007805460001901906114bf9082612c38565b506001949350505050565b336000908152600360209081526040808320600160a060020a03861684529091528120546114fe908363ffffffff61205e16565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600054600160a060020a031633146115a557600080fd5b617530811115611625576040805160e560020a62461bcd02815260206004820152602d60248201527f7365744c656e644665653a206665652073686f756c64206265206e6f7420677260448201527f6561746572207468616e20332500000000000000000000000000000000000000606482015290519081900360840190fd5b600c55565b7fd5c368b60000000000000000000000000000000000000000000000000000000081565b600b5460609060009060ff1615156116b0576040805160e560020a62461bcd02815260206004820152601460248201527f42756e646c696e672069732064697361626c6564000000000000000000000000604482015290519081900360640190fd5b600a541561170a576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b6002541515611789576040805160e560020a62461bcd02815260206004820152603760248201527f54686973206d6574686f642063616e20626520757365642077697468206e6f6e60448201527f207a65726f20746f74616c20737570706c79206f6e6c79000000000000000000606482015290519081900360840190fd5b6009546040805182815260208084028201019091529080156117b5578160200160208202803883390190505b509150600090505b60095481101561185a5761183a6002546111c5856009858154811015156117e057fe5b60009182526020808320909101546040805160e060020a6370a082310281523060048201529051600160a060020a03909216936370a082319360248084019491939192918390030190829087803b15801561118d57600080fd5b828281518110151561184857fe5b602090810290910101526001016117bd565b610d6e848484611959565b600054600160a060020a0316331461187c57600080fd5b600b5460ff16156118d7576040805160e560020a62461bcd02815260206004820152601b60248201527f42756e646c696e6720697320616c726561647920656e61626c65640000000000604482015290519081900360640190fd5b600b805460ff1916600190811790915560408051918252517fcd495a5e98995df10f680f215ceaac5420ab5f1e24457a3fcdf19a91ad1079f19181900360200190a1565b600054600160a060020a0316331461193257600080fd5b61193b81612663565b50565b620f424081565b6006546101009004600160a060020a031690565b60008215156119d8576040805160e560020a62461bcd02815260206004820152602260248201527f42756e646c696e6720616d6f756e742073686f756c64206265206e6f6e2d7a6560448201527f726f000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b815160095414611a58576040805160e560020a62461bcd02815260206004820152603960248201527f4c656e67687473206f66205f746f6b656e7320616e6420746f6b656e416d6f7560448201527f6e74732061727261792073686f756c6420626520657175616c00000000000000606482015290519081900360840190fd5b5060005b600954811015611b2b578181815181101515611a7457fe5b602090810290910101511515611ad4576040805160e560020a62461bcd02815260206004820152601f60248201527f546f6b656e20616d6f756e742073686f756c64206265206e6f6e2d7a65726f00604482015290519081900360640190fd5b611b2333308484815181101515611ae757fe5b90602001906020020151600985815481101515611b0057fe5b600091825260209091200154600160a060020a031692919063ffffffff6126e016565b600101611a5c565b600254611b3e908463ffffffff61205e16565b600255600160a060020a038416600090815260016020526040902054611b6a908463ffffffff61205e16565b600160a060020a0385166000818152600160209081526040918290209390935580518681529051919233927f6401d28c11d9f5749b7d2848c2af727680ae93ed2c51ac22e65ed498fb8dcb419281900390910190a3604080518481529051600160a060020a03861691600091600080516020612dd08339815191529181900360200190a350505050565b600160a060020a038316600090815260016020526040812054821115611c1957600080fd5b600160a060020a0384166000908152600360209081526040808320338452909152902054821115611c4957600080fd5b600160a060020a0383161515611c5e57600080fd5b600160a060020a038416600090815260016020526040902054611c87908363ffffffff61204c16565b600160a060020a038086166000908152600160205260408082209390935590851681522054611cbc908363ffffffff61205e16565b600160a060020a038085166000908152600160209081526040808320949094559187168152600382528281203382529091522054611d00908363ffffffff61204c16565b600160a060020a0380861660008181526003602090815260408083203384528252918290209490945580518681529051928716939192600080516020612dd0833981519152929181900390910190a35060019392505050565b60065460ff1615611dd9576040805160e560020a62461bcd028152602060048201526024808201527f636f6e7374727563746f723a20646563696d616c732073686f756c642062652060448201527f7a65726f00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600060ff821611611e5a576040805160e560020a62461bcd02815260206004820152602960248201527f636f6e7374727563746f723a205f646563696d616c732073686f756c64206e6f60448201527f74206265207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8251600010611ed9576040805160e560020a62461bcd02815260206004820152602560248201527f636f6e7374727563746f723a206e616d652073686f756c64206e6f742062652060448201527f656d707479000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8151600010611f58576040805160e560020a62461bcd02815260206004820152602760248201527f636f6e7374727563746f723a2073796d626f6c2073686f756c64206e6f74206260448201527f6520656d70747900000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b835160021115611fd8576040805160e560020a62461bcd02815260206004820152603260248201527f436f6e747261637420646f6573206e6f7420737570706f7274206c657373207460448201527f68616e203220696e6e657220746f6b656e730000000000000000000000000000606482015290519081900360840190fd5b8251611feb906004906020860190612c5c565b508151611fff906005906020850190612c5c565b506006805460ff191660ff83161790558351612022906009906020870190612cd6565b50610d6e7fd5c368b600000000000000000000000000000000000000000000000000000000612899565b60008282111561205857fe5b50900390565b8181018281101561097057fe5b600082151561207c57506000610970565b5081810281838281151561208c57fe5b041461097057fe5b600081838115156120a157fe5b049392505050565b6040805160e060020a6370a082310281523060048201529051600091600160a060020a038716916370a082319160248082019260209290919082900301818787803b1580156120f757600080fd5b505af115801561210b573d6000803e3d6000fd5b505050506040513d602081101561212157600080fd5b5051905061213f600160a060020a038616878663ffffffff6128d516565b50600a80546001019055612151611945565b600160a060020a0316631cb9ce633485856040518463ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561221557600080fd5b505af1158015612229573d6000803e3d6000fd5b50505050506040513d602081101561224057600080fd5b50511515612298576040805160e560020a62461bcd02815260206004820152601b60248201527f6c656e643a206172626974726172792063616c6c206661696c65640000000000604482015290519081900360640190fd5b600a80546000190190556040805160e060020a6370a0823102815230600482015290518291600160a060020a038816916370a08231916024808201926020929091908290030181600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b505050506040513d602081101561231a57600080fd5b505110156112d6576040805160e560020a62461bcd02815260206004820152602360248201527f6c656e643a206c656e64656420746f6b656e206d75737420626520726566696c60448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000806000806000855111151561241f576040805160e560020a62461bcd02815260206004820152602260248201527f4172726179206f6620736f6d65546f6b656e732063616e277420626520656d7060448201527f7479000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60025433600090815260016020526040902054909450612445908763ffffffff61204c16565b33600090815260016020526040902055612465848763ffffffff61204c16565b600255604080518781529051600160a060020a0389169133917f8c85614f24f81c7b85c9837ab8277cfc5062dea12393fe90c757220926b07a7b9181900360200190a36040805187815290516000913391600080516020612dd08339815191529181900360200190a3600092505b845183101561265a57600091505b828210156125b25784828151811015156124f757fe5b90602001906020020151600160a060020a0316858481518110151561251857fe5b60209081029091010151600160a060020a031614156125a7576040805160e560020a62461bcd02815260206004820152603b60248201527f756e62756e646c65536f6d653a2073686f756c64206e6f7420756e62756e646c60448201527f652073616d6520746f6b656e206d756c7469706c652074696d65730000000000606482015290519081900360840190fd5b6001909101906124e1565b61261a846111c58888878151811015156125c857fe5b60209081029091018101516040805160e060020a6370a082310281523060048201529051600160a060020a03909216926370a08231926024808401938290030181600087803b15801561118d57600080fd5b905061264f8782878681518110151561262f57fe5b60209081029091010151600160a060020a0316919063ffffffff61299916565b6001909201916124d3565b50505050505050565b600160a060020a038116151561267857600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000808211156128925784600160a060020a03166370a08231846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b505050506040513d602081101561276f57600080fd5b5051905061277f85858585612b2a565b50612790818363ffffffff61205e16565b85600160a060020a03166370a08231856040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b1580156127eb57600080fd5b505af11580156127ff573d6000803e3d6000fd5b505050506040513d602081101561281557600080fd5b505114612892576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050505050565b600160e060020a031980821614156128b057600080fd5b600160e060020a0319166000908152600860205260409020805460ff19166001179055565b60006128e084612c01565b15156128eb57600080fd5b83600160a060020a031660405180807f7472616e7366657228616464726573732c75696e7432353629000000000000008152506019019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af192505050151561298957600080fd5b612991612c09565b949350505050565b600080821115610d6e576040805160e060020a6370a082310281523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b1580156129ee57600080fd5b505af1158015612a02573d6000803e3d6000fd5b505050506040513d6020811015612a1857600080fd5b50519050612a278484846128d5565b50612a38818363ffffffff61204c16565b6040805160e060020a6370a082310281523060048201529051600160a060020a038716916370a082319160248083019260209291908290030181600087803b158015612a8357600080fd5b505af1158015612a97573d6000803e3d6000fd5b505050506040513d6020811015612aad57600080fd5b505114610d6e576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000612b3585612c01565b1515612b4057600080fd5b604080517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f74323536290000000000000000000000000000000000000000000000000000006020820152815190819003602501812063ffffffff60e060020a918290049081169091028252600160a060020a0387811660048401528681166024840152604483018690529251928816929091606480820192600092909190829003018183875af1925050501515612bf957600080fd5b610b75612c09565b6000903b1190565b60003d8015612c1f5760208114612c2857600080fd5b60019150612c34565b60206000803e60005191505b5090565b815481835581811115610b1557600083815260209020610b15918101908301612d44565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c9d57805160ff1916838001178555612cca565b82800160010185558215612cca579182015b82811115612cca578251825591602001919060010190612caf565b50612c34929150612d44565b828054828255906000526020600020908101928215612d38579160200282015b82811115612d38578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190612cf6565b50612c34929150612d5e565b61097a91905b80821115612c345760008155600101612d4a565b61097a91905b80821115612c3457805473ffffffffffffffffffffffffffffffffffffffff19168155600101612d6456006c65206c656e64696e67000000000000000000000000000000000000000000004f7065726174696f6e2063616e277420626520706572666f726d656420776869ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582027e90c0b1f92cc0a3d5a86ff52a13e7b43bd888984368453e1ba4feed2fcd6ec0029608060405260008054600160a060020a0319163317905561029a806100256000396000f3006080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631cb9ce638114610066578063715018a61461009a5780638da5cb5b146100b1578063f2fde38b146100e2575b600080fd5b61008660048035600160a060020a03169060248035908101910135610103565b604080519115158252519081900360200190f35b3480156100a657600080fd5b506100af610153565b005b3480156100bd57600080fd5b506100c66101bf565b60408051600160a060020a039092168252519081900360200190f35b3480156100ee57600080fd5b506100af600160a060020a03600435166101ce565b60008054600160a060020a0316331461011b57600080fd5b83600160a060020a03163484846040518083838082843782019150509250505060006040518083038185875af1979650505050505050565b600054600160a060020a0316331461016a57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b600054600160a060020a031633146101e557600080fd5b6101ee816101f1565b50565b600160a060020a038116151561020657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a72305820c0ae76901823d4050c5bfdb550e15a1715f0f52d0ca87b0cc821d5be23e6a2fc0029
Deployed Bytecode
0x60806040526004361061019d5763ffffffff60e060020a60003504166301ffc9a781146101a257806306fdde03146101d8578063095ea7b31461026257806318160ddd1461028657806319fa8f50146102ad5780631f400477146102df57806321f38c6e146102f457806322393ef41461030957806323b872dd1461037257806330e26cb81461039c578063313ce567146103b15780634000aea0146103dc5780634686b4be146104385780634aea0aec1461050e5780634f64b2be14610523578063661884631461055757806370a082311461057b578063715018a61461059c5780638da5cb5b146105b157806395d89b41146105c6578063a64ed8ba146105db578063a9059cbb146105f0578063b4dc3dc714610614578063be5afb1a14610638578063be7e18ed146106a3578063cae9ca511461070a578063d73dd62314610766578063dd62ed3e1461078a578063df1614cf146107b1578063e8f88eaa146107c9578063eba3cdfe146107de578063eec0344414610802578063f2fde38b14610817578063f9f7d9de14610838578063fc9c8d391461084d575b600080fd5b3480156101ae57600080fd5b506101c4600160e060020a031960043516610862565b604080519115158252519081900360200190f35b3480156101e457600080fd5b506101ed610881565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561022757818101518382015260200161020f565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026e57600080fd5b506101c4600160a060020a036004351660243561090f565b34801561029257600080fd5b5061029b610976565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102c261097d565b60408051600160e060020a03199092168252519081900360200190f35b3480156102eb57600080fd5b5061029b6109a1565b34801561030057600080fd5b506101c46109a7565b34801561031557600080fd5b506040805160206004604435818101358381028086018501909652808552610370958335600160a060020a03169560248035963696956064959394920192918291850190849080828437509497506109b09650505050505050565b005b34801561037e57600080fd5b506101c4600160a060020a0360043581169060243516604435610b1a565b3480156103a857600080fd5b50610370610b7e565b3480156103bd57600080fd5b506103c6610c31565b6040805160ff9092168252519081900360200190f35b604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610c3a9650505050505050565b34801561044457600080fd5b50604080516020600480358082013583810280860185019096528085526103709536959394602494938501929182918501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff169350610d6192505050565b34801561051a57600080fd5b5061029b610d74565b34801561052f57600080fd5b5061053b600435610d7a565b60408051600160a060020a039092168252519081900360200190f35b34801561056357600080fd5b506101c4600160a060020a0360043516602435610da6565b34801561058757600080fd5b5061029b600160a060020a0360043516610e95565b3480156105a857600080fd5b50610370610eb0565b3480156105bd57600080fd5b5061053b610f1c565b3480156105d257600080fd5b506101ed610f2b565b3480156105e757600080fd5b5061029b610f86565b3480156105fc57600080fd5b506101c4600160a060020a0360043516602435610f8c565b34801561062057600080fd5b50610370600160a060020a036004351660243561105b565b604080516020600460843581810135601f8101849004840285018401909552848452610370948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375094975061111e9650505050505050565b3480156106af57600080fd5b506040805160206004604435818101358381028086018501909652808552610370958335600160a060020a03169560248035963696956064959394920192918291850190849080828437509497506112de9650505050505050565b604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506113439650505050505050565b34801561077257600080fd5b506101c4600160a060020a03600435166024356114ca565b34801561079657600080fd5b5061029b600160a060020a0360043581169060243516611563565b3480156107bd57600080fd5b5061037060043561158e565b3480156107d557600080fd5b506102c261162a565b3480156107ea57600080fd5b50610370600160a060020a036004351660243561164e565b34801561080e57600080fd5b50610370611865565b34801561082357600080fd5b50610370600160a060020a036004351661191b565b34801561084457600080fd5b5061029b61193e565b34801561085957600080fd5b5061053b611945565b600160e060020a03191660009081526008602052604090205460ff1690565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b505050505081565b336000818152600360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6002545b90565b7f01ffc9a70000000000000000000000000000000000000000000000000000000081565b600a5490565b600b5460ff1690565b600b5460ff161515610a0c576040805160e560020a62461bcd02815260206004820152601460248201527f42756e646c696e672069732064697361626c6564000000000000000000000000604482015290519081900360640190fd5b600a5415610a66576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b60025415610b0a576040805160e560020a62461bcd02815260206004820152604660248201527f62756e646c654669727374546f6b656e733a2054686973206d6574686f64206360448201527f616e20626520757365642077697468207a65726f20746f74616c20737570706c60648201527f79206f6e6c790000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b610b15838383611959565b505050565b6006546000908190600160a060020a03868116610100909204161415610b6657600780546000198101908110610b4c57fe5b600091825260209091200154600160a060020a0316610b68565b845b9050610b75818585611bf4565b95945050505050565b600054600160a060020a03163314610b9557600080fd5b600b5460ff161515610bf1576040805160e560020a62461bcd02815260206004820152601c60248201527f42756e646c696e6720697320616c72656164792064697361626c656400000000604482015290519081900360640190fd5b600b805460ff19169055604080516000815290517fcd495a5e98995df10f680f215ceaac5420ab5f1e24457a3fcdf19a91ad1079f19181900360200190a1565b60065460ff1681565b6000610c468484610f8c565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b83811015610cd3578181015183820152602001610cbb565b50505050905090810190601f168015610d005780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b50505050506040513d6020811015610d4a57600080fd5b50511515610d5757600080fd5b5060019392505050565b610d6e8484846012611d59565b50505050565b600c5490565b6000600982815481101515610d8b57fe5b600091825260209091200154600160a060020a031692915050565b336000908152600360209081526040808320600160a060020a0386168452909152812054808310610dfa57336000908152600360209081526040808320600160a060020a0388168452909152812055610e2f565b610e0a818463ffffffff61204c16565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600160a060020a031660009081526001602052604090205490565b600054600160a060020a03163314610ec757600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109075780601f106108dc57610100808354040283529160200191610907565b60095490565b33600090815260016020526040812054821115610fa857600080fd5b600160a060020a0383161515610fbd57600080fd5b33600090815260016020526040902054610fdd908363ffffffff61204c16565b3360009081526001602052604080822092909255600160a060020a0385168152205461100f908363ffffffff61205e16565b600160a060020a038416600081815260016020908152604091829020939093558051858152905191923392600080516020612dd08339815191529281900390910190a350600192915050565b600a54156110b5576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b61111a8282600980548060200260200160405190810160405280929190818152602001828054801561111057602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116110f2575b50505050506112de565b5050565b60006111d1620f42406111c5611142600c54620f424061205e90919063ffffffff16565b6040805160e060020a6370a082310281523060048201529051600160a060020a038b16916370a082319160248083019260209291908290030181600087803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b50519063ffffffff61206b16565b9063ffffffff61209416565b90506111e086868686866120a9565b6040805160e060020a6370a0823102815230600482015290518291600160a060020a038816916370a08231916024808201926020929091908290030181600087803b15801561122e57600080fd5b505af1158015611242573d6000803e3d6000fd5b505050506040513d602081101561125857600080fd5b505110156112d6576040805160e560020a62461bcd02815260206004820152602b60248201527f6c656e643a20746f6b656e73206d7573742062652072657475726e656420776960448201527f7468206c656e6420666565000000000000000000000000000000000000000000606482015290519081900360840190fd5b505050505050565b600a5415611338576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b610b15838383612398565b6007805460018101825560009182527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805473ffffffffffffffffffffffffffffffffffffffff19163317905561139b848461090f565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b83811015611428578181015183820152602001611410565b50505050905090810190601f1680156114555780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561147457600080fd5b505af1158015611488573d6000803e3d6000fd5b50505050506040513d602081101561149f57600080fd5b505115156114ac57600080fd5b6007805460001901906114bf9082612c38565b506001949350505050565b336000908152600360209081526040808320600160a060020a03861684529091528120546114fe908363ffffffff61205e16565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600054600160a060020a031633146115a557600080fd5b617530811115611625576040805160e560020a62461bcd02815260206004820152602d60248201527f7365744c656e644665653a206665652073686f756c64206265206e6f7420677260448201527f6561746572207468616e20332500000000000000000000000000000000000000606482015290519081900360840190fd5b600c55565b7fd5c368b60000000000000000000000000000000000000000000000000000000081565b600b5460609060009060ff1615156116b0576040805160e560020a62461bcd02815260206004820152601460248201527f42756e646c696e672069732064697361626c6564000000000000000000000000604482015290519081900360640190fd5b600a541561170a576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020612db08339815191526044820152600080516020612d90833981519152606482015290519081900360840190fd5b6002541515611789576040805160e560020a62461bcd02815260206004820152603760248201527f54686973206d6574686f642063616e20626520757365642077697468206e6f6e60448201527f207a65726f20746f74616c20737570706c79206f6e6c79000000000000000000606482015290519081900360840190fd5b6009546040805182815260208084028201019091529080156117b5578160200160208202803883390190505b509150600090505b60095481101561185a5761183a6002546111c5856009858154811015156117e057fe5b60009182526020808320909101546040805160e060020a6370a082310281523060048201529051600160a060020a03909216936370a082319360248084019491939192918390030190829087803b15801561118d57600080fd5b828281518110151561184857fe5b602090810290910101526001016117bd565b610d6e848484611959565b600054600160a060020a0316331461187c57600080fd5b600b5460ff16156118d7576040805160e560020a62461bcd02815260206004820152601b60248201527f42756e646c696e6720697320616c726561647920656e61626c65640000000000604482015290519081900360640190fd5b600b805460ff1916600190811790915560408051918252517fcd495a5e98995df10f680f215ceaac5420ab5f1e24457a3fcdf19a91ad1079f19181900360200190a1565b600054600160a060020a0316331461193257600080fd5b61193b81612663565b50565b620f424081565b6006546101009004600160a060020a031690565b60008215156119d8576040805160e560020a62461bcd02815260206004820152602260248201527f42756e646c696e6720616d6f756e742073686f756c64206265206e6f6e2d7a6560448201527f726f000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b815160095414611a58576040805160e560020a62461bcd02815260206004820152603960248201527f4c656e67687473206f66205f746f6b656e7320616e6420746f6b656e416d6f7560448201527f6e74732061727261792073686f756c6420626520657175616c00000000000000606482015290519081900360840190fd5b5060005b600954811015611b2b578181815181101515611a7457fe5b602090810290910101511515611ad4576040805160e560020a62461bcd02815260206004820152601f60248201527f546f6b656e20616d6f756e742073686f756c64206265206e6f6e2d7a65726f00604482015290519081900360640190fd5b611b2333308484815181101515611ae757fe5b90602001906020020151600985815481101515611b0057fe5b600091825260209091200154600160a060020a031692919063ffffffff6126e016565b600101611a5c565b600254611b3e908463ffffffff61205e16565b600255600160a060020a038416600090815260016020526040902054611b6a908463ffffffff61205e16565b600160a060020a0385166000818152600160209081526040918290209390935580518681529051919233927f6401d28c11d9f5749b7d2848c2af727680ae93ed2c51ac22e65ed498fb8dcb419281900390910190a3604080518481529051600160a060020a03861691600091600080516020612dd08339815191529181900360200190a350505050565b600160a060020a038316600090815260016020526040812054821115611c1957600080fd5b600160a060020a0384166000908152600360209081526040808320338452909152902054821115611c4957600080fd5b600160a060020a0383161515611c5e57600080fd5b600160a060020a038416600090815260016020526040902054611c87908363ffffffff61204c16565b600160a060020a038086166000908152600160205260408082209390935590851681522054611cbc908363ffffffff61205e16565b600160a060020a038085166000908152600160209081526040808320949094559187168152600382528281203382529091522054611d00908363ffffffff61204c16565b600160a060020a0380861660008181526003602090815260408083203384528252918290209490945580518681529051928716939192600080516020612dd0833981519152929181900390910190a35060019392505050565b60065460ff1615611dd9576040805160e560020a62461bcd028152602060048201526024808201527f636f6e7374727563746f723a20646563696d616c732073686f756c642062652060448201527f7a65726f00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600060ff821611611e5a576040805160e560020a62461bcd02815260206004820152602960248201527f636f6e7374727563746f723a205f646563696d616c732073686f756c64206e6f60448201527f74206265207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8251600010611ed9576040805160e560020a62461bcd02815260206004820152602560248201527f636f6e7374727563746f723a206e616d652073686f756c64206e6f742062652060448201527f656d707479000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8151600010611f58576040805160e560020a62461bcd02815260206004820152602760248201527f636f6e7374727563746f723a2073796d626f6c2073686f756c64206e6f74206260448201527f6520656d70747900000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b835160021115611fd8576040805160e560020a62461bcd02815260206004820152603260248201527f436f6e747261637420646f6573206e6f7420737570706f7274206c657373207460448201527f68616e203220696e6e657220746f6b656e730000000000000000000000000000606482015290519081900360840190fd5b8251611feb906004906020860190612c5c565b508151611fff906005906020850190612c5c565b506006805460ff191660ff83161790558351612022906009906020870190612cd6565b50610d6e7fd5c368b600000000000000000000000000000000000000000000000000000000612899565b60008282111561205857fe5b50900390565b8181018281101561097057fe5b600082151561207c57506000610970565b5081810281838281151561208c57fe5b041461097057fe5b600081838115156120a157fe5b049392505050565b6040805160e060020a6370a082310281523060048201529051600091600160a060020a038716916370a082319160248082019260209290919082900301818787803b1580156120f757600080fd5b505af115801561210b573d6000803e3d6000fd5b505050506040513d602081101561212157600080fd5b5051905061213f600160a060020a038616878663ffffffff6128d516565b50600a80546001019055612151611945565b600160a060020a0316631cb9ce633485856040518463ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561221557600080fd5b505af1158015612229573d6000803e3d6000fd5b50505050506040513d602081101561224057600080fd5b50511515612298576040805160e560020a62461bcd02815260206004820152601b60248201527f6c656e643a206172626974726172792063616c6c206661696c65640000000000604482015290519081900360640190fd5b600a80546000190190556040805160e060020a6370a0823102815230600482015290518291600160a060020a038816916370a08231916024808201926020929091908290030181600087803b1580156122f057600080fd5b505af1158015612304573d6000803e3d6000fd5b505050506040513d602081101561231a57600080fd5b505110156112d6576040805160e560020a62461bcd02815260206004820152602360248201527f6c656e643a206c656e64656420746f6b656e206d75737420626520726566696c60448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000806000806000855111151561241f576040805160e560020a62461bcd02815260206004820152602260248201527f4172726179206f6620736f6d65546f6b656e732063616e277420626520656d7060448201527f7479000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60025433600090815260016020526040902054909450612445908763ffffffff61204c16565b33600090815260016020526040902055612465848763ffffffff61204c16565b600255604080518781529051600160a060020a0389169133917f8c85614f24f81c7b85c9837ab8277cfc5062dea12393fe90c757220926b07a7b9181900360200190a36040805187815290516000913391600080516020612dd08339815191529181900360200190a3600092505b845183101561265a57600091505b828210156125b25784828151811015156124f757fe5b90602001906020020151600160a060020a0316858481518110151561251857fe5b60209081029091010151600160a060020a031614156125a7576040805160e560020a62461bcd02815260206004820152603b60248201527f756e62756e646c65536f6d653a2073686f756c64206e6f7420756e62756e646c60448201527f652073616d6520746f6b656e206d756c7469706c652074696d65730000000000606482015290519081900360840190fd5b6001909101906124e1565b61261a846111c58888878151811015156125c857fe5b60209081029091018101516040805160e060020a6370a082310281523060048201529051600160a060020a03909216926370a08231926024808401938290030181600087803b15801561118d57600080fd5b905061264f8782878681518110151561262f57fe5b60209081029091010151600160a060020a0316919063ffffffff61299916565b6001909201916124d3565b50505050505050565b600160a060020a038116151561267857600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000808211156128925784600160a060020a03166370a08231846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b505050506040513d602081101561276f57600080fd5b5051905061277f85858585612b2a565b50612790818363ffffffff61205e16565b85600160a060020a03166370a08231856040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b1580156127eb57600080fd5b505af11580156127ff573d6000803e3d6000fd5b505050506040513d602081101561281557600080fd5b505114612892576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050505050565b600160e060020a031980821614156128b057600080fd5b600160e060020a0319166000908152600860205260409020805460ff19166001179055565b60006128e084612c01565b15156128eb57600080fd5b83600160a060020a031660405180807f7472616e7366657228616464726573732c75696e7432353629000000000000008152506019019050604051809103902060e060020a900484846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001828152602001925050506000604051808303816000875af192505050151561298957600080fd5b612991612c09565b949350505050565b600080821115610d6e576040805160e060020a6370a082310281523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b1580156129ee57600080fd5b505af1158015612a02573d6000803e3d6000fd5b505050506040513d6020811015612a1857600080fd5b50519050612a278484846128d5565b50612a38818363ffffffff61204c16565b6040805160e060020a6370a082310281523060048201529051600160a060020a038716916370a082319160248083019260209291908290030181600087803b158015612a8357600080fd5b505af1158015612a97573d6000803e3d6000fd5b505050506040513d6020811015612aad57600080fd5b505114610d6e576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000612b3585612c01565b1515612b4057600080fd5b604080517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f74323536290000000000000000000000000000000000000000000000000000006020820152815190819003602501812063ffffffff60e060020a918290049081169091028252600160a060020a0387811660048401528681166024840152604483018690529251928816929091606480820192600092909190829003018183875af1925050501515612bf957600080fd5b610b75612c09565b6000903b1190565b60003d8015612c1f5760208114612c2857600080fd5b60019150612c34565b60206000803e60005191505b5090565b815481835581811115610b1557600083815260209020610b15918101908301612d44565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c9d57805160ff1916838001178555612cca565b82800160010185558215612cca579182015b82811115612cca578251825591602001919060010190612caf565b50612c34929150612d44565b828054828255906000526020600020908101928215612d38579160200282015b82811115612d38578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190612cf6565b50612c34929150612d5e565b61097a91905b80821115612c345760008155600101612d4a565b61097a91905b80821115612c3457805473ffffffffffffffffffffffffffffffffffffffff19168155600101612d6456006c65206c656e64696e67000000000000000000000000000000000000000000004f7065726174696f6e2063616e277420626520706572666f726d656420776869ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582027e90c0b1f92cc0a3d5a86ff52a13e7b43bd888984368453e1ba4feed2fcd6ec0029
Swarm Source
bzzr://c0ae76901823d4050c5bfdb550e15a1715f0f52d0ca87b0cc821d5be23e6a2fc
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.