More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 120 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 15308300 | 866 days ago | IN | 0 ETH | 0.00124412 | ||||
Approve | 14039840 | 1068 days ago | IN | 0 ETH | 0.00509473 | ||||
Approve | 13742562 | 1114 days ago | IN | 0 ETH | 0.00397767 | ||||
Approve | 13730453 | 1116 days ago | IN | 0 ETH | 0.00346468 | ||||
Approve | 13709917 | 1119 days ago | IN | 0 ETH | 0.00739612 | ||||
Transfer | 13709881 | 1119 days ago | IN | 0 ETH | 0.0109782 | ||||
Approve | 13694982 | 1121 days ago | IN | 0 ETH | 0.00450474 | ||||
Approve | 13692471 | 1122 days ago | IN | 0 ETH | 0.00684811 | ||||
Approve | 13692465 | 1122 days ago | IN | 0 ETH | 0.00547907 | ||||
Renounce Ownersh... | 13691849 | 1122 days ago | IN | 0 ETH | 0.0025987 | ||||
Set Fee | 13691820 | 1122 days ago | IN | 0 ETH | 0.0034797 | ||||
Transfer | 13691688 | 1122 days ago | IN | 0 ETH | 0.02863009 | ||||
Approve | 13690495 | 1122 days ago | IN | 0 ETH | 0.00509473 | ||||
Approve | 13688046 | 1123 days ago | IN | 0 ETH | 0.00381819 | ||||
Approve | 13686600 | 1123 days ago | IN | 0 ETH | 0.00384704 | ||||
Transfer | 13684305 | 1123 days ago | IN | 0 ETH | 0.00750584 | ||||
Approve | 13683563 | 1123 days ago | IN | 0 ETH | 0.00420622 | ||||
Set Fee | 13675681 | 1125 days ago | IN | 0 ETH | 0.00959232 | ||||
Approve | 13675429 | 1125 days ago | IN | 0 ETH | 0.0053885 | ||||
Transfer | 13674958 | 1125 days ago | IN | 0 ETH | 0.00818828 | ||||
Approve | 13674813 | 1125 days ago | IN | 0 ETH | 0.0080903 | ||||
Approve | 13674464 | 1125 days ago | IN | 0 ETH | 0.00985029 | ||||
Approve | 13674219 | 1125 days ago | IN | 0 ETH | 0.00641013 | ||||
Approve | 13673887 | 1125 days ago | IN | 0 ETH | 0.00514647 | ||||
Approve | 13673693 | 1125 days ago | IN | 0 ETH | 0.00451972 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
13920370 | 1086 days ago | 0.00431871 ETH | ||||
13920370 | 1086 days ago | 0.00431871 ETH | ||||
13920370 | 1086 days ago | 0.00863743 ETH | ||||
13919465 | 1086 days ago | 0.01185122 ETH | ||||
13919465 | 1086 days ago | 0.01185122 ETH | ||||
13919465 | 1086 days ago | 0.02370245 ETH | ||||
13783270 | 1107 days ago | 0.01012289 ETH | ||||
13783270 | 1107 days ago | 0.01012289 ETH | ||||
13783270 | 1107 days ago | 0.02024579 ETH | ||||
13744728 | 1114 days ago | 0.00418073 ETH | ||||
13744728 | 1114 days ago | 0.00418073 ETH | ||||
13744728 | 1114 days ago | 0.00836147 ETH | ||||
13742586 | 1114 days ago | 0.00535076 ETH | ||||
13742586 | 1114 days ago | 0.00535076 ETH | ||||
13742586 | 1114 days ago | 0.01070152 ETH | ||||
13742573 | 1114 days ago | 0.00508524 ETH | ||||
13742573 | 1114 days ago | 0.00508524 ETH | ||||
13742573 | 1114 days ago | 0.01017049 ETH | ||||
13742249 | 1114 days ago | 0.01052187 ETH | ||||
13742249 | 1114 days ago | 0.01052187 ETH | ||||
13742249 | 1114 days ago | 0.02104374 ETH | ||||
13730468 | 1116 days ago | 0.00452695 ETH | ||||
13730468 | 1116 days ago | 0.00452695 ETH | ||||
13730468 | 1116 days ago | 0.00905391 ETH | ||||
13714301 | 1118 days ago | 0.00698552 ETH |
Loading...
Loading
Contract Name:
WiseGuys
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
import './SafeMath.sol'; import './IER20.sol'; import './IUniswapV2Factory.sol'; import './Context.sol'; import './Ownable.sol'; // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract WiseGuys is Context, IERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public maxTxAmount = 15000000000000 * 10**9; // 15 Trillions uint256 public maxWalletSize = 1000000000000000 * 10**9; // Max uint256 public swapTokensAtAmount = 1000000000000 * 10**9; mapping(address => bool) public bots; mapping (address => bool) public preTrader; string private constant _name = "Wise Guys"; string private constant _symbol = "WG"; uint8 private constant _decimals = 9; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1000000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; //Buy Fee uint256 private _redisFeeOnBuy = 1; uint256 private _taxFeeOnBuy = 9; //Sell Fee uint256 private _redisFeeOnSell = 1; uint256 private _taxFeeOnSell = 9; uint256 private _redisFee = _redisFeeOnSell; uint256 private _taxFee = _taxFeeOnSell; uint256 private _previousRedisFee = _redisFee; uint256 private _previousTaxFee = _taxFee; bool private _tradingOpen; bool private _inSwap = false; bool private _swapEnabled = true; address payable private _marketingAddress = payable(0x5261e2670d667984c61c4AE4e6Ad9DC1ED478Ef7); address payable private _devAddress = payable(0x7549B3e597CD7d0aB9e549A8d04941A06A5445F0); event MaxTxAmountUpdated(uint256 _maxTxAmount); modifier lockTheSwap { _inSwap = true; _; _inSwap = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_devAddress] = true; _isExcludedFromFee[_marketingAddress] = true; preTrader[owner()] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool){ _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient,uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function tokenFromReflection(uint256 rAmount) private view returns (uint256){ require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = getRate(); return rAmount.div(currentRate); } function removeAllFee() private { if (_redisFee == 0 && _taxFee == 0) return; _previousRedisFee = _redisFee; _previousTaxFee = _taxFee; _redisFee = 0; _taxFee = 0; } function restoreAllFee() private { _redisFee = _previousRedisFee; _taxFee = _previousTaxFee; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from,address to,uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner() && !preTrader[from] && !preTrader[to]) { if (!_tradingOpen) { require(preTrader[from], "TOKEN: This account cannot send tokens until trading is enabled"); } require(amount <= maxTxAmount, "TOKEN: Max Transaction Limit"); require(!bots[from] && !bots[to], "TOKEN: Your account has been blacklisted"); if(to != uniswapV2Pair) { require(balanceOf(to) + amount < maxWalletSize, "TOKEN: Balance exceeds wallet size"); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if(contractTokenBalance >= maxTxAmount) { contractTokenBalance = maxTxAmount; } if (canSwap && !_inSwap && from != uniswapV2Pair && _swapEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) { swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(address(this).balance); } } } bool takeFee = true; //Transfer Tokens if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) { takeFee = false; } else { if(from == uniswapV2Pair && to != address(uniswapV2Router)) { //buys _redisFee = _redisFeeOnBuy; _taxFee = _taxFeeOnBuy; } if (to == uniswapV2Pair && from != address(uniswapV2Router)) { //sells _redisFee = _redisFeeOnSell; _taxFee = _taxFeeOnSell; } } _tokenTransfer(from, to, amount, takeFee); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee(uint256 amount) private { _devAddress.transfer(amount.div(2)); _marketingAddress.transfer(amount.div(2)); } function openTrading() public onlyOwner { _tradingOpen = true; } function manualSwap() external { require(_msgSender() == _devAddress || _msgSender() == _marketingAddress); uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() external { require(_msgSender() == _devAddress || _msgSender() == _marketingAddress); uint256 contractETHBalance = address(this).balance; sendETHToFee(contractETHBalance); } function blockBots(address[] memory mBots) public onlyOwner { for (uint256 i = 0; i < mBots.length; i++) { bots[mBots[i]] = true; } } function unblockBot(address notbot) public onlyOwner { bots[notbot] = false; } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if (!takeFee) removeAllFee(); transferStandard(sender, recipient, amount); if (!takeFee) restoreAllFee(); } function transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); takeTeam(tTeam); reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function takeTeam(uint256 tTeam) private { uint256 currentRate = getRate(); uint256 rTeam = tTeam.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rTeam); } function reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } receive() external payable {} function getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = getTValues(tAmount, _redisFee, _taxFee); uint256 currentRate = getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = getRValues(tAmount, tFee, tTeam, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam); } function getTValues(uint256 tAmount, uint256 redisFee, uint256 taxFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = tAmount.mul(redisFee).div(100); uint256 tTeam = tAmount.mul(taxFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam); return (tTransferAmount, tFee, tTeam); } function getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256,uint256,uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTeam = tTeam.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam); return (rAmount, rTransferAmount, rFee); } function getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = getCurrentSupply(); return rSupply.div(tSupply); } function getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner { _redisFeeOnBuy = redisFeeOnBuy; _redisFeeOnSell = redisFeeOnSell; _taxFeeOnBuy = taxFeeOnBuy; _taxFeeOnSell = taxFeeOnSell; } //Set minimum tokens required to swap. function setMinSwapTokensThreshold(uint256 amount) public onlyOwner { swapTokensAtAmount = amount; } //Set minimum tokens required to swap. function toggleSwap(bool swapEnabled) public onlyOwner { _swapEnabled = swapEnabled; } //Set MAx transaction function setMaxTxnAmount(uint256 amount) public onlyOwner { maxTxAmount = amount; } function setMaxWalletSize(uint256 amount) public onlyOwner { maxWalletSize = amount; } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFee[accounts[i]] = excluded; } } function allowPreTrading(address account, bool allowed) public onlyOwner { require(preTrader[account] != allowed, "TOKEN: Already enabled."); preTrader[account] = allowed; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import './Context.sol'; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) private onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowPreTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"mBots","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preTrader","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unblockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405269032d26d12e980b60000060035569d3c21bcecceda1000000600455683635c9adc5dea0000060055569d3c21bcecceda1000000600019620000479190620008bc565b60001962000056919062000843565b600c556001600e556009600f55600160105560096011556010546012556011546013556012546014556013546015556000601660016101000a81548160ff0219169083151502179055506001601660026101000a81548160ff021916908315150217905550735261e2670d667984c61c4ae4e6ad9dc1ed478ef7601660036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737549b3e597cd7d0ab9e549a8d04941a06a5445f0601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200017257600080fd5b50620001836200076360201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600c5460086000620002546200076360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e9190620007ab565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d157600080fd5b505afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c9190620007ab565b6040518363ffffffff1660e01b81526004016200042b929190620007f9565b602060405180830381600087803b1580156200044657600080fd5b505af11580156200045b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004819190620007ab565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000620004d76200076b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601660039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006200068a6200076b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006eb6200076360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda100000060405162000754919062000826565b60405180910390a3506200096c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620007a58162000952565b92915050565b600060208284031215620007be57600080fd5b6000620007ce8482850162000794565b91505092915050565b620007e2816200087e565b82525050565b620007f381620008b2565b82525050565b6000604082019050620008106000830185620007d7565b6200081f6020830184620007d7565b9392505050565b60006020820190506200083d6000830184620007e8565b92915050565b60006200085082620008b2565b91506200085d83620008b2565b925082821015620008735762000872620008f4565b5b828203905092915050565b60006200088b8262000892565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620008c982620008b2565b9150620008d683620008b2565b925082620008e957620008e862000923565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6200095d816200087e565b81146200096957600080fd5b50565b613b66806200097c6000396000f3fe6080604052600436106101d05760003560e01c80638c0b5e22116100f7578063bdd795ef11610095578063dd62ed3e11610064578063dd62ed3e1461065a578063e2f4560514610697578063ea1644d5146106c2578063f4293890146106eb576101d7565b8063bdd795ef146105a0578063bfd79284146105dd578063c492f0461461061a578063c9567bf914610643576101d7565b806395d89b41116100d157806395d89b41146104e657806398a5c31514610511578063a2a957bb1461053a578063a9059cbb14610563576101d7565b80638c0b5e22146104655780638da5cb5b146104905780638f3fa860146104bb576101d7565b8063313ce5671161016f5780636d8aa8f81161013e5780636d8aa8f8146103bf57806370a08231146103e8578063715018a61461042557806374010ece1461043c576101d7565b8063313ce5671461032957806349bd5a5e1461035457806351bc3c851461037f5780636b99905314610396576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632f9c456914610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612dbb565b610702565b005b34801561021157600080fd5b5061021a610839565b60405161022791906131be565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612d27565b610876565b6040516102649190613188565b60405180910390f35b34801561027957600080fd5b50610282610894565b60405161028f91906131a3565b60405180910390f35b3480156102a457600080fd5b506102ad6108ba565b6040516102ba9190613360565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612c9c565b6108cc565b6040516102f79190613188565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612ceb565b6109a5565b005b34801561033557600080fd5b5061033e610b0f565b60405161034b91906133d5565b60405180910390f35b34801561036057600080fd5b50610369610b18565b604051610376919061316d565b60405180910390f35b34801561038b57600080fd5b50610394610b3e565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612c0e565b610c17565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612dfc565b610cee565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612c0e565b610d87565b60405161041c9190613360565b60405180910390f35b34801561043157600080fd5b5061043a610dd8565b005b34801561044857600080fd5b50610463600480360381019061045e9190612e25565b610f12565b005b34801561047157600080fd5b5061047a610f98565b6040516104879190613360565b60405180910390f35b34801561049c57600080fd5b506104a5610f9e565b6040516104b2919061316d565b60405180910390f35b3480156104c757600080fd5b506104d0610fc7565b6040516104dd9190613360565b60405180910390f35b3480156104f257600080fd5b506104fb610fcd565b60405161050891906131be565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190612e25565b61100a565b005b34801561054657600080fd5b50610561600480360381019061055c9190612e4e565b611090565b005b34801561056f57600080fd5b5061058a60048036038101906105859190612d27565b61112e565b6040516105979190613188565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612c0e565b61114c565b6040516105d49190613188565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190612c0e565b61116c565b6040516106119190613188565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190612d63565b61118c565b005b34801561064f57600080fd5b506106586112d3565b005b34801561066657600080fd5b50610681600480360381019061067c9190612c60565b61136c565b60405161068e9190613360565b60405180910390f35b3480156106a357600080fd5b506106ac6113f3565b6040516106b99190613360565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612e25565b6113f9565b005b3480156106f757600080fd5b5061070061147f565b005b61070a611550565b73ffffffffffffffffffffffffffffffffffffffff16610728610f9e565b73ffffffffffffffffffffffffffffffffffffffff161461077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906132e0565b60405180910390fd5b60005b8151811015610835576001600660008484815181106107c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061082d9061369a565b915050610781565b5050565b60606040518060400160405280600981526020017f5769736520477579730000000000000000000000000000000000000000000000815250905090565b600061088a610883611550565b8484611558565b6001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600069d3c21bcecceda1000000905090565b60006108d9848484611723565b61099a846108e5611550565b61099585604051806060016040528060288152602001613b0960289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094b611550565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206d9092919063ffffffff16565b611558565b600190509392505050565b6109ad611550565b73ffffffffffffffffffffffffffffffffffffffff166109cb610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a18906132e0565b60405180910390fd5b801515600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab90613280565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b7f611550565b73ffffffffffffffffffffffffffffffffffffffff161480610bf55750601660039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bdd611550565b73ffffffffffffffffffffffffffffffffffffffff16145b610bfe57600080fd5b6000610c0930610d87565b9050610c14816120c2565b50565b610c1f611550565b73ffffffffffffffffffffffffffffffffffffffff16610c3d610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a906132e0565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610cf6611550565b73ffffffffffffffffffffffffffffffffffffffff16610d14610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d61906132e0565b60405180910390fd5b80601660026101000a81548160ff02191690831515021790555050565b6000610dd1600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123bc565b9050919050565b610de0611550565b73ffffffffffffffffffffffffffffffffffffffff16610dfe610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906132e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f1a611550565b73ffffffffffffffffffffffffffffffffffffffff16610f38610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906132e0565b60405180910390fd5b8060038190555050565b60035481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b60606040518060400160405280600281526020017f5747000000000000000000000000000000000000000000000000000000000000815250905090565b611012611550565b73ffffffffffffffffffffffffffffffffffffffff16611030610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d906132e0565b60405180910390fd5b8060058190555050565b611098611550565b73ffffffffffffffffffffffffffffffffffffffff166110b6610f9e565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611103906132e0565b60405180910390fd5b83600e819055508260108190555081600f819055508060118190555050505050565b600061114261113b611550565b8484611723565b6001905092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b611194611550565b73ffffffffffffffffffffffffffffffffffffffff166111b2610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff906132e0565b60405180910390fd5b60005b838390508110156112cd5781600b6000868685818110611254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906112699190612c0e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112c59061369a565b91505061120b565b50505050565b6112db611550565b73ffffffffffffffffffffffffffffffffffffffff166112f9610f9e565b73ffffffffffffffffffffffffffffffffffffffff161461134f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611346906132e0565b60405180910390fd5b6001601660006101000a81548160ff021916908315150217905550565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60055481565b611401611550565b73ffffffffffffffffffffffffffffffffffffffff1661141f610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c906132e0565b60405180910390fd5b8060048190555050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114c0611550565b73ffffffffffffffffffffffffffffffffffffffff1614806115365750601660039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661151e611550565b73ffffffffffffffffffffffffffffffffffffffff16145b61153f57600080fd5b600047905061154d8161242a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613340565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90613260565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117169190613360565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613320565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa906131e0565b60405180910390fd5b60008111611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613300565b60405180910390fd5b61184e610f9e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118bc575061188c610f9e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119125750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119685750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d6c57601660009054906101000a900460ff16611a0e57600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613200565b60405180910390fd5b5b600354811115611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613240565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611af75750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d906132a0565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611be35760045481611b9884610d87565b611ba29190613496565b10611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906132c0565b60405180910390fd5b5b6000611bee30610d87565b9050600060055482101590506003548210611c095760035491505b808015611c235750601660019054906101000a900460ff16155b8015611c7d5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c955750601660029054906101000a900460ff165b8015611ceb5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d415750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d6957611d4f826120c2565b60004790506000811115611d6757611d664761242a565b5b505b50505b600060019050600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e135750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611ec65750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611ec55750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611ed4576000905061205b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f7f5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f9757600e54601281905550600f546013819055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120425750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561205a576010546012819055506011546013819055505b5b61206784848484612525565b50505050565b60008383111582906120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac91906131be565b60405180910390fd5b5082840390509392505050565b6001601660016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612120577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561214e5781602001602082028036833780820191505090505b509050308160008151811061218c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561222e57600080fd5b505afa158015612242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122669190612c37565b816001815181106122a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061230730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611558565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161236b95949392919061337b565b600060405180830381600087803b15801561238557600080fd5b505af1158015612399573d6000803e3d6000fd5b50505050506000601660016101000a81548160ff02191690831515021790555050565b6000600c54821115612403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fa90613220565b60405180910390fd5b600061240d612552565b9050612422818461257d90919063ffffffff16565b915050919050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61247a60028461257d90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156124a5573d6000803e3d6000fd5b50601660039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6124f660028461257d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612521573d6000803e3d6000fd5b5050565b8061253357612532612593565b5b61253e8484846125d6565b8061254c5761254b6127a1565b5b50505050565b600080600061255f6127b5565b91509150612576818361257d90919063ffffffff16565b9250505090565b6000818361258b91906134ec565b905092915050565b60006012541480156125a757506000601354145b156125b1576125d4565b601254601481905550601354601581905550600060128190555060006013819055505b565b6000806000806000806125e88761281a565b95509550955095509550955061264686600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126db85600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289890919063ffffffff16565b600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612727816128ae565b612731848361296b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161278e9190613360565b60405180910390a3505050505050505050565b601454601281905550601554601381905550565b6000806000600c549050600069d3c21bcecceda100000090506127ed69d3c21bcecceda1000000600c5461257d90919063ffffffff16565b82101561280d57600c5469d3c21bcecceda1000000935093505050612816565b81819350935050505b9091565b60008060008060008060008060006128378a6012546013546129a5565b9250925092506000612847612552565b9050600080600061285a8e878787612a3b565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836128909190613577565b905092915050565b600081836128a69190613496565b905092915050565b60006128b8612552565b905060006128cf8284612ac490919063ffffffff16565b905061292381600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289890919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b61298082600c5461288290919063ffffffff16565b600c8190555061299b81600d5461289890919063ffffffff16565b600d819055505050565b6000806000806129d160646129c3888a612ac490919063ffffffff16565b61257d90919063ffffffff16565b905060006129fb60646129ed888b612ac490919063ffffffff16565b61257d90919063ffffffff16565b90506000612a2482612a16858c61288290919063ffffffff16565b61288290919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612a548589612ac490919063ffffffff16565b90506000612a6b8689612ac490919063ffffffff16565b90506000612a828789612ac490919063ffffffff16565b90506000612aab82612a9d858761288290919063ffffffff16565b61288290919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612ad2919061351d565b905092915050565b6000612aed612ae884613415565b6133f0565b90508083825260208201905082856020860282011115612b0c57600080fd5b60005b85811015612b3c5781612b228882612b46565b845260208401935060208301925050600181019050612b0f565b5050509392505050565b600081359050612b5581613ac3565b92915050565b600081519050612b6a81613ac3565b92915050565b60008083601f840112612b8257600080fd5b8235905067ffffffffffffffff811115612b9b57600080fd5b602083019150836020820283011115612bb357600080fd5b9250929050565b600082601f830112612bcb57600080fd5b8135612bdb848260208601612ada565b91505092915050565b600081359050612bf381613ada565b92915050565b600081359050612c0881613af1565b92915050565b600060208284031215612c2057600080fd5b6000612c2e84828501612b46565b91505092915050565b600060208284031215612c4957600080fd5b6000612c5784828501612b5b565b91505092915050565b60008060408385031215612c7357600080fd5b6000612c8185828601612b46565b9250506020612c9285828601612b46565b9150509250929050565b600080600060608486031215612cb157600080fd5b6000612cbf86828701612b46565b9350506020612cd086828701612b46565b9250506040612ce186828701612bf9565b9150509250925092565b60008060408385031215612cfe57600080fd5b6000612d0c85828601612b46565b9250506020612d1d85828601612be4565b9150509250929050565b60008060408385031215612d3a57600080fd5b6000612d4885828601612b46565b9250506020612d5985828601612bf9565b9150509250929050565b600080600060408486031215612d7857600080fd5b600084013567ffffffffffffffff811115612d9257600080fd5b612d9e86828701612b70565b93509350506020612db186828701612be4565b9150509250925092565b600060208284031215612dcd57600080fd5b600082013567ffffffffffffffff811115612de757600080fd5b612df384828501612bba565b91505092915050565b600060208284031215612e0e57600080fd5b6000612e1c84828501612be4565b91505092915050565b600060208284031215612e3757600080fd5b6000612e4584828501612bf9565b91505092915050565b60008060008060808587031215612e6457600080fd5b6000612e7287828801612bf9565b9450506020612e8387828801612bf9565b9350506040612e9487828801612bf9565b9250506060612ea587828801612bf9565b91505092959194509250565b6000612ebd8383612ec9565b60208301905092915050565b612ed2816135ab565b82525050565b612ee1816135ab565b82525050565b6000612ef282613451565b612efc8185613474565b9350612f0783613441565b8060005b83811015612f38578151612f1f8882612eb1565b9750612f2a83613467565b925050600181019050612f0b565b5085935050505092915050565b612f4e816135bd565b82525050565b612f5d81613600565b82525050565b612f6c81613624565b82525050565b6000612f7d8261345c565b612f878185613485565b9350612f97818560208601613636565b612fa081613770565b840191505092915050565b6000612fb8602383613485565b9150612fc382613781565b604082019050919050565b6000612fdb603f83613485565b9150612fe6826137d0565b604082019050919050565b6000612ffe602a83613485565b91506130098261381f565b604082019050919050565b6000613021601c83613485565b915061302c8261386e565b602082019050919050565b6000613044602283613485565b915061304f82613897565b604082019050919050565b6000613067601783613485565b9150613072826138e6565b602082019050919050565b600061308a602883613485565b91506130958261390f565b604082019050919050565b60006130ad602283613485565b91506130b88261395e565b604082019050919050565b60006130d0602083613485565b91506130db826139ad565b602082019050919050565b60006130f3602983613485565b91506130fe826139d6565b604082019050919050565b6000613116602583613485565b915061312182613a25565b604082019050919050565b6000613139602483613485565b915061314482613a74565b604082019050919050565b613158816135e9565b82525050565b613167816135f3565b82525050565b60006020820190506131826000830184612ed8565b92915050565b600060208201905061319d6000830184612f45565b92915050565b60006020820190506131b86000830184612f54565b92915050565b600060208201905081810360008301526131d88184612f72565b905092915050565b600060208201905081810360008301526131f981612fab565b9050919050565b6000602082019050818103600083015261321981612fce565b9050919050565b6000602082019050818103600083015261323981612ff1565b9050919050565b6000602082019050818103600083015261325981613014565b9050919050565b6000602082019050818103600083015261327981613037565b9050919050565b600060208201905081810360008301526132998161305a565b9050919050565b600060208201905081810360008301526132b98161307d565b9050919050565b600060208201905081810360008301526132d9816130a0565b9050919050565b600060208201905081810360008301526132f9816130c3565b9050919050565b60006020820190508181036000830152613319816130e6565b9050919050565b6000602082019050818103600083015261333981613109565b9050919050565b600060208201905081810360008301526133598161312c565b9050919050565b6000602082019050613375600083018461314f565b92915050565b600060a082019050613390600083018861314f565b61339d6020830187612f63565b81810360408301526133af8186612ee7565b90506133be6060830185612ed8565b6133cb608083018461314f565b9695505050505050565b60006020820190506133ea600083018461315e565b92915050565b60006133fa61340b565b90506134068282613669565b919050565b6000604051905090565b600067ffffffffffffffff8211156134305761342f613741565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134a1826135e9565b91506134ac836135e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134e1576134e06136e3565b5b828201905092915050565b60006134f7826135e9565b9150613502836135e9565b92508261351257613511613712565b5b828204905092915050565b6000613528826135e9565b9150613533836135e9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561356c5761356b6136e3565b5b828202905092915050565b6000613582826135e9565b915061358d836135e9565b9250828210156135a05761359f6136e3565b5b828203905092915050565b60006135b6826135c9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061360b82613612565b9050919050565b600061361d826135c9565b9050919050565b600061362f826135e9565b9050919050565b60005b83811015613654578082015181840152602081019050613639565b83811115613663576000848401525b50505050565b61367282613770565b810181811067ffffffffffffffff8211171561369157613690613741565b5b80604052505050565b60006136a5826135e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d8576136d76136e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a20416c726561647920656e61626c65642e000000000000000000600082015250565b7f544f4b454e3a20596f7572206163636f756e7420686173206265656e20626c6160008201527f636b6c6973746564000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613acc816135ab565b8114613ad757600080fd5b50565b613ae3816135bd565b8114613aee57600080fd5b50565b613afa816135e9565b8114613b0557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e0bfdbe8308759c1f1f845976d21e41b1202fd176f007ab1575b04817dfc949164736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101d05760003560e01c80638c0b5e22116100f7578063bdd795ef11610095578063dd62ed3e11610064578063dd62ed3e1461065a578063e2f4560514610697578063ea1644d5146106c2578063f4293890146106eb576101d7565b8063bdd795ef146105a0578063bfd79284146105dd578063c492f0461461061a578063c9567bf914610643576101d7565b806395d89b41116100d157806395d89b41146104e657806398a5c31514610511578063a2a957bb1461053a578063a9059cbb14610563576101d7565b80638c0b5e22146104655780638da5cb5b146104905780638f3fa860146104bb576101d7565b8063313ce5671161016f5780636d8aa8f81161013e5780636d8aa8f8146103bf57806370a08231146103e8578063715018a61461042557806374010ece1461043c576101d7565b8063313ce5671461032957806349bd5a5e1461035457806351bc3c851461037f5780636b99905314610396576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632f9c456914610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612dbb565b610702565b005b34801561021157600080fd5b5061021a610839565b60405161022791906131be565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612d27565b610876565b6040516102649190613188565b60405180910390f35b34801561027957600080fd5b50610282610894565b60405161028f91906131a3565b60405180910390f35b3480156102a457600080fd5b506102ad6108ba565b6040516102ba9190613360565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612c9c565b6108cc565b6040516102f79190613188565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612ceb565b6109a5565b005b34801561033557600080fd5b5061033e610b0f565b60405161034b91906133d5565b60405180910390f35b34801561036057600080fd5b50610369610b18565b604051610376919061316d565b60405180910390f35b34801561038b57600080fd5b50610394610b3e565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612c0e565b610c17565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612dfc565b610cee565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190612c0e565b610d87565b60405161041c9190613360565b60405180910390f35b34801561043157600080fd5b5061043a610dd8565b005b34801561044857600080fd5b50610463600480360381019061045e9190612e25565b610f12565b005b34801561047157600080fd5b5061047a610f98565b6040516104879190613360565b60405180910390f35b34801561049c57600080fd5b506104a5610f9e565b6040516104b2919061316d565b60405180910390f35b3480156104c757600080fd5b506104d0610fc7565b6040516104dd9190613360565b60405180910390f35b3480156104f257600080fd5b506104fb610fcd565b60405161050891906131be565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190612e25565b61100a565b005b34801561054657600080fd5b50610561600480360381019061055c9190612e4e565b611090565b005b34801561056f57600080fd5b5061058a60048036038101906105859190612d27565b61112e565b6040516105979190613188565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612c0e565b61114c565b6040516105d49190613188565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190612c0e565b61116c565b6040516106119190613188565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190612d63565b61118c565b005b34801561064f57600080fd5b506106586112d3565b005b34801561066657600080fd5b50610681600480360381019061067c9190612c60565b61136c565b60405161068e9190613360565b60405180910390f35b3480156106a357600080fd5b506106ac6113f3565b6040516106b99190613360565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612e25565b6113f9565b005b3480156106f757600080fd5b5061070061147f565b005b61070a611550565b73ffffffffffffffffffffffffffffffffffffffff16610728610f9e565b73ffffffffffffffffffffffffffffffffffffffff161461077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906132e0565b60405180910390fd5b60005b8151811015610835576001600660008484815181106107c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061082d9061369a565b915050610781565b5050565b60606040518060400160405280600981526020017f5769736520477579730000000000000000000000000000000000000000000000815250905090565b600061088a610883611550565b8484611558565b6001905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600069d3c21bcecceda1000000905090565b60006108d9848484611723565b61099a846108e5611550565b61099585604051806060016040528060288152602001613b0960289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094b611550565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461206d9092919063ffffffff16565b611558565b600190509392505050565b6109ad611550565b73ffffffffffffffffffffffffffffffffffffffff166109cb610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a18906132e0565b60405180910390fd5b801515600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aab90613280565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b7f611550565b73ffffffffffffffffffffffffffffffffffffffff161480610bf55750601660039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bdd611550565b73ffffffffffffffffffffffffffffffffffffffff16145b610bfe57600080fd5b6000610c0930610d87565b9050610c14816120c2565b50565b610c1f611550565b73ffffffffffffffffffffffffffffffffffffffff16610c3d610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a906132e0565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610cf6611550565b73ffffffffffffffffffffffffffffffffffffffff16610d14610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d61906132e0565b60405180910390fd5b80601660026101000a81548160ff02191690831515021790555050565b6000610dd1600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123bc565b9050919050565b610de0611550565b73ffffffffffffffffffffffffffffffffffffffff16610dfe610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906132e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f1a611550565b73ffffffffffffffffffffffffffffffffffffffff16610f38610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906132e0565b60405180910390fd5b8060038190555050565b60035481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b60606040518060400160405280600281526020017f5747000000000000000000000000000000000000000000000000000000000000815250905090565b611012611550565b73ffffffffffffffffffffffffffffffffffffffff16611030610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d906132e0565b60405180910390fd5b8060058190555050565b611098611550565b73ffffffffffffffffffffffffffffffffffffffff166110b6610f9e565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611103906132e0565b60405180910390fd5b83600e819055508260108190555081600f819055508060118190555050505050565b600061114261113b611550565b8484611723565b6001905092915050565b60076020528060005260406000206000915054906101000a900460ff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b611194611550565b73ffffffffffffffffffffffffffffffffffffffff166111b2610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff906132e0565b60405180910390fd5b60005b838390508110156112cd5781600b6000868685818110611254577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906112699190612c0e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112c59061369a565b91505061120b565b50505050565b6112db611550565b73ffffffffffffffffffffffffffffffffffffffff166112f9610f9e565b73ffffffffffffffffffffffffffffffffffffffff161461134f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611346906132e0565b60405180910390fd5b6001601660006101000a81548160ff021916908315150217905550565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60055481565b611401611550565b73ffffffffffffffffffffffffffffffffffffffff1661141f610f9e565b73ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c906132e0565b60405180910390fd5b8060048190555050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114c0611550565b73ffffffffffffffffffffffffffffffffffffffff1614806115365750601660039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661151e611550565b73ffffffffffffffffffffffffffffffffffffffff16145b61153f57600080fd5b600047905061154d8161242a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613340565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90613260565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117169190613360565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613320565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa906131e0565b60405180910390fd5b60008111611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613300565b60405180910390fd5b61184e610f9e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118bc575061188c610f9e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119125750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119685750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d6c57601660009054906101000a900460ff16611a0e57600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613200565b60405180910390fd5b5b600354811115611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613240565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611af75750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d906132a0565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611be35760045481611b9884610d87565b611ba29190613496565b10611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906132c0565b60405180910390fd5b5b6000611bee30610d87565b9050600060055482101590506003548210611c095760035491505b808015611c235750601660019054906101000a900460ff16155b8015611c7d5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c955750601660029054906101000a900460ff165b8015611ceb5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d415750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d6957611d4f826120c2565b60004790506000811115611d6757611d664761242a565b5b505b50505b600060019050600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e135750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611ec65750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611ec55750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611ed4576000905061205b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f7f5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f9757600e54601281905550600f546013819055505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120425750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561205a576010546012819055506011546013819055505b5b61206784848484612525565b50505050565b60008383111582906120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac91906131be565b60405180910390fd5b5082840390509392505050565b6001601660016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612120577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561214e5781602001602082028036833780820191505090505b509050308160008151811061218c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561222e57600080fd5b505afa158015612242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122669190612c37565b816001815181106122a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061230730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611558565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161236b95949392919061337b565b600060405180830381600087803b15801561238557600080fd5b505af1158015612399573d6000803e3d6000fd5b50505050506000601660016101000a81548160ff02191690831515021790555050565b6000600c54821115612403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fa90613220565b60405180910390fd5b600061240d612552565b9050612422818461257d90919063ffffffff16565b915050919050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61247a60028461257d90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156124a5573d6000803e3d6000fd5b50601660039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6124f660028461257d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612521573d6000803e3d6000fd5b5050565b8061253357612532612593565b5b61253e8484846125d6565b8061254c5761254b6127a1565b5b50505050565b600080600061255f6127b5565b91509150612576818361257d90919063ffffffff16565b9250505090565b6000818361258b91906134ec565b905092915050565b60006012541480156125a757506000601354145b156125b1576125d4565b601254601481905550601354601581905550600060128190555060006013819055505b565b6000806000806000806125e88761281a565b95509550955095509550955061264686600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461288290919063ffffffff16565b600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126db85600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289890919063ffffffff16565b600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612727816128ae565b612731848361296b565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161278e9190613360565b60405180910390a3505050505050505050565b601454601281905550601554601381905550565b6000806000600c549050600069d3c21bcecceda100000090506127ed69d3c21bcecceda1000000600c5461257d90919063ffffffff16565b82101561280d57600c5469d3c21bcecceda1000000935093505050612816565b81819350935050505b9091565b60008060008060008060008060006128378a6012546013546129a5565b9250925092506000612847612552565b9050600080600061285a8e878787612a3b565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836128909190613577565b905092915050565b600081836128a69190613496565b905092915050565b60006128b8612552565b905060006128cf8284612ac490919063ffffffff16565b905061292381600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461289890919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b61298082600c5461288290919063ffffffff16565b600c8190555061299b81600d5461289890919063ffffffff16565b600d819055505050565b6000806000806129d160646129c3888a612ac490919063ffffffff16565b61257d90919063ffffffff16565b905060006129fb60646129ed888b612ac490919063ffffffff16565b61257d90919063ffffffff16565b90506000612a2482612a16858c61288290919063ffffffff16565b61288290919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612a548589612ac490919063ffffffff16565b90506000612a6b8689612ac490919063ffffffff16565b90506000612a828789612ac490919063ffffffff16565b90506000612aab82612a9d858761288290919063ffffffff16565b61288290919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612ad2919061351d565b905092915050565b6000612aed612ae884613415565b6133f0565b90508083825260208201905082856020860282011115612b0c57600080fd5b60005b85811015612b3c5781612b228882612b46565b845260208401935060208301925050600181019050612b0f565b5050509392505050565b600081359050612b5581613ac3565b92915050565b600081519050612b6a81613ac3565b92915050565b60008083601f840112612b8257600080fd5b8235905067ffffffffffffffff811115612b9b57600080fd5b602083019150836020820283011115612bb357600080fd5b9250929050565b600082601f830112612bcb57600080fd5b8135612bdb848260208601612ada565b91505092915050565b600081359050612bf381613ada565b92915050565b600081359050612c0881613af1565b92915050565b600060208284031215612c2057600080fd5b6000612c2e84828501612b46565b91505092915050565b600060208284031215612c4957600080fd5b6000612c5784828501612b5b565b91505092915050565b60008060408385031215612c7357600080fd5b6000612c8185828601612b46565b9250506020612c9285828601612b46565b9150509250929050565b600080600060608486031215612cb157600080fd5b6000612cbf86828701612b46565b9350506020612cd086828701612b46565b9250506040612ce186828701612bf9565b9150509250925092565b60008060408385031215612cfe57600080fd5b6000612d0c85828601612b46565b9250506020612d1d85828601612be4565b9150509250929050565b60008060408385031215612d3a57600080fd5b6000612d4885828601612b46565b9250506020612d5985828601612bf9565b9150509250929050565b600080600060408486031215612d7857600080fd5b600084013567ffffffffffffffff811115612d9257600080fd5b612d9e86828701612b70565b93509350506020612db186828701612be4565b9150509250925092565b600060208284031215612dcd57600080fd5b600082013567ffffffffffffffff811115612de757600080fd5b612df384828501612bba565b91505092915050565b600060208284031215612e0e57600080fd5b6000612e1c84828501612be4565b91505092915050565b600060208284031215612e3757600080fd5b6000612e4584828501612bf9565b91505092915050565b60008060008060808587031215612e6457600080fd5b6000612e7287828801612bf9565b9450506020612e8387828801612bf9565b9350506040612e9487828801612bf9565b9250506060612ea587828801612bf9565b91505092959194509250565b6000612ebd8383612ec9565b60208301905092915050565b612ed2816135ab565b82525050565b612ee1816135ab565b82525050565b6000612ef282613451565b612efc8185613474565b9350612f0783613441565b8060005b83811015612f38578151612f1f8882612eb1565b9750612f2a83613467565b925050600181019050612f0b565b5085935050505092915050565b612f4e816135bd565b82525050565b612f5d81613600565b82525050565b612f6c81613624565b82525050565b6000612f7d8261345c565b612f878185613485565b9350612f97818560208601613636565b612fa081613770565b840191505092915050565b6000612fb8602383613485565b9150612fc382613781565b604082019050919050565b6000612fdb603f83613485565b9150612fe6826137d0565b604082019050919050565b6000612ffe602a83613485565b91506130098261381f565b604082019050919050565b6000613021601c83613485565b915061302c8261386e565b602082019050919050565b6000613044602283613485565b915061304f82613897565b604082019050919050565b6000613067601783613485565b9150613072826138e6565b602082019050919050565b600061308a602883613485565b91506130958261390f565b604082019050919050565b60006130ad602283613485565b91506130b88261395e565b604082019050919050565b60006130d0602083613485565b91506130db826139ad565b602082019050919050565b60006130f3602983613485565b91506130fe826139d6565b604082019050919050565b6000613116602583613485565b915061312182613a25565b604082019050919050565b6000613139602483613485565b915061314482613a74565b604082019050919050565b613158816135e9565b82525050565b613167816135f3565b82525050565b60006020820190506131826000830184612ed8565b92915050565b600060208201905061319d6000830184612f45565b92915050565b60006020820190506131b86000830184612f54565b92915050565b600060208201905081810360008301526131d88184612f72565b905092915050565b600060208201905081810360008301526131f981612fab565b9050919050565b6000602082019050818103600083015261321981612fce565b9050919050565b6000602082019050818103600083015261323981612ff1565b9050919050565b6000602082019050818103600083015261325981613014565b9050919050565b6000602082019050818103600083015261327981613037565b9050919050565b600060208201905081810360008301526132998161305a565b9050919050565b600060208201905081810360008301526132b98161307d565b9050919050565b600060208201905081810360008301526132d9816130a0565b9050919050565b600060208201905081810360008301526132f9816130c3565b9050919050565b60006020820190508181036000830152613319816130e6565b9050919050565b6000602082019050818103600083015261333981613109565b9050919050565b600060208201905081810360008301526133598161312c565b9050919050565b6000602082019050613375600083018461314f565b92915050565b600060a082019050613390600083018861314f565b61339d6020830187612f63565b81810360408301526133af8186612ee7565b90506133be6060830185612ed8565b6133cb608083018461314f565b9695505050505050565b60006020820190506133ea600083018461315e565b92915050565b60006133fa61340b565b90506134068282613669565b919050565b6000604051905090565b600067ffffffffffffffff8211156134305761342f613741565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134a1826135e9565b91506134ac836135e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134e1576134e06136e3565b5b828201905092915050565b60006134f7826135e9565b9150613502836135e9565b92508261351257613511613712565b5b828204905092915050565b6000613528826135e9565b9150613533836135e9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561356c5761356b6136e3565b5b828202905092915050565b6000613582826135e9565b915061358d836135e9565b9250828210156135a05761359f6136e3565b5b828203905092915050565b60006135b6826135c9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061360b82613612565b9050919050565b600061361d826135c9565b9050919050565b600061362f826135e9565b9050919050565b60005b83811015613654578082015181840152602081019050613639565b83811115613663576000848401525b50505050565b61367282613770565b810181811067ffffffffffffffff8211171561369157613690613741565b5b80604052505050565b60006136a5826135e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d8576136d76136e3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a20416c726561647920656e61626c65642e000000000000000000600082015250565b7f544f4b454e3a20596f7572206163636f756e7420686173206265656e20626c6160008201527f636b6c6973746564000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613acc816135ab565b8114613ad757600080fd5b50565b613ae3816135bd565b8114613aee57600080fd5b50565b613afa816135e9565b8114613b0557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e0bfdbe8308759c1f1f845976d21e41b1202fd176f007ab1575b04817dfc949164736f6c63430008040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.