More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 96 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Tokens | 10709423 | 1491 days ago | IN | 0 ETH | 0.0048457 | ||||
Hodl Tokens | 10623327 | 1504 days ago | IN | 0 ETH | 0.01118514 | ||||
Claim Tokens | 10615618 | 1505 days ago | IN | 0 ETH | 0.00232395 | ||||
Claim Tokens | 10615606 | 1505 days ago | IN | 0 ETH | 0.00240453 | ||||
Claim Tokens | 10458989 | 1530 days ago | IN | 0 ETH | 0.00347155 | ||||
Claim Tokens | 10343120 | 1548 days ago | IN | 0 ETH | 0.00181507 | ||||
Claim Tokens | 10249752 | 1562 days ago | IN | 0 ETH | 0.00069687 | ||||
Claim Tokens | 10249752 | 1562 days ago | IN | 0 ETH | 0.00194472 | ||||
Claim Tokens | 10234531 | 1564 days ago | IN | 0 ETH | 0.00159112 | ||||
Hodl Tokens | 10167328 | 1575 days ago | IN | 0 ETH | 0.00430413 | ||||
Claim Tokens | 10158844 | 1576 days ago | IN | 0 ETH | 0.00103718 | ||||
Claim Tokens | 10059555 | 1592 days ago | IN | 0 ETH | 0.0015188 | ||||
Claim Tokens | 10024863 | 1597 days ago | IN | 0 ETH | 0.00087001 | ||||
Claim Tokens | 9844068 | 1625 days ago | IN | 0 ETH | 0.00021697 | ||||
Claim Tokens | 9832245 | 1627 days ago | IN | 0 ETH | 0.00032412 | ||||
Claim Tokens | 9463369 | 1684 days ago | IN | 0 ETH | 0.00019447 | ||||
Claim Tokens | 9443012 | 1687 days ago | IN | 0 ETH | 0.00019447 | ||||
Hodl Tokens | 9363392 | 1699 days ago | IN | 0 ETH | 0.00021509 | ||||
Claim Tokens | 9363322 | 1699 days ago | IN | 0 ETH | 0.00007232 | ||||
Hodl Tokens | 9354847 | 1700 days ago | IN | 0 ETH | 0.00020011 | ||||
Claim Tokens | 9354828 | 1700 days ago | IN | 0 ETH | 0.00006571 | ||||
Hodl Tokens | 9354824 | 1700 days ago | IN | 0 ETH | 0.00021509 | ||||
Claim Tokens | 9354824 | 1700 days ago | IN | 0 ETH | 0.00006692 | ||||
Claim Tokens | 9344549 | 1702 days ago | IN | 0 ETH | 0.00006482 | ||||
Hodl Tokens | 8929545 | 1773 days ago | IN | 0 ETH | 0.00020536 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ERC20tokensHodl
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-01-20 */ pragma solidity ^0.4.25; pragma experimental ABIEncoderV2; /** * * AXPR ERC20 Tokens Hodling * * Copyright: © All Rights Reserved | Axpire 2019 * * Author: Gustavo Basanta * */ contract OwnableContract { event onTransferOwnership(address newOwner); address superOwner; constructor() public { superOwner = msg.sender; } modifier onlyOwner() { require(msg.sender == superOwner); _; } function viewSuperOwner() public view returns (address owner) { return superOwner; } function changeOwner(address newOwner) onlyOwner public { require(newOwner != superOwner); superOwner = newOwner; emit onTransferOwnership(superOwner); } } contract BlockableContract is OwnableContract { event onBlockHODLs(bool status); bool public blockedContract; constructor() public { blockedContract = false; } modifier contractActive() { require(!blockedContract); _; } function doBlockContract() onlyOwner public { blockedContract = true; emit onBlockHODLs(blockedContract); } function unBlockContract() onlyOwner public { blockedContract = false; emit onBlockHODLs(blockedContract); } } contract ERC20tokensHodl is BlockableContract { /** * Events */ event onStoreProfileHash(address indexed hodler, string profileHashed); event onHodlTokens(address indexed hodler, address indexed tokenAddress, string tokenSymbol, uint256 amount, uint256 endtime); event onClaimTokens(address indexed hodler, address indexed tokenAddress, string tokenSymbol, uint256 amount, uint256 endtime); event onReturnAll(uint256 returned); /** * State variables */ address internal AXPRtoken; mapping(address => string) public profileHashed; uint256 public hodlingTime; uint256 public allTimeHighPrice; struct Safe { uint256 id; uint256 amount; uint256 endtime; address user; address tokenAddress; string tokenSymbol; } /** * @dev safes variables */ mapping(address => uint256[]) public _userSafes; mapping(uint256 => Safe) private _safes; uint256 private _currentIndex; uint256 public _countSafes; mapping(address => uint256) public _totalSaved; /** * @dev owner variables */ uint256 public comission; //0..30 mapping(address => uint256) private _systemReserves; address[] public _listedReserves; /** * constructor */ constructor() public { AXPRtoken = 0xC39E626A04C5971D770e319760D7926502975e47; hodlingTime = 365 days; _currentIndex = 1; comission = 5; } /** * fallback function to receive donation in eth */ function () public payable { require(msg.value > 0); _systemReserves[0x0] = add(_systemReserves[0x0], msg.value); } /** * store the profile's hash in the blockchain */ function storeProfileHashed(string _profileHashed) public { profileHashed[msg.sender] = _profileHashed; emit onStoreProfileHash(msg.sender, _profileHashed); } /** * add new hodl safe (ERC20 token) */ function HodlTokens(address tokenAddress, uint256 amount) public contractActive { require(tokenAddress != 0x0); require(amount > 0); ERC20Interface token = ERC20Interface(tokenAddress); require(token.transferFrom(msg.sender, address(this), amount)); _userSafes[msg.sender].push(_currentIndex); _safes[_currentIndex] = Safe(_currentIndex, amount, now + hodlingTime, msg.sender, tokenAddress, token.symbol()); _totalSaved[tokenAddress] = add(_totalSaved[tokenAddress], amount); _currentIndex++; _countSafes++; emit onHodlTokens(msg.sender, tokenAddress, token.symbol(), amount, now + hodlingTime); } /** * user, claim back a hodl safe */ function ClaimTokens(address tokenAddress, uint256 id) public { require(tokenAddress != 0x0); require(id != 0); Safe storage s = _safes[id]; require(s.user == msg.sender); RetireHodl(tokenAddress, id); } function RetireHodl(address tokenAddress, uint256 id) private { Safe storage s = _safes[id]; require(s.id != 0); require(s.tokenAddress == tokenAddress); require( (tokenAddress == AXPRtoken && s.endtime < now ) || tokenAddress != AXPRtoken ); uint256 eventAmount; address eventTokenAddress = s.tokenAddress; string memory eventTokenSymbol = s.tokenSymbol; if(s.endtime < now) // hodl complete { PayToken(s.user, s.tokenAddress, s.amount); eventAmount = s.amount; } else // hodl still in progress (penalty fee applies), not for AXPR tokens { uint256 realComission = mul(s.amount, comission) / 100; uint256 realAmount = sub(s.amount, realComission); PayToken(s.user, s.tokenAddress, realAmount); StoreComission(s.tokenAddress, realComission); eventAmount = realAmount; } DeleteSafe(s); _countSafes--; emit onClaimTokens(msg.sender, eventTokenAddress, eventTokenSymbol, eventAmount, now); } /** * store comission from unfinished hodl */ function StoreComission(address tokenAddress, uint256 amount) private { _systemReserves[tokenAddress] = add(_systemReserves[tokenAddress], amount); bool isNew = true; for(uint256 i = 0; i < _listedReserves.length; i++) { if(_listedReserves[i] == tokenAddress) { isNew = false; break; } } if(isNew) _listedReserves.push(tokenAddress); } /** * private pay token to address */ function PayToken(address user, address tokenAddress, uint256 amount) private { ERC20Interface token = ERC20Interface(tokenAddress); require(token.balanceOf(address(this)) >= amount); token.transfer(user, amount); } /** * delete safe values in storage */ function DeleteSafe(Safe s) private { _totalSaved[s.tokenAddress] = sub(_totalSaved[s.tokenAddress], s.amount); delete _safes[s.id]; uint256[] storage vector = _userSafes[msg.sender]; uint256 size = vector.length; for(uint256 i = 0; i < size; i++) { if(vector[i] == s.id) { vector[i] = vector[size-1]; vector.length--; break; } } } /** * Get user's any token balance */ function GetHodlTokensBalance(address tokenAddress) public view returns (uint256 balance) { require(tokenAddress != 0x0); for(uint256 i = 1; i < _currentIndex; i++) { Safe storage s = _safes[i]; if(s.user == msg.sender && s.tokenAddress == tokenAddress) balance += s.amount; } return balance; } /** * Get how many safes has the user */ function GetUserSafesLength(address hodler) public view returns (uint256 length) { return _userSafes[hodler].length; } /** * Get safes values */ function GetSafe(uint256 _id) public view returns (uint256 id, address user, address tokenAddress, uint256 amount, uint256 time) { Safe storage s = _safes[_id]; return(s.id, s.user, s.tokenAddress, s.amount, s.endtime); } /** * Get tokens reserved for the owner as commission */ function GetTokenFees(address tokenAddress) private view returns (uint256 amount) { return _systemReserves[tokenAddress]; } /** * Get contract's balance */ function GetContractBalance() public view returns(uint256) { return address(this).balance; } /** * ONLY OWNER * * owner: retire hodl safe */ function OwnerRetireHodl(address tokenAddress, uint256 id) public onlyOwner { require(tokenAddress != 0x0); require(id != 0); RetireHodl(tokenAddress, id); } /** * owner: change hodling time */ function ChangeHodlingTime(uint256 newHodlingDays) onlyOwner public { require(newHodlingDays >= 60); hodlingTime = newHodlingDays * 1 days; } /** * owner: change all time high price */ function ChangeAllTimeHighPrice(uint256 newAllTimeHighPrice) onlyOwner public { require(newAllTimeHighPrice > allTimeHighPrice); allTimeHighPrice = newAllTimeHighPrice; } /** * owner: change comission value */ function ChangeComission(uint256 newComission) onlyOwner public { require(newComission <= 30); comission = newComission; } /** * owner: withdraw token fees by address */ function WithdrawTokenFees(address tokenAddress) onlyOwner public { require(_systemReserves[tokenAddress] > 0); uint256 amount = _systemReserves[tokenAddress]; _systemReserves[tokenAddress] = 0; ERC20Interface token = ERC20Interface(tokenAddress); require(token.balanceOf(address(this)) >= amount); token.transfer(msg.sender, amount); } /** * owner: withdraw all eth and all tokens fees */ function WithdrawAllFees() onlyOwner public { // ether uint256 x = _systemReserves[0x0]; if(x > 0 && x <= address(this).balance) { _systemReserves[0x0] = 0; msg.sender.transfer(_systemReserves[0x0]); } // tokens address ta; ERC20Interface token; for(uint256 i = 0; i < _listedReserves.length; i++) { ta = _listedReserves[i]; if(_systemReserves[ta] > 0) { x = _systemReserves[ta]; _systemReserves[ta] = 0; token = ERC20Interface(ta); token.transfer(msg.sender, x); } } _listedReserves.length = 0; } /** * owner: withdraw ether received through fallback function */ function WithdrawEth(uint256 amount) onlyOwner public { require(amount > 0); require(address(this).balance >= amount); msg.sender.transfer(amount); } /** * owner: returns all tokens addresses with fees */ function GetTokensAddressesWithFees() onlyOwner public view returns (address[], string[], uint256[]) { uint256 length = _listedReserves.length; address[] memory tokenAddress = new address[](length); string[] memory tokenSymbol = new string[](length); uint256[] memory tokenFees = new uint256[](length); for (uint256 i = 0; i < length; i++) { tokenAddress[i] = _listedReserves[i]; ERC20Interface token = ERC20Interface(tokenAddress[i]); tokenSymbol[i] = token.symbol(); tokenFees[i] = GetTokenFees(tokenAddress[i]); } return (tokenAddress, tokenSymbol, tokenFees); } /** * owner: return all tokens to their respective addresses */ function ReturnAllTokens(bool onlyAXPR) onlyOwner public { uint256 returned; for(uint256 i = 1; i < _currentIndex; i++) { Safe storage s = _safes[i]; if (s.id != 0) { if ( (onlyAXPR && s.tokenAddress == AXPRtoken) || !onlyAXPR ) { PayToken(s.user, s.tokenAddress, s.amount); DeleteSafe(s); _countSafes--; returned++; } } } emit onReturnAll(returned); } /** * SAFE MATH FUNCTIONS * * @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; } } contract ERC20Interface { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ // total amount of tokens uint256 public totalSupply; //How many decimals to show. uint256 public decimals; // token symbol function symbol() public view returns (string); /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) public view returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) public returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) public returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) public view returns (uint256 remaining); // solhint-disable-next-line no-simple-event-func-name event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"profileHashed","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"_userSafes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"_listedReserves","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAllTimeHighPrice","type":"uint256"}],"name":"ChangeAllTimeHighPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"comission","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"doBlockContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"GetSafe","outputs":[{"name":"id","type":"uint256"},{"name":"user","type":"address"},{"name":"tokenAddress","type":"address"},{"name":"amount","type":"uint256"},{"name":"time","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"id","type":"uint256"}],"name":"ClaimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"}],"name":"WithdrawTokenFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"onlyAXPR","type":"bool"}],"name":"ReturnAllTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"_totalSaved","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blockedContract","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newHodlingDays","type":"uint256"}],"name":"ChangeHodlingTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_countSafes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenAddress","type":"address"}],"name":"GetHodlTokensBalance","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"WithdrawAllFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newComission","type":"uint256"}],"name":"ChangeComission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"WithdrawEth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GetTokensAddressesWithFees","outputs":[{"name":"","type":"address[]"},{"name":"","type":"string[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"id","type":"uint256"}],"name":"OwnerRetireHodl","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"viewSuperOwner","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unBlockContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hodler","type":"address"}],"name":"GetUserSafesLength","outputs":[{"name":"length","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_profileHashed","type":"string"}],"name":"storeProfileHashed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allTimeHighPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hodlingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"amount","type":"uint256"}],"name":"HodlTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GetContractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hodler","type":"address"},{"indexed":false,"name":"profileHashed","type":"string"}],"name":"onStoreProfileHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hodler","type":"address"},{"indexed":true,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"tokenSymbol","type":"string"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"endtime","type":"uint256"}],"name":"onHodlTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"hodler","type":"address"},{"indexed":true,"name":"tokenAddress","type":"address"},{"indexed":false,"name":"tokenSymbol","type":"string"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"endtime","type":"uint256"}],"name":"onClaimTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"returned","type":"uint256"}],"name":"onReturnAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"status","type":"bool"}],"name":"onBlockHODLs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"onTransferOwnership","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060146101000a81548160ff02191690831515021790555073c39e626a04c5971d770e319760d7926502975e47600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506301e1338060038190555060016007819055506005600a81905550613798806100ea6000396000f300608060405260043610610174576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680622b5c0a146101e557806311a3311c146102225780631c019a521461025f578063365655f01461029c5780633a4b4532146102c55780633e8cc273146102f057806347f849cd146103075780634d7f917f14610348578063539a67bf14610371578063650db56d1461039a578063666a7370146103c357806371ea29df1461040057806379883bba1461042b57806393002f021461045457806398c7aba21461047f57806399f57e05146104bc5780639aaa38a6146104d3578063a6f9dae1146104fc578063b2a3fd0514610525578063bbe316be1461054e578063cfe7de071461057b578063d3a516d3146105a4578063d64ee8d2146105cf578063d9d61a10146105e6578063d9df23c014610623578063da546cb21461064c578063e2afe3bb14610677578063e61021e8146106a2578063f6d0bf2f146106cb575b60003411151561018357600080fd5b6101b6600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054346106f6565b600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550005b3480156101f157600080fd5b5061020c600480360361020791908101906130a7565b610712565b60405161021991906134d1565b60405180910390f35b34801561022e57600080fd5b50610249600480360361024491908101906130d0565b6107c2565b6040516102569190613553565b60405180910390f35b34801561026b57600080fd5b50610286600480360361028191908101906131e0565b6107f2565b60405161029391906133ef565b60405180910390f35b3480156102a857600080fd5b506102c360048036036102be91908101906131e0565b610830565b005b3480156102d157600080fd5b506102da6108a5565b6040516102e79190613553565b60405180910390f35b3480156102fc57600080fd5b506103056108ab565b005b34801561031357600080fd5b5061032e600480360361032991908101906131e0565b610969565b60405161033f95949392919061356e565b60405180910390f35b34801561035457600080fd5b5061036f600480360361036a91908101906130d0565b6109f4565b005b34801561037d57600080fd5b50610398600480360361039391908101906130a7565b610aad565b005b3480156103a657600080fd5b506103c160048036036103bc919081019061310c565b610d47565b005b3480156103cf57600080fd5b506103ea60048036036103e591908101906130a7565b6110a4565b6040516103f79190613553565b60405180910390f35b34801561040c57600080fd5b506104156110bc565b60405161042291906134b6565b60405180910390f35b34801561043757600080fd5b50610452600480360361044d91908101906131e0565b6110cf565b005b34801561046057600080fd5b50610469611149565b6040516104769190613553565b60405180910390f35b34801561048b57600080fd5b506104a660048036036104a191908101906130a7565b61114f565b6040516104b39190613553565b60405180910390f35b3480156104c857600080fd5b506104d1611271565b005b3480156104df57600080fd5b506104fa60048036036104f591908101906131e0565b6115b8565b005b34801561050857600080fd5b50610523600480360361051e91908101906130a7565b61162d565b005b34801561053157600080fd5b5061054c600480360361054791908101906131e0565b61177f565b005b34801561055a57600080fd5b50610563611859565b6040516105729392919061346a565b60405180910390f35b34801561058757600080fd5b506105a2600480360361059d91908101906130d0565b611b2a565b005b3480156105b057600080fd5b506105b9611bc9565b6040516105c691906133ef565b60405180910390f35b3480156105db57600080fd5b506105e4611bf2565b005b3480156105f257600080fd5b5061060d600480360361060891908101906130a7565b611caf565b60405161061a9190613553565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603610645919081019061315e565b611cfb565b005b34801561065857600080fd5b50610661611da0565b60405161066e9190613553565b60405180910390f35b34801561068357600080fd5b5061068c611da6565b6040516106999190613553565b60405180910390f35b3480156106ae57600080fd5b506106c960048036036106c491908101906130d0565b611dac565b005b3480156106d757600080fd5b506106e06122c5565b6040516106ed9190613553565b60405180910390f35b6000818301905082811015151561070957fe5b80905092915050565b60026020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b505050505081565b6005602052816000526040600020818154811015156107dd57fe5b90600052602060002001600091509150505481565b600c8181548110151561080157fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561088b57600080fd5b6004548111151561089b57600080fd5b8060048190555050565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561090657600080fd5b6001600060146101000a81548160ff0219169083151502179055507fadac2a07dd926cc50f681194fe221f6245cdafa96623d1c64fa69c027182f40a600060149054906101000a900460ff1660405161095f91906134b6565b60405180910390a1565b60008060008060008060066000888152602001908152602001600020905080600001548160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600101548460020154955095509550955095505091939590929450565b6000808373ffffffffffffffffffffffffffffffffffffffff1614151515610a1b57600080fd5b60008214151515610a2b57600080fd5b6006600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610a9e57600080fd5b610aa883836122e4565b505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b0b57600080fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515610b5957600080fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c3991906133ef565b602060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8b9190810190613209565b10151515610c9857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610cef929190613441565b602060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d419190810190613135565b50505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610da757600080fd5b600191505b600754821015611067576006600083815260200190815260200160002090506000816000015414151561105a57838015610e575750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e60575083155b1561105957610ebc8160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360010154612828565b61103d8160c060405190810160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561102f5780601f106110045761010080835404028352916020019161102f565b820191906000526020600020905b81548152906001019060200180831161101257829003601f168201915b505050505081525050612992565b6008600081548092919060019003919050555082806001019350505b5b8180600101925050610dac565b7faeb4f5733a2e8073f7ddf9b69cdc1588e959cec9ac8b80866c29237cbe281fbe836040516110969190613553565b60405180910390a150505050565b60096020528060005260406000206000915090505481565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561112a57600080fd5b603c811015151561113a57600080fd5b62015180810260038190555050565b60085481565b6000806000808473ffffffffffffffffffffffffffffffffffffffff161415151561117957600080fd5b600191505b600754821015611267576006600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561124b57508373ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561125a578060010154830192505b818060010192505061117e565b8292505050919050565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112d257600080fd5b600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935060008411801561132557503073ffffffffffffffffffffffffffffffffffffffff16318411155b156113ca576000600b60008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc600b60008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f193505050501580156113c8573d6000803e3d6000fd5b505b600090505b600c805490508110156115a257600c818154811015156113eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561159557600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205493506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508291508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611541929190613441565b602060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115939190810190613135565b505b80806001019150506113cf565b6000600c816115b19190612dd2565b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561161357600080fd5b601e811115151561162357600080fd5b80600a8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561168857600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116e457600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f178eb36323c5a89970cc900b55d89d2731becfb4f5df34667d995e48cee7d4e16000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161177491906133ef565b60405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117da57600080fd5b6000811115156117e957600080fd5b803073ffffffffffffffffffffffffffffffffffffffff16311015151561180f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611855573d6000803e3d6000fd5b5050565b6060806060600060608060606000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c357600080fd5b600c805490509550856040519080825280602002602001820160405280156118fa5781602001602082028038833980820191505090505b5094508560405190808252806020026020018201604052801561193157816020015b606081526020019060019003908161191c5790505b509350856040519080825280602002602001820160405280156119635781602001602082028038833980820191505090505b509250600091505b85821015611b1657600c8281548110151561198257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685838151811015156119bb57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508482815181101515611a0557fe5b9060200190602002015190508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611ab2919081019061319f565b8483815181101515611ac057fe5b90602001906020020181905250611aed8583815181101515611ade57fe5b90602001906020020151612b9d565b8383815181101515611afb57fe5b9060200190602002018181525050818060010192505061196b565b848484985098509850505050505050909192565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b8557600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614151515611bab57600080fd5b60008114151515611bbb57600080fd5b611bc582826122e4565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c4d57600080fd5b60008060146101000a81548160ff0219169083151502179055507fadac2a07dd926cc50f681194fe221f6245cdafa96623d1c64fa69c027182f40a600060149054906101000a900460ff16604051611ca591906134b6565b60405180910390a1565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190611d4e929190612dfe565b503373ffffffffffffffffffffffffffffffffffffffff167fc5db26e7b4622de13dc720324df17737b30e33a473a12bfa5120461e3692276982604051611d9591906134f3565b60405180910390a250565b60045481565b60035481565b60008060149054906101000a900460ff16151515611dc957600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff1614151515611def57600080fd5b600082111515611dfe57600080fd5b8290508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611e5a9392919061340a565b602060405180830381600087803b158015611e7457600080fd5b505af1158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611eac9190810190613135565b1515611eb757600080fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600754908060018154018082558091505090600182039060005260206000200160009091929091909150555060c0604051908101604052806007548152602001838152602001600354420181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015611fe257600080fd5b505af1158015611ff6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061201f919081019061319f565b81525060066000600754815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050190805190602001906120ff929190612e7e565b5090505061214c600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836106f6565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506007600081548092919060010191905055506008600081548092919060010191905055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fed175a8ddea84085fa2767c9c1f3342fae1f118bc1213ac4d4a0c6277bc0ad738373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561226657600080fd5b505af115801561227a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506122a3919081019061319f565b8560035442016040516122b893929190613515565b60405180910390a3505050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b60008060006060600080600660008881526020019081526020016000209550600086600001541415151561231757600080fd5b8773ffffffffffffffffffffffffffffffffffffffff168660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561237557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156123d55750428660020154105b8061242e5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b151561243957600080fd5b8560040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169350856005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124f85780601f106124cd576101008083540402835291602001916124f8565b820191906000526020600020905b8154815290600101906020018083116124db57829003601f168201915b50505050509250428660020154101561256e576125628660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860010154612828565b85600101549450612621565b60646125808760010154600a54612be6565b81151561258957fe5b04915061259a866001015483612c1e565b90506125ef8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612828565b61261d8660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612c37565b8094505b6127a28660c060405190810160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127945780601f1061276957610100808354040283529160200191612794565b820191906000526020600020905b81548152906001019060200180831161277757829003601f168201915b505050505081525050612992565b600860008154809291906001900391905055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f959346e7719e944c33f76798af64519a9c17a870c805ae49c011066f18fa9cb085884260405161281693929190613515565b60405180910390a35050505050505050565b6000829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161288391906133ef565b602060405180830381600087803b15801561289d57600080fd5b505af11580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128d59190810190613209565b101515156128e257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612939929190613441565b602060405180830381600087803b15801561295357600080fd5b505af1158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061298b9190810190613135565b5050505050565b60008060006129e860096000866080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548560200151612c1e565b60096000866080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506006600085600001518152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000612abd9190612efe565b5050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925082805490509150600090505b81811015612b975783600001518382815481101515612b2757fe5b90600052602060002001541415612b8a578260018303815481101515612b4957fe5b90600052602060002001548382815481101515612b6257fe5b906000526020600020018190555082805480919060019003612b849190612f46565b50612b97565b8080600101915050612b0c565b50505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080831415612bf95760009050612c18565b8183029050818382811515612c0a57fe5b04141515612c1457fe5b8090505b92915050565b6000828211151515612c2c57fe5b818303905092915050565b600080612c83600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846106f6565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150600090505b600c80549050811015612d5f578373ffffffffffffffffffffffffffffffffffffffff16600c82815481101515612d0257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d525760009150612d5f565b8080600101915050612ccf565b8115612dcc57600c8490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b50505050565b815481835581811115612df957818360005260206000209182019101612df89190612f72565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e3f57805160ff1916838001178555612e6d565b82800160010185558215612e6d579182015b82811115612e6c578251825591602001919060010190612e51565b5b509050612e7a9190612f72565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ebf57805160ff1916838001178555612eed565b82800160010185558215612eed579182015b82811115612eec578251825591602001919060010190612ed1565b5b509050612efa9190612f72565b5090565b50805460018160011615610100020316600290046000825580601f10612f245750612f43565b601f016020900490600052602060002090810190612f429190612f72565b5b50565b815481835581811115612f6d57818360005260206000209182019101612f6c9190612f72565b5b505050565b612f9491905b80821115612f90576000816000905550600101612f78565b5090565b90565b6000612fa382356136d5565b905092915050565b6000612fb782356136f5565b905092915050565b6000612fcb82516136f5565b905092915050565b600082601f8301121515612fe657600080fd5b8135612ff9612ff4826135ee565b6135c1565b9150808252602083016020830185838301111561301557600080fd5b61302083828461370b565b50505092915050565b600082601f830112151561303c57600080fd5b815161304f61304a826135ee565b6135c1565b9150808252602083016020830185838301111561306b57600080fd5b61307683828461371a565b50505092915050565b600061308b8235613701565b905092915050565b600061309f8251613701565b905092915050565b6000602082840312156130b957600080fd5b60006130c784828501612f97565b91505092915050565b600080604083850312156130e357600080fd5b60006130f185828601612f97565b92505060206131028582860161307f565b9150509250929050565b60006020828403121561311e57600080fd5b600061312c84828501612fab565b91505092915050565b60006020828403121561314757600080fd5b600061315584828501612fbf565b91505092915050565b60006020828403121561317057600080fd5b600082013567ffffffffffffffff81111561318a57600080fd5b61319684828501612fd3565b91505092915050565b6000602082840312156131b157600080fd5b600082015167ffffffffffffffff8111156131cb57600080fd5b6131d784828501613029565b91505092915050565b6000602082840312156131f257600080fd5b60006132008482850161307f565b91505092915050565b60006020828403121561321b57600080fd5b600061322984828501613093565b91505092915050565b61323b8161369f565b82525050565b600061324c82613641565b80845260208401935061325e8361361a565b60005b8281101561329057613274868351613232565b61327d82613678565b9150602086019550600181019050613261565b50849250505092915050565b60006132a78261364c565b808452602084019350836020820285016132c085613627565b60005b848110156132f95783830388526132db8383516133aa565b92506132e682613685565b91506020880197506001810190506132c3565b508196508694505050505092915050565b600061331582613657565b80845260208401935061332783613634565b60005b828110156133595761333d8683516133e0565b61334682613692565b915060208601955060018101905061332a565b50849250505092915050565b61336e816136bf565b82525050565b600061337f8261366d565b80845261339381602086016020860161371a565b61339c8161374d565b602085010191505092915050565b60006133b582613662565b8084526133c981602086016020860161371a565b6133d28161374d565b602085010191505092915050565b6133e9816136cb565b82525050565b60006020820190506134046000830184613232565b92915050565b600060608201905061341f6000830186613232565b61342c6020830185613232565b61343960408301846133e0565b949350505050565b60006040820190506134566000830185613232565b61346360208301846133e0565b9392505050565b600060608201905081810360008301526134848186613241565b90508181036020830152613498818561329c565b905081810360408301526134ac818461330a565b9050949350505050565b60006020820190506134cb6000830184613365565b92915050565b600060208201905081810360008301526134eb81846133aa565b905092915050565b6000602082019050818103600083015261350d8184613374565b905092915050565b6000606082019050818103600083015261352f8186613374565b905061353e60208301856133e0565b61354b60408301846133e0565b949350505050565b600060208201905061356860008301846133e0565b92915050565b600060a08201905061358360008301886133e0565b6135906020830187613232565b61359d6040830186613232565b6135aa60608301856133e0565b6135b760808301846133e0565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156135e457600080fd5b8060405250919050565b600067ffffffffffffffff82111561360557600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561373857808201518184015260208101905061371d565b83811115613747576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820deebdb2a875421e5f4105c0ebbff7199a583451a3fa8ff69d76a5a4af11445de6c6578706572696d656e74616cf50037
Deployed Bytecode
0x608060405260043610610174576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680622b5c0a146101e557806311a3311c146102225780631c019a521461025f578063365655f01461029c5780633a4b4532146102c55780633e8cc273146102f057806347f849cd146103075780634d7f917f14610348578063539a67bf14610371578063650db56d1461039a578063666a7370146103c357806371ea29df1461040057806379883bba1461042b57806393002f021461045457806398c7aba21461047f57806399f57e05146104bc5780639aaa38a6146104d3578063a6f9dae1146104fc578063b2a3fd0514610525578063bbe316be1461054e578063cfe7de071461057b578063d3a516d3146105a4578063d64ee8d2146105cf578063d9d61a10146105e6578063d9df23c014610623578063da546cb21461064c578063e2afe3bb14610677578063e61021e8146106a2578063f6d0bf2f146106cb575b60003411151561018357600080fd5b6101b6600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054346106f6565b600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550005b3480156101f157600080fd5b5061020c600480360361020791908101906130a7565b610712565b60405161021991906134d1565b60405180910390f35b34801561022e57600080fd5b50610249600480360361024491908101906130d0565b6107c2565b6040516102569190613553565b60405180910390f35b34801561026b57600080fd5b50610286600480360361028191908101906131e0565b6107f2565b60405161029391906133ef565b60405180910390f35b3480156102a857600080fd5b506102c360048036036102be91908101906131e0565b610830565b005b3480156102d157600080fd5b506102da6108a5565b6040516102e79190613553565b60405180910390f35b3480156102fc57600080fd5b506103056108ab565b005b34801561031357600080fd5b5061032e600480360361032991908101906131e0565b610969565b60405161033f95949392919061356e565b60405180910390f35b34801561035457600080fd5b5061036f600480360361036a91908101906130d0565b6109f4565b005b34801561037d57600080fd5b50610398600480360361039391908101906130a7565b610aad565b005b3480156103a657600080fd5b506103c160048036036103bc919081019061310c565b610d47565b005b3480156103cf57600080fd5b506103ea60048036036103e591908101906130a7565b6110a4565b6040516103f79190613553565b60405180910390f35b34801561040c57600080fd5b506104156110bc565b60405161042291906134b6565b60405180910390f35b34801561043757600080fd5b50610452600480360361044d91908101906131e0565b6110cf565b005b34801561046057600080fd5b50610469611149565b6040516104769190613553565b60405180910390f35b34801561048b57600080fd5b506104a660048036036104a191908101906130a7565b61114f565b6040516104b39190613553565b60405180910390f35b3480156104c857600080fd5b506104d1611271565b005b3480156104df57600080fd5b506104fa60048036036104f591908101906131e0565b6115b8565b005b34801561050857600080fd5b50610523600480360361051e91908101906130a7565b61162d565b005b34801561053157600080fd5b5061054c600480360361054791908101906131e0565b61177f565b005b34801561055a57600080fd5b50610563611859565b6040516105729392919061346a565b60405180910390f35b34801561058757600080fd5b506105a2600480360361059d91908101906130d0565b611b2a565b005b3480156105b057600080fd5b506105b9611bc9565b6040516105c691906133ef565b60405180910390f35b3480156105db57600080fd5b506105e4611bf2565b005b3480156105f257600080fd5b5061060d600480360361060891908101906130a7565b611caf565b60405161061a9190613553565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603610645919081019061315e565b611cfb565b005b34801561065857600080fd5b50610661611da0565b60405161066e9190613553565b60405180910390f35b34801561068357600080fd5b5061068c611da6565b6040516106999190613553565b60405180910390f35b3480156106ae57600080fd5b506106c960048036036106c491908101906130d0565b611dac565b005b3480156106d757600080fd5b506106e06122c5565b6040516106ed9190613553565b60405180910390f35b6000818301905082811015151561070957fe5b80905092915050565b60026020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b505050505081565b6005602052816000526040600020818154811015156107dd57fe5b90600052602060002001600091509150505481565b600c8181548110151561080157fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561088b57600080fd5b6004548111151561089b57600080fd5b8060048190555050565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561090657600080fd5b6001600060146101000a81548160ff0219169083151502179055507fadac2a07dd926cc50f681194fe221f6245cdafa96623d1c64fa69c027182f40a600060149054906101000a900460ff1660405161095f91906134b6565b60405180910390a1565b60008060008060008060066000888152602001908152602001600020905080600001548160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600101548460020154955095509550955095505091939590929450565b6000808373ffffffffffffffffffffffffffffffffffffffff1614151515610a1b57600080fd5b60008214151515610a2b57600080fd5b6006600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610a9e57600080fd5b610aa883836122e4565b505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b0b57600080fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515610b5957600080fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c3991906133ef565b602060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8b9190810190613209565b10151515610c9857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610cef929190613441565b602060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d419190810190613135565b50505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610da757600080fd5b600191505b600754821015611067576006600083815260200190815260200160002090506000816000015414151561105a57838015610e575750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e60575083155b1561105957610ebc8160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360010154612828565b61103d8160c060405190810160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561102f5780601f106110045761010080835404028352916020019161102f565b820191906000526020600020905b81548152906001019060200180831161101257829003601f168201915b505050505081525050612992565b6008600081548092919060019003919050555082806001019350505b5b8180600101925050610dac565b7faeb4f5733a2e8073f7ddf9b69cdc1588e959cec9ac8b80866c29237cbe281fbe836040516110969190613553565b60405180910390a150505050565b60096020528060005260406000206000915090505481565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561112a57600080fd5b603c811015151561113a57600080fd5b62015180810260038190555050565b60085481565b6000806000808473ffffffffffffffffffffffffffffffffffffffff161415151561117957600080fd5b600191505b600754821015611267576006600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561124b57508373ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561125a578060010154830192505b818060010192505061117e565b8292505050919050565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112d257600080fd5b600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935060008411801561132557503073ffffffffffffffffffffffffffffffffffffffff16318411155b156113ca576000600b60008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc600b60008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f193505050501580156113c8573d6000803e3d6000fd5b505b600090505b600c805490508110156115a257600c818154811015156113eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561159557600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205493506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508291508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611541929190613441565b602060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115939190810190613135565b505b80806001019150506113cf565b6000600c816115b19190612dd2565b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561161357600080fd5b601e811115151561162357600080fd5b80600a8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561168857600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116e457600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f178eb36323c5a89970cc900b55d89d2731becfb4f5df34667d995e48cee7d4e16000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161177491906133ef565b60405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117da57600080fd5b6000811115156117e957600080fd5b803073ffffffffffffffffffffffffffffffffffffffff16311015151561180f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611855573d6000803e3d6000fd5b5050565b6060806060600060608060606000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c357600080fd5b600c805490509550856040519080825280602002602001820160405280156118fa5781602001602082028038833980820191505090505b5094508560405190808252806020026020018201604052801561193157816020015b606081526020019060019003908161191c5790505b509350856040519080825280602002602001820160405280156119635781602001602082028038833980820191505090505b509250600091505b85821015611b1657600c8281548110151561198257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685838151811015156119bb57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508482815181101515611a0557fe5b9060200190602002015190508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611ab2919081019061319f565b8483815181101515611ac057fe5b90602001906020020181905250611aed8583815181101515611ade57fe5b90602001906020020151612b9d565b8383815181101515611afb57fe5b9060200190602002018181525050818060010192505061196b565b848484985098509850505050505050909192565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b8557600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614151515611bab57600080fd5b60008114151515611bbb57600080fd5b611bc582826122e4565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c4d57600080fd5b60008060146101000a81548160ff0219169083151502179055507fadac2a07dd926cc50f681194fe221f6245cdafa96623d1c64fa69c027182f40a600060149054906101000a900460ff16604051611ca591906134b6565b60405180910390a1565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190611d4e929190612dfe565b503373ffffffffffffffffffffffffffffffffffffffff167fc5db26e7b4622de13dc720324df17737b30e33a473a12bfa5120461e3692276982604051611d9591906134f3565b60405180910390a250565b60045481565b60035481565b60008060149054906101000a900460ff16151515611dc957600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff1614151515611def57600080fd5b600082111515611dfe57600080fd5b8290508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611e5a9392919061340a565b602060405180830381600087803b158015611e7457600080fd5b505af1158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611eac9190810190613135565b1515611eb757600080fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600754908060018154018082558091505090600182039060005260206000200160009091929091909150555060c0604051908101604052806007548152602001838152602001600354420181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015611fe257600080fd5b505af1158015611ff6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061201f919081019061319f565b81525060066000600754815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050190805190602001906120ff929190612e7e565b5090505061214c600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836106f6565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506007600081548092919060010191905055506008600081548092919060010191905055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fed175a8ddea84085fa2767c9c1f3342fae1f118bc1213ac4d4a0c6277bc0ad738373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561226657600080fd5b505af115801561227a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506122a3919081019061319f565b8560035442016040516122b893929190613515565b60405180910390a3505050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b60008060006060600080600660008881526020019081526020016000209550600086600001541415151561231757600080fd5b8773ffffffffffffffffffffffffffffffffffffffff168660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561237557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156123d55750428660020154105b8061242e5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b151561243957600080fd5b8560040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169350856005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124f85780601f106124cd576101008083540402835291602001916124f8565b820191906000526020600020905b8154815290600101906020018083116124db57829003601f168201915b50505050509250428660020154101561256e576125628660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860010154612828565b85600101549450612621565b60646125808760010154600a54612be6565b81151561258957fe5b04915061259a866001015483612c1e565b90506125ef8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612828565b61261d8660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612c37565b8094505b6127a28660c060405190810160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127945780601f1061276957610100808354040283529160200191612794565b820191906000526020600020905b81548152906001019060200180831161277757829003601f168201915b505050505081525050612992565b600860008154809291906001900391905055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f959346e7719e944c33f76798af64519a9c17a870c805ae49c011066f18fa9cb085884260405161281693929190613515565b60405180910390a35050505050505050565b6000829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161288391906133ef565b602060405180830381600087803b15801561289d57600080fd5b505af11580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128d59190810190613209565b101515156128e257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612939929190613441565b602060405180830381600087803b15801561295357600080fd5b505af1158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061298b9190810190613135565b5050505050565b60008060006129e860096000866080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548560200151612c1e565b60096000866080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506006600085600001518152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000612abd9190612efe565b5050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925082805490509150600090505b81811015612b975783600001518382815481101515612b2757fe5b90600052602060002001541415612b8a578260018303815481101515612b4957fe5b90600052602060002001548382815481101515612b6257fe5b906000526020600020018190555082805480919060019003612b849190612f46565b50612b97565b8080600101915050612b0c565b50505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080831415612bf95760009050612c18565b8183029050818382811515612c0a57fe5b04141515612c1457fe5b8090505b92915050565b6000828211151515612c2c57fe5b818303905092915050565b600080612c83600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846106f6565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150600090505b600c80549050811015612d5f578373ffffffffffffffffffffffffffffffffffffffff16600c82815481101515612d0257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d525760009150612d5f565b8080600101915050612ccf565b8115612dcc57600c8490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b50505050565b815481835581811115612df957818360005260206000209182019101612df89190612f72565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e3f57805160ff1916838001178555612e6d565b82800160010185558215612e6d579182015b82811115612e6c578251825591602001919060010190612e51565b5b509050612e7a9190612f72565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ebf57805160ff1916838001178555612eed565b82800160010185558215612eed579182015b82811115612eec578251825591602001919060010190612ed1565b5b509050612efa9190612f72565b5090565b50805460018160011615610100020316600290046000825580601f10612f245750612f43565b601f016020900490600052602060002090810190612f429190612f72565b5b50565b815481835581811115612f6d57818360005260206000209182019101612f6c9190612f72565b5b505050565b612f9491905b80821115612f90576000816000905550600101612f78565b5090565b90565b6000612fa382356136d5565b905092915050565b6000612fb782356136f5565b905092915050565b6000612fcb82516136f5565b905092915050565b600082601f8301121515612fe657600080fd5b8135612ff9612ff4826135ee565b6135c1565b9150808252602083016020830185838301111561301557600080fd5b61302083828461370b565b50505092915050565b600082601f830112151561303c57600080fd5b815161304f61304a826135ee565b6135c1565b9150808252602083016020830185838301111561306b57600080fd5b61307683828461371a565b50505092915050565b600061308b8235613701565b905092915050565b600061309f8251613701565b905092915050565b6000602082840312156130b957600080fd5b60006130c784828501612f97565b91505092915050565b600080604083850312156130e357600080fd5b60006130f185828601612f97565b92505060206131028582860161307f565b9150509250929050565b60006020828403121561311e57600080fd5b600061312c84828501612fab565b91505092915050565b60006020828403121561314757600080fd5b600061315584828501612fbf565b91505092915050565b60006020828403121561317057600080fd5b600082013567ffffffffffffffff81111561318a57600080fd5b61319684828501612fd3565b91505092915050565b6000602082840312156131b157600080fd5b600082015167ffffffffffffffff8111156131cb57600080fd5b6131d784828501613029565b91505092915050565b6000602082840312156131f257600080fd5b60006132008482850161307f565b91505092915050565b60006020828403121561321b57600080fd5b600061322984828501613093565b91505092915050565b61323b8161369f565b82525050565b600061324c82613641565b80845260208401935061325e8361361a565b60005b8281101561329057613274868351613232565b61327d82613678565b9150602086019550600181019050613261565b50849250505092915050565b60006132a78261364c565b808452602084019350836020820285016132c085613627565b60005b848110156132f95783830388526132db8383516133aa565b92506132e682613685565b91506020880197506001810190506132c3565b508196508694505050505092915050565b600061331582613657565b80845260208401935061332783613634565b60005b828110156133595761333d8683516133e0565b61334682613692565b915060208601955060018101905061332a565b50849250505092915050565b61336e816136bf565b82525050565b600061337f8261366d565b80845261339381602086016020860161371a565b61339c8161374d565b602085010191505092915050565b60006133b582613662565b8084526133c981602086016020860161371a565b6133d28161374d565b602085010191505092915050565b6133e9816136cb565b82525050565b60006020820190506134046000830184613232565b92915050565b600060608201905061341f6000830186613232565b61342c6020830185613232565b61343960408301846133e0565b949350505050565b60006040820190506134566000830185613232565b61346360208301846133e0565b9392505050565b600060608201905081810360008301526134848186613241565b90508181036020830152613498818561329c565b905081810360408301526134ac818461330a565b9050949350505050565b60006020820190506134cb6000830184613365565b92915050565b600060208201905081810360008301526134eb81846133aa565b905092915050565b6000602082019050818103600083015261350d8184613374565b905092915050565b6000606082019050818103600083015261352f8186613374565b905061353e60208301856133e0565b61354b60408301846133e0565b949350505050565b600060208201905061356860008301846133e0565b92915050565b600060a08201905061358360008301886133e0565b6135906020830187613232565b61359d6040830186613232565b6135aa60608301856133e0565b6135b760808301846133e0565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156135e457600080fd5b8060405250919050565b600067ffffffffffffffff82111561360557600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561373857808201518184015260208101905061371d565b83811115613747576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820deebdb2a875421e5f4105c0ebbff7199a583451a3fa8ff69d76a5a4af11445de6c6578706572696d656e74616cf50037
Swarm Source
bzzr://deebdb2a875421e5f4105c0ebbff7199a583451a3fa8ff69d76a5a4af11445de
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.