Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 87 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Liquidity... | 17406402 | 587 days ago | IN | 0 ETH | 0.00385005 | ||||
Swap Exact Token... | 17250774 | 609 days ago | IN | 0 ETH | 0.00447395 | ||||
Remove Liquidity... | 17173082 | 620 days ago | IN | 0 ETH | 0.0036977 | ||||
Remove Liquidity... | 17173082 | 620 days ago | IN | 0 ETH | 0.01445218 | ||||
Remove Liquidity... | 17061592 | 636 days ago | IN | 0 ETH | 0.00526493 | ||||
Swap Exact Token... | 17052275 | 637 days ago | IN | 0 ETH | 0.00300658 | ||||
Remove Liquidity... | 16983901 | 647 days ago | IN | 0 ETH | 0.00686231 | ||||
Remove Liquidity... | 16956968 | 651 days ago | IN | 0 ETH | 0.00383871 | ||||
Swap Exact Token... | 16870853 | 663 days ago | IN | 0 ETH | 0.00362376 | ||||
Swap Exact Token... | 16868654 | 663 days ago | IN | 0 ETH | 0.00158048 | ||||
Swap Exact Token... | 16862693 | 664 days ago | IN | 0 ETH | 0.00270789 | ||||
Swap Exact Token... | 16861812 | 664 days ago | IN | 0 ETH | 0.00296992 | ||||
Swap Exact Token... | 16799365 | 673 days ago | IN | 0 ETH | 0.00389966 | ||||
Swap Exact Token... | 16780580 | 676 days ago | IN | 0 ETH | 0.00293343 | ||||
Swap Exact Token... | 16730353 | 683 days ago | IN | 0 ETH | 0.0022393 | ||||
Swap Exact Token... | 16712818 | 685 days ago | IN | 0 ETH | 0.00234492 | ||||
Swap Exact Token... | 16706668 | 686 days ago | IN | 0 ETH | 0.00304008 | ||||
Swap Exact Token... | 16632863 | 696 days ago | IN | 0 ETH | 0.00312052 | ||||
Swap Exact Token... | 16627236 | 697 days ago | IN | 0 ETH | 0.00177089 | ||||
Swap Exact Token... | 16624293 | 698 days ago | IN | 0 ETH | 0.00250253 | ||||
Swap Exact Token... | 16622073 | 698 days ago | IN | 0 ETH | 0.00399307 | ||||
Swap Exact Token... | 16620615 | 698 days ago | IN | 0 ETH | 0.00374858 | ||||
Swap Tokens For ... | 16618935 | 698 days ago | IN | 0 ETH | 0.00464628 | ||||
Swap Exact Token... | 16618488 | 698 days ago | IN | 0 ETH | 0.00159235 | ||||
Remove Liquidity... | 16618452 | 698 days ago | IN | 0 ETH | 0.0042193 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16272795 | 747 days ago | 0.0005 ETH |
Loading...
Loading
Contract Name:
DeSwapRouter
Compiler Version
v0.6.6+commit.6c089d02
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity =0.6.6; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "@uniswap/lib/contracts/libraries/TransferHelper.sol"; import "./interfaces/IUniswapV2Router02.sol"; import "./libraries/DeSwapLibrary.sol"; import "./libraries/SafeMath.sol"; import "./interfaces/IERC20.sol"; import "./interfaces/IWETH.sol"; contract DeSwapRouter is IUniswapV2Router02 { using SafeMath for uint256; address public immutable override factory; address public immutable override WBNB; mapping(address => bool) public isWhitelisted; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "UniswapV2Router: EXPIRED"); _; } constructor(address _factory, address _WBNB) public { factory = _factory; WBNB = _WBNB; } receive() external payable { assert(msg.sender == WBNB); // only accept ETH via fallback from the WBNB contract } function whitelist(address addr, bool _whitelist) external { require( IUniswapV2Factory(factory).feeToSetter() == msg.sender, "UniswapV2Router: Only feeToSetter" ); isWhitelisted[addr] = _whitelist; } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn't exist yet if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) { IUniswapV2Factory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = DeSwapLibrary.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = DeSwapLibrary.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "UniswapV2Router: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = DeSwapLibrary.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "UniswapV2Router: INSUFFICIENT_A_AMOUNT" ); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual override ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { (amountA, amountB) = _addLiquidity( tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin ); address pair = DeSwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IUniswapV2Pair(pair).mint(to); } function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ) { (amountToken, amountETH) = _addLiquidity( token, WBNB, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = DeSwapLibrary.pairFor(factory, token, WBNB); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WBNB).deposit{value: amountETH}(); assert(IWETH(WBNB).transfer(pair, amountETH)); liquidity = IUniswapV2Pair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) { address pair = DeSwapLibrary.pairFor(factory, tokenA, tokenB); IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IUniswapV2Pair(pair).burn(to); (address token0, ) = DeSwapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require( amountA >= amountAMin, "UniswapV2Router: INSUFFICIENT_A_AMOUNT" ); require( amountB >= amountBMin, "UniswapV2Router: INSUFFICIENT_B_AMOUNT" ); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH) { (amountToken, amountETH) = removeLiquidity( token, WBNB, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WBNB).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountA, uint256 amountB) { address pair = DeSwapLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-1) : liquidity; IUniswapV2Pair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountA, amountB) = removeLiquidity( tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline ); } function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountToken, uint256 amountETH) { address pair = DeSwapLibrary.pairFor(factory, token, WBNB); uint256 value = approveMax ? uint256(-1) : liquidity; IUniswapV2Pair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountToken, amountETH) = removeLiquidityETH( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountETH) { (, amountETH) = removeLiquidity( token, WBNB, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer( token, to, IERC20(token).balanceOf(address(this)) ); IWETH(WBNB).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountETH) { address pair = DeSwapLibrary.pairFor(factory, token, WBNB); uint256 value = approveMax ? uint256(-1) : liquidity; IUniswapV2Pair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap( uint256[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = DeSwapLibrary.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? DeSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IUniswapV2Pair(DeSwapLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { if (!isWhitelisted[msg.sender]) amounts = DeSwapLibrary.getAmountsOut(factory, amountIn, path); else amounts = DeSwapLibrary.getAmountsOutWhitelist( factory, amountIn, path ); require( amounts[amounts.length - 1] >= amountOutMin, "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, DeSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { if (!isWhitelisted[msg.sender]) amounts = DeSwapLibrary.getAmountsIn(factory, amountOut, path); else amounts = DeSwapLibrary.getAmountsInWhitelist( factory, amountOut, path ); require( amounts[0] <= amountInMax, "UniswapV2Router: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, DeSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WBNB, "UniswapV2Router: INVALID_PATH"); if (!isWhitelisted[msg.sender]) amounts = DeSwapLibrary.getAmountsOut(factory, msg.value, path); else amounts = DeSwapLibrary.getAmountsOutWhitelist( factory, msg.value, path ); require( amounts[amounts.length - 1] >= amountOutMin, "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WBNB).deposit{value: amounts[0]}(); assert( IWETH(WBNB).transfer( DeSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WBNB, "UniswapV2Router: INVALID_PATH"); if (!isWhitelisted[msg.sender]) amounts = DeSwapLibrary.getAmountsIn(factory, amountOut, path); else amounts = DeSwapLibrary.getAmountsInWhitelist( factory, amountOut, path ); require( amounts[0] <= amountInMax, "UniswapV2Router: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, DeSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WBNB).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WBNB, "UniswapV2Router: INVALID_PATH"); if (!isWhitelisted[msg.sender]) amounts = DeSwapLibrary.getAmountsOut(factory, amountIn, path); else amounts = DeSwapLibrary.getAmountsOutWhitelist( factory, amountIn, path ); require( amounts[amounts.length - 1] >= amountOutMin, "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, DeSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WBNB).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WBNB, "UniswapV2Router: INVALID_PATH"); if (!isWhitelisted[msg.sender]) amounts = DeSwapLibrary.getAmountsIn(factory, amountOut, path); else amounts = DeSwapLibrary.getAmountsInWhitelist( factory, amountOut, path ); require( amounts[0] <= msg.value, "UniswapV2Router: EXCESSIVE_INPUT_AMOUNT" ); IWETH(WBNB).deposit{value: amounts[0]}(); assert( IWETH(WBNB).transfer( DeSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens( address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = DeSwapLibrary.sortTokens(input, output); IUniswapV2Pair pair = IUniswapV2Pair( DeSwapLibrary.pairFor(factory, input, output) ); uint256 amountInput; uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub( reserveInput ); amountOutput = !isWhitelisted[msg.sender] ? DeSwapLibrary.getAmountOut( amountInput, reserveInput, reserveOutput ) : DeSwapLibrary.getAmountOutWhitelist( amountInput, reserveInput, reserveOutput ); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? DeSwapLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, DeSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) { require(path[0] == WBNB, "UniswapV2Router: INVALID_PATH"); uint256 amountIn = msg.value; IWETH(WBNB).deposit{value: amountIn}(); assert( IWETH(WBNB).transfer( DeSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ) ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WBNB, "UniswapV2Router: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, DeSwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IERC20(WBNB).balanceOf(address(this)); require( amountOut >= amountOutMin, "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WBNB).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual override returns (uint256 amountB) { return DeSwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountOut) { return DeSwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountIn) { return DeSwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return DeSwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return DeSwapLibrary.getAmountsIn(factory, amountOut, path); } function getAmountOutWhitelist( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure returns (uint256 amountOut) { return DeSwapLibrary.getAmountOutWhitelist( amountIn, reserveIn, reserveOut ); } function getAmountInWhitelist( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure returns (uint256 amountIn) { return DeSwapLibrary.getAmountInWhitelist( amountOut, reserveIn, reserveOut ); } function getAmountsOutWhitelist(uint256 amountIn, address[] memory path) public view returns (uint256[] memory amounts) { return DeSwapLibrary.getAmountsOutWhitelist(factory, amountIn, path); } function getAmountsInWhitelist(uint256 amountOut, address[] memory path) public view returns (uint256[] memory amounts) { return DeSwapLibrary.getAmountsInWhitelist(factory, amountOut, path); } }
pragma solidity >=0.5.0; 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; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; 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; }
pragma solidity >=0.5.0; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol"; import "./SafeMath.sol"; library DeSwapLibrary { using SafeMath for uint256; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "DeSwapLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "DeSwapLibrary: ZERO_ADDRESS"); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint256( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"4cfdbd9412c313201c8e2f145161c99a6e59be6a7331cdc65348046ecc260bb9" // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair( pairFor(factory, tokenA, tokenB) ).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "DeSwapLibrary: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "DeSwapLibrary: INSUFFICIENT_LIQUIDITY" ); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "DeSwapLibrary: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "DeSwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "DeSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "DeSwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "DeSwapLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "DeSwapLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } // WHITELISTED ADDRESS TRADING VALUES function getAmountOutWhitelist( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "DeSwapLibrary: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "DeSwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint256 amountInWithFee = amountIn.mul(1000); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } function getAmountInWhitelist( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "DeSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "DeSwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(1000); amountIn = (numerator / denominator).add(1); } function getAmountsOutWhitelist( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "DeSwapLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOutWhitelist( amounts[i], reserveIn, reserveOut ); } } function getAmountsInWhitelist( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "DeSwapLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountInWhitelist( amounts[i], reserveIn, reserveOut ); } } }
pragma solidity =0.6.6; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } }
pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view 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); }
pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WBNB() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); }
pragma solidity >=0.5.0; 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; }
{ "optimizer": { "enabled": true, "runs": 800 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WBNB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountInWhitelist","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOutWhitelist","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsInWhitelist","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOutWhitelist","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"_whitelist","type":"bool"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051620053ab380380620053ab8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6151f9620001b2600039806101e15280610fbe5280610ff952806110fd52806113aa52806117f352806119e85280611daf5280611ebb5280611f71528061204c528061222152806122a9528061256b52806125e6528061269552806127615280612808528061287c5280612d7a528061301a528061307052806130a4528061311852806133b7528061358952806136115250806111b4528061121952806112f1528061147052806114a952806115a05280611628528061168d52806118aa528061190f52806119c65280611b365280612108528061216d52806122db528061245552806124ba52806128ae5280612b075280612cff5280612d285280612d585280612e695280612ef2528061304e528061327c528061347352806134d85280613643528061412652806141695280614570528061471f5280614bc35280614c715280614cf152506151f96000f3fe6080604052600436106101d15760003560e01c806385f8c259116100f7578063c45a015511610095578063e8e3370011610064578063e8e3370014610dec578063f305d71914610e6c578063f59c370814610eb2578063fb3bdb4114610eed5761020a565b8063c45a015514610bfa578063d06ca61f14610c0f578063ded9382a14610cc4578063e89edb0a14610d375761020a565b8063ad615dec116100d1578063ad615dec14610a90578063af2979eb14610ac6578063b6f9de9514610b19578063baa2abde14610b9d5761020a565b806385f8c259146109935780638803dbee146109c95780638dd9500214610a5f5761020a565b806338ed17391161016f5780635c11d7951161013e5780635c11d795146107ad578063791ac94714610843578063795512fa146108d95780637ff36ab51461090f5761020a565b806338ed1739146105c75780633af32abf1461065d5780634a25d94a146106a45780635b0d59841461073a5761020a565b806318cbafe5116101ab57806318cbafe5146102f95780631f00ca74146103df5780632195995c1461049457806336e9a84a146105125761020a565b806302751cec1461020f578063054d50d41461027b5780631750e37d146102c35761020a565b3661020a57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461020857fe5b005b600080fd5b34801561021b57600080fd5b50610262600480360360c081101561023257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f71565b6040805192835260208301919091528051918290030190f35b34801561028757600080fd5b506102b16004803603606081101561029e57600080fd5b508035906020810135906040013561108b565b60408051918252519081900360200190f35b3480156102cf57600080fd5b506102b1600480360360608110156102e657600080fd5b50803590602081013590604001356110a0565b34801561030557600080fd5b5061038f600480360360a081101561031c57600080fd5b813591602081013591810190606081016040820135600160201b81111561034257600080fd5b82018360208201111561035457600080fd5b803590602001918460208302840111600160201b8311171561037557600080fd5b91935091506001600160a01b0381351690602001356110ad565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103cb5781810151838201526020016103b3565b505050509050019250505060405180910390f35b3480156103eb57600080fd5b5061038f6004803603604081101561040257600080fd5b81359190810190604081016020820135600160201b81111561042357600080fd5b82018360208201111561043557600080fd5b803590602001918460208302840111600160201b8311171561045657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611469945050505050565b3480156104a057600080fd5b5061026260048036036101608110156104b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561149f565b34801561051e57600080fd5b5061038f6004803603604081101561053557600080fd5b81359190810190604081016020820135600160201b81111561055657600080fd5b82018360208201111561056857600080fd5b803590602001918460208302840111600160201b8311171561058957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611599945050505050565b3480156105d357600080fd5b5061038f600480360360a08110156105ea57600080fd5b813591602081013591810190606081016040820135600160201b81111561061057600080fd5b82018360208201111561062257600080fd5b803590602001918460208302840111600160201b8311171561064357600080fd5b91935091506001600160a01b0381351690602001356115c6565b34801561066957600080fd5b506106906004803603602081101561068057600080fd5b50356001600160a01b031661178e565b604080519115158252519081900360200190f35b3480156106b057600080fd5b5061038f600480360360a08110156106c757600080fd5b813591602081013591810190606081016040820135600160201b8111156106ed57600080fd5b8201836020820111156106ff57600080fd5b803590602001918460208302840111600160201b8311171561072057600080fd5b91935091506001600160a01b0381351690602001356117a3565b34801561074657600080fd5b506102b1600480360361014081101561075e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356119be565b3480156107b957600080fd5b50610208600480360360a08110156107d057600080fd5b813591602081013591810190606081016040820135600160201b8111156107f657600080fd5b82018360208201111561080857600080fd5b803590602001918460208302840111600160201b8311171561082957600080fd5b91935091506001600160a01b038135169060200135611acc565b34801561084f57600080fd5b50610208600480360360a081101561086657600080fd5b813591602081013591810190606081016040820135600160201b81111561088c57600080fd5b82018360208201111561089e57600080fd5b803590602001918460208302840111600160201b831117156108bf57600080fd5b91935091506001600160a01b038135169060200135611d61565b3480156108e557600080fd5b506102b1600480360360608110156108fc57600080fd5b5080359060208101359060400135611ff7565b61038f6004803603608081101561092557600080fd5b81359190810190604081016020820135600160201b81111561094657600080fd5b82018360208201111561095857600080fd5b803590602001918460208302840111600160201b8311171561097957600080fd5b91935091506001600160a01b038135169060200135612004565b34801561099f57600080fd5b506102b1600480360360608110156109b657600080fd5b50803590602081013590604001356123e6565b3480156109d557600080fd5b5061038f600480360360a08110156109ec57600080fd5b813591602081013591810190606081016040820135600160201b811115610a1257600080fd5b820183602082011115610a2457600080fd5b803590602001918460208302840111600160201b83111715610a4557600080fd5b91935091506001600160a01b0381351690602001356123f3565b348015610a6b57600080fd5b50610a74612569565b604080516001600160a01b039092168252519081900360200190f35b348015610a9c57600080fd5b506102b160048036036060811015610ab357600080fd5b508035906020810135906040013561258d565b348015610ad257600080fd5b506102b1600480360360c0811015610ae957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561259a565b61020860048036036080811015610b2f57600080fd5b81359190810190604081016020820135600160201b811115610b5057600080fd5b820183602082011115610b6257600080fd5b803590602001918460208302840111600160201b83111715610b8357600080fd5b91935091506001600160a01b03813516906020013561271b565b348015610ba957600080fd5b50610262600480360360e0811015610bc057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612ab9565b348015610c0657600080fd5b50610a74612cfd565b348015610c1b57600080fd5b5061038f60048036036040811015610c3257600080fd5b81359190810190604081016020820135600160201b811115610c5357600080fd5b820183602082011115610c6557600080fd5b803590602001918460208302840111600160201b83111715610c8657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612d21945050505050565b348015610cd057600080fd5b506102626004803603610140811015610ce857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612d4e565b348015610d4357600080fd5b5061038f60048036036040811015610d5a57600080fd5b81359190810190604081016020820135600160201b811115610d7b57600080fd5b820183602082011115610d8d57600080fd5b803590602001918460208302840111600160201b83111715610dae57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612e62945050505050565b348015610df857600080fd5b50610e4e6004803603610100811015610e1057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612e8f565b60408051938452602084019290925282820152519081900360600190f35b610e4e600480360360c0811015610e8257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612fcb565b348015610ebe57600080fd5b5061020860048036036040811015610ed557600080fd5b506001600160a01b0381351690602001351515613270565b61038f60048036036080811015610f0357600080fd5b81359190810190604081016020820135600160201b811115610f2457600080fd5b820183602082011115610f3657600080fd5b803590602001918460208302840111600160201b83111715610f5757600080fd5b91935091506001600160a01b03813516906020013561336f565b6000808242811015610fb8576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b610fe7897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612ab9565b9093509150610ff7898685613780565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561105d57600080fd5b505af1158015611071573d6000803e3d6000fd5b5050505061107f85836138e9565b50965096945050505050565b60006110988484846139e1565b949350505050565b6000611098848484613ad1565b606081428110156110f3576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061112d57fe5b905060200201356001600160a01b03166001600160a01b031614611198576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff166112145761120d7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bc192505050565b9150611275565b6112727f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d0d92505050565b91505b868260018451038151811061128657fe5b602002602001015110156112cb5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b611369868660008181106112db57fe5b905060200201356001600160a01b03163361134f7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061131d57fe5b905060200201356001600160a01b03168b8b600181811061133a57fe5b905060200201356001600160a01b0316613e2d565b8560008151811061135c57fe5b6020026020010151613f05565b6113a882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614077915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106113e757fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561142557600080fd5b505af1158015611439573d6000803e3d6000fd5b5050505061145e848360018551038151811061145157fe5b60200260200101516138e9565b509695505050505050565b60606114967f000000000000000000000000000000000000000000000000000000000000000084846142bd565b90505b92915050565b60008060006114cf7f00000000000000000000000000000000000000000000000000000000000000008f8f613e2d565b90506000876114de578c6114e2565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561155857600080fd5b505af115801561156c573d6000803e3d6000fd5b5050505061157f8f8f8f8f8f8f8f612ab9565b809450819550505050509b509b9950505050505050505050565b60606114967f00000000000000000000000000000000000000000000000000000000000000008484613d0d565b6060814281101561160c576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b3360009081526020819052604090205460ff16611688576116817f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bc192505050565b91506116e9565b6116e67f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d0d92505050565b91505b86826001845103815181106116fa57fe5b6020026020010151101561173f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b61174f868660008181106112db57fe5b61145e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614077915050565b60006020819052908152604090205460ff1681565b606081428110156117e9576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061182357fe5b905060200201356001600160a01b03166001600160a01b03161461188e576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff1661190a576119037f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506142bd92505050565b915061196b565b6119687f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506143f592505050565b91505b868260008151811061197957fe5b602002602001015111156112cb5760405162461bcd60e51b81526004018080602001828103825260278152602001806150dd6027913960400191505060405180910390fd5b600080611a0c7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613e2d565b9050600086611a1b578b611a1f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b50505050611abb8d8d8d8d8d8d61259a565b9d9c50505050505050505050505050565b8042811015611b10576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b611b8585856000818110611b2057fe5b905060200201356001600160a01b031633611b7f7f000000000000000000000000000000000000000000000000000000000000000089896000818110611b6257fe5b905060200201356001600160a01b03168a8a600181811061133a57fe5b8a613f05565b600085856000198101818110611b9757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611bfc57600080fd5b505afa158015611c10573d6000803e3d6000fd5b505050506040513d6020811015611c2657600080fd5b50516040805160208881028281018201909352888252929350611c68929091899189918291850190849080828437600092019190915250889250614519915050565b86611d1a8288886000198101818110611c7d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ce257600080fd5b505afa158015611cf6573d6000803e3d6000fd5b505050506040513d6020811015611d0c57600080fd5b50519063ffffffff61485416565b1015611d575760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b5050505050505050565b8042811015611da5576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611ddf57fe5b905060200201356001600160a01b03166001600160a01b031614611e4a576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611e5a85856000818110611b2057fe5b611e98858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614519915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611f0257600080fd5b505afa158015611f16573d6000803e3d6000fd5b505050506040513d6020811015611f2c57600080fd5b5051905086811015611f6f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fd557600080fd5b505af1158015611fe9573d6000803e3d6000fd5b50505050611d5784826138e9565b60006110988484846148ac565b6060814281101561204a576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061208157fe5b905060200201356001600160a01b03166001600160a01b0316146120ec576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff16612168576121617f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bc192505050565b91506121c9565b6121c67f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d0d92505050565b91505b86826001845103815181106121da57fe5b6020026020010151101561221f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061225b57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561228e57600080fd5b505af11580156122a2573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123077f000000000000000000000000000000000000000000000000000000000000000089896000818110611b6257fe5b8460008151811061231457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561236b57600080fd5b505af115801561237f573d6000803e3d6000fd5b505050506040513d602081101561239557600080fd5b505161239d57fe5b6123dc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614077915050565b5095945050505050565b600061109884848461494b565b60608142811015612439576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b3360009081526020819052604090205460ff166124b5576124ae7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506142bd92505050565b9150612516565b6125137f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506143f592505050565b91505b868260008151811061252457fe5b6020026020010151111561173f5760405162461bcd60e51b81526004018080602001828103825260278152602001806150dd6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611098848484614a08565b600081428110156125e0576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b61260f887f00000000000000000000000000000000000000000000000000000000000000008989893089612ab9565b604080516370a0823160e01b8152306004820152905191945061269392508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561266257600080fd5b505afa158015612676573d6000803e3d6000fd5b505050506040513d602081101561268c57600080fd5b5051613780565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156126f957600080fd5b505af115801561270d573d6000803e3d6000fd5b5050505061145e84836138e9565b804281101561275f576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061279657fe5b905060200201356001600160a01b03166001600160a01b031614612801576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561286157600080fd5b505af1158015612875573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6128da7f000000000000000000000000000000000000000000000000000000000000000089896000818110611b6257fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561292a57600080fd5b505af115801561293e573d6000803e3d6000fd5b505050506040513d602081101561295457600080fd5b505161295c57fe5b60008686600019810181811061296e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156129d357600080fd5b505afa1580156129e7573d6000803e3d6000fd5b505050506040513d60208110156129fd57600080fd5b50516040805160208981028281018201909352898252929350612a3f9290918a918a918291850190849080828437600092019190915250899250614519915050565b87611d1a8289896000198101818110612a5457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ce257600080fd5b6000808242811015612b00576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6000612b2d7f00000000000000000000000000000000000000000000000000000000000000008c8c613e2d565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050506040513d6020811015612bb257600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612bff57600080fd5b505af1158015612c13573d6000803e3d6000fd5b505050506040513d6040811015612c2957600080fd5b50805160209091015190925090506000612c438e8e614ab4565b509050806001600160a01b03168e6001600160a01b031614612c66578183612c69565b82825b90975095508a871015612cad5760405162461bcd60e51b81526004018080602001828103825260268152602001806151046026913960400191505060405180910390fd5b89861015612cec5760405162461bcd60e51b81526004018080602001828103825260268152602001806150266026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606114967f00000000000000000000000000000000000000000000000000000000000000008484613bc1565b6000806000612d9e7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613e2d565b9050600087612dad578c612db1565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612e2757600080fd5b505af1158015612e3b573d6000803e3d6000fd5b50505050612e4d8e8e8e8e8e8e610f71565b909f909e509c50505050505050505050505050565b60606114967f000000000000000000000000000000000000000000000000000000000000000084846143f5565b60008060008342811015612ed8576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b612ee68c8c8c8c8c8c614b92565b90945092506000612f187f00000000000000000000000000000000000000000000000000000000000000008e8e613e2d565b9050612f268d338388613f05565b612f328c338387613f05565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612f8a57600080fd5b505af1158015612f9e573d6000803e3d6000fd5b505050506040513d6020811015612fb457600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015613014576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6130428a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614b92565b909450925060006130947f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613e2d565b90506130a28b338388613f05565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130fd57600080fd5b505af1158015613111573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561319657600080fd5b505af11580156131aa573d6000803e3d6000fd5b505050506040513d60208110156131c057600080fd5b50516131c857fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561322057600080fd5b505af1158015613234573d6000803e3d6000fd5b505050506040513d602081101561324a57600080fd5b505192503484101561326257613262338534036138e9565b505096509650969350505050565b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663094b74156040518163ffffffff1660e01b815260040160206040518083038186803b1580156132d357600080fd5b505afa1580156132e7573d6000803e3d6000fd5b505050506040513d60208110156132fd57600080fd5b50516001600160a01b0316146133445760405162461bcd60e51b81526004018080602001828103825260218152602001806150bc6021913960400191505060405180910390fd5b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b606081428110156133b5576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106133ec57fe5b905060200201356001600160a01b03166001600160a01b031614613457576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff166134d3576134cc7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506142bd92505050565b9150613534565b6135317f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506143f592505050565b91505b348260008151811061354257fe5b602002602001015111156135875760405162461bcd60e51b81526004018080602001828103825260278152602001806150dd6027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106135c357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156135f657600080fd5b505af115801561360a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61366f7f000000000000000000000000000000000000000000000000000000000000000089896000818110611b6257fe5b8460008151811061367c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156136d357600080fd5b505af11580156136e7573d6000803e3d6000fd5b505050506040513d60208110156136fd57600080fd5b505161370557fe5b61374482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614077915050565b8160008151811061375157fe5b60200260200101513411156123dc576123dc338360008151811061377157fe5b602002602001015134036138e9565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106138125780518252601f1990920191602091820191016137f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613874576040519150601f19603f3d011682016040523d82523d6000602084013e613879565b606091505b50915091508180156138a75750805115806138a757508080602001905160208110156138a457600080fd5b50515b6138e25760405162461bcd60e51b815260040180806020018281038252602d815260200180615155602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106139355780518252601f199092019160209182019101613916565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613997576040519150601f19603f3d011682016040523d82523d6000602084013e61399c565b606091505b50509050806139dc5760405162461bcd60e51b8152600401808060200182810382526034815260200180614fca6034913960400191505060405180910390fd5b505050565b6000808411613a215760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffe6028913960400191505060405180910390fd5b600083118015613a315750600082115b613a6c5760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b6000613a80856103e563ffffffff614e0616565b90506000613a94828563ffffffff614e0616565b90506000613aba83613aae886103e863ffffffff614e0616565b9063ffffffff614e7216565b9050808281613ac557fe5b04979650505050505050565b6000808411613b115760405162461bcd60e51b815260040180806020018281038252602981526020018061504c6029913960400191505060405180910390fd5b600083118015613b215750600082115b613b5c5760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b6000613b806103e8613b74868863ffffffff614e0616565b9063ffffffff614e0616565b90506000613b9a6103e8613b74868963ffffffff61485416565b9050613bb76001828481613baa57fe5b049063ffffffff614e7216565b9695505050505050565b6060600282511015613c1a576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613c3257600080fd5b50604051908082528060200260200182016040528015613c5c578160200160208202803683370190505b5090508281600081518110613c6d57fe5b60200260200101818152505060005b6001835103811015613d0557600080613cbf87868581518110613c9b57fe5b6020026020010151878660010181518110613cb257fe5b6020026020010151614eca565b91509150613ce1848481518110613cd257fe5b602002602001015183836139e1565b848460010181518110613cf057fe5b60209081029190910101525050600101613c7c565b509392505050565b6060600282511015613d66576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613d7e57600080fd5b50604051908082528060200260200182016040528015613da8578160200160208202803683370190505b5090508281600081518110613db957fe5b60200260200101818152505060005b6001835103811015613d0557600080613de787868581518110613c9b57fe5b91509150613e09848481518110613dfa57fe5b602002602001015183836148ac565b848460010181518110613e1857fe5b60209081029190910101525050600101613dc8565b6000806000613e3c8585614ab4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f4cfdbd9412c313201c8e2f145161c99a6e59be6a7331cdc65348046ecc260bb9609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613f9f5780518252601f199092019160209182019101613f80565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614001576040519150601f19603f3d011682016040523d82523d6000602084013e614006565b606091505b5091509150818015614034575080511580614034575080806020019051602081101561403157600080fd5b50515b61406f5760405162461bcd60e51b8152600401808060200182810382526031815260200180614f996031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156142b75760008084838151811061409557fe5b60200260200101518584600101815181106140ac57fe5b60200260200101519150915060006140c48383614ab4565b50905060008785600101815181106140d857fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146141065782600061410a565b6000835b91509150600060028a510388106141215788614162565b6141627f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061415557fe5b6020026020010151613e2d565b905061418f7f00000000000000000000000000000000000000000000000000000000000000008888613e2d565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156141cc576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561423d578181015183820152602001614225565b50505050905090810190601f16801561426a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561428c57600080fd5b505af11580156142a0573d6000803e3d6000fd5b50506001909901985061407a975050505050505050565b50505050565b6060600282511015614316576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561432e57600080fd5b50604051908082528060200260200182016040528015614358578160200160208202803683370190505b509050828160018351038151811061436c57fe5b60209081029190910101528151600019015b8015613d05576000806143ae8786600186038151811061439a57fe5b6020026020010151878681518110613cb257fe5b915091506143d08484815181106143c157fe5b6020026020010151838361494b565b8460018503815181106143df57fe5b602090810291909101015250506000190161437e565b606060028251101561444e576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561446657600080fd5b50604051908082528060200260200182016040528015614490578160200160208202803683370190505b50905082816001835103815181106144a457fe5b60209081029190910101528151600019015b8015613d05576000806144d28786600186038151811061439a57fe5b915091506144f48484815181106144e557fe5b60200260200101518383613ad1565b84600185038151811061450357fe5b60209081029190910101525050600019016144b6565b60005b60018351038110156139dc5760008084838151811061453757fe5b602002602001015185846001018151811061454e57fe5b60200260200101519150915060006145668383614ab4565b50905060006145967f00000000000000000000000000000000000000000000000000000000000000008585613e2d565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145d757600080fd5b505afa1580156145eb573d6000803e3d6000fd5b505050506040513d606081101561460157600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461463e578284614641565b83835b9150915061469f828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ce257600080fd5b3360009081526020819052604090205490965060ff16156146ca576146c58683836148ac565b6146d5565b6146d58683836139e1565b945050505050600080856001600160a01b0316886001600160a01b0316146146ff57826000614703565b6000835b91509150600060028c51038a1061471a578a61474e565b61474e7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061415557fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156147d85781810151838201526020016147c0565b50505050905090810190601f1680156148055780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561482757600080fd5b505af115801561483b573d6000803e3d6000fd5b50506001909b019a5061451c9950505050505050505050565b80820382811115611499576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b60008084116148ec5760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffe6028913960400191505060405180910390fd5b6000831180156148fc5750600082115b6149375760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b6000613a80856103e863ffffffff614e0616565b600080841161498b5760405162461bcd60e51b815260040180806020018281038252602981526020018061504c6029913960400191505060405180910390fd5b60008311801561499b5750600082115b6149d65760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b60006149ee6103e8613b74868863ffffffff614e0616565b90506000613b9a6103e5613b74868963ffffffff61485416565b6000808411614a485760405162461bcd60e51b81526004018080602001828103825260228152602001806150756022913960400191505060405180910390fd5b600083118015614a585750600082115b614a935760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b82614aa4858463ffffffff614e0616565b81614aab57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614b085760405162461bcd60e51b81526004018080602001828103825260228152602001806151826022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614b28578284614b2b565b83835b90925090506001600160a01b038216614b8b576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614c0c57600080fd5b505afa158015614c20573d6000803e3d6000fd5b505050506040513d6020811015614c3657600080fd5b50516001600160a01b03161415614ce957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614cbc57600080fd5b505af1158015614cd0573d6000803e3d6000fd5b505050506040513d6020811015614ce657600080fd5b50505b600080614d177f00000000000000000000000000000000000000000000000000000000000000008b8b614eca565b91509150816000148015614d29575080155b15614d3957879350869250614df9565b6000614d46898484614a08565b9050878111614d995785811015614d8e5760405162461bcd60e51b81526004018080602001828103825260268152602001806150266026913960400191505060405180910390fd5b889450925082614df7565b6000614da6898486614a08565b905089811115614db257fe5b87811015614df15760405162461bcd60e51b81526004018080602001828103825260268152602001806151046026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614e2157505080820282828281614e1e57fe5b04145b611499576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611499576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614ed98585614ab4565b509050600080614eea888888613e2d565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614f2257600080fd5b505afa158015614f36573d6000803e3d6000fd5b505050506040513d6060811015614f4c57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614f86578082614f89565b81815b9099909850965050505050505056fe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644465537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e544465537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544465537761704c6962726172793a20494e53554646494349454e545f414d4f554e544465537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459556e69737761705632526f757465723a204f6e6c7920666565546f536574746572556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65644465537761704c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20455850495245440000000000000000a264697066735822122095bc1a59d4ff825f82bc6eb541ce52a003a63717b3d6eb5b6fefd6e23e1fd29864736f6c6343000606003300000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106101d15760003560e01c806385f8c259116100f7578063c45a015511610095578063e8e3370011610064578063e8e3370014610dec578063f305d71914610e6c578063f59c370814610eb2578063fb3bdb4114610eed5761020a565b8063c45a015514610bfa578063d06ca61f14610c0f578063ded9382a14610cc4578063e89edb0a14610d375761020a565b8063ad615dec116100d1578063ad615dec14610a90578063af2979eb14610ac6578063b6f9de9514610b19578063baa2abde14610b9d5761020a565b806385f8c259146109935780638803dbee146109c95780638dd9500214610a5f5761020a565b806338ed17391161016f5780635c11d7951161013e5780635c11d795146107ad578063791ac94714610843578063795512fa146108d95780637ff36ab51461090f5761020a565b806338ed1739146105c75780633af32abf1461065d5780634a25d94a146106a45780635b0d59841461073a5761020a565b806318cbafe5116101ab57806318cbafe5146102f95780631f00ca74146103df5780632195995c1461049457806336e9a84a146105125761020a565b806302751cec1461020f578063054d50d41461027b5780631750e37d146102c35761020a565b3661020a57336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461020857fe5b005b600080fd5b34801561021b57600080fd5b50610262600480360360c081101561023257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f71565b6040805192835260208301919091528051918290030190f35b34801561028757600080fd5b506102b16004803603606081101561029e57600080fd5b508035906020810135906040013561108b565b60408051918252519081900360200190f35b3480156102cf57600080fd5b506102b1600480360360608110156102e657600080fd5b50803590602081013590604001356110a0565b34801561030557600080fd5b5061038f600480360360a081101561031c57600080fd5b813591602081013591810190606081016040820135600160201b81111561034257600080fd5b82018360208201111561035457600080fd5b803590602001918460208302840111600160201b8311171561037557600080fd5b91935091506001600160a01b0381351690602001356110ad565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103cb5781810151838201526020016103b3565b505050509050019250505060405180910390f35b3480156103eb57600080fd5b5061038f6004803603604081101561040257600080fd5b81359190810190604081016020820135600160201b81111561042357600080fd5b82018360208201111561043557600080fd5b803590602001918460208302840111600160201b8311171561045657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611469945050505050565b3480156104a057600080fd5b5061026260048036036101608110156104b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561149f565b34801561051e57600080fd5b5061038f6004803603604081101561053557600080fd5b81359190810190604081016020820135600160201b81111561055657600080fd5b82018360208201111561056857600080fd5b803590602001918460208302840111600160201b8311171561058957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611599945050505050565b3480156105d357600080fd5b5061038f600480360360a08110156105ea57600080fd5b813591602081013591810190606081016040820135600160201b81111561061057600080fd5b82018360208201111561062257600080fd5b803590602001918460208302840111600160201b8311171561064357600080fd5b91935091506001600160a01b0381351690602001356115c6565b34801561066957600080fd5b506106906004803603602081101561068057600080fd5b50356001600160a01b031661178e565b604080519115158252519081900360200190f35b3480156106b057600080fd5b5061038f600480360360a08110156106c757600080fd5b813591602081013591810190606081016040820135600160201b8111156106ed57600080fd5b8201836020820111156106ff57600080fd5b803590602001918460208302840111600160201b8311171561072057600080fd5b91935091506001600160a01b0381351690602001356117a3565b34801561074657600080fd5b506102b1600480360361014081101561075e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356119be565b3480156107b957600080fd5b50610208600480360360a08110156107d057600080fd5b813591602081013591810190606081016040820135600160201b8111156107f657600080fd5b82018360208201111561080857600080fd5b803590602001918460208302840111600160201b8311171561082957600080fd5b91935091506001600160a01b038135169060200135611acc565b34801561084f57600080fd5b50610208600480360360a081101561086657600080fd5b813591602081013591810190606081016040820135600160201b81111561088c57600080fd5b82018360208201111561089e57600080fd5b803590602001918460208302840111600160201b831117156108bf57600080fd5b91935091506001600160a01b038135169060200135611d61565b3480156108e557600080fd5b506102b1600480360360608110156108fc57600080fd5b5080359060208101359060400135611ff7565b61038f6004803603608081101561092557600080fd5b81359190810190604081016020820135600160201b81111561094657600080fd5b82018360208201111561095857600080fd5b803590602001918460208302840111600160201b8311171561097957600080fd5b91935091506001600160a01b038135169060200135612004565b34801561099f57600080fd5b506102b1600480360360608110156109b657600080fd5b50803590602081013590604001356123e6565b3480156109d557600080fd5b5061038f600480360360a08110156109ec57600080fd5b813591602081013591810190606081016040820135600160201b811115610a1257600080fd5b820183602082011115610a2457600080fd5b803590602001918460208302840111600160201b83111715610a4557600080fd5b91935091506001600160a01b0381351690602001356123f3565b348015610a6b57600080fd5b50610a74612569565b604080516001600160a01b039092168252519081900360200190f35b348015610a9c57600080fd5b506102b160048036036060811015610ab357600080fd5b508035906020810135906040013561258d565b348015610ad257600080fd5b506102b1600480360360c0811015610ae957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561259a565b61020860048036036080811015610b2f57600080fd5b81359190810190604081016020820135600160201b811115610b5057600080fd5b820183602082011115610b6257600080fd5b803590602001918460208302840111600160201b83111715610b8357600080fd5b91935091506001600160a01b03813516906020013561271b565b348015610ba957600080fd5b50610262600480360360e0811015610bc057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612ab9565b348015610c0657600080fd5b50610a74612cfd565b348015610c1b57600080fd5b5061038f60048036036040811015610c3257600080fd5b81359190810190604081016020820135600160201b811115610c5357600080fd5b820183602082011115610c6557600080fd5b803590602001918460208302840111600160201b83111715610c8657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612d21945050505050565b348015610cd057600080fd5b506102626004803603610140811015610ce857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612d4e565b348015610d4357600080fd5b5061038f60048036036040811015610d5a57600080fd5b81359190810190604081016020820135600160201b811115610d7b57600080fd5b820183602082011115610d8d57600080fd5b803590602001918460208302840111600160201b83111715610dae57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612e62945050505050565b348015610df857600080fd5b50610e4e6004803603610100811015610e1057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612e8f565b60408051938452602084019290925282820152519081900360600190f35b610e4e600480360360c0811015610e8257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612fcb565b348015610ebe57600080fd5b5061020860048036036040811015610ed557600080fd5b506001600160a01b0381351690602001351515613270565b61038f60048036036080811015610f0357600080fd5b81359190810190604081016020820135600160201b811115610f2457600080fd5b820183602082011115610f3657600080fd5b803590602001918460208302840111600160201b83111715610f5757600080fd5b91935091506001600160a01b03813516906020013561336f565b6000808242811015610fb8576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b610fe7897f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a8a8a308a612ab9565b9093509150610ff7898685613780565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561105d57600080fd5b505af1158015611071573d6000803e3d6000fd5b5050505061107f85836138e9565b50965096945050505050565b60006110988484846139e1565b949350505050565b6000611098848484613ad1565b606081428110156110f3576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168686600019810181811061112d57fe5b905060200201356001600160a01b03166001600160a01b031614611198576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff166112145761120d7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bc192505050565b9150611275565b6112727f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d0d92505050565b91505b868260018451038151811061128657fe5b602002602001015110156112cb5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b611369868660008181106112db57fe5b905060200201356001600160a01b03163361134f7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968a8a600081811061131d57fe5b905060200201356001600160a01b03168b8b600181811061133a57fe5b905060200201356001600160a01b0316613e2d565b8560008151811061135c57fe5b6020026020010151613f05565b6113a882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614077915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836001855103815181106113e757fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561142557600080fd5b505af1158015611439573d6000803e3d6000fd5b5050505061145e848360018551038151811061145157fe5b60200260200101516138e9565b509695505050505050565b60606114967f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9684846142bd565b90505b92915050565b60008060006114cf7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968f8f613e2d565b90506000876114de578c6114e2565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561155857600080fd5b505af115801561156c573d6000803e3d6000fd5b5050505061157f8f8f8f8f8f8f8f612ab9565b809450819550505050509b509b9950505050505050505050565b60606114967f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968484613d0d565b6060814281101561160c576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b3360009081526020819052604090205460ff16611688576116817f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bc192505050565b91506116e9565b6116e67f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d0d92505050565b91505b86826001845103815181106116fa57fe5b6020026020010151101561173f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b61174f868660008181106112db57fe5b61145e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614077915050565b60006020819052908152604090205460ff1681565b606081428110156117e9576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168686600019810181811061182357fe5b905060200201356001600160a01b03166001600160a01b03161461188e576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff1661190a576119037f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506142bd92505050565b915061196b565b6119687f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506143f592505050565b91505b868260008151811061197957fe5b602002602001015111156112cb5760405162461bcd60e51b81526004018080602001828103825260278152602001806150dd6027913960400191505060405180910390fd5b600080611a0c7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613e2d565b9050600086611a1b578b611a1f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b50505050611abb8d8d8d8d8d8d61259a565b9d9c50505050505050505050505050565b8042811015611b10576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b611b8585856000818110611b2057fe5b905060200201356001600160a01b031633611b7f7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689896000818110611b6257fe5b905060200201356001600160a01b03168a8a600181811061133a57fe5b8a613f05565b600085856000198101818110611b9757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611bfc57600080fd5b505afa158015611c10573d6000803e3d6000fd5b505050506040513d6020811015611c2657600080fd5b50516040805160208881028281018201909352888252929350611c68929091899189918291850190849080828437600092019190915250889250614519915050565b86611d1a8288886000198101818110611c7d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ce257600080fd5b505afa158015611cf6573d6000803e3d6000fd5b505050506040513d6020811015611d0c57600080fd5b50519063ffffffff61485416565b1015611d575760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b5050505050505050565b8042811015611da5576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21685856000198101818110611ddf57fe5b905060200201356001600160a01b03166001600160a01b031614611e4a576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611e5a85856000818110611b2057fe5b611e98858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614519915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a0823191602480820192602092909190829003018186803b158015611f0257600080fd5b505afa158015611f16573d6000803e3d6000fd5b505050506040513d6020811015611f2c57600080fd5b5051905086811015611f6f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fd557600080fd5b505af1158015611fe9573d6000803e3d6000fd5b50505050611d5784826138e9565b60006110988484846148ac565b6060814281101561204a576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168686600081811061208157fe5b905060200201356001600160a01b03166001600160a01b0316146120ec576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff16612168576121617f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9634888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bc192505050565b91506121c9565b6121c67f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9634888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d0d92505050565b91505b86826001845103815181106121da57fe5b6020026020010151101561221f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061512a602b913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db08360008151811061225b57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561228e57600080fd5b505af11580156122a2573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6123077f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689896000818110611b6257fe5b8460008151811061231457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561236b57600080fd5b505af115801561237f573d6000803e3d6000fd5b505050506040513d602081101561239557600080fd5b505161239d57fe5b6123dc82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614077915050565b5095945050505050565b600061109884848461494b565b60608142811015612439576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b3360009081526020819052604090205460ff166124b5576124ae7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506142bd92505050565b9150612516565b6125137f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506143f592505050565b91505b868260008151811061252457fe5b6020026020010151111561173f5760405162461bcd60e51b81526004018080602001828103825260278152602001806150dd6027913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000611098848484614a08565b600081428110156125e0576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b61260f887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28989893089612ab9565b604080516370a0823160e01b8152306004820152905191945061269392508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561266257600080fd5b505afa158015612676573d6000803e3d6000fd5b505050506040513d602081101561268c57600080fd5b5051613780565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156126f957600080fd5b505af115801561270d573d6000803e3d6000fd5b5050505061145e84836138e9565b804281101561275f576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168585600081811061279657fe5b905060200201356001600160a01b03166001600160a01b031614612801576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561286157600080fd5b505af1158015612875573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6128da7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689896000818110611b6257fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561292a57600080fd5b505af115801561293e573d6000803e3d6000fd5b505050506040513d602081101561295457600080fd5b505161295c57fe5b60008686600019810181811061296e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156129d357600080fd5b505afa1580156129e7573d6000803e3d6000fd5b505050506040513d60208110156129fd57600080fd5b50516040805160208981028281018201909352898252929350612a3f9290918a918a918291850190849080828437600092019190915250899250614519915050565b87611d1a8289896000198101818110612a5457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ce257600080fd5b6000808242811015612b00576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6000612b2d7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968c8c613e2d565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b505050506040513d6020811015612bb257600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612bff57600080fd5b505af1158015612c13573d6000803e3d6000fd5b505050506040513d6040811015612c2957600080fd5b50805160209091015190925090506000612c438e8e614ab4565b509050806001600160a01b03168e6001600160a01b031614612c66578183612c69565b82825b90975095508a871015612cad5760405162461bcd60e51b81526004018080602001828103825260268152602001806151046026913960400191505060405180910390fd5b89861015612cec5760405162461bcd60e51b81526004018080602001828103825260268152602001806150266026913960400191505060405180910390fd5b505050505097509795505050505050565b7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9681565b60606114967f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968484613bc1565b6000806000612d9e7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613e2d565b9050600087612dad578c612db1565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612e2757600080fd5b505af1158015612e3b573d6000803e3d6000fd5b50505050612e4d8e8e8e8e8e8e610f71565b909f909e509c50505050505050505050505050565b60606114967f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9684846143f5565b60008060008342811015612ed8576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b612ee68c8c8c8c8c8c614b92565b90945092506000612f187f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968e8e613e2d565b9050612f268d338388613f05565b612f328c338387613f05565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612f8a57600080fd5b505af1158015612f9e573d6000803e3d6000fd5b505050506040513d6020811015612fb457600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015613014576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b6130428a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b348c8c614b92565b909450925060006130947f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613e2d565b90506130a28b338388613f05565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130fd57600080fd5b505af1158015613111573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561319657600080fd5b505af11580156131aa573d6000803e3d6000fd5b505050506040513d60208110156131c057600080fd5b50516131c857fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561322057600080fd5b505af1158015613234573d6000803e3d6000fd5b505050506040513d602081101561324a57600080fd5b505192503484101561326257613262338534036138e9565b505096509650969350505050565b336001600160a01b03167f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d966001600160a01b031663094b74156040518163ffffffff1660e01b815260040160206040518083038186803b1580156132d357600080fd5b505afa1580156132e7573d6000803e3d6000fd5b505050506040513d60208110156132fd57600080fd5b50516001600160a01b0316146133445760405162461bcd60e51b81526004018080602001828103825260218152602001806150bc6021913960400191505060405180910390fd5b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b606081428110156133b5576040805162461bcd60e51b815260206004820152601860248201526000805160206151a4833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316868660008181106133ec57fe5b905060200201356001600160a01b03166001600160a01b031614613457576040805162461bcd60e51b815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff166134d3576134cc7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506142bd92505050565b9150613534565b6135317f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506143f592505050565b91505b348260008151811061354257fe5b602002602001015111156135875760405162461bcd60e51b81526004018080602001828103825260278152602001806150dd6027913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0836000815181106135c357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156135f657600080fd5b505af115801561360a573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb61366f7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d9689896000818110611b6257fe5b8460008151811061367c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156136d357600080fd5b505af11580156136e7573d6000803e3d6000fd5b505050506040513d60208110156136fd57600080fd5b505161370557fe5b61374482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614077915050565b8160008151811061375157fe5b60200260200101513411156123dc576123dc338360008151811061377157fe5b602002602001015134036138e9565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106138125780518252601f1990920191602091820191016137f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613874576040519150601f19603f3d011682016040523d82523d6000602084013e613879565b606091505b50915091508180156138a75750805115806138a757508080602001905160208110156138a457600080fd5b50515b6138e25760405162461bcd60e51b815260040180806020018281038252602d815260200180615155602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106139355780518252601f199092019160209182019101613916565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613997576040519150601f19603f3d011682016040523d82523d6000602084013e61399c565b606091505b50509050806139dc5760405162461bcd60e51b8152600401808060200182810382526034815260200180614fca6034913960400191505060405180910390fd5b505050565b6000808411613a215760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffe6028913960400191505060405180910390fd5b600083118015613a315750600082115b613a6c5760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b6000613a80856103e563ffffffff614e0616565b90506000613a94828563ffffffff614e0616565b90506000613aba83613aae886103e863ffffffff614e0616565b9063ffffffff614e7216565b9050808281613ac557fe5b04979650505050505050565b6000808411613b115760405162461bcd60e51b815260040180806020018281038252602981526020018061504c6029913960400191505060405180910390fd5b600083118015613b215750600082115b613b5c5760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b6000613b806103e8613b74868863ffffffff614e0616565b9063ffffffff614e0616565b90506000613b9a6103e8613b74868963ffffffff61485416565b9050613bb76001828481613baa57fe5b049063ffffffff614e7216565b9695505050505050565b6060600282511015613c1a576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613c3257600080fd5b50604051908082528060200260200182016040528015613c5c578160200160208202803683370190505b5090508281600081518110613c6d57fe5b60200260200101818152505060005b6001835103811015613d0557600080613cbf87868581518110613c9b57fe5b6020026020010151878660010181518110613cb257fe5b6020026020010151614eca565b91509150613ce1848481518110613cd257fe5b602002602001015183836139e1565b848460010181518110613cf057fe5b60209081029190910101525050600101613c7c565b509392505050565b6060600282511015613d66576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613d7e57600080fd5b50604051908082528060200260200182016040528015613da8578160200160208202803683370190505b5090508281600081518110613db957fe5b60200260200101818152505060005b6001835103811015613d0557600080613de787868581518110613c9b57fe5b91509150613e09848481518110613dfa57fe5b602002602001015183836148ac565b848460010181518110613e1857fe5b60209081029190910101525050600101613dc8565b6000806000613e3c8585614ab4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f4cfdbd9412c313201c8e2f145161c99a6e59be6a7331cdc65348046ecc260bb9609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613f9f5780518252601f199092019160209182019101613f80565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614001576040519150601f19603f3d011682016040523d82523d6000602084013e614006565b606091505b5091509150818015614034575080511580614034575080806020019051602081101561403157600080fd5b50515b61406f5760405162461bcd60e51b8152600401808060200182810382526031815260200180614f996031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156142b75760008084838151811061409557fe5b60200260200101518584600101815181106140ac57fe5b60200260200101519150915060006140c48383614ab4565b50905060008785600101815181106140d857fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146141065782600061410a565b6000835b91509150600060028a510388106141215788614162565b6141627f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96878c8b6002018151811061415557fe5b6020026020010151613e2d565b905061418f7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968888613e2d565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156141cc576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561423d578181015183820152602001614225565b50505050905090810190601f16801561426a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561428c57600080fd5b505af11580156142a0573d6000803e3d6000fd5b50506001909901985061407a975050505050505050565b50505050565b6060600282511015614316576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561432e57600080fd5b50604051908082528060200260200182016040528015614358578160200160208202803683370190505b509050828160018351038151811061436c57fe5b60209081029190910101528151600019015b8015613d05576000806143ae8786600186038151811061439a57fe5b6020026020010151878681518110613cb257fe5b915091506143d08484815181106143c157fe5b6020026020010151838361494b565b8460018503815181106143df57fe5b602090810291909101015250506000190161437e565b606060028251101561444e576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561446657600080fd5b50604051908082528060200260200182016040528015614490578160200160208202803683370190505b50905082816001835103815181106144a457fe5b60209081029190910101528151600019015b8015613d05576000806144d28786600186038151811061439a57fe5b915091506144f48484815181106144e557fe5b60200260200101518383613ad1565b84600185038151811061450357fe5b60209081029190910101525050600019016144b6565b60005b60018351038110156139dc5760008084838151811061453757fe5b602002602001015185846001018151811061454e57fe5b60200260200101519150915060006145668383614ab4565b50905060006145967f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968585613e2d565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145d757600080fd5b505afa1580156145eb573d6000803e3d6000fd5b505050506040513d606081101561460157600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461463e578284614641565b83835b9150915061469f828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ce257600080fd5b3360009081526020819052604090205490965060ff16156146ca576146c58683836148ac565b6146d5565b6146d58683836139e1565b945050505050600080856001600160a01b0316886001600160a01b0316146146ff57826000614703565b6000835b91509150600060028c51038a1061471a578a61474e565b61474e7f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96898e8d6002018151811061415557fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156147d85781810151838201526020016147c0565b50505050905090810190601f1680156148055780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561482757600080fd5b505af115801561483b573d6000803e3d6000fd5b50506001909b019a5061451c9950505050505050505050565b80820382811115611499576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b60008084116148ec5760405162461bcd60e51b8152600401808060200182810382526028815260200180614ffe6028913960400191505060405180910390fd5b6000831180156148fc5750600082115b6149375760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b6000613a80856103e863ffffffff614e0616565b600080841161498b5760405162461bcd60e51b815260040180806020018281038252602981526020018061504c6029913960400191505060405180910390fd5b60008311801561499b5750600082115b6149d65760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b60006149ee6103e8613b74868863ffffffff614e0616565b90506000613b9a6103e5613b74868963ffffffff61485416565b6000808411614a485760405162461bcd60e51b81526004018080602001828103825260228152602001806150756022913960400191505060405180910390fd5b600083118015614a585750600082115b614a935760405162461bcd60e51b81526004018080602001828103825260258152602001806150976025913960400191505060405180910390fd5b82614aa4858463ffffffff614e0616565b81614aab57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614b085760405162461bcd60e51b81526004018080602001828103825260228152602001806151826022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614b28578284614b2b565b83835b90925090506001600160a01b038216614b8b576040805162461bcd60e51b815260206004820152601b60248201527f4465537761704c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d969092169163e6a4390591604480820192602092909190829003018186803b158015614c0c57600080fd5b505afa158015614c20573d6000803e3d6000fd5b505050506040513d6020811015614c3657600080fd5b50516001600160a01b03161415614ce957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d969092169163c9c65396916044808201926020929091908290030181600087803b158015614cbc57600080fd5b505af1158015614cd0573d6000803e3d6000fd5b505050506040513d6020811015614ce657600080fd5b50505b600080614d177f00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d968b8b614eca565b91509150816000148015614d29575080155b15614d3957879350869250614df9565b6000614d46898484614a08565b9050878111614d995785811015614d8e5760405162461bcd60e51b81526004018080602001828103825260268152602001806150266026913960400191505060405180910390fd5b889450925082614df7565b6000614da6898486614a08565b905089811115614db257fe5b87811015614df15760405162461bcd60e51b81526004018080602001828103825260268152602001806151046026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614e2157505080820282828281614e1e57fe5b04145b611499576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611499576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614ed98585614ab4565b509050600080614eea888888613e2d565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614f2257600080fd5b505afa158015614f36573d6000803e3d6000fd5b505050506040513d6060811015614f4c57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614f86578082614f89565b81815b9099909850965050505050505056fe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644465537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e544465537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544465537761704c6962726172793a20494e53554646494349454e545f414d4f554e544465537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459556e69737761705632526f757465723a204f6e6c7920666565546f536574746572556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65644465537761704c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20455850495245440000000000000000a264697066735822122095bc1a59d4ff825f82bc6eb541ce52a003a63717b3d6eb5b6fefd6e23e1fd29864736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _factory (address): 0x28aaF78f6D62a9C9E2335287c96b615754382d96
Arg [1] : _WBNB (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000028aaf78f6d62a9c9e2335287c96b615754382d96
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
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.