Source Code
Latest 25 from a total of 14,962 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Swap Exact Token... | 339859033 | 246 days ago | IN | 0 ETH | 0.00000243 | ||||
| Swap Exact Token... | 339858823 | 246 days ago | IN | 0 ETH | 0.00000164 | ||||
| Swap Exact Token... | 339856678 | 246 days ago | IN | 0 ETH | 0.00000361 | ||||
| Swap Exact Token... | 339856539 | 246 days ago | IN | 0 ETH | 0.00000386 | ||||
| Swap Exact Token... | 339856430 | 246 days ago | IN | 0 ETH | 0.00000472 | ||||
| Swap Exact Token... | 339855800 | 246 days ago | IN | 0 ETH | 0.00000695 | ||||
| Swap Exact Token... | 339855630 | 246 days ago | IN | 0 ETH | 0.00000745 | ||||
| Swap Exact Token... | 339855177 | 246 days ago | IN | 0 ETH | 0.00000696 | ||||
| Swap Exact Token... | 339854913 | 246 days ago | IN | 0 ETH | 0.00000605 | ||||
| Swap Exact Token... | 339854477 | 246 days ago | IN | 0 ETH | 0.00000568 | ||||
| Swap Exact Token... | 339854348 | 246 days ago | IN | 0 ETH | 0.00000559 | ||||
| Swap Exact Token... | 339854222 | 246 days ago | IN | 0 ETH | 0.00000572 | ||||
| Swap Exact Token... | 338991502 | 248 days ago | IN | 0 ETH | 0.00000142 | ||||
| Swap Exact Token... | 338991385 | 248 days ago | IN | 0 ETH | 0.00000142 | ||||
| Swap Exact Token... | 338991234 | 248 days ago | IN | 0 ETH | 0.00000142 | ||||
| Swap Exact Token... | 338991132 | 248 days ago | IN | 0 ETH | 0.00000159 | ||||
| Swap Exact Token... | 338990899 | 248 days ago | IN | 0 ETH | 0.00000227 | ||||
| Swap Exact Token... | 338990692 | 248 days ago | IN | 0 ETH | 0.00000224 | ||||
| Swap Exact Token... | 338990393 | 248 days ago | IN | 0 ETH | 0.00000224 | ||||
| Swap Exact Token... | 338990243 | 248 days ago | IN | 0 ETH | 0.00000224 | ||||
| Swap Exact Token... | 338989848 | 248 days ago | IN | 0 ETH | 0.00000224 | ||||
| Swap Exact Token... | 338989741 | 248 days ago | IN | 0 ETH | 0.00000224 | ||||
| Swap Exact Token... | 338989559 | 248 days ago | IN | 0 ETH | 0.00000224 | ||||
| Swap Exact Token... | 338989414 | 248 days ago | IN | 0 ETH | 0.00000238 | ||||
| Swap Exact Token... | 338989269 | 248 days ago | IN | 0 ETH | 0.00000231 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 144624903 | 820 days ago | 0.00001 ETH | ||||
| 144621287 | 820 days ago | 0.00000269 ETH | ||||
| 144621287 | 820 days ago | 0.00000269 ETH | ||||
| 144621202 | 820 days ago | 0.00633225 ETH | ||||
| 144621202 | 820 days ago | 0.00633225 ETH | ||||
| 144581178 | 820 days ago | 0.6134203 ETH | ||||
| 144581178 | 820 days ago | 0.6134203 ETH | ||||
| 144581004 | 820 days ago | 0.12948645 ETH | ||||
| 144581004 | 820 days ago | 0.12948645 ETH | ||||
| 144580714 | 820 days ago | 0.00024681 ETH | ||||
| 144580714 | 820 days ago | 0.00024681 ETH | ||||
| 144576583 | 820 days ago | 0.00009371 ETH | ||||
| 143979707 | 822 days ago | 0.00536921 ETH | ||||
| 143979707 | 822 days ago | 0.00536921 ETH | ||||
| 142719906 | 826 days ago | 0.00074753 ETH | ||||
| 142719906 | 826 days ago | 0.00074753 ETH | ||||
| 141768069 | 829 days ago | 0.00000149 ETH | ||||
| 141768069 | 829 days ago | 0.00029893 ETH | ||||
| 141768034 | 829 days ago | 0.00000214 ETH | ||||
| 141768034 | 829 days ago | 0.00042946 ETH | ||||
| 141768011 | 829 days ago | 0.00000204 ETH | ||||
| 141768011 | 829 days ago | 0.00040801 ETH | ||||
| 141767986 | 829 days ago | 0.00000129 ETH | ||||
| 141767986 | 829 days ago | 0.00025851 ETH | ||||
| 141767909 | 829 days ago | 0.00000307 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DexSwapRouter
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./interfaces/IWETH.sol";
import "./interfaces/IDexSwapPair.sol";
import "./interfaces/IDexSwapFactory.sol";
import "./interfaces/IDexSwapFactory.sol";
import "./interfaces/IDexSwapRouter02.sol";
import "./abstracts/Constants.sol";
import "./libraries/TransferHelper.sol";
contract DexSwapRouter is IDexSwapRouter02, Constants {
address public immutable override factory;
address public immutable override WETH;
modifier ensure(uint256 deadline) {
require(deadline >= block.timestamp, "DexSwapRouter: EXPIRED");
_;
}
function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) public pure returns (uint256 amountB) {
require(amountA > 0, "DexSwapRouter: INSUFFICIENT_AMOUNT");
require(reserveA > 0 && reserveB > 0, "DexSwapRouter: INSUFFICIENT_LIQUIDITY");
amountB = (amountA * reserveB) / reserveA;
}
function getAmountOut(
uint256 amountIn,
address tokenIn,
address tokenOut,
address caller
) public view returns (uint256 amountOut) {
IDexSwapPair pair = IDexSwapPair(pairFor(tokenIn, tokenOut));
return pair.getAmountOut(amountIn, tokenIn, caller);
}
function getAmountIn(
uint256 amountOut,
address tokenIn,
address tokenOut,
address caller
) public view returns (uint256 amountIn) {
IDexSwapPair pair = IDexSwapPair(pairFor(tokenIn, tokenOut));
return pair.getAmountIn(amountOut, tokenIn, caller);
}
function getAmountsOut(
uint256 amountIn,
address[] memory path,
address caller
) public view returns (uint256[] memory amounts) {
require(path.length >= 2, "DexSwapRouter: INVALID_PATH");
amounts = new uint256[](path.length);
amounts[0] = amountIn;
for (uint256 i; i < path.length - 1; i++) {
amounts[i + 1] = getAmountOut(amounts[i], path[i], path[i + 1], caller);
}
}
function getAmountsIn(
uint256 amountOut,
address[] memory path,
address caller
) public view returns (uint256[] memory amounts) {
require(path.length >= 2, "DexSwapRouter: INVALID_PATH");
amounts = new uint256[](path.length);
amounts[amounts.length - 1] = amountOut;
for (uint256 i = path.length - 1; i > 0; i--) {
amounts[i - 1] = getAmountIn(amounts[i], path[i - 1], path[i], caller);
}
}
function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
require(tokenA != tokenB, "DexSwapRouter: IDENTICAL_ADDRESSES");
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), "DexSwapRouter: ZERO_ADDRESS");
}
function pairFor(address tokenA, address tokenB) internal view returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(
uint160(
uint256(
keccak256(
abi.encodePacked(
hex"ff",
factory,
keccak256(abi.encodePacked(token0, token1)),
hex"1380cfdf0df827009c1a086d451af646c609434128cafc98e3aa6c812fb35354"
)
)
)
)
);
}
function getReserves(address tokenA, address tokenB) internal view returns (uint256 reserveA, uint256 reserveB) {
(address token0, ) = sortTokens(tokenA, tokenB);
pairFor(tokenA, tokenB);
(uint256 reserve0, uint256 reserve1, ) = IDexSwapPair(pairFor(tokenA, tokenB)).getReserves();
(reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
}
constructor(address factory_, address WETH_) {
factory = factory_;
WETH = WETH_;
}
receive() external payable {
assert(msg.sender == WETH);
}
function _addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin
) internal virtual returns (uint256 amountA, uint256 amountB) {
require(IDexSwapFactory(factory).getPair(tokenA, tokenB) != address(0), "DexSwapRouter: Pair is zero address");
(uint256 reserveA, uint256 reserveB) = getReserves(tokenA, tokenB);
if (reserveA == 0 && reserveB == 0) {
(amountA, amountB) = (amountADesired, amountBDesired);
} else {
uint256 amountBOptimal = quote(amountADesired, reserveA, reserveB);
if (amountBOptimal <= amountBDesired) {
require(amountBOptimal >= amountBMin, "DexSwapRouter: INSUFFICIENT_B_AMOUNT");
(amountA, amountB) = (amountADesired, amountBOptimal);
} else {
uint256 amountAOptimal = quote(amountBDesired, reserveB, reserveA);
assert(amountAOptimal <= amountADesired);
require(amountAOptimal >= amountAMin, "DexSwapRouter: 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 = pairFor(tokenA, tokenB);
TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
liquidity = IDexSwapPair(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,
WETH,
amountTokenDesired,
msg.value,
amountTokenMin,
amountETHMin
);
address pair = pairFor(token, WETH);
TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
IWETH(WETH).deposit{value: amountETH}();
assert(IWETH(WETH).transfer(pair, amountETH));
liquidity = IDexSwapPair(pair).mint(to);
if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
}
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 = pairFor(tokenA, tokenB);
IDexSwapPair(pair).transferFrom(msg.sender, pair, liquidity);
(uint256 amount0, uint256 amount1) = IDexSwapPair(pair).burn(to);
(address token0, ) = sortTokens(tokenA, tokenB);
(amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
require(amountA >= amountAMin, "DexSwapRouter: INSUFFICIENT_A_AMOUNT");
require(amountB >= amountBMin, "DexSwapRouter: 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,
WETH,
liquidity,
amountTokenMin,
amountETHMin,
address(this),
deadline
);
TransferHelper.safeTransfer(token, to, amountToken);
IWETH(WETH).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 = pairFor(tokenA, tokenB);
uint256 value = approveMax ? type(uint256).max : liquidity;
IDexSwapPair(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 = pairFor(token, WETH);
uint256 value = approveMax ? type(uint256).max : liquidity;
IDexSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
(amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
}
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, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline);
TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
IWETH(WETH).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 = pairFor(token, WETH);
uint256 value = approveMax ? type(uint256).max : liquidity;
IDexSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
token,
liquidity,
amountTokenMin,
amountETHMin,
to,
deadline
);
}
function _swap(
uint256[] memory amounts,
address[] memory path,
address _to
) internal virtual onlyContractsWhitelist {
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
(address token0, ) = 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 ? pairFor(output, path[i + 2]) : _to;
IDexSwapPair(pairFor(input, output)).swapFromPeriphery(
amount0Out,
amount1Out,
to,
msg.sender,
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) {
amounts = getAmountsOut(amountIn, path, msg.sender);
require(amounts[amounts.length - 1] >= amountOutMin, "DexSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT");
TransferHelper.safeTransferFrom(path[0], msg.sender, pairFor(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) {
amounts = getAmountsIn(amountOut, path, msg.sender);
require(amounts[0] <= amountInMax, "DexSwapRouter: EXCESSIVE_INPUT_AMOUNT");
TransferHelper.safeTransferFrom(path[0], msg.sender, pairFor(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] == WETH, "DexSwapRouter: INVALID_PATH");
amounts = getAmountsOut(msg.value, path, msg.sender);
require(amounts[amounts.length - 1] >= amountOutMin, "DexSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT");
IWETH(WETH).deposit{value: amounts[0]}();
assert(IWETH(WETH).transfer(pairFor(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] == WETH, "DexSwapRouter: INVALID_PATH");
amounts = getAmountsIn(amountOut, path, msg.sender);
require(amounts[0] <= amountInMax, "DexSwapRouter: EXCESSIVE_INPUT_AMOUNT");
TransferHelper.safeTransferFrom(path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]);
_swap(amounts, path, address(this));
IWETH(WETH).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] == WETH, "DexSwapRouter: INVALID_PATH");
amounts = getAmountsOut(amountIn, path, msg.sender);
require(amounts[amounts.length - 1] >= amountOutMin, "DexSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT");
TransferHelper.safeTransferFrom(path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]);
_swap(amounts, path, address(this));
IWETH(WETH).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] == WETH, "DexSwapRouter: INVALID_PATH");
amounts = getAmountsIn(amountOut, path, msg.sender);
require(amounts[0] <= msg.value, "DexSwapRouter: EXCESSIVE_INPUT_AMOUNT");
IWETH(WETH).deposit{value: amounts[0]}();
assert(IWETH(WETH).transfer(pairFor(path[0], path[1]), amounts[0]));
_swap(amounts, path, to);
if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
}
function _swapSupportingFeeOnTransferTokens(
address[] memory path,
address _to
) internal virtual onlyContractsWhitelist {
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
(address token0, ) = sortTokens(input, output);
IDexSwapPair pair = IDexSwapPair(pairFor(input, output));
uint256 amountInput;
uint256 amountOutput;
{
(uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
(uint256 reserveInput, ) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
amountInput = IERC20(input).balanceOf(address(pair)) - reserveInput;
amountOutput = getAmountOut(amountInput, path[i], path[i + 1], msg.sender);
}
(uint256 amount0Out, uint256 amount1Out) = input == token0
? (uint256(0), amountOutput)
: (amountOutput, uint256(0));
address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to;
pair.swapFromPeriphery(amount0Out, amount1Out, to, msg.sender, 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, pairFor(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) - balanceBefore >= amountOutMin,
"DexSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT"
);
}
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable virtual override ensure(deadline) {
require(path[0] == WETH, "DexSwapRouter: INVALID_PATH");
uint256 amountIn = msg.value;
IWETH(WETH).deposit{value: amountIn}();
assert(IWETH(WETH).transfer(pairFor(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) - balanceBefore >= amountOutMin,
"DexSwapRouter: 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] == WETH, "DexSwapRouter: INVALID_PATH");
TransferHelper.safeTransferFrom(path[0], msg.sender, pairFor(path[0], path[1]), amountIn);
_swapSupportingFeeOnTransferTokens(path, address(this));
uint256 amountOut = IERC20(WETH).balanceOf(address(this));
require(amountOut >= amountOutMin, "DexSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT");
IWETH(WETH).withdraw(amountOut);
TransferHelper.safeTransferETH(to, amountOut);
}
modifier onlyContractsWhitelist() {
IDexSwapFactory factory_ = IDexSwapFactory(factory);
require(
factory_.contractsWhitelistContains(address(0)) ||
msg.sender == tx.origin ||
factory_.contractsWhitelistContains(msg.sender),
"DexSwapRouter: Caller is invalid"
);
_;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
abstract contract Constants {
uint256 public constant DIVIDER = 10000;
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
interface IDexSwapERC20 {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external view returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
interface IDexSwapFactory {
event ContractsWhitelistAdded(address[] contracts);
event ContractsWhitelistRemoved(address[] contracts);
event FeeUpdated(uint256 fee);
event ProtocolShareUpdated(uint256 share);
event FeePairUpdated(address indexed token0, address indexed token1, uint256 fee);
event ProtocolSharePairUpdated(address indexed token0, address indexed token1, uint256 share);
event FeeWhitelistAdded(address[] accounts);
event FeeWhitelistRemoved(address[] accounts);
event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
event PeripheryWhitelistAdded(address[] periphery);
event PeripheryWhitelistRemoved(address[] periphery);
event Skimmed(address indexed token0, address indexed token1, address to);
function INIT_CODE_PAIR_HASH() external view returns (bytes32);
function contractsWhitelistList(uint256 offset, uint256 limit) external view returns (address[] memory output);
function contractsWhitelist(uint256 index) external view returns (address);
function contractsWhitelistContains(address contract_) external view returns (bool);
function contractsWhitelistCount() external view returns (uint256);
function protocolShare() external view returns (uint256);
function fee() external view returns (uint256);
function feeWhitelistList(uint256 offset, uint256 limit) external view returns (address[] memory output);
function feeWhitelist(uint256 index) external view returns (address);
function feeWhitelistContains(address account) external view returns (bool);
function feeWhitelistCount() external view returns (uint256);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function peripheryWhitelistList(uint256 offset, uint256 limit) external view returns (address[] memory output);
function peripheryWhitelist(uint256 index) external view returns (address);
function peripheryWhitelistContains(address account) external view returns (bool);
function peripheryWhitelistCount() external view returns (uint256);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function addContractsWhitelist(address[] memory contracts) external returns (bool);
function addFeeWhitelist(address[] memory accounts) external returns (bool);
function addPeripheryWhitelist(address[] memory periphery) external returns (bool);
function removeContractsWhitelist(address[] memory contracts) external returns (bool);
function removeFeeWhitelist(address[] memory accounts) external returns (bool);
function removePeripheryWhitelist(address[] memory periphery) external returns (bool);
function createPair(address tokenA, address tokenB) external returns (address pair);
function updateFee(uint256 fee_) external returns (bool);
function updateProtocolShare(uint256 share) external returns (bool);
function updateFeePair(address token0, address token1, uint256 fee_) external returns (bool);
function updateProtocolSharePair(address token0, address token1, uint256 share) external returns (bool);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
function skim(address token0, address token1, address to) external returns (bool);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
import "./IDexSwapERC20.sol";
interface IDexSwapPair is IDexSwapERC20 {
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
event FeeUpdated(uint256 fee);
event ProtocolShareUpdated(uint256 share);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external view returns (uint256);
function MAX_FEE() external view returns (uint256);
function MAX_PROTOCOL_SHARE() external view returns (uint256);
function factory() external view returns (address);
function fee() external view returns (uint256);
function protocolShare() external view returns (uint256);
function token0() external view returns (address);
function token1() external view returns (address);
function getAmountOut(uint256 amountIn, address tokenIn, address caller) external view returns (uint256 amountOut);
function getAmountIn(uint256 amountOut, address tokenIn, address caller) external view returns (uint256 amountIn);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint256 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to) external returns (uint256 amount0, uint256 amount1);
function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
function swapFromPeriphery(
uint256 amount0Out,
uint256 amount1Out,
address to,
address caller,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
function updateFee(uint256 fee_) external returns (bool);
function updateProtocolShare(uint256 share) external returns (bool);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
interface IDexSwapRouter01 {
function factory() external view returns (address);
function WETH() external view 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,
address tokenIn,
address tokenOut,
address caller
) external view returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
address tokenIn,
address tokenOut,
address caller
) external view returns (uint256 amountIn);
function getAmountsOut(
uint256 amountIn,
address[] calldata path,
address caller
) external view returns (uint256[] memory amounts);
function getAmountsIn(
uint256 amountOut,
address[] calldata path,
address caller
) external view returns (uint256[] memory amounts);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
import "./IDexSwapRouter01.sol";
interface IDexSwapRouter02 is IDexSwapRouter01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.19;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint256 value) external returns (bool);
function withdraw(uint256) external;
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.19;
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");
}
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"factory_","type":"address"},{"internalType":"address","name":"WETH_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DIVIDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","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":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"caller","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"caller","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"caller","type":"address"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"caller","type":"address"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c0346200014657601f6200440a38819003918201601f19168301916001600160401b038311848410176200014b57808492604094855283398101031262000146576200005a6020620000528362000161565b920162000161565b9060805260a05260405161429390816200017782396080518181816102e401528181610b2701528181610e45015281816111d70152818161141e0152818161174e01528181611a9301528181611ff00152818161226c015281816124dc0152818161287301528181612c66015281816136e5015261396c015260a051818181601f0152818161019f015281816105fa015281816108ad01528181610ce7015281816113410152818161165401528181611a0501528181611d6101528181611da901528181611df5015281816123490152818161243501528181612bb701528181612e990152613be10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001465756fe6080604052600436101561004f575b361561001957600080fd5b61004d337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613820565b005b60003560e01c806302751cec14612e735780630c49bd1314612e5957806318cbafe514612b795780632195995c14612a5a57806338ed1739146127b35780633db9bbae146127975780634a25d94a146123e55780635b0d59841461232b5780635c11d79514611f1057806362043bd814611ef3578063791ac947146119c75780637ff36ab51461161c5780638803dbee14611370578063ad5c46481461132b578063ad615dec14611307578063af2979eb146112e8578063b1dfafc6146112c4578063b6f9de9514610cb4578063baa2abde14610b56578063c45a015514610b11578063d2b364c614610af7578063ded9382a14610894578063e8e337001461078b578063f305d719146105d95763fb3bdb410361000e5761017f61017336613224565b9490919442111561383d565b83156105b4576101cd926101e061019584613e8f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169690939184168714613460565b33906101da36898861300c565b906135b8565b936101f66101ed866134de565b51341015613f5c565b6101ff856134de565b51813b156104ad57600060049160405192838092630d0e30db60e41b8252865af180156104a1576105ca575b5061023584613e8f565b93600196808810156105b45761025f9561029f936020978892610259848701613e8f565b9061367b565b906102698a6134de565b5160405163a9059cbb60e01b81526001600160a01b03909316600484015260248301529094859190829060009082906044820190565b03925af19283156104a1576102c7936102c091600091610597575b50613820565b369161300c565b6040516304ad971560e21b808252600060048301529094602491907f000000000000000000000000000000000000000000000000000000000000000085169080888581855afa9283156104a1578a98600094610578575b50831561056e575b831561050a575b50505061033990613ea3565b6000945b61038e575b50505050506103699150610355816134de565b51341161036d575b604051918291826130c2565b0390f35b61038961038361037c836134de565b513461350e565b336141d4565b61035d565b815160001981019081116104f5578510156104f057826103ae86846134eb565b5116948781018082116104db57846103c682866134eb565b511690856103df6103d7848b61375c565b50928b6134eb565b51911688036104d357600090915b855160011981019081116104b25787908510156104c75750600284018085116104b257879161042b83610423610431948b6134eb565b51168261367b565b9a61367b565b166040519861043f8a612fb6565b60008a52813b156104ad57600080946104706040519c8d968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a157889661048c92610492575b506134ff565b9461033d565b61049b90612f8c565b38610486565b6040513d6000823e3d90fd5b600080fd5b85634e487b7160e01b60005260116004526000fd5b9061043190899a61367b565b6000916103ed565b82634e487b7160e01b60005260116004526000fd5b610342565b50634e487b7160e01b60009081526011600452fd5b90925082919750836040518099819382523360048301525afa80156104a157889661033992600092610541575b505090388061032d565b6105609250803d10610567575b6105588183612fd2565b810190613b74565b3880610537565b503d61054e565b3332149350610326565b610590919450823d8411610567576105588183612fd2565b923861031e565b6105ae9150883d8a11610567576105588183612fd2565b386102ba565b634e487b7160e01b600052603260045260246000fd5b6105d390612f8c565b3861022b565b6106236105f86105e836612f4c565b969395909692919242111561383d565b7f00000000000000000000000000000000000000000000000000000000000000009434908686613932565b93909261063d84610634838661367b565b809533906140e3565b6001600160a01b0390811690813b156104ad57604051630d0e30db60e41b81526000816004818a875af180156104a15761077c575b5060405163a9059cbb60e01b81526001600160a01b03851660048201526024810187905260209390928490849060449082906000905af19081156104a1576106c5602492869560009161075f5750613820565b60008360405197889586946335313c2160e11b8652166004850152165af19081156104a15760009161072f575b50610369915083341161071d575b604051938493846040919493926060820195825260208201520152565b61072a610383853461350e565b610700565b905081813d8311610758575b6107458183612fd2565b810103126104ad576103699051846106f2565b503d61073b565b6107769150863d8811610567576105588183612fd2565b8a6102ba565b61078590612f8c565b86610672565b346104ad576101003660031901126104ad576107a5612f0a565b6107ad612f20565b6001600160a01b0360c435818116908190036104ad576108159260246020926107da4260e435101561383d565b6107f060a435608435606435604435878c613932565b888561080e610803859b9598859d61367b565b9788809433906140e3565b33906140e3565b600060405195869485936335313c2160e11b85526004850152165af180156104a157600090610861575b6103699150604051938493846040919493926060820195825260208201520152565b506020813d821161088c575b8161087a60209383612fd2565b810103126104ad57610369905161083f565b3d915061086d565b346104ad576108a2366131be565b9893909295979194987f0000000000000000000000000000000000000000000000000000000000000000956108d7878761367b565b9715610af1576000195b6001600160a01b0398891690813b156104ad576000859161091c82966040519a8b978896879563d505accf60e01b8752303360048901613b8c565b03925af19081156104a15761098d9361094692610ae2575b504211156109418161383d565b61383d565b6020610952858561367b565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201526044810193909352919291861691839081906064820190565b03816000855af19081156104a157600092604092610ac4575b50602482518094819363226bf2d160e21b83523060048401525af19182156104a1578791600090600094610a83575b5090610a0b97610a18949392876109ec888561375c565b501688841614600014610a745790610a1391998a95995b861015613882565b8810156138da565b613ff6565b16803b156104ad5760008091602460405180948193632e1a7d4d60e01b83528760048401525af180156104a157604094610a59928492610a65575b506141d4565b82519182526020820152f35b610a6e90612f8c565b86610a53565b9390610a1391998a9599610a03565b92505091506040813d604011610abc575b81610aa160409383612fd2565b810103126104ad578051602090910151918791610a0b6109d5565b3d9150610a94565b610adb9060203d8111610567576105588183612fd2565b50896109a6565b610aeb90612f8c565b8a610934565b836108e1565b346104ad5761036961035d610b0b3661306a565b9161351b565b346104ad5760003660031901126104ad576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104ad5760e03660031901126104ad57610b6f612f0a565b610b77612f20565b610b7f612f36565b91610b8e4260c435101561383d565b610b98828261367b565b6040516323b872dd60e01b81523360048201526001600160a01b0391821660248201819052604480359083015291949192919060208180606481015b03816000885af180156104a1576040928792602492610c96575b5060008451968794859363226bf2d160e21b85521660048401525af19283156104a157600092600094610c5a575b509380610c2b6040968461375c565b5016911614600014610c5557905b610c47606435831015613882565b610a596084358210156138da565b610c39565b925092506040823d604011610c8e575b81610c7760409383612fd2565b810103126104ad5781516020909201519284610c1c565b3d9150610c6a565b610cad9060203d8111610567576105588183612fd2565b5088610bee565b610cce610cc036613224565b94909293919442111561383d565b83156105b457610cdd83613e8f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691610d1591168214613460565b803b156104ad57604051630d0e30db60e41b815260008160048134865af180156104a1576112b5575b50610d4884613e8f565b9085600110156105b457610d9b602091610d69600094610259858a01613e8f565b60405163a9059cbb60e01b81526001600160a01b03909116600482015234602482015293849283919082906044820190565b03925af180156104a157610db6916000916112965750613820565b836000198101116110805760249060206001600160a01b03610de5610de060001989018989613e7f565b613e8f565b6040516370a0823160e01b81526001600160a01b038716600482015294859290918391165afa9182156104a157600092611262575b50610e2636868661300c565b6040516304ad971560e21b8152600060048201529095906020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156104a157600091611243575b50801561123a575b80156111bb575b610e9690613ea3565b60005b8651600019810190811161108057811015611119576001600160a01b03610ec082896134eb565b511690600181018111611080576001600160a01b03610ee2600183018a6134eb565b5116610eee818461375c565b506001600160a01b03610f01838661367b565b1693604051630240bc6b60e21b8152606081600481895afa9081156104a1576001600160701b03916000916000916110e7575b506001600160a01b03851684036110df5750165b6040516370a0823160e01b81526004810187905290602082602481865afa80156104a1578d926000916110a6575b50610fbc9291610f859161350e565b6001600160a01b03610f9788846134eb565b5133939116906001600160a01b0390610fb49060018b01906134eb565b51169161335d565b916001600160a01b03160361109e57600090915b8a518060011981011161108057600119018410156110965760028401841161108057611013906001600160a01b0361100b600287018e6134eb565b51169061367b565b935b6040519461102286612fb6565b60008652813b156104ad57600080946110536040519889968795869463591cb41960e11b8652339260048701613eee565b03925af19182156104a15761106c9261107157506134ff565b610e99565b61107a90612f8c565b88610486565b634e487b7160e01b600052601160045260246000fd5b508793611015565b600091610fd0565b9250506020823d6020116110d7575b816110c260209383612fd2565b810103126104ad5790518c9190610fbc610f76565b3d91506110b5565b905016610f48565b905061110b915060603d606011611112575b6111038183612fd2565b810190613b4b565b508e610f34565b503d6110f9565b5083906020906001600160a01b039061113c90610de0906000198101908a613e7f565b6040516370a0823160e01b81526001600160a01b03909416600485015283916024918391165afa9081156104a157600091611187575b5061004d926111809161350e565b1015613e21565b90506020813d6020116111b3575b816111a260209383612fd2565b810103126104ad575161004d611172565b3d9150611195565b506040516304ad971560e21b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156104a157610e969160009161121b575b509050610e8d565b611234915060203d602011610567576105588183612fd2565b88611213565b50323314610e86565b61125c915060203d602011610567576105588183612fd2565b87610e7e565b9091506020813d60201161128e575b8161127e60209383612fd2565b810103126104ad57519085610e1a565b3d9150611271565b6112af915060203d602011610567576105588183612fd2565b866102ba565b6112be90612f8c565b85610d3e565b346104ad5760206112e06112d73661317d565b9291909161335d565b604051908152f35b346104ad5760206112e06112fb36612f4c565b94939093929192613bc8565b346104ad5760603660031901126104ad5760206112e0604435602435600435613270565b346104ad5760003660031901126104ad576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104ad576113aa6113986101cd6113873661312e565b97939692959094919742111561383d565b936113a2856134de565b511115613f5c565b83156105b4576113b982613e8f565b6113c283613e8f565b92600195808710156105b4576102c06113f8936113e6602097610259898701613e8f565b6113ef896134de565b519133906140e3565b6040516304ad971560e21b8082526000600483015290936001600160a01b0392916024917f000000000000000000000000000000000000000000000000000000000000000085169080888581855afa9283156104a1578a986000946115fd575b5083156115f3575b831561159f575b50505061147390613ea3565b6000945b61148a575b6040518061036988826130c2565b815160001981019081116104f55785101561159a57826114aa86846134eb565b5116948781018082116104db57846114c282866134eb565b511690856114d36103d7848b61375c565b519116880361159257600090915b855160011981019081116104b25787908510156115865750600284018085116104b257879161042b83610423611517948b6134eb565b16604051986115258a612fb6565b60008a52813b156104ad57600080946115566040519c8d968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15788966115719261157757506134ff565b94611477565b61158090612f8c565b89610486565b9061151790899a61367b565b6000916114e1565b61147c565b90925082919750836040518099819382523360048301525afa80156104a1578896611473926000926115d6575b5050908980611467565b6115ec9250803d10610567576105588183612fd2565b89806115cc565b3332149350611460565b611615919450823d8411610567576105588183612fd2565b928b611458565b61163761162836613224565b9490919493929342111561383d565b83156105b4578261164a61168294613e8f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169590929183168614613460565b6116973361169136898561300c565b3461351b565b94855160001995868201918211611080576116b56116bd92896134eb565b511015613e21565b6116c6866134de565b51813b156104ad57600060049160405192838092630d0e30db60e41b8252865af180156104a1576119b8575b506116fc82613e8f565b91600197808910156105b4576117209361172a936020958692610259848701613e8f565b906102698b6134de565b03925af19283156104a15761174a936102c09160009161199b5750613820565b90827f00000000000000000000000000000000000000000000000000000000000000001694604051956304ad971560e21b908188526000600489015260249380898681855afa9283156104a1578b9960009461197c575b508315611972575b831561191e575b5050506117bc90613ea3565b6000955b6117d3575b6040518061036989826130c2565b82518181019081116104db5786101561191957836117f187856134eb565b511695888101808211611904578561180982876134eb565b5116908661182261181a848c61375c565b50928c6134eb565b51911689036118fc57600090915b865160011981019081116118db5788908510156118f05750600284018085116118db5788916118668361042361186c948c6134eb565b9b61367b565b166040519961187a8b612fb6565b60008b52813b156104ad57600080946118ab6040519d8e968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15789976118c6926118cc57506134ff565b956117c0565b6118d590612f8c565b8a610486565b86634e487b7160e01b60005260116004526000fd5b9061186c908a9b61367b565b600091611830565b83634e487b7160e01b60005260116004526000fd5b6117c5565b9092508291985084604051809a819382523360048301525afa80156104a15789976117bc92600092611955575b5050908a806117b0565b61196b9250803d10610567576105588183612fd2565b8a8061194b565b33321493506117a9565b611994919450823d8411610567576105588183612fd2565b928c6117a1565b6119b29150863d8811610567576105588183612fd2565b8b6102ba565b6119c190612f8c565b876116f2565b346104ad576119e66119d83661312e565b95909594939442111561383d565b600019810181811161108057611a03610de0611a37928486613e7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614613460565b80156105b457611a4682613e8f565b92611a5083613e8f565b9082600110156105b457611a7994611a716102c09361025960208801613e8f565b9033906140e3565b6040516304ad971560e21b808252600060048301529193917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190602082602481865afa9182156104a157600092611ed2575b508115611ec8575b8115611e79575b50611aef9150613ea3565b60005b8351600019810190811161108057811015611d43576001600160a01b03611b1982866134eb565b5116906001810191828211611080576001600160a01b03611b3a84886134eb565b511690611b47828261375c565b50906001600160a01b03611b5b848361367b565b169460405192630240bc6b60e21b845260609081856004818b5afa9485156104a157600092600096611d11575b50506001600160a01b03168314936024916020916001600160701b0391908715611d08575016935b604051928380926370a0823160e01b82528b60048301525afa9081156104a157600091611cd4575b50611c1192611be69161350e565b6001600160a01b03611bf8878c6134eb565b5133939116906001600160a01b0390610fb4908d6134eb565b9015611ccc57600090915b8751806001198101116110805760011901841015611cc45760028401841161108057611c57906001600160a01b0361100b600287018b6134eb565b935b60405194611c6686612fb6565b60008652813b156104ad5760008094611c976040519889968795869463591cb41960e11b8652339260048701613eee565b03925af19182156104a157611cb092611cb557506134ff565b611af2565b611cbe90612f8c565b85610486565b503093611c59565b600091611c1c565b90506020813d602011611d00575b81611cef60209383612fd2565b810103126104ad5751611c11611bd8565b3d9150611ce2565b90501693611bb0565b6020929650602493506001600160701b039181611d3992903d10611112576111038183612fd2565b5096925092611b88565b506040516370a0823160e01b815230600482015290916020826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156104a157600092611e43575b50611da790821015613e21565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156104ad57604051632e1a7d4d60e01b81526004810182905291600083602481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19283156104a15761004d93611e3457506141d4565b611e3d90612f8c565b83610a53565b9091506020813d602011611e71575b81611e5f60209383612fd2565b810103126104ad575190611da7611d9a565b3d9150611e52565b6020915060246040518094819382523360048301525afa80156104a157611aef91600091611ea9575b5085611ae4565b611ec2915060203d602011610567576105588183612fd2565b85611ea2565b3332149150611add565b611eec91925060203d602011610567576105588183612fd2565b9086611ad5565b346104ad5760003660031901126104ad5760206040516127108152f35b346104ad57611f30611f213661312e565b9590939294919542111561383d565b84156105b457611f3f84613e8f565b90611f4985613e8f565b9186600110156105b457611a71611f669361025960208901613e8f565b836000198101116110805760249060206001600160a01b03611f90610de060001989018989613e7f565b6040516370a0823160e01b81526001600160a01b038716600482015294859290918391165afa9182156104a1576000926122f7575b50611fd136868661300c565b6040516304ad971560e21b8152600060048201529095906020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156104a1576000916122d8575b5080156122cf575b8015612250575b61204190613ea3565b60005b8651600019810190811161108057811015611119576001600160a01b0361206b82896134eb565b511690600181018111611080576001600160a01b0361208d600183018a6134eb565b5116612099818461375c565b506001600160a01b036120ac838661367b565b1693604051630240bc6b60e21b8152606081600481895afa9081156104a1576001600160701b039160009160009161222e575b506001600160a01b03851684036122265750165b6040516370a0823160e01b81526004810187905290602082602481865afa80156104a1578d926000916121ed575b506121309291610f859161350e565b916001600160a01b0316036121e557600090915b8a518060011981011161108057600119018410156121dd576002840184116110805761217f906001600160a01b0361100b600287018e6134eb565b935b6040519461218e86612fb6565b60008652813b156104ad57600080946121bf6040519889968795869463591cb41960e11b8652339260048701613eee565b03925af19182156104a1576121d89261107157506134ff565b612044565b508793612181565b600091612144565b9250506020823d60201161221e575b8161220960209383612fd2565b810103126104ad5790518c9190612130612121565b3d91506121fc565b9050166120f3565b9050612249915060603d606011611112576111038183612fd2565b508e6120df565b506040516304ad971560e21b81523360048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156104a157612041916000916122b0575b509050612038565b6122c9915060203d602011610567576105588183612fd2565b886122a8565b50323314612031565b6122f1915060203d602011610567576105588183612fd2565b87612029565b9091506020813d602011612323575b8161231360209383612fd2565b810103126104ad57519085611fc5565b3d9150612306565b346104ad57612339366131be565b919098979261236e9794979695967f00000000000000000000000000000000000000000000000000000000000000008a61367b565b90156123de57600019905b6001600160a01b031690813b156104ad57600089916123b282966040519e8f978896879563d505accf60e01b8752303360048901613b8c565b03925af19586156104a1576020976112e0976123cf575b50613bc8565b6123d890612f8c565b886123c9565b8390612379565b346104ad576124056123f63661312e565b9590959491939442111561383d565b60001992808401918183116110805761247a61247061242b610de0612463968689613e7f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169690949185168714613460565b33906101da36878a61300c565b966113a2886134de565b81156105b45761248984613e8f565b61249285613e8f565b94600193808510156105b4576102c06124bf936124b66020996102598b8701613e8f565b6113ef8c6134de565b6040516304ad971560e21b808252600060048301526024969193917f000000000000000000000000000000000000000000000000000000000000000083169080868a81855afa9283156104a1578796600094612778575b50831561276e575b831561271a575b50505061253190613ea3565b6000925b6125cf575b5050505083518381019081116104db5761255490856134eb565b51813b156104ad576000918383926040519485938492632e1a7d4d60e01b845260048401525af180156104a1576125c0575b5082519182019182116125ac5750610369926125a561035d92846134eb565b51906141d4565b634e487b7160e01b60009081526011600452fd5b6125c990612f8c565b84612586565b81518781019081116118db5783101561271557806125ed84846134eb565b511692848101808211612700578261260582866134eb565b5116908361261e612616848961375c565b50928d6134eb565b51911686036126f857600090915b855160011981019081116126d75785908510156126ec5750600284018085116126d757859161266283610423612668948b6134eb565b9861367b565b166040519661267688612fb6565b60008852813b156104ad57600080946126a76040519a8b968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15785946126c2926126c857506134ff565b92612535565b6126d190612f8c565b8b610486565b8a634e487b7160e01b60005260116004526000fd5b9061266890309861367b565b60009161262c565b87634e487b7160e01b60005260116004526000fd5b61253a565b90925082919550886040518097819382523360048301525afa80156104a157859461253192600092612751575b5050908b80612525565b6127679250803d10610567576105588183612fd2565b8b80612747565b333214935061251e565b612790919450823d8411610567576105588183612fd2565b928d612516565b346104ad5760206112e06127aa3661317d565b92919091613402565b346104ad576127ea6127d76127c73661312e565b969295909394919642111561383d565b33906127e436888861300c565b9061351b565b92835160001993848201918211611080576116b561280892876134eb565b84156105b45761281781613e8f565b61282082613e8f565b91600196808810156105b4576102c061284d93612844602096610259888701613e8f565b6113ef8a6134de565b6040516304ad971560e21b8082526000600483015290946001600160a01b0393602492907f000000000000000000000000000000000000000000000000000000000000000086169080898681855afa9283156104a1578b99600094612a3b575b508315612a31575b83156129dd575b5050506128c890613ea3565b6000955b6128de576040518061036989826130c2565b82518181019081116104db5786101561191957836128fc87856134eb565b511695888101808211611904578561291482876134eb565b5116908661292561181a848c61375c565b51911689036129d557600090915b865160011981019081116118db5788908510156129c95750600284018085116118db57889161186683610423612969948c6134eb565b16604051996129778b612fb6565b60008b52813b156104ad57600080946129a86040519d8e968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15789976129c3926118cc57506134ff565b956128cc565b90612969908a9b61367b565b600091612933565b9092508291985084604051809a819382523360048301525afa80156104a15789976128c892600092612a14575b5050908a806128bc565b612a2a9250803d10610567576105588183612fd2565b8a80612a0a565b33321493506128b5565b612a53919450823d8411610567576105588183612fd2565b928c6128ad565b346104ad576101603660031901126104ad57612a74612f0a565b612a7c612f20565b604435612a87612f36565b60e435939060c43585151586036104ad57610104359060ff821682036104ad57612ab1868561367b565b9615612b73576000195b6001600160a01b0397881692833b156104ad57612aff936000928360405180978195829463d505accf60e01b845261014435918a6101243592303360048901613b8c565b03925af19182156104a157612b1c92612b64575b5042111561383d565b610bd46020612b2b868561367b565b6040516323b872dd60e01b81523360048201526001600160a01b0382166024820152604481019690965287169491829081906064820190565b612b6d90612f8c565b87612b13565b84612abb565b346104ad57612b8a6123f63661312e565b600019928084019181831161108057612bf2612bad610de0612be5958588613e7f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169590939184168614613460565b33906127e436868961300c565b95865190868201918211611080576116b5612c0d92896134eb565b81156105b457612c1c84613e8f565b612c2585613e8f565b94600193808510156105b4576102c0612c49936124b66020996102598b8701613e8f565b6040516304ad971560e21b808252600060048301526024969193917f000000000000000000000000000000000000000000000000000000000000000083169080868a81855afa9283156104a1578796600094612e3a575b508315612e30575b8315612ddc575b505050612cbb90613ea3565b6000925b612cdd575050505083518381019081116104db5761255490856134eb565b81518781019081116118db578310156127155780612cfb84846134eb565b5116928481018082116127005782612d1382866134eb565b51169083612d24612616848961375c565b5191168603612dd457600090915b855160011981019081116126d7578590851015612dc85750600284018085116126d757859161266283610423612d68948b6134eb565b1660405196612d7688612fb6565b60008852813b156104ad5760008094612da76040519a8b968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a1578594612dc2926126c857506134ff565b92612cbf565b90612d6890309861367b565b600091612d32565b90925082919550886040518097819382523360048301525afa80156104a1578594612cbb92600092612e13575b5050908b80612caf565b612e299250803d10610567576105588183612fd2565b8b80612e09565b3332149350612ca8565b612e52919450823d8411610567576105588183612fd2565b928d612ca0565b346104ad5761036961035d612e6d3661306a565b916135b8565b346104ad57612e8136612f4c565b94909493919342111590612e948261383d565b612ebe7f00000000000000000000000000000000000000000000000000000000000000009261383d565b61098d612ecb838361367b565b6040516323b872dd60e01b81523360048201526001600160a01b0391821660248201819052604482019690965290949091602090839081906064820190565b600435906001600160a01b03821682036104ad57565b602435906001600160a01b03821682036104ad57565b60a435906001600160a01b03821682036104ad57565b60c09060031901126104ad576001600160a01b0360043581811681036104ad579160243591604435916064359160843590811681036104ad579060a43590565b67ffffffffffffffff8111612fa057604052565b634e487b7160e01b600052604160045260246000fd5b6020810190811067ffffffffffffffff821117612fa057604052565b90601f8019910116810190811067ffffffffffffffff821117612fa057604052565b67ffffffffffffffff8111612fa05760051b60200190565b929161301782612ff4565b916130256040519384612fd2565b829481845260208094019160051b81019283116104ad57905b82821061304b5750505050565b81356001600160a01b03811681036104ad57815290830190830161303e565b9060606003198301126104ad57600435916024359067ffffffffffffffff82116104ad57806023830112156104ad578160246130ab9360040135910161300c565b906044356001600160a01b03811681036104ad5790565b6020908160408183019282815285518094520193019160005b8281106130e9575050505090565b8351855293810193928101926001016130db565b9181601f840112156104ad5782359167ffffffffffffffff83116104ad576020808501948460051b0101116104ad57565b60a06003198201126104ad5760043591602435916044359067ffffffffffffffff82116104ad57613161916004016130fd565b90916064356001600160a01b03811681036104ad579060843590565b60809060031901126104ad57600435906001600160a01b0360243581811681036104ad579160443582811681036104ad579160643590811681036104ad5790565b6101409060031901126104ad576001600160a01b0360043581811681036104ad579160243591604435916064359160843590811681036104ad579060a4359060c43580151581036104ad579060e43560ff811681036104ad579061010435906101243590565b9060806003198301126104ad57600435916024359067ffffffffffffffff82116104ad57613254916004016130fd565b90916044356001600160a01b03811681036104ad579060643590565b9091811561330d57821590811580613304575b156132b157808302928304036110805761329b570490565b634e487b7160e01b600052601260045260246000fd5b60405162461bcd60e51b815260206004820152602560248201527f44657853776170526f757465723a20494e53554646494349454e545f4c495155604482015264494449545960d81b6064820152608490fd5b50801515613283565b60405162461bcd60e51b815260206004820152602260248201527f44657853776170526f757465723a20494e53554646494349454e545f414d4f55604482015261139560f21b6064820152608490fd5b6133bb936020939092906001600160a01b039061337a908361367b565b604051635e1e632560e01b815260048101949094526001600160a01b0392831660248501529190931660448301529093849290911690829081906064820190565b03915afa9081156104a1576000916133d1575090565b906020823d82116133fa575b816133ea60209383612fd2565b810103126133f757505190565b80fd5b3d91506133dd565b6133bb936020939092906001600160a01b039061341f908361367b565b60405163054d15b960e11b815260048101949094526001600160a01b0392831660248501529190931660448301529093849290911690829081906064820190565b1561346757565b60405162461bcd60e51b815260206004820152601b60248201527f44657853776170526f757465723a20494e56414c49445f5041544800000000006044820152606490fd5b906134b682612ff4565b6134c36040519182612fd2565b82815280926134d4601f1991612ff4565b0190602036910137565b8051156105b45760200190565b80518210156105b45760209160051b010190565b60001981146110805760010190565b9190820391821161108057565b9092919261352d600282511015613460565b61353781516134ac565b91613541836134de565b5260005b81516000198101908111611080578110156135b25761356481846134eb565b516001600160a01b0391908261357a83866134eb565b511690600183019182841161108057886135a7926135a0926135ad97610fb4878b6134eb565b91866134eb565b526134ff565b613545565b50509150565b9092916135c9600285511015613460565b6135d384516134ac565b9384519260001993848101908111611080576135ef90876134eb565b52805183810190811161108057805b6136085750505050565b61361281876134eb565b518482019082821161366657613657906136509086906001600160a01b038061363b878a6134eb565b511690613648888a6134eb565b511691613402565b91886134eb565b528015613666578301806135fe565b60246000634e487b7160e01b81526011600452fd5b906136859161375c565b60405160208101926bffffffffffffffffffffffff199283809260601b16855260601b16603482015260288152606081019267ffffffffffffffff9180851083861117612fa05760e0918560405281519020608082019460ff60f81b86527f000000000000000000000000000000000000000000000000000000000000000060601b16608183015260958201527f1380cfdf0df827009c1a086d451af646c609434128cafc98e3aa6c812fb3535460b582015260558552019083821090821117612fa057604052905190206001600160a01b031690565b90916001600160a01b03918284168382168082146137d05710156137cb57925b9183161561378657565b60405162461bcd60e51b815260206004820152601b60248201527f44657853776170526f757465723a205a45524f5f4144445245535300000000006044820152606490fd5b61377c565b60405162461bcd60e51b815260206004820152602260248201527f44657853776170526f757465723a204944454e544943414c5f41444452455353604482015261455360f01b6064820152608490fd5b1561382757565b634e487b7160e01b600052600160045260246000fd5b1561384457565b60405162461bcd60e51b815260206004820152601660248201527511195e14ddd85c149bdd5d195c8e881156141254915160521b6044820152606490fd5b1561388957565b60405162461bcd60e51b8152602060048201526024808201527f44657853776170526f757465723a20494e53554646494349454e545f415f414d60448201526313d5539560e21b6064820152608490fd5b156138e157565b60405162461bcd60e51b8152602060048201526024808201527f44657853776170526f757465723a20494e53554646494349454e545f425f414d60448201526313d5539560e21b6064820152608490fd5b60405163e6a4390560e01b81526001600160a01b0380831660048301819052818516602484015294979596929594929392916020816044817f000000000000000000000000000000000000000000000000000000000000000086165afa80156104a1578291600091613af4575b501615613aa3576060816139cb856139b96004978b61375c565b50996139c5828261367b565b5061367b565b1660405194858092630240bc6b60e21b82525afa9283156104a1576000908194613a7f575b506001600160701b038091169316951614600014613a79575b801580613a71575b15613a1e57505050509091565b613a2d84828897959697613270565b94838611613a495750505050613a45908210156138da565b9091565b839550613a45945090613a6091613a699394613270565b94851115613820565b831015613882565b508315613a11565b92613a09565b9050613a9a91935060603d8111611112576111038183612fd2565b509290386139f0565b60405162461bcd60e51b815260206004820152602360248201527f44657853776170526f757465723a2050616972206973207a65726f206164647260448201526265737360e81b6064820152608490fd5b9091506020813d8211613b2f575b81613b0f60209383612fd2565b81010312613b2b57519082821682036133f7575081903861399f565b5080fd5b3d9150613b02565b51906001600160701b03821682036104ad57565b908160609103126104ad57613b5f81613b37565b916040613b6e60208401613b37565b92015190565b908160209103126104ad575180151581036104ad5790565b9360ff929897969360c0969260e087019a60018060a01b0380921688521660208701526040860152606085015216608083015260a08201520152565b613c519391929542111590613bdc8261383d565b613c067f00000000000000000000000000000000000000000000000000000000000000009261383d565b613c10828261367b565b604080516323b872dd60e01b81523360048201526001600160a01b039283166024820181905260448201979097529690959194602092909188906064820190565b0397838160009a818c865af18015613e17579188918a9493613dfa575b50602482518095819363226bf2d160e21b83523060048401525af1998a15613df0578892899b613db6575b50613ca4868661375c565b50858816939088168403613da3578492613cc760249593613ccf935b1015613882565b8c10156138da565b87516370a0823160e01b815230600482015292839182905afa918215613d99579088918893613d63575b5050613d0492613ff6565b16803b15613d5f578280916024845180968193632e1a7d4d60e01b83528a60048401525af1918215613d55575050918391613d4393613d4657506141d4565b90565b613d4f90612f8c565b38610a53565b51903d90823e3d90fd5b8280fd5b8193508092503d8311613d92575b613d7b8183612fd2565b81010312613d8e575186613d0438613cf9565b8580fd5b503d613d71565b86513d89823e3d90fd5b9a8492613cc760249593613ccf93613cc0565b8880929c508194503d8311613de9575b613dd08183612fd2565b81010312613de5578282519201519938613c99565b8780fd5b503d613dc6565b87513d8a823e3d90fd5b613e1090863d8811610567576105588183612fd2565b5038613c6e565b88513d8b823e3d90fd5b15613e2857565b60405162461bcd60e51b815260206004820152602960248201527f44657853776170526f757465723a20494e53554646494349454e545f4f555450604482015268155517d05353d5539560ba1b6064820152608490fd5b91908110156105b45760051b0190565b356001600160a01b03811681036104ad5790565b15613eaa57565b606460405162461bcd60e51b815260206004820152602060248201527f44657853776170526f757465723a2043616c6c657220697320696e76616c69646044820152fd5b9390959492919584526020958685015260018060a01b03809216604085015216606083015260a060808301528051908160a084015260005b828110613f4857505060c09293506000838284010152601f8019910116010190565b81810186015184820160c001528501613f26565b15613f6357565b60405162461bcd60e51b815260206004820152602560248201527f44657853776170526f757465723a204558434553534956455f494e5055545f416044820152641353d5539560da1b6064820152608490fd5b3d15613ff1573d9067ffffffffffffffff8211612fa05760405191613fe5601f8201601f191660200184612fd2565b82523d6000602084013e565b606090565b60405163a9059cbb60e01b602082019081526001600160a01b0390931660248201526044810193909352600092839290839061403f81606481015b03601f198101835282612fd2565b51925af161404b613fb6565b816140b4575b501561405957565b60405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608490fd5b80518015925082156140c9575b505038614051565b6140dc9250602080918301019101613b74565b38806140c1565b6040516323b872dd60e01b602082019081526001600160a01b039384166024830152939092166044830152606482019390935260009283929091839061412c8160848101614031565b51925af1614138613fb6565b816141a5575b501561414657565b60405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608490fd5b80518015925082156141ba575b50503861413e565b6141cd9250602080918301019101613b74565b38806141b2565b60008080938193826040516141e881612fb6565b525af16141f3613fb6565b50156141fb57565b60405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608490fdfea26469706673582212201f8db592a85e01ae0f6acb7e942d2e2821da603dd8f47aaf5e7e35c48e2d0c8564736f6c634300081300330000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Deployed Bytecode
0x6080604052600436101561004f575b361561001957600080fd5b61004d337f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031614613820565b005b60003560e01c806302751cec14612e735780630c49bd1314612e5957806318cbafe514612b795780632195995c14612a5a57806338ed1739146127b35780633db9bbae146127975780634a25d94a146123e55780635b0d59841461232b5780635c11d79514611f1057806362043bd814611ef3578063791ac947146119c75780637ff36ab51461161c5780638803dbee14611370578063ad5c46481461132b578063ad615dec14611307578063af2979eb146112e8578063b1dfafc6146112c4578063b6f9de9514610cb4578063baa2abde14610b56578063c45a015514610b11578063d2b364c614610af7578063ded9382a14610894578063e8e337001461078b578063f305d719146105d95763fb3bdb410361000e5761017f61017336613224565b9490919442111561383d565b83156105b4576101cd926101e061019584613e8f565b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181169690939184168714613460565b33906101da36898861300c565b906135b8565b936101f66101ed866134de565b51341015613f5c565b6101ff856134de565b51813b156104ad57600060049160405192838092630d0e30db60e41b8252865af180156104a1576105ca575b5061023584613e8f565b93600196808810156105b45761025f9561029f936020978892610259848701613e8f565b9061367b565b906102698a6134de565b5160405163a9059cbb60e01b81526001600160a01b03909316600484015260248301529094859190829060009082906044820190565b03925af19283156104a1576102c7936102c091600091610597575b50613820565b369161300c565b6040516304ad971560e21b808252600060048301529094602491907f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b85169080888581855afa9283156104a1578a98600094610578575b50831561056e575b831561050a575b50505061033990613ea3565b6000945b61038e575b50505050506103699150610355816134de565b51341161036d575b604051918291826130c2565b0390f35b61038961038361037c836134de565b513461350e565b336141d4565b61035d565b815160001981019081116104f5578510156104f057826103ae86846134eb565b5116948781018082116104db57846103c682866134eb565b511690856103df6103d7848b61375c565b50928b6134eb565b51911688036104d357600090915b855160011981019081116104b25787908510156104c75750600284018085116104b257879161042b83610423610431948b6134eb565b51168261367b565b9a61367b565b166040519861043f8a612fb6565b60008a52813b156104ad57600080946104706040519c8d968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a157889661048c92610492575b506134ff565b9461033d565b61049b90612f8c565b38610486565b6040513d6000823e3d90fd5b600080fd5b85634e487b7160e01b60005260116004526000fd5b9061043190899a61367b565b6000916103ed565b82634e487b7160e01b60005260116004526000fd5b610342565b50634e487b7160e01b60009081526011600452fd5b90925082919750836040518099819382523360048301525afa80156104a157889661033992600092610541575b505090388061032d565b6105609250803d10610567575b6105588183612fd2565b810190613b74565b3880610537565b503d61054e565b3332149350610326565b610590919450823d8411610567576105588183612fd2565b923861031e565b6105ae9150883d8a11610567576105588183612fd2565b386102ba565b634e487b7160e01b600052603260045260246000fd5b6105d390612f8c565b3861022b565b6106236105f86105e836612f4c565b969395909692919242111561383d565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab19434908686613932565b93909261063d84610634838661367b565b809533906140e3565b6001600160a01b0390811690813b156104ad57604051630d0e30db60e41b81526000816004818a875af180156104a15761077c575b5060405163a9059cbb60e01b81526001600160a01b03851660048201526024810187905260209390928490849060449082906000905af19081156104a1576106c5602492869560009161075f5750613820565b60008360405197889586946335313c2160e11b8652166004850152165af19081156104a15760009161072f575b50610369915083341161071d575b604051938493846040919493926060820195825260208201520152565b61072a610383853461350e565b610700565b905081813d8311610758575b6107458183612fd2565b810103126104ad576103699051846106f2565b503d61073b565b6107769150863d8811610567576105588183612fd2565b8a6102ba565b61078590612f8c565b86610672565b346104ad576101003660031901126104ad576107a5612f0a565b6107ad612f20565b6001600160a01b0360c435818116908190036104ad576108159260246020926107da4260e435101561383d565b6107f060a435608435606435604435878c613932565b888561080e610803859b9598859d61367b565b9788809433906140e3565b33906140e3565b600060405195869485936335313c2160e11b85526004850152165af180156104a157600090610861575b6103699150604051938493846040919493926060820195825260208201520152565b506020813d821161088c575b8161087a60209383612fd2565b810103126104ad57610369905161083f565b3d915061086d565b346104ad576108a2366131be565b9893909295979194987f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1956108d7878761367b565b9715610af1576000195b6001600160a01b0398891690813b156104ad576000859161091c82966040519a8b978896879563d505accf60e01b8752303360048901613b8c565b03925af19081156104a15761098d9361094692610ae2575b504211156109418161383d565b61383d565b6020610952858561367b565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201526044810193909352919291861691839081906064820190565b03816000855af19081156104a157600092604092610ac4575b50602482518094819363226bf2d160e21b83523060048401525af19182156104a1578791600090600094610a83575b5090610a0b97610a18949392876109ec888561375c565b501688841614600014610a745790610a1391998a95995b861015613882565b8810156138da565b613ff6565b16803b156104ad5760008091602460405180948193632e1a7d4d60e01b83528760048401525af180156104a157604094610a59928492610a65575b506141d4565b82519182526020820152f35b610a6e90612f8c565b86610a53565b9390610a1391998a9599610a03565b92505091506040813d604011610abc575b81610aa160409383612fd2565b810103126104ad578051602090910151918791610a0b6109d5565b3d9150610a94565b610adb9060203d8111610567576105588183612fd2565b50896109a6565b610aeb90612f8c565b8a610934565b836108e1565b346104ad5761036961035d610b0b3661306a565b9161351b565b346104ad5760003660031901126104ad576040517f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b6001600160a01b03168152602090f35b346104ad5760e03660031901126104ad57610b6f612f0a565b610b77612f20565b610b7f612f36565b91610b8e4260c435101561383d565b610b98828261367b565b6040516323b872dd60e01b81523360048201526001600160a01b0391821660248201819052604480359083015291949192919060208180606481015b03816000885af180156104a1576040928792602492610c96575b5060008451968794859363226bf2d160e21b85521660048401525af19283156104a157600092600094610c5a575b509380610c2b6040968461375c565b5016911614600014610c5557905b610c47606435831015613882565b610a596084358210156138da565b610c39565b925092506040823d604011610c8e575b81610c7760409383612fd2565b810103126104ad5781516020909201519284610c1c565b3d9150610c6a565b610cad9060203d8111610567576105588183612fd2565b5088610bee565b610cce610cc036613224565b94909293919442111561383d565b83156105b457610cdd83613e8f565b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1811691610d1591168214613460565b803b156104ad57604051630d0e30db60e41b815260008160048134865af180156104a1576112b5575b50610d4884613e8f565b9085600110156105b457610d9b602091610d69600094610259858a01613e8f565b60405163a9059cbb60e01b81526001600160a01b03909116600482015234602482015293849283919082906044820190565b03925af180156104a157610db6916000916112965750613820565b836000198101116110805760249060206001600160a01b03610de5610de060001989018989613e7f565b613e8f565b6040516370a0823160e01b81526001600160a01b038716600482015294859290918391165afa9182156104a157600092611262575b50610e2636868661300c565b6040516304ad971560e21b8152600060048201529095906020816024817f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b6001600160a01b03165afa9081156104a157600091611243575b50801561123a575b80156111bb575b610e9690613ea3565b60005b8651600019810190811161108057811015611119576001600160a01b03610ec082896134eb565b511690600181018111611080576001600160a01b03610ee2600183018a6134eb565b5116610eee818461375c565b506001600160a01b03610f01838661367b565b1693604051630240bc6b60e21b8152606081600481895afa9081156104a1576001600160701b03916000916000916110e7575b506001600160a01b03851684036110df5750165b6040516370a0823160e01b81526004810187905290602082602481865afa80156104a1578d926000916110a6575b50610fbc9291610f859161350e565b6001600160a01b03610f9788846134eb565b5133939116906001600160a01b0390610fb49060018b01906134eb565b51169161335d565b916001600160a01b03160361109e57600090915b8a518060011981011161108057600119018410156110965760028401841161108057611013906001600160a01b0361100b600287018e6134eb565b51169061367b565b935b6040519461102286612fb6565b60008652813b156104ad57600080946110536040519889968795869463591cb41960e11b8652339260048701613eee565b03925af19182156104a15761106c9261107157506134ff565b610e99565b61107a90612f8c565b88610486565b634e487b7160e01b600052601160045260246000fd5b508793611015565b600091610fd0565b9250506020823d6020116110d7575b816110c260209383612fd2565b810103126104ad5790518c9190610fbc610f76565b3d91506110b5565b905016610f48565b905061110b915060603d606011611112575b6111038183612fd2565b810190613b4b565b508e610f34565b503d6110f9565b5083906020906001600160a01b039061113c90610de0906000198101908a613e7f565b6040516370a0823160e01b81526001600160a01b03909416600485015283916024918391165afa9081156104a157600091611187575b5061004d926111809161350e565b1015613e21565b90506020813d6020116111b3575b816111a260209383612fd2565b810103126104ad575161004d611172565b3d9150611195565b506040516304ad971560e21b81523360048201526020816024817f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b6001600160a01b03165afa80156104a157610e969160009161121b575b509050610e8d565b611234915060203d602011610567576105588183612fd2565b88611213565b50323314610e86565b61125c915060203d602011610567576105588183612fd2565b87610e7e565b9091506020813d60201161128e575b8161127e60209383612fd2565b810103126104ad57519085610e1a565b3d9150611271565b6112af915060203d602011610567576105588183612fd2565b866102ba565b6112be90612f8c565b85610d3e565b346104ad5760206112e06112d73661317d565b9291909161335d565b604051908152f35b346104ad5760206112e06112fb36612f4c565b94939093929192613bc8565b346104ad5760603660031901126104ad5760206112e0604435602435600435613270565b346104ad5760003660031901126104ad576040517f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b03168152602090f35b346104ad576113aa6113986101cd6113873661312e565b97939692959094919742111561383d565b936113a2856134de565b511115613f5c565b83156105b4576113b982613e8f565b6113c283613e8f565b92600195808710156105b4576102c06113f8936113e6602097610259898701613e8f565b6113ef896134de565b519133906140e3565b6040516304ad971560e21b8082526000600483015290936001600160a01b0392916024917f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b85169080888581855afa9283156104a1578a986000946115fd575b5083156115f3575b831561159f575b50505061147390613ea3565b6000945b61148a575b6040518061036988826130c2565b815160001981019081116104f55785101561159a57826114aa86846134eb565b5116948781018082116104db57846114c282866134eb565b511690856114d36103d7848b61375c565b519116880361159257600090915b855160011981019081116104b25787908510156115865750600284018085116104b257879161042b83610423611517948b6134eb565b16604051986115258a612fb6565b60008a52813b156104ad57600080946115566040519c8d968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15788966115719261157757506134ff565b94611477565b61158090612f8c565b89610486565b9061151790899a61367b565b6000916114e1565b61147c565b90925082919750836040518099819382523360048301525afa80156104a1578896611473926000926115d6575b5050908980611467565b6115ec9250803d10610567576105588183612fd2565b89806115cc565b3332149350611460565b611615919450823d8411610567576105588183612fd2565b928b611458565b61163761162836613224565b9490919493929342111561383d565b83156105b4578261164a61168294613e8f565b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181169590929183168614613460565b6116973361169136898561300c565b3461351b565b94855160001995868201918211611080576116b56116bd92896134eb565b511015613e21565b6116c6866134de565b51813b156104ad57600060049160405192838092630d0e30db60e41b8252865af180156104a1576119b8575b506116fc82613e8f565b91600197808910156105b4576117209361172a936020958692610259848701613e8f565b906102698b6134de565b03925af19283156104a15761174a936102c09160009161199b5750613820565b90827f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b1694604051956304ad971560e21b908188526000600489015260249380898681855afa9283156104a1578b9960009461197c575b508315611972575b831561191e575b5050506117bc90613ea3565b6000955b6117d3575b6040518061036989826130c2565b82518181019081116104db5786101561191957836117f187856134eb565b511695888101808211611904578561180982876134eb565b5116908661182261181a848c61375c565b50928c6134eb565b51911689036118fc57600090915b865160011981019081116118db5788908510156118f05750600284018085116118db5788916118668361042361186c948c6134eb565b9b61367b565b166040519961187a8b612fb6565b60008b52813b156104ad57600080946118ab6040519d8e968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15789976118c6926118cc57506134ff565b956117c0565b6118d590612f8c565b8a610486565b86634e487b7160e01b60005260116004526000fd5b9061186c908a9b61367b565b600091611830565b83634e487b7160e01b60005260116004526000fd5b6117c5565b9092508291985084604051809a819382523360048301525afa80156104a15789976117bc92600092611955575b5050908a806117b0565b61196b9250803d10610567576105588183612fd2565b8a8061194b565b33321493506117a9565b611994919450823d8411610567576105588183612fd2565b928c6117a1565b6119b29150863d8811610567576105588183612fd2565b8b6102ba565b6119c190612f8c565b876116f2565b346104ad576119e66119d83661312e565b95909594939442111561383d565b600019810181811161108057611a03610de0611a37928486613e7f565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b03908116911614613460565b80156105b457611a4682613e8f565b92611a5083613e8f565b9082600110156105b457611a7994611a716102c09361025960208801613e8f565b9033906140e3565b6040516304ad971560e21b808252600060048301529193917f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b6001600160a01b03169190602082602481865afa9182156104a157600092611ed2575b508115611ec8575b8115611e79575b50611aef9150613ea3565b60005b8351600019810190811161108057811015611d43576001600160a01b03611b1982866134eb565b5116906001810191828211611080576001600160a01b03611b3a84886134eb565b511690611b47828261375c565b50906001600160a01b03611b5b848361367b565b169460405192630240bc6b60e21b845260609081856004818b5afa9485156104a157600092600096611d11575b50506001600160a01b03168314936024916020916001600160701b0391908715611d08575016935b604051928380926370a0823160e01b82528b60048301525afa9081156104a157600091611cd4575b50611c1192611be69161350e565b6001600160a01b03611bf8878c6134eb565b5133939116906001600160a01b0390610fb4908d6134eb565b9015611ccc57600090915b8751806001198101116110805760011901841015611cc45760028401841161108057611c57906001600160a01b0361100b600287018b6134eb565b935b60405194611c6686612fb6565b60008652813b156104ad5760008094611c976040519889968795869463591cb41960e11b8652339260048701613eee565b03925af19182156104a157611cb092611cb557506134ff565b611af2565b611cbe90612f8c565b85610486565b503093611c59565b600091611c1c565b90506020813d602011611d00575b81611cef60209383612fd2565b810103126104ad5751611c11611bd8565b3d9150611ce2565b90501693611bb0565b6020929650602493506001600160701b039181611d3992903d10611112576111038183612fd2565b5096925092611b88565b506040516370a0823160e01b815230600482015290916020826024817f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b03165afa9182156104a157600092611e43575b50611da790821015613e21565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b03163b156104ad57604051632e1a7d4d60e01b81526004810182905291600083602481837f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b03165af19283156104a15761004d93611e3457506141d4565b611e3d90612f8c565b83610a53565b9091506020813d602011611e71575b81611e5f60209383612fd2565b810103126104ad575190611da7611d9a565b3d9150611e52565b6020915060246040518094819382523360048301525afa80156104a157611aef91600091611ea9575b5085611ae4565b611ec2915060203d602011610567576105588183612fd2565b85611ea2565b3332149150611add565b611eec91925060203d602011610567576105588183612fd2565b9086611ad5565b346104ad5760003660031901126104ad5760206040516127108152f35b346104ad57611f30611f213661312e565b9590939294919542111561383d565b84156105b457611f3f84613e8f565b90611f4985613e8f565b9186600110156105b457611a71611f669361025960208901613e8f565b836000198101116110805760249060206001600160a01b03611f90610de060001989018989613e7f565b6040516370a0823160e01b81526001600160a01b038716600482015294859290918391165afa9182156104a1576000926122f7575b50611fd136868661300c565b6040516304ad971560e21b8152600060048201529095906020816024817f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b6001600160a01b03165afa9081156104a1576000916122d8575b5080156122cf575b8015612250575b61204190613ea3565b60005b8651600019810190811161108057811015611119576001600160a01b0361206b82896134eb565b511690600181018111611080576001600160a01b0361208d600183018a6134eb565b5116612099818461375c565b506001600160a01b036120ac838661367b565b1693604051630240bc6b60e21b8152606081600481895afa9081156104a1576001600160701b039160009160009161222e575b506001600160a01b03851684036122265750165b6040516370a0823160e01b81526004810187905290602082602481865afa80156104a1578d926000916121ed575b506121309291610f859161350e565b916001600160a01b0316036121e557600090915b8a518060011981011161108057600119018410156121dd576002840184116110805761217f906001600160a01b0361100b600287018e6134eb565b935b6040519461218e86612fb6565b60008652813b156104ad57600080946121bf6040519889968795869463591cb41960e11b8652339260048701613eee565b03925af19182156104a1576121d89261107157506134ff565b612044565b508793612181565b600091612144565b9250506020823d60201161221e575b8161220960209383612fd2565b810103126104ad5790518c9190612130612121565b3d91506121fc565b9050166120f3565b9050612249915060603d606011611112576111038183612fd2565b508e6120df565b506040516304ad971560e21b81523360048201526020816024817f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b6001600160a01b03165afa80156104a157612041916000916122b0575b509050612038565b6122c9915060203d602011610567576105588183612fd2565b886122a8565b50323314612031565b6122f1915060203d602011610567576105588183612fd2565b87612029565b9091506020813d602011612323575b8161231360209383612fd2565b810103126104ad57519085611fc5565b3d9150612306565b346104ad57612339366131be565b919098979261236e9794979695967f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18a61367b565b90156123de57600019905b6001600160a01b031690813b156104ad57600089916123b282966040519e8f978896879563d505accf60e01b8752303360048901613b8c565b03925af19586156104a1576020976112e0976123cf575b50613bc8565b6123d890612f8c565b886123c9565b8390612379565b346104ad576124056123f63661312e565b9590959491939442111561383d565b60001992808401918183116110805761247a61247061242b610de0612463968689613e7f565b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181169690949185168714613460565b33906101da36878a61300c565b966113a2886134de565b81156105b45761248984613e8f565b61249285613e8f565b94600193808510156105b4576102c06124bf936124b66020996102598b8701613e8f565b6113ef8c6134de565b6040516304ad971560e21b808252600060048301526024969193917f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b83169080868a81855afa9283156104a1578796600094612778575b50831561276e575b831561271a575b50505061253190613ea3565b6000925b6125cf575b5050505083518381019081116104db5761255490856134eb565b51813b156104ad576000918383926040519485938492632e1a7d4d60e01b845260048401525af180156104a1576125c0575b5082519182019182116125ac5750610369926125a561035d92846134eb565b51906141d4565b634e487b7160e01b60009081526011600452fd5b6125c990612f8c565b84612586565b81518781019081116118db5783101561271557806125ed84846134eb565b511692848101808211612700578261260582866134eb565b5116908361261e612616848961375c565b50928d6134eb565b51911686036126f857600090915b855160011981019081116126d75785908510156126ec5750600284018085116126d757859161266283610423612668948b6134eb565b9861367b565b166040519661267688612fb6565b60008852813b156104ad57600080946126a76040519a8b968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15785946126c2926126c857506134ff565b92612535565b6126d190612f8c565b8b610486565b8a634e487b7160e01b60005260116004526000fd5b9061266890309861367b565b60009161262c565b87634e487b7160e01b60005260116004526000fd5b61253a565b90925082919550886040518097819382523360048301525afa80156104a157859461253192600092612751575b5050908b80612525565b6127679250803d10610567576105588183612fd2565b8b80612747565b333214935061251e565b612790919450823d8411610567576105588183612fd2565b928d612516565b346104ad5760206112e06127aa3661317d565b92919091613402565b346104ad576127ea6127d76127c73661312e565b969295909394919642111561383d565b33906127e436888861300c565b9061351b565b92835160001993848201918211611080576116b561280892876134eb565b84156105b45761281781613e8f565b61282082613e8f565b91600196808810156105b4576102c061284d93612844602096610259888701613e8f565b6113ef8a6134de565b6040516304ad971560e21b8082526000600483015290946001600160a01b0393602492907f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b86169080898681855afa9283156104a1578b99600094612a3b575b508315612a31575b83156129dd575b5050506128c890613ea3565b6000955b6128de576040518061036989826130c2565b82518181019081116104db5786101561191957836128fc87856134eb565b511695888101808211611904578561291482876134eb565b5116908661292561181a848c61375c565b51911689036129d557600090915b865160011981019081116118db5788908510156129c95750600284018085116118db57889161186683610423612969948c6134eb565b16604051996129778b612fb6565b60008b52813b156104ad57600080946129a86040519d8e968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a15789976129c3926118cc57506134ff565b956128cc565b90612969908a9b61367b565b600091612933565b9092508291985084604051809a819382523360048301525afa80156104a15789976128c892600092612a14575b5050908a806128bc565b612a2a9250803d10610567576105588183612fd2565b8a80612a0a565b33321493506128b5565b612a53919450823d8411610567576105588183612fd2565b928c6128ad565b346104ad576101603660031901126104ad57612a74612f0a565b612a7c612f20565b604435612a87612f36565b60e435939060c43585151586036104ad57610104359060ff821682036104ad57612ab1868561367b565b9615612b73576000195b6001600160a01b0397881692833b156104ad57612aff936000928360405180978195829463d505accf60e01b845261014435918a6101243592303360048901613b8c565b03925af19182156104a157612b1c92612b64575b5042111561383d565b610bd46020612b2b868561367b565b6040516323b872dd60e01b81523360048201526001600160a01b0382166024820152604481019690965287169491829081906064820190565b612b6d90612f8c565b87612b13565b84612abb565b346104ad57612b8a6123f63661312e565b600019928084019181831161108057612bf2612bad610de0612be5958588613e7f565b6001600160a01b037f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181169590939184168614613460565b33906127e436868961300c565b95865190868201918211611080576116b5612c0d92896134eb565b81156105b457612c1c84613e8f565b612c2585613e8f565b94600193808510156105b4576102c0612c49936124b66020996102598b8701613e8f565b6040516304ad971560e21b808252600060048301526024969193917f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b83169080868a81855afa9283156104a1578796600094612e3a575b508315612e30575b8315612ddc575b505050612cbb90613ea3565b6000925b612cdd575050505083518381019081116104db5761255490856134eb565b81518781019081116118db578310156127155780612cfb84846134eb565b5116928481018082116127005782612d1382866134eb565b51169083612d24612616848961375c565b5191168603612dd457600090915b855160011981019081116126d7578590851015612dc85750600284018085116126d757859161266283610423612d68948b6134eb565b1660405196612d7688612fb6565b60008852813b156104ad5760008094612da76040519a8b968795869463591cb41960e11b8652339260048701613eee565b03925af19081156104a1578594612dc2926126c857506134ff565b92612cbf565b90612d6890309861367b565b600091612d32565b90925082919550886040518097819382523360048301525afa80156104a1578594612cbb92600092612e13575b5050908b80612caf565b612e299250803d10610567576105588183612fd2565b8b80612e09565b3332149350612ca8565b612e52919450823d8411610567576105588183612fd2565b928d612ca0565b346104ad5761036961035d612e6d3661306a565b916135b8565b346104ad57612e8136612f4c565b94909493919342111590612e948261383d565b612ebe7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab19261383d565b61098d612ecb838361367b565b6040516323b872dd60e01b81523360048201526001600160a01b0391821660248201819052604482019690965290949091602090839081906064820190565b600435906001600160a01b03821682036104ad57565b602435906001600160a01b03821682036104ad57565b60a435906001600160a01b03821682036104ad57565b60c09060031901126104ad576001600160a01b0360043581811681036104ad579160243591604435916064359160843590811681036104ad579060a43590565b67ffffffffffffffff8111612fa057604052565b634e487b7160e01b600052604160045260246000fd5b6020810190811067ffffffffffffffff821117612fa057604052565b90601f8019910116810190811067ffffffffffffffff821117612fa057604052565b67ffffffffffffffff8111612fa05760051b60200190565b929161301782612ff4565b916130256040519384612fd2565b829481845260208094019160051b81019283116104ad57905b82821061304b5750505050565b81356001600160a01b03811681036104ad57815290830190830161303e565b9060606003198301126104ad57600435916024359067ffffffffffffffff82116104ad57806023830112156104ad578160246130ab9360040135910161300c565b906044356001600160a01b03811681036104ad5790565b6020908160408183019282815285518094520193019160005b8281106130e9575050505090565b8351855293810193928101926001016130db565b9181601f840112156104ad5782359167ffffffffffffffff83116104ad576020808501948460051b0101116104ad57565b60a06003198201126104ad5760043591602435916044359067ffffffffffffffff82116104ad57613161916004016130fd565b90916064356001600160a01b03811681036104ad579060843590565b60809060031901126104ad57600435906001600160a01b0360243581811681036104ad579160443582811681036104ad579160643590811681036104ad5790565b6101409060031901126104ad576001600160a01b0360043581811681036104ad579160243591604435916064359160843590811681036104ad579060a4359060c43580151581036104ad579060e43560ff811681036104ad579061010435906101243590565b9060806003198301126104ad57600435916024359067ffffffffffffffff82116104ad57613254916004016130fd565b90916044356001600160a01b03811681036104ad579060643590565b9091811561330d57821590811580613304575b156132b157808302928304036110805761329b570490565b634e487b7160e01b600052601260045260246000fd5b60405162461bcd60e51b815260206004820152602560248201527f44657853776170526f757465723a20494e53554646494349454e545f4c495155604482015264494449545960d81b6064820152608490fd5b50801515613283565b60405162461bcd60e51b815260206004820152602260248201527f44657853776170526f757465723a20494e53554646494349454e545f414d4f55604482015261139560f21b6064820152608490fd5b6133bb936020939092906001600160a01b039061337a908361367b565b604051635e1e632560e01b815260048101949094526001600160a01b0392831660248501529190931660448301529093849290911690829081906064820190565b03915afa9081156104a1576000916133d1575090565b906020823d82116133fa575b816133ea60209383612fd2565b810103126133f757505190565b80fd5b3d91506133dd565b6133bb936020939092906001600160a01b039061341f908361367b565b60405163054d15b960e11b815260048101949094526001600160a01b0392831660248501529190931660448301529093849290911690829081906064820190565b1561346757565b60405162461bcd60e51b815260206004820152601b60248201527f44657853776170526f757465723a20494e56414c49445f5041544800000000006044820152606490fd5b906134b682612ff4565b6134c36040519182612fd2565b82815280926134d4601f1991612ff4565b0190602036910137565b8051156105b45760200190565b80518210156105b45760209160051b010190565b60001981146110805760010190565b9190820391821161108057565b9092919261352d600282511015613460565b61353781516134ac565b91613541836134de565b5260005b81516000198101908111611080578110156135b25761356481846134eb565b516001600160a01b0391908261357a83866134eb565b511690600183019182841161108057886135a7926135a0926135ad97610fb4878b6134eb565b91866134eb565b526134ff565b613545565b50509150565b9092916135c9600285511015613460565b6135d384516134ac565b9384519260001993848101908111611080576135ef90876134eb565b52805183810190811161108057805b6136085750505050565b61361281876134eb565b518482019082821161366657613657906136509086906001600160a01b038061363b878a6134eb565b511690613648888a6134eb565b511691613402565b91886134eb565b528015613666578301806135fe565b60246000634e487b7160e01b81526011600452fd5b906136859161375c565b60405160208101926bffffffffffffffffffffffff199283809260601b16855260601b16603482015260288152606081019267ffffffffffffffff9180851083861117612fa05760e0918560405281519020608082019460ff60f81b86527f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b60601b16608183015260958201527f1380cfdf0df827009c1a086d451af646c609434128cafc98e3aa6c812fb3535460b582015260558552019083821090821117612fa057604052905190206001600160a01b031690565b90916001600160a01b03918284168382168082146137d05710156137cb57925b9183161561378657565b60405162461bcd60e51b815260206004820152601b60248201527f44657853776170526f757465723a205a45524f5f4144445245535300000000006044820152606490fd5b61377c565b60405162461bcd60e51b815260206004820152602260248201527f44657853776170526f757465723a204944454e544943414c5f41444452455353604482015261455360f01b6064820152608490fd5b1561382757565b634e487b7160e01b600052600160045260246000fd5b1561384457565b60405162461bcd60e51b815260206004820152601660248201527511195e14ddd85c149bdd5d195c8e881156141254915160521b6044820152606490fd5b1561388957565b60405162461bcd60e51b8152602060048201526024808201527f44657853776170526f757465723a20494e53554646494349454e545f415f414d60448201526313d5539560e21b6064820152608490fd5b156138e157565b60405162461bcd60e51b8152602060048201526024808201527f44657853776170526f757465723a20494e53554646494349454e545f425f414d60448201526313d5539560e21b6064820152608490fd5b60405163e6a4390560e01b81526001600160a01b0380831660048301819052818516602484015294979596929594929392916020816044817f0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b86165afa80156104a1578291600091613af4575b501615613aa3576060816139cb856139b96004978b61375c565b50996139c5828261367b565b5061367b565b1660405194858092630240bc6b60e21b82525afa9283156104a1576000908194613a7f575b506001600160701b038091169316951614600014613a79575b801580613a71575b15613a1e57505050509091565b613a2d84828897959697613270565b94838611613a495750505050613a45908210156138da565b9091565b839550613a45945090613a6091613a699394613270565b94851115613820565b831015613882565b508315613a11565b92613a09565b9050613a9a91935060603d8111611112576111038183612fd2565b509290386139f0565b60405162461bcd60e51b815260206004820152602360248201527f44657853776170526f757465723a2050616972206973207a65726f206164647260448201526265737360e81b6064820152608490fd5b9091506020813d8211613b2f575b81613b0f60209383612fd2565b81010312613b2b57519082821682036133f7575081903861399f565b5080fd5b3d9150613b02565b51906001600160701b03821682036104ad57565b908160609103126104ad57613b5f81613b37565b916040613b6e60208401613b37565b92015190565b908160209103126104ad575180151581036104ad5790565b9360ff929897969360c0969260e087019a60018060a01b0380921688521660208701526040860152606085015216608083015260a08201520152565b613c519391929542111590613bdc8261383d565b613c067f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab19261383d565b613c10828261367b565b604080516323b872dd60e01b81523360048201526001600160a01b039283166024820181905260448201979097529690959194602092909188906064820190565b0397838160009a818c865af18015613e17579188918a9493613dfa575b50602482518095819363226bf2d160e21b83523060048401525af1998a15613df0578892899b613db6575b50613ca4868661375c565b50858816939088168403613da3578492613cc760249593613ccf935b1015613882565b8c10156138da565b87516370a0823160e01b815230600482015292839182905afa918215613d99579088918893613d63575b5050613d0492613ff6565b16803b15613d5f578280916024845180968193632e1a7d4d60e01b83528a60048401525af1918215613d55575050918391613d4393613d4657506141d4565b90565b613d4f90612f8c565b38610a53565b51903d90823e3d90fd5b8280fd5b8193508092503d8311613d92575b613d7b8183612fd2565b81010312613d8e575186613d0438613cf9565b8580fd5b503d613d71565b86513d89823e3d90fd5b9a8492613cc760249593613ccf93613cc0565b8880929c508194503d8311613de9575b613dd08183612fd2565b81010312613de5578282519201519938613c99565b8780fd5b503d613dc6565b87513d8a823e3d90fd5b613e1090863d8811610567576105588183612fd2565b5038613c6e565b88513d8b823e3d90fd5b15613e2857565b60405162461bcd60e51b815260206004820152602960248201527f44657853776170526f757465723a20494e53554646494349454e545f4f555450604482015268155517d05353d5539560ba1b6064820152608490fd5b91908110156105b45760051b0190565b356001600160a01b03811681036104ad5790565b15613eaa57565b606460405162461bcd60e51b815260206004820152602060248201527f44657853776170526f757465723a2043616c6c657220697320696e76616c69646044820152fd5b9390959492919584526020958685015260018060a01b03809216604085015216606083015260a060808301528051908160a084015260005b828110613f4857505060c09293506000838284010152601f8019910116010190565b81810186015184820160c001528501613f26565b15613f6357565b60405162461bcd60e51b815260206004820152602560248201527f44657853776170526f757465723a204558434553534956455f494e5055545f416044820152641353d5539560da1b6064820152608490fd5b3d15613ff1573d9067ffffffffffffffff8211612fa05760405191613fe5601f8201601f191660200184612fd2565b82523d6000602084013e565b606090565b60405163a9059cbb60e01b602082019081526001600160a01b0390931660248201526044810193909352600092839290839061403f81606481015b03601f198101835282612fd2565b51925af161404b613fb6565b816140b4575b501561405957565b60405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608490fd5b80518015925082156140c9575b505038614051565b6140dc9250602080918301019101613b74565b38806140c1565b6040516323b872dd60e01b602082019081526001600160a01b039384166024830152939092166044830152606482019390935260009283929091839061412c8160848101614031565b51925af1614138613fb6565b816141a5575b501561414657565b60405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608490fd5b80518015925082156141ba575b50503861413e565b6141cd9250602080918301019101613b74565b38806141b2565b60008080938193826040516141e881612fb6565b525af16141f3613fb6565b50156141fb57565b60405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608490fdfea26469706673582212201f8db592a85e01ae0f6acb7e942d2e2821da603dd8f47aaf5e7e35c48e2d0c8564736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
-----Decoded View---------------
Arg [0] : factory_ (address): 0x3E40739d8478c58f9B973266974C58998D4F9e8b
Arg [1] : WETH_ (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003e40739d8478c58f9b973266974c58998d4f9e8b
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.