Overview
Balance:
0 Ether
EtherValue:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 5 internal transactions
[ Download CSV Export ]
Contract Self Destruct called at Txn Hash 0x66b9b807cb0216685cb313a3e078c8dd0adc5911897317f441c8551893e580ca
Contract Name:
BitWichLoom
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-25 */ pragma solidity ^0.4.23; /** * @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) { 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; } } /** * @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 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 transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev 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); } /** * @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); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } contract NamedToken is ERC20 { string public name; string public symbol; } contract BitWich is Pausable { using SafeMath for uint; using SafeERC20 for ERC20; event LogBought(address indexed buyer, uint buyCost, uint amount); event LogSold(address indexed seller, uint sellValue, uint amount); event LogPriceChanged(uint newBuyCost, uint newSellValue); // ERC20 contract to operate over ERC20 public erc20Contract; // amount bought - amount sold = amount willing to buy from others uint public netAmountBought; // number of tokens that can be bought from contract per wei sent uint public buyCost; // number of tokens that can be sold to contract per wei received uint public sellValue; constructor(uint _buyCost, uint _sellValue, address _erc20ContractAddress) public { require(_buyCost > 0); require(_sellValue > 0); buyCost = _buyCost; sellValue = _sellValue; erc20Contract = NamedToken(_erc20ContractAddress); } /* ACCESSORS */ function tokenName() external view returns (string) { return NamedToken(erc20Contract).name(); } function tokenSymbol() external view returns (string) { return NamedToken(erc20Contract).symbol(); } function amountForSale() external view returns (uint) { return erc20Contract.balanceOf(address(this)); } // Accessor for the cost in wei of buying a certain amount of tokens. function getBuyCost(uint _amount) external view returns(uint) { uint cost = _amount.div(buyCost); if (_amount % buyCost != 0) { cost = cost.add(1); // Handles truncating error for odd buyCosts } return cost; } // Accessor for the value in wei of selling a certain amount of tokens. function getSellValue(uint _amount) external view returns(uint) { return _amount.div(sellValue); } /* PUBLIC FUNCTIONS */ // Perform the buy of tokens for ETH and add to the net amount bought function buy(uint _minAmountDesired) external payable whenNotPaused { processBuy(msg.sender, _minAmountDesired); } // Perform the sell of tokens, send ETH to the seller, and reduce the net amount bought // NOTE: seller must call ERC20.approve() first before calling this, // unless they can use ERC20.approveAndCall() directly function sell(uint _amount, uint _weiExpected) external whenNotPaused { processSell(msg.sender, _amount, _weiExpected); } /* INTERNAL FUNCTIONS */ // NOTE: _minAmountDesired protects against cost increase between send time and process time function processBuy(address _buyer, uint _minAmountDesired) internal { uint amountPurchased = msg.value.mul(buyCost); require(erc20Contract.balanceOf(address(this)) >= amountPurchased); require(amountPurchased >= _minAmountDesired); netAmountBought = netAmountBought.add(amountPurchased); emit LogBought(_buyer, buyCost, amountPurchased); erc20Contract.safeTransfer(_buyer, amountPurchased); } // NOTE: _weiExpected protects against a value decrease between send time and process time function processSell(address _seller, uint _amount, uint _weiExpected) internal { require(netAmountBought >= _amount); require(erc20Contract.allowance(_seller, address(this)) >= _amount); uint value = _amount.div(sellValue); // tokens divided by (tokens per wei) equals wei require(value >= _weiExpected); assert(address(this).balance >= value); // contract should always have enough wei _amount = value.mul(sellValue); // in case of rounding down, reduce the _amount sold netAmountBought = netAmountBought.sub(_amount); emit LogSold(_seller, sellValue, _amount); erc20Contract.safeTransferFrom(_seller, address(this), _amount); _seller.transfer(value); } // NOTE: this should never return true unless this contract has a bug function lacksFunds() external view returns(bool) { return address(this).balance < getRequiredBalance(sellValue); } /* OWNER FUNCTIONS */ // Owner function to check how much extra ETH is available to cash out function amountAvailableToCashout() external view onlyOwner returns (uint) { return address(this).balance.sub(getRequiredBalance(sellValue)); } // Owner function for cashing out extra ETH not needed for buying tokens function cashout() external onlyOwner { uint requiredBalance = getRequiredBalance(sellValue); assert(address(this).balance >= requiredBalance); owner.transfer(address(this).balance.sub(requiredBalance)); } // Owner function for closing the paused contract and cashing out all tokens and ETH function close() public onlyOwner whenPaused { erc20Contract.transfer(owner, erc20Contract.balanceOf(address(this))); selfdestruct(owner); } // Owner accessor to get how much ETH is needed to send // in order to change sell price to proposed price function extraBalanceNeeded(uint _proposedSellValue) external view onlyOwner returns (uint) { uint requiredBalance = getRequiredBalance(_proposedSellValue); return (requiredBalance > address(this).balance) ? requiredBalance.sub(address(this).balance) : 0; } // Owner function for adjusting prices (might need to add ETH if raising sell price) function adjustPrices(uint _buyCost, uint _sellValue) external payable onlyOwner whenPaused { buyCost = _buyCost == 0 ? buyCost : _buyCost; sellValue = _sellValue == 0 ? sellValue : _sellValue; uint requiredBalance = getRequiredBalance(sellValue); require(msg.value.add(address(this).balance) >= requiredBalance); emit LogPriceChanged(buyCost, sellValue); } function getRequiredBalance(uint _proposedSellValue) internal view returns (uint) { return netAmountBought.div(_proposedSellValue).add(1); } // Owner can transfer out any accidentally sent ERC20 tokens // excluding the token intended for this contract function transferAnyERC20Token(address _address, uint _tokens) external onlyOwner { require(_address != address(erc20Contract)); ERC20(_address).safeTransfer(owner, _tokens); } } contract BitWichLoom is BitWich { constructor() BitWich(800, 1300, 0xA4e8C3Ec456107eA67d3075bF9e3DF3A75823DB0) public { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"getBuyCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sellValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_proposedSellValue","type":"uint256"}],"name":"extraBalanceNeeded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"getSellValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSymbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"cashout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"amountForSale","outputs":[{"name":"","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":"_buyCost","type":"uint256"},{"name":"_sellValue","type":"uint256"}],"name":"adjustPrices","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"netAmountBought","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"erc20Contract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lacksFunds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"amountAvailableToCashout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_weiExpected","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_minAmountDesired","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"buyCost","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"sellValue","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newBuyCost","type":"uint256"},{"indexed":false,"name":"newSellValue","type":"uint256"}],"name":"LogPriceChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405260008060146101000a81548160ff02191690831515021790555034801561002a57600080fd5b5061032061051473a4e8c3ec456107ea67d3075bf9e3df3a75823db0336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008311151561009557600080fd5b6000821115156100a457600080fd5b826003819055508160048190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050611cf5806101056000396000f300608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630ae66820146101385780632a9043e4146101795780633f4ba83a146101a457806343d726d6146101bb57806359fd510a146101d25780635c975abb146102135780636c02a931146102425780637939a10b146102d25780637b61c3201461031357806384054d3d146103a35780638456cb59146103ba5780638473e55f146103d15780638da5cb5b146103fc578063993090d0146104535780639e890cb31461047d578063a8f6c913146104a8578063ac0a7223146104ff578063c2083f551461052a578063d4e7b9cf14610559578063d79875eb14610584578063d96a094a146105bb578063dc39d06d146105db578063f2fde38b14610628575b600080fd5b34801561014457600080fd5b506101636004803603810190808035906020019092919050505061066b565b6040518082815260200191505060405180910390f35b34801561018557600080fd5b5061018e6106bc565b6040518082815260200191505060405180910390f35b3480156101b057600080fd5b506101b96106c2565b005b3480156101c757600080fd5b506101d0610780565b005b3480156101de57600080fd5b506101fd60048036038101908080359060200190929190505050610a49565b6040518082815260200191505060405180910390f35b34801561021f57600080fd5b50610228610b0a565b604051808215151515815260200191505060405180910390f35b34801561024e57600080fd5b50610257610b1d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029757808201518184015260208101905061027c565b50505050905090810190601f1680156102c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102de57600080fd5b506102fd60048036038101908080359060200190929190505050610c3b565b6040518082815260200191505060405180910390f35b34801561031f57600080fd5b50610328610c59565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561036857808201518184015260208101905061034d565b50505050905090810190601f1680156103955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103af57600080fd5b506103b8610d77565b005b3480156103c657600080fd5b506103cf610e98565b005b3480156103dd57600080fd5b506103e6610f58565b6040518082815260200191505060405180910390f35b34801561040857600080fd5b50610411611057565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047b600480360381019080803590602001909291908035906020019092919050505061107c565b005b34801561048957600080fd5b506104926111b1565b6040518082815260200191505060405180910390f35b3480156104b457600080fd5b506104bd6111b7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561050b57600080fd5b506105146111dd565b6040518082815260200191505060405180910390f35b34801561053657600080fd5b5061053f6111e3565b604051808215151515815260200191505060405180910390f35b34801561056557600080fd5b5061056e61120e565b6040518082815260200191505060405180910390f35b34801561059057600080fd5b506105b960048036038101908080359060200190929190803590602001909291905050506112a4565b005b6105d9600480360381019080803590602001909291905050506112cf565b005b3480156105e757600080fd5b50610626600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112f8565b005b34801561063457600080fd5b50610669600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611400565b005b6000806106836003548461155590919063ffffffff16565b905060006003548481151561069457fe5b061415156106b3576106b060018261156b90919063ffffffff16565b90505b80915050919050565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561071d57600080fd5b600060149054906101000a900460ff16151561073857600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107db57600080fd5b600060149054906101000a900460ff1615156107f657600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561091357600080fd5b505af1158015610927573d6000803e3d6000fd5b505050506040513d602081101561093d57600080fd5b81019080805190602001909291905050506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156109d357600080fd5b505af11580156109e7573d6000803e3d6000fd5b505050506040513d60208110156109fd57600080fd5b8101908080519060200190929190505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610aa757600080fd5b610ab083611587565b90503073ffffffffffffffffffffffffffffffffffffffff16318111610ad7576000610b02565b610b013073ffffffffffffffffffffffffffffffffffffffff1631826115b890919063ffffffff16565b5b915050919050565b600060149054906101000a900460ff1681565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015610ba557600080fd5b505af1158015610bb9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610be357600080fd5b810190808051640100000000811115610bfb57600080fd5b82810190506020810184811115610c1157600080fd5b8151856001820283011164010000000082111715610c2e57600080fd5b5050929190505050905090565b6000610c526004548361155590919063ffffffff16565b9050919050565b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015610ce157600080fd5b505af1158015610cf5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610d1f57600080fd5b810190808051640100000000811115610d3757600080fd5b82810190506020810184811115610d4d57600080fd5b8151856001820283011164010000000082111715610d6a57600080fd5b5050929190505050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610dd457600080fd5b610ddf600454611587565b9050803073ffffffffffffffffffffffffffffffffffffffff163110151515610e0457fe5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610e69833073ffffffffffffffffffffffffffffffffffffffff16316115b890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610e94573d6000803e3d6000fd5b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ef357600080fd5b600060149054906101000a900460ff16151515610f0f57600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505050506040513d602081101561104157600080fd5b8101908080519060200190929190505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d957600080fd5b600060149054906101000a900460ff1615156110f457600080fd5b600083146111025782611106565b6003545b6003819055506000821461111a578161111e565b6004545b60048190555061112f600454611587565b90508061115c3073ffffffffffffffffffffffffffffffffffffffff16313461156b90919063ffffffff16565b1015151561116957600080fd5b7fc3ae4d05a23526d863c1db9f30859dec463447da15d77d1345daec3ed995d3c1600354600454604051808381526020018281526020019250505060405180910390a1505050565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60006111f0600454611587565b3073ffffffffffffffffffffffffffffffffffffffff163110905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561126b57600080fd5b61129f611279600454611587565b3073ffffffffffffffffffffffffffffffffffffffff16316115b890919063ffffffff16565b905090565b600060149054906101000a900460ff161515156112c057600080fd5b6112cb3383836115d1565b5050565b600060149054906101000a900460ff161515156112eb57600080fd5b6112f5338261188d565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561135357600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156113b057600080fd5b6113fc6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16611a809092919063ffffffff16565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561149757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818381151561156257fe5b04905092915050565b6000818301905082811015151561157e57fe5b80905092915050565b60006115b160016115a38460025461155590919063ffffffff16565b61156b90919063ffffffff16565b9050919050565b60008282111515156115c657fe5b818303905092915050565b600082600254101515156115e457600080fd5b82600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e86306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156116d657600080fd5b505af11580156116ea573d6000803e3d6000fd5b505050506040513d602081101561170057600080fd5b81019080805190602001909291905050501015151561171e57600080fd5b6117336004548461155590919063ffffffff16565b905081811015151561174457600080fd5b803073ffffffffffffffffffffffffffffffffffffffff16311015151561176757fe5b61177c60045482611b6e90919063ffffffff16565b9250611793836002546115b890919063ffffffff16565b6002819055508373ffffffffffffffffffffffffffffffffffffffff167f946ed66061b6232665d608ecbd0fa25047412a213b2fb0c2175b98c59a66801960045485604051808381526020018281526020019250505060405180910390a2611840843085600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ba6909392919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611886573d6000803e3d6000fd5b5050505050565b60006118a460035434611b6e90919063ffffffff16565b905080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561196457600080fd5b505af1158015611978573d6000803e3d6000fd5b505050506040513d602081101561198e57600080fd5b8101908080519060200190929190505050101515156119ac57600080fd5b8181101515156119bb57600080fd5b6119d08160025461156b90919063ffffffff16565b6002819055508273ffffffffffffffffffffffffffffffffffffffff167fb0d70c35aba242808f01a11075ea974ae27db631710498471f8eb8b6f0d8c98460035483604051808381526020018281526020019250505060405180910390a2611a7b8382600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a809092919063ffffffff16565b505050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611b2357600080fd5b505af1158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b81019080805190602001909291905050501515611b6957600080fd5b505050565b600080831415611b815760009050611ba0565b8183029050818382811515611b9257fe5b04141515611b9c57fe5b8090505b92915050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b505050506040513d6020811015611ca757600080fd5b81019080805190602001909291905050501515611cc357600080fd5b505050505600a165627a7a72305820bf04941f348a130eecfc1ce467e196729971c028a0c72392f6e243413ecbc59f0029
Swarm Source
bzzr://bf04941f348a130eecfc1ce467e196729971c028a0c72392f6e243413ecbc59f
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.