Latest 25 from a total of 44,562 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit | 28243544 | 12 hrs ago | IN | 0 ETH | 0.00000882 | ||||
| Deposit | 28243528 | 12 hrs ago | IN | 0 ETH | 0.00000899 | ||||
| Deposit | 28243517 | 12 hrs ago | IN | 0 ETH | 0.00000899 | ||||
| Deposit | 28243506 | 12 hrs ago | IN | 0 ETH | 0.000009 | ||||
| Deposit | 28243498 | 12 hrs ago | IN | 0 ETH | 0.00000899 | ||||
| Multicall | 28243457 | 12 hrs ago | IN | 0 ETH | 0.00001462 | ||||
| Deposit | 28230660 | 20 hrs ago | IN | 0 ETH | 0.00000992 | ||||
| Withdraw ETH | 28230648 | 20 hrs ago | IN | 0 ETH | 0.00000484 | ||||
| Deposit To Gauge | 28222694 | 25 hrs ago | IN | 0 ETH | 0.00000665 | ||||
| Stake Dyson | 28222681 | 25 hrs ago | IN | 0 ETH | 0.00000667 | ||||
| Multicall | 28208401 | 34 hrs ago | IN | 0 ETH | 0.00000635 | ||||
| Deposit | 28199029 | 39 hrs ago | IN | 0 ETH | 0.00000856 | ||||
| Deposit ETH | 28198980 | 39 hrs ago | IN | 0.0112 ETH | 0.00000819 | ||||
| Deposit ETH | 28198961 | 39 hrs ago | IN | 0.0112 ETH | 0.00000817 | ||||
| Deposit ETH | 28198951 | 39 hrs ago | IN | 0.0112 ETH | 0.00000819 | ||||
| Deposit ETH | 28198940 | 39 hrs ago | IN | 0.0112 ETH | 0.00000819 | ||||
| Deposit ETH | 28198928 | 39 hrs ago | IN | 0.0112 ETH | 0.00000819 | ||||
| Deposit ETH | 28184276 | 2 days ago | IN | 0.015 ETH | 0.00000859 | ||||
| Withdraw ETH | 28184261 | 2 days ago | IN | 0 ETH | 0.00000426 | ||||
| Multicall | 28158725 | 2 days ago | IN | 0 ETH | 0.00001325 | ||||
| Deposit ETH | 28141484 | 3 days ago | IN | 0.015 ETH | 0.0000086 | ||||
| Withdraw ETH | 28141472 | 3 days ago | IN | 0 ETH | 0.00000426 | ||||
| Multicall | 28112091 | 3 days ago | IN | 0 ETH | 0.00000571 | ||||
| Deposit ETH | 28097637 | 4 days ago | IN | 0.0105 ETH | 0.00000819 | ||||
| Deposit ETH | 28097624 | 4 days ago | IN | 0.0105 ETH | 0.00000818 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 28243544 | 12 hrs ago | 0 ETH | ||||
| 28243544 | 12 hrs ago | 0 ETH | ||||
| 28243528 | 12 hrs ago | 0 ETH | ||||
| 28243528 | 12 hrs ago | 0 ETH | ||||
| 28243517 | 12 hrs ago | 0 ETH | ||||
| 28243517 | 12 hrs ago | 0 ETH | ||||
| 28243506 | 12 hrs ago | 0 ETH | ||||
| 28243506 | 12 hrs ago | 0 ETH | ||||
| 28243498 | 12 hrs ago | 0 ETH | ||||
| 28243498 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH | ||||
| 28243457 | 12 hrs ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Router
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.8.17;
// SPDX-License-Identifier: AGPL-3.0-only
import "interface/IPair.sol";
import "interface/IWETH.sol";
import "interface/IFactory.sol";
import "interface/IERC20Permit.sol";
import "interface/IGauge.sol";
import "interface/IERC20.sol";
import "interface/IsDYSON.sol";
import "./lib/SqrtMath.sol";
import "./lib/TransferHelper.sol";
/// @title Router contract for all Pair contracts
/// @notice Users are expected to swap, deposit and withdraw via this contract
/// @dev IMPORTANT: Fund stuck or send to this contract is free for grab as `pair` param
/// in each swap functions is passed in and not validated so everyone can implement their
/// own `pair` contract and transfer the fund away.
contract Router {
using SqrtMath for *;
using TransferHelper for address;
uint private constant MAX_FEE_RATIO = 2**64;
address public immutable WETH;
address public immutable DYSON_FACTORY;
address public immutable sDYSON;
address public immutable DYSON;
bytes32 public immutable CODE_HASH;
address public owner;
event TransferOwnership(address newOwner);
constructor(address _WETH, address _owner, address _factory, address _sDYSON, address _DYSON) {
require(_owner != address(0), "owner cannot be zero");
require(_WETH != address(0), "invalid WETH");
WETH = _WETH;
owner = _owner;
DYSON_FACTORY = _factory;
sDYSON = _sDYSON;
DYSON = _DYSON;
CODE_HASH = IFactory(DYSON_FACTORY).getInitCodeHash();
}
modifier onlyOwner() {
require(msg.sender == owner, "forbidden");
_;
}
// returns sorted token addresses, used to handle return values from pairs sorted in this order
function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
require(tokenA != tokenB, 'identical addresses');
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), 'zero address');
}
// calculates the CREATE2 address for a pair without making any external calls
function pairFor(address factory, bytes32 initCodeHash, address tokenA, address tokenB, uint id) internal pure returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(uint160(uint(keccak256(abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encodePacked(token0, token1, id)), //salt
initCodeHash
)))));
}
function transferOwnership(address _owner) external onlyOwner {
require(_owner != address(0), "owner cannot be zero");
owner = _owner;
emit TransferOwnership(_owner);
}
/// @notice Allow another address to transfer token from this contract
/// @param tokenAddress Address of token to approve
/// @param contractAddress Address to grant allowance
/// @param enable True to enable allowance. False otherwise.
function rely(address tokenAddress, address contractAddress, bool enable) onlyOwner external {
tokenAddress.safeApprove(contractAddress, enable ? type(uint).max : 0);
}
/// @notice rescue token stucked in this contract
/// @param tokenAddress Address of token to be rescued
/// @param to Address that will receive token
/// @param amount Amount of token to be rescued
function rescueERC20(address tokenAddress, address to, uint256 amount) onlyOwner external {
tokenAddress.safeTransfer(to, amount);
}
/// @notice This contract can only receive ETH coming from WETH contract,
/// i.e., when it withdraws from WETH
receive() external payable {
require(msg.sender == WETH);
}
function _swap(address tokenIn, address tokenOut, uint index, address to, uint input, uint minOutput) internal returns (uint output) {
address pair = pairFor(DYSON_FACTORY, CODE_HASH, tokenIn, tokenOut, index);
(address token0,) = sortTokens(tokenIn, tokenOut);
if(tokenIn == token0)
output = IPair(pair).swap0in(to, input, minOutput);
else
output = IPair(pair).swap1in(to, input, minOutput);
}
function unwrapAndSendETH(address to, uint amount) internal {
IWETH(WETH).withdraw(amount);
to.safeTransferETH(amount);
}
/// @notice Swap tokenIn for tokenOut
/// @param tokenIn Address of spent token
/// @param tokenOut Address of received token
/// @param index Number of pair instance
/// @param to Address that will receive tokenOut
/// @param input Amount of tokenIn to swap
/// @param minOutput Minimum of tokenOut expected to receive
/// @return output Amount of tokenOut received
function swap(address tokenIn, address tokenOut, uint index, address to, uint input, uint minOutput) external returns (uint output) {
tokenIn.safeTransferFrom(msg.sender, address(this), input);
output = _swap(tokenIn, tokenOut, index, to, input, minOutput);
}
/// @notice Swap ETH for tokenOut
/// @param tokenOut Address of received token
/// @param index Number of pair instance
/// @param to Address that will receive tokenOut
/// @param minOutput Minimum of token1 expected to receive
/// @return output Amount of tokenOut received
function swapETHIn(address tokenOut, uint index, address to, uint minOutput) external payable returns (uint output) {
IWETH(WETH).deposit{value: msg.value}();
return _swap(WETH, tokenOut, index, to, msg.value, minOutput);
}
/// @notice Swap tokenIn for ETH
/// @param tokenIn Address of spent token
/// @param index Number of pair instance
/// @param to Address that will receive ETH
/// @param input Amount of tokenIn to swap
/// @param minOutput Minimum of ETH expected to receive
/// @return output Amount of ETH received
function swapETHOut(address tokenIn, uint index, address to, uint input, uint minOutput) external returns (uint output) {
tokenIn.safeTransferFrom(msg.sender, address(this), input);
output = _swap(tokenIn, WETH, index, address(this), input, minOutput);
unwrapAndSendETH(to, output);
}
/// @notice Swap tokenIn for tokenOut with multiple hops
/// @param tokens Array of swapping tokens
/// @param indexes Array of pair instance
/// @param to Address that will receive tokenOut
/// @param input Amount of tokenIn to swap
/// @param minOutput Minimum of tokenOut expected to receive
/// @return output Amount of tokenOut received
function swapWithMultiHops(address[] calldata tokens, uint[] calldata indexes, address to, uint input, uint minOutput) external returns (uint output) {
unchecked {
uint indexesLength = indexes.length;
require(indexesLength > 0 && tokens.length == indexesLength + 1, "invalid input array length");
tokens[0].safeTransferFrom(msg.sender, address(this), input);
uint nextInputAmount = input;
uint i = 1;
for(;i < indexesLength; ++i)
nextInputAmount = _swap(tokens[i-1], tokens[i], indexes[i-1], address(this), nextInputAmount, 0);
output = _swap(tokens[i-1], tokens[i], indexes[i-1], to, nextInputAmount, minOutput);
}
}
/// @notice Swap ETH for tokenOut with multiple hops
/// tokens[0] must be WETH
/// @param tokens Array of swapping tokens
/// @param indexes Array of pair instance
/// @param to Address that will receive tokenOut
/// @param minOutput Minimum of tokenOut expected to receive
/// @return output Amount of tokenOut received
function swapETHInWithMultiHops(address[] calldata tokens, uint[] calldata indexes, address to, uint minOutput) external payable returns (uint output) {
unchecked {
uint indexesLength = indexes.length;
require(indexesLength > 0 && tokens.length == indexesLength + 1, "invalid input array length");
require(tokens[0] == WETH, "first token must be WETH");
IWETH(WETH).deposit{value: msg.value}();
uint nextInputAmount = msg.value;
uint i = 1;
for(;i < indexesLength; ++i)
nextInputAmount = _swap(tokens[i-1], tokens[i], indexes[i-1], address(this), nextInputAmount, 0);
output = _swap(tokens[i-1], tokens[i], indexes[i-1], to, nextInputAmount, minOutput);
}
}
/// @notice Swap tokenIn for ETH with multiple hops
/// tokens[tokens.length - 1] must be WETH
/// @param tokens Array of swapping tokens
/// @param indexes Array of pair instance
/// @param to Address that will receive ETH
/// @param input Amount of tokenIn to swap
/// @param minOutput Minimum of ETH expected to receive
/// @return output Amount of ETH received
function swapETHOutWithMultiHops(address[] calldata tokens, uint[] calldata indexes, address to, uint input, uint minOutput) external returns (uint output) {
unchecked {
uint indexesLength = indexes.length;
require(indexesLength > 0 && tokens.length == indexesLength + 1, "invalid input array length");
require(tokens[indexesLength] == WETH, "last token must be WETH");
tokens[0].safeTransferFrom(msg.sender, address(this), input);
uint nextInputAmount = input;
uint i = 1;
for(;i < indexesLength; ++i)
nextInputAmount = _swap(tokens[i-1], tokens[i], indexes[i-1], address(this), nextInputAmount, 0);
output = _swap(tokens[i-1], tokens[i], indexes[i-1], address(this), nextInputAmount, minOutput);
unwrapAndSendETH(to, output);
}
}
function _deposit(address tokenIn, address tokenOut, uint index, address to, uint input, uint minOutput, uint time) internal returns (uint output) {
address pair = pairFor(DYSON_FACTORY, CODE_HASH, tokenIn, tokenOut, index);
(address token0,) = sortTokens(tokenIn, tokenOut);
if(tokenIn == token0)
output = IPair(pair).deposit0(to, input, minOutput, time);
else
output = IPair(pair).deposit1(to, input, minOutput, time);
}
/// @notice Deposit tokenIn
/// @param tokenIn Address of spent token
/// @param tokenOut Address of received token
/// @param index Number of pair instance
/// @param to Address that will receive Pair note
/// @param input Amount of tokenIn to deposit
/// @param minOutput Minimum amount of tokenOut expected to receive if the swap is perfromed
/// @param time Lock time
/// @return output Amount of tokenOut received if the swap is performed
function deposit(address tokenIn, address tokenOut, uint index, address to, uint input, uint minOutput, uint time) external returns (uint output) {
tokenIn.safeTransferFrom(msg.sender, address(this), input);
output = _deposit(tokenIn, tokenOut, index, to, input, minOutput, time);
}
/// @notice Deposit ETH
/// @param tokenOut Address of received token
/// @param index Number of pair instance
/// @param to Address that will receive Pair note
/// @param minOutput Minimum amount of tokenOut expected to receive if the swap is perfromed
/// @param time Lock time
/// @return output Amount of tokenOut received if the swap is performed
function depositETH(address tokenOut, uint index, address to, uint minOutput, uint time) external payable returns (uint output) {
IWETH(WETH).deposit{value: msg.value}();
return _deposit(WETH, tokenOut, index, to, msg.value, minOutput, time);
}
/// @notice Withdrw Pair note.
/// @param pair `Pair` contract address
/// @param index Index of the note to withdraw
/// @param to Address that will receive either token0 or token1
/// @return token0Amt Amount of token0 withdrawn
/// @return token1Amt Amount of token1 withdrawn
function withdraw(address pair, uint index, address to) external returns (uint token0Amt, uint token1Amt) {
return IPair(pair).withdrawFrom(msg.sender, index, to);
}
/// @notice Withdraw multiple Pair notes.
/// User who call this function must set approval for all position of each pair in advance
/// @param pairs array of `Pair` contract addresses
/// @param indexes array of index of the note to withdraw
/// @param tos array of address that will receive either token0 or token1
/// @return token0Amounts array of amount of token0 withdrawn
/// @return token1Amounts array of amount of token1 withdrawn
function withdrawMultiPositions(address[] calldata pairs, uint[] calldata indexes, address[] calldata tos) external returns (uint[] memory token0Amounts, uint[] memory token1Amounts) {
uint pairLength = pairs.length;
require(pairLength == indexes.length && pairLength == tos.length, "invalid input array length");
uint[] memory _token0Amounts = new uint[](pairLength);
uint[] memory _token1Amounts = new uint[](pairLength);
unchecked {
for (uint i = 0; i < pairLength; ++i) {
(uint token0Amount, uint token1Amount) = IPair(pairs[i]).withdrawFrom(msg.sender, indexes[i], tos[i]);
_token0Amounts[i] = token0Amount;
_token1Amounts[i] = token1Amount;
}
}
(token0Amounts, token1Amounts) = (_token0Amounts, _token1Amounts);
}
/// @notice Withdrw Pair note and if either token0 or token1 withdrawn is WETH, withdraw from WETH and send ETH to receiver.
/// User who signs the withdraw signature must be the one who calls this function
/// @param pair `Pair` contract address
/// @param index Index of the note to withdraw
/// @param to Address that will receive either token0 or token1
/// @return token0Amt Amount of token0 withdrawn
/// @return token1Amt Amount of token1 withdrawn
function withdrawETH(address pair, uint index, address to) external returns (uint token0Amt, uint token1Amt) {
(token0Amt, token1Amt) = IPair(pair).withdrawFrom(msg.sender, index, address(this));
address token0 = IPair(pair).token0();
address token = token0Amt > 0 ? token0 : IPair(pair).token1();
uint amount = token0Amt > 0 ? token0Amt : token1Amt;
if (token == WETH)
unwrapAndSendETH(to, amount);
else
token.safeTransfer(to, amount);
}
/// @notice Deposit sDYSON to gauge
/// @param gauge `Gauge` contract address
/// @param amount Amount of sDYSON to deposit
/// @param to Address that owns the position of this deposit
function depositToGauge(address gauge, uint amount, address to) external {
require(gauge != address(0), "invalid gauge");
require(amount > 0, "invalid amount");
sDYSON.safeTransferFrom(msg.sender, address(this), amount);
IGauge(gauge).deposit(amount, to);
}
/// @notice Stake DYSON to sDYSON
/// @param to Address that owns the position of this stake
/// @param amount Amount of DYSON to stake
/// @param lockDuration Lock duration
function stakeDyson(address to, uint amount, uint lockDuration) external returns (uint sDYSONAmount) {
require(amount > 0, "invalid amount");
DYSON.safeTransferFrom(msg.sender, address(this), amount);
sDYSONAmount = IsDYSON(sDYSON).stake(to, amount, lockDuration);
}
/// @notice Permits this contract to spend a given token from msg.sender
/// The owner is always msg.sender and the spender is always address(this).
/// @param token The address of the token spent
/// @param value The amount that can be spent of token
/// @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp
/// @param v Must produce valid secp256k1 signature from the holder along with r and s
/// @param r Must produce valid secp256k1 signature from the holder along with v and s
/// @param s Must produce valid secp256k1 signature from the holder along with v and r
function selfPermit(
address token,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public {
IERC20Permit(token).permit(msg.sender, address(this), value, deadline, v, r, s);
}
/// @notice Set approval for all position of a pair
/// User who signs the approval signature must be the one who calls this function
/// @param pair `Pair` contract address
/// @param approved True to approve, false to revoke
/// @param deadline Deadline when the signature expires
/// @param sig Signature
function setApprovalForAllWithSig(address pair, bool approved, uint deadline, bytes calldata sig) public {
IPair(pair).setApprovalForAllWithSig(msg.sender, address(this), approved, deadline, sig);
}
/// @notice Multi delegatecall without supporting payable
/// @param data Array of bytes of function calldata to be delegatecalled
function multicall(bytes[] calldata data) public returns (bytes[] memory results) {
uint dataLength = data.length;
results = new bytes[](dataLength);
for (uint256 i = 0; i < dataLength; ++i) {
(bool success, bytes memory result) = address(this).delegatecall(data[i]);
if (!success) {
if (result.length < 68) revert();
assembly {
result := add(result, 0x04)
}
revert(abi.decode(result, (string)));
}
results[i] = result;
}
}
/// @notice Calculate the price of token1 in token0
/// Formula:
/// amount1 = amount0 * reserve1 * sqrt(1-fee0) / reserve0 / sqrt(1-fee1)
/// which can be transformed to:
/// amount1 = sqrt( amount0**2 * (1-fee0) / (1-fee1) ) * reserve1 / reserve0
/// @param pair `Pair` contract address
/// @param token0Amt Amount of token0
/// @return token1Amt Amount of token1
function fairPrice(address pair, uint token0Amt) external view returns (uint token1Amt) {
(uint reserve0, uint reserve1) = IPair(pair).getReserves();
(uint64 _fee0, uint64 _fee1) = IPair(pair).getFeeRatio();
return (token0Amt**2 * (MAX_FEE_RATIO - _fee0) / (MAX_FEE_RATIO - _fee1)).sqrt() * reserve1 / reserve0;
}
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IPair {
event Swap(address indexed sender, bool indexed isSwap0, uint amountIn, uint amountOut, address indexed to);
event FeeCollected(uint token0Amt, uint token1Amt);
event Deposit(address indexed user, bool indexed isToken0, uint index, uint amountIn, uint token0Amt, uint token1Amt, uint due);
event Withdraw(address indexed user, bool indexed isToken0, uint index, uint amountOut);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
struct Note {
uint token0Amt;
uint token1Amt;
uint due;
}
function nonces() external view returns (uint);
function token0() external view returns (address);
function token1() external view returns (address);
function getFeeRatio() external view returns(uint64 _feeRatio0, uint64 _feeRatio1);
function getReserves() external view returns (uint reserve0, uint reserve1);
function deposit0(address to, uint input, uint minOutput, uint time) external returns (uint output);
function deposit1(address to, uint input, uint minOutput, uint time) external returns (uint output);
function swap0in(address to, uint input, uint minOutput) external returns (uint output);
function swap1in(address to, uint input, uint minOutput) external returns (uint output);
function withdraw(uint index, address to) external returns (uint token0Amt, uint token1Amt);
function halfLife() external view returns (uint64);
function calcNewFeeRatio(uint64 _oldFeeRatio, uint _elapsedTime) external view returns (uint64 _newFeeRatio);
function feeTo() external view returns (address);
function initialize(address _token0, address _token1) external;
function collectFee() external;
function DOMAIN_SEPARATOR() external view returns (bytes32);
function WITHDRAW_TYPEHASH() external pure returns (bytes32);
function factory() external view returns (address);
function farm() external view returns (address);
function basis() external view returns (uint);
function noteCount(address user) external view returns (uint);
function notes(address user, uint index) external view returns (Note memory);
function getPremium(uint time) external view returns (uint premium);
function setBasis(uint _basis) external;
function setHalfLife(uint64 _halfLife) external;
function setFarm(address _farm) external;
function setFeeTo(address _feeTo) external;
function rescueERC20(address tokenAddress, address to, uint256 amount) external;
function setApprovalForAllWithSig(address owner, address operator, bool approved, uint deadline, bytes calldata sig) external;
function setApprovalForAll(address operator, bool approved) external;
function operatorApprovals(address owner, address operator) external view returns (bool);
function withdrawFrom(address from, uint index, address to) external returns (uint token0Amts, uint token1Amts);
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
import "interface/IERC20.sol";
interface IWETH is IERC20 {
function deposit() external payable;
function withdraw(uint) external;
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IFactory {
event PairCreated(address indexed token0, address indexed token1, uint id, address pair, uint);
event GaugeCreated(address indexed poolId, address gauge);
event BribeCreated(address indexed gauge, address bribe);
function controller() external returns (address);
function pendingController() external returns (address);
function permissionless() external returns (bool);
function getPairCount(address token0, address token1) external view returns (uint);
function getPair(address token0, address token1, uint id) external view returns (address);
function allPairs(uint id) external view returns (address);
function allPairsLength() external view returns (uint);
function getInitCodeHash() external pure returns (bytes32);
function createPair(address tokenA, address tokenB) external returns (address pair);
function createGauge(address farm, address sgov, address poolId, uint weight, uint base, uint slope) external returns (address gauge);
function createBribe(address gauge) external returns (address bribe);
function setController(address _controller) external;
function becomeController() external;
function open2public() external;
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*
* CAUTION: See Security Considerations above.
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IGauge {
event TransferOwnership(address newOwner);
event Deposit(address indexed user, uint indexed week, uint amount);
event ApplyWithdrawal(address indexed user, uint indexed week, uint amount);
event Withdraw(address indexed user, uint amount);
struct Checkpoint {
uint week;
uint amount;
}
function farm() external view returns (address);
function SGOV() external view returns (address);
function poolId() external view returns (address);
function genesis() external view returns (uint);
function weight() external view returns (uint);
function totalSupply() external view returns (uint);
function base() external view returns (uint);
function slope() external view returns (uint);
function thisWeek() external view returns (uint);
function owner() external view returns (address);
function numCheckpoints(address account) external view returns (uint);
function checkpoints(address account, uint index) external view returns (uint week, uint amount);
function pendingWithdrawal(address account) external view returns (uint);
function weekToWithdraw(address account) external view returns (uint);
function transferOwnership(address _owner) external;
function rescueERC20(address tokenAddress, address to, uint256 amount) external;
function setParams(uint _weight, uint _base, uint _slope) external;
function balanceOf(address account) external view returns (uint);
function balanceOfAt(address account, uint week) external view returns (uint);
function totalSupplyAt(uint week) external view returns (uint);
function tick() external;
function nextRewardRate() external view returns (uint newRewardRate);
function deposit(uint amount, address to) external;
function applyWithdrawal(uint amount) external;
function withdraw() external returns (uint amount);
function bonus(address user) external view returns (uint _bonus);
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}pragma solidity >=0.8.0;
// SPDX-License-Identifier: MIT
interface IsDYSON {
event TransferOwnership(address newOwner);
event Transfer(address indexed from, address indexed to, uint amount);
event Approval(address indexed owner, address indexed spender, uint amount);
event Stake(address indexed vaultOwner, address indexed depositor, uint amount, uint sDysonAmount, uint time);
event Restake(address indexed vaultOwner, uint index, uint dysonAmountAdded, uint sDysonAmountAdded, uint time);
event Unstake(address indexed vaultOwner, address indexed receiver, uint amount, uint sDysonAmount);
event Migrate(address indexed vaultOwner, uint index);
struct Vault {
uint dysonAmount;
uint sDysonAmount;
uint unlockTime;
}
function initialRate() external view returns (uint);
function initialTime() external view returns (uint);
function stakingRate(uint lockDuration) external view returns (uint rate);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external view returns (bytes32);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function decimals() external view returns (uint8);
function Dyson() external view returns (address);
function owner() external view returns (address);
function migration() external view returns (address);
function totalSupply() external view returns (uint);
function currentModel() external view returns (address);
function balanceOf(address account) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function vaults(address vaultOwner, uint index) external view returns (uint dysonAmount, uint sDysonAmount, uint unlockTime);
function vaultCount(address vaultOwner) external view returns (uint);
function dysonAmountStaked(address account) external view returns (uint);
function votingPower(address account) external view returns (uint);
function nonces(address account) external view returns (uint);
function transferOwnership(address _owner) external;
function mint(address to, uint amount) external returns (bool);
function burn(uint amount) external returns (bool);
function approve(address spender, uint amount) external returns (bool);
function transfer(address to, uint amount) external returns (bool);
function transferFrom(address from, address to, uint amount) external returns (bool);
function getStakingRate(uint lockDuration) external view returns (uint rate);
function setStakingRateModel(address newModel) external;
function setMigration(address _migration) external;
function stake(address to, uint amount, uint lockDuration) external returns (uint sDysonAmount);
function restake(uint index, uint amount, uint lockDuration) external returns (uint sDysonAmountAdded);
function unstake(address to, uint index, uint sDysonAmount) external returns (uint amount);
function migrate(uint index) external;
function rescueERC20(address tokenAddress, address to, uint256 amount) external;
function permit(address _owner, address _spender, uint256 _amount, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) external;
}pragma solidity 0.8.17;
// SPDX-License-Identifier: AGPL-2.0
//https://github.com/Gaussian-Process/solidity-sqrt/blob/main/src/FixedPointMathLib.sol
library SqrtMath {
function sqrt(uint256 x) internal pure returns (uint256 z) {
assembly {
// This segment is to get a reasonable initial estimate for the Babylonian method.
// If the initial estimate is bad, the number of correct bits increases ~linearly
// each iteration instead of ~quadratically.
// The idea is to get z*z*y within a small factor of x.
// More iterations here gets y in a tighter range. Currently, we will have
// y in [256, 256*2^16). We ensure y>= 256 so that the relative difference
// between y and y+1 is small. If x < 256 this is not possible, but those cases
// are easy enough to verify exhaustively.
z := 181 // The 'correct' value is 1, but this saves a multiply later
let y := x
// Note that we check y>= 2^(k + 8) but shift right by k bits each branch,
// this is to ensure that if x >= 256, then y >= 256.
if iszero(lt(y, 0x10000000000000000000000000000000000)) {
y := shr(128, y)
z := shl(64, z)
}
if iszero(lt(y, 0x1000000000000000000)) {
y := shr(64, y)
z := shl(32, z)
}
if iszero(lt(y, 0x10000000000)) {
y := shr(32, y)
z := shl(16, z)
}
if iszero(lt(y, 0x1000000)) {
y := shr(16, y)
z := shl(8, z)
}
// Now, z*z*y <= x < z*z*(y+1), and y <= 2^(16+8),
// and either y >= 256, or x < 256.
// Correctness can be checked exhaustively for x < 256, so we assume y >= 256.
// Then z*sqrt(y) is within sqrt(257)/sqrt(256) of x, or about 20bps.
// The estimate sqrt(x) = (181/1024) * (x+1) is off by a factor of ~2.83 both when x=1
// and when x = 256 or 1/256. In the worst case, this needs seven Babylonian iterations.
z := shr(18, mul(z, add(y, 65536))) // A multiply is saved from the initial z := 181
// Run the Babylonian method seven times. This should be enough given initial estimate.
// Possibly with a quadratic/cubic polynomial above we could get 4-6.
z := shr(1, add(z, div(x, z)))
z := shr(1, add(z, div(x, z)))
z := shr(1, add(z, div(x, z)))
z := shr(1, add(z, div(x, z)))
z := shr(1, add(z, div(x, z)))
z := shr(1, add(z, div(x, z)))
z := shr(1, add(z, div(x, z)))
// See https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division.
// If x+1 is a perfect square, the Babylonian method cycles between
// floor(sqrt(x)) and ceil(sqrt(x)). This check ensures we return floor.
// The solmate implementation assigns zRoundDown := div(x, z) first, but
// since this case is rare, we choose to save gas on the assignment and
// repeat division in the rare case.
// If you don't care whether floor or ceil is returned, you can skip this.
if lt(div(x, z), z) {
z := div(x, z)
}
}
}
}pragma solidity 0.8.17;
// SPDX-License-Identifier: AGPL-2.0
library TransferHelper {
function safeApprove(address token, address to, uint 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: approve failed');
}
function safeTransfer(address token, address to, uint 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: transfer failed');
}
function safeTransferFrom(address token, address from, address to, uint 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 failed');
}
function safeTransferETH(address to, uint value) internal {
(bool success,) = to.call{value:value}(new bytes(0));
require(success, 'transferHelper: ETH transfer failed');
}
}{
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"interface/=src/interface/",
"util/=src/util/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"openzeppelin/=lib/openzeppelin-contracts/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_sDYSON","type":"address"},{"internalType":"address","name":"_DYSON","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferOwnership","type":"event"},{"inputs":[],"name":"CODE_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSON","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYSON_FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"depositETH","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"gauge","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositToGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"token0Amt","type":"uint256"}],"name":"fairPrice","outputs":[{"internalType":"uint256","name":"token1Amt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sDYSON","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"setApprovalForAllWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockDuration","type":"uint256"}],"name":"stakeDyson","outputs":[{"internalType":"uint256","name":"sDYSONAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapETHIn","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapETHInWithMultiHops","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapETHOut","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapETHOutWithMultiHops","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"swapWithMultiHops","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"token0Amt","type":"uint256"},{"internalType":"uint256","name":"token1Amt","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawETH","outputs":[{"internalType":"uint256","name":"token0Amt","type":"uint256"},{"internalType":"uint256","name":"token1Amt","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"address[]","name":"tos","type":"address[]"}],"name":"withdrawMultiPositions","outputs":[{"internalType":"uint256[]","name":"token0Amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"token1Amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6101206040523480156200001257600080fd5b506040516200315c3803806200315c83398101604081905262000035916200019d565b6001600160a01b038416620000915760405162461bcd60e51b815260206004820152601460248201527f6f776e65722063616e6e6f74206265207a65726f00000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038516620000d85760405162461bcd60e51b815260206004820152600c60248201526b0d2dcecc2d8d2c840ae8aa8960a31b604482015260640162000088565b6001600160a01b03858116608052600080546001600160a01b03191686831617905583811660a081905283821660c05290821660e05260408051635431927d60e01b81529051635431927d916004808201926020929091908290030181865afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017091906200020d565b6101005250620002279350505050565b80516001600160a01b03811681146200019857600080fd5b919050565b600080600080600060a08688031215620001b657600080fd5b620001c18662000180565b9450620001d16020870162000180565b9350620001e16040870162000180565b9250620001f16060870162000180565b9150620002016080870162000180565b90509295509295909350565b6000602082840312156200022057600080fd5b5051919050565b60805160a05160c05160e05161010051612e72620002ea6000396000818161021e0152818161190c0152611e1801526000818161050901526109fe0152600081816104d501528181610a53015261114d015260008181610272015281816118eb0152611df701526000818161019501528181610441015281816105d9015281816106810152818161082701528181610afa0152818161134e015281816113b70152818161142e01528181611847015281816118be0152611bad0152612e726000f3fe6080604052600436106101855760003560e01c80638865305b116100d1578063d29f14091161008a578063f2fde38b11610064578063f2fde38b1461052b578063f3995c671461054b578063f5eacc2f1461056b578063fecc1b9f1461058b57600080fd5b8063d29f1409146104a3578063e14e8526146104c3578063e4021087146104f757600080fd5b80638865305b146103cf5780638da5cb5b146103e2578063ac9650d814610402578063ad5c46481461042f578063b2118a8d14610463578063c58b6a101461048357600080fd5b8063687a0b101161013e5780636d48058e116101185780636d48058e1461034f5780637129b6401461036f5780637c8d5f3b1461038f57806380500d20146103af57600080fd5b8063687a0b10146102cc57806369328dec146102ec5780636d3a957c1461032157600080fd5b806301c838fe146101c65780630cd19cbe146101ec5780630dff11651461020c57806312713bd214610240578063429d9b1d14610260578063505ce69e146102ac57600080fd5b366101c157336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101bf57600080fd5b005b600080fd5b6101d96101d436600461234f565b61059e565b6040519081526020015b60405180910390f35b3480156101f857600080fd5b506101d96102073660046123da565b61080a565b34801561021857600080fd5b506101d97f000000000000000000000000000000000000000000000000000000000000000081565b34801561024c57600080fd5b506101d961025b36600461242c565b610864565b34801561026c57600080fd5b506102947f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e3565b3480156102b857600080fd5b506101d96102c7366004612458565b6109af565b3480156102d857600080fd5b506101d96102e736600461248d565b610ac8565b3480156102f857600080fd5b5061030c610307366004612522565b610cef565b604080519283526020830191909152016101e3565b34801561032d57600080fd5b5061034161033c366004612564565b610d78565b6040516101e3929190612638565b34801561035b57600080fd5b506101d961036a36600461248d565b610f8b565b34801561037b57600080fd5b506101d961038a36600461265d565b611089565b34801561039b57600080fd5b506101bf6103aa366004612522565b6110b9565b3480156103bb57600080fd5b5061030c6103ca366004612522565b6111dc565b6101d96103dd3660046123da565b6113b3565b3480156103ee57600080fd5b50600054610294906001600160a01b031681565b34801561040e57600080fd5b5061042261041d3660046126c2565b611462565b6040516101e39190612753565b34801561043b57600080fd5b506102947f000000000000000000000000000000000000000000000000000000000000000081565b34801561046f57600080fd5b506101bf61047e3660046127b5565b6115b9565b34801561048f57600080fd5b506101bf61049e366004612804565b6115fc565b3480156104af57600080fd5b506101d96104be366004612844565b61164b565b3480156104cf57600080fd5b506102947f000000000000000000000000000000000000000000000000000000000000000081565b34801561050357600080fd5b506102947f000000000000000000000000000000000000000000000000000000000000000081565b34801561053757600080fd5b506101bf6105463660046128b2565b61167d565b34801561055757600080fd5b506101bf6105663660046128d6565b611748565b34801561057757600080fd5b506101bf61058636600461291e565b6117d4565b6101d96105993660046129bc565b611843565b60008380158015906105b257506001810187145b6105d75760405162461bcd60e51b81526004016105ce90612a04565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168888600081811061061457610614612a3b565b905060200201602081019061062991906128b2565b6001600160a01b03161461067f5760405162461bcd60e51b815260206004820152601860248201527f666972737420746f6b656e206d7573742062652057455448000000000000000060448201526064016105ce565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b503493506001925050505b828110156107845761077a8a8a6001840381811061071957610719612a3b565b905060200201602081019061072e91906128b2565b8b8b8481811061074057610740612a3b565b905060200201602081019061075591906128b2565b8a8a6001860381811061076a5761076a612a3b565b90506020020135308660006118e3565b91506001016106f9565b6107fc8a8a6001840381811061079c5761079c612a3b565b90506020020160208101906107b191906128b2565b8b8b848181106107c3576107c3612a3b565b90506020020160208101906107d891906128b2565b8a8a600186038181106107ed576107ed612a3b565b9050602002013589868a6118e3565b9a9950505050505050505050565b60006108216001600160a01b038716333086611a67565b61084f867f0000000000000000000000000000000000000000000000000000000000000000873087876118e3565b905061085b8482611b97565b95945050505050565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190612a51565b91509150600080866001600160a01b03166359362b886040518163ffffffff1660e01b81526004016040805180830381865afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109329190612a8c565b9092509050838361098e6109536001600160401b038516600160401b612ad5565b61096a6001600160401b038716600160401b612ad5565b61097560028c612bcc565b61097f9190612bdb565b6109899190612bf2565b611c29565b6109989190612bdb565b6109a29190612bf2565b9450505050505b92915050565b60008083116109f15760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b60448201526064016105ce565b610a266001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086611a67565b604051630c51b88f60e01b81526001600160a01b03858116600483015260248201859052604482018490527f00000000000000000000000000000000000000000000000000000000000000001690630c51b88f906064016020604051808303816000875af1158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac09190612c14565b949350505050565b6000848015801590610adc57506001810188145b610af85760405162461bcd60e51b81526004016105ce90612a04565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316898983818110610b3457610b34612a3b565b9050602002016020810190610b4991906128b2565b6001600160a01b031614610b9f5760405162461bcd60e51b815260206004820152601760248201527f6c61737420746f6b656e206d757374206265205745544800000000000000000060448201526064016105ce565b610bde3330868c8c6000818110610bb857610bb8612a3b565b9050602002016020810190610bcd91906128b2565b6001600160a01b0316929190611a67565b8360015b82811015610c5d57610c538b8b60018403818110610c0257610c02612a3b565b9050602002016020810190610c1791906128b2565b8c8c84818110610c2957610c29612a3b565b9050602002016020810190610c3e91906128b2565b8b8b6001860381811061076a5761076a612a3b565b9150600101610be2565b610cd58b8b60018403818110610c7557610c75612a3b565b9050602002016020810190610c8a91906128b2565b8c8c84818110610c9c57610c9c612a3b565b9050602002016020810190610cb191906128b2565b8b8b60018603818110610cc657610cc6612a3b565b9050602002013530868a6118e3565b9350610ce18785611b97565b505050979650505050505050565b60405163e162402f60e01b8152336004820152602481018390526001600160a01b038281166044830152600091829186169063e162402f9060640160408051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c9190612a51565b91509150935093915050565b606080868581148015610d8a57508084145b610da65760405162461bcd60e51b81526004016105ce90612a04565b6000816001600160401b03811115610dc057610dc0612c2d565b604051908082528060200260200182016040528015610de9578160200160208202803683370190505b5090506000826001600160401b03811115610e0657610e06612c2d565b604051908082528060200260200182016040528015610e2f578160200160208202803683370190505b50905060005b83811015610f7a576000808d8d84818110610e5257610e52612a3b565b9050602002016020810190610e6791906128b2565b6001600160a01b031663e162402f338e8e87818110610e8857610e88612a3b565b905060200201358d8d88818110610ea157610ea1612a3b565b9050602002016020810190610eb691906128b2565b60405160e085901b6001600160e01b03191681526001600160a01b0393841660048201526024810192909252909116604482015260640160408051808303816000875af1158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190612a51565b9150915081858481518110610f4657610f46612a3b565b60200260200101818152505080848481518110610f6557610f65612a3b565b60209081029190910101525050600101610e35565b50909a909950975050505050505050565b6000848015801590610f9f57506001810188145b610fbb5760405162461bcd60e51b81526004016105ce90612a04565b610fd43330868c8c6000818110610bb857610bb8612a3b565b8360015b8281101561100257610ff88b8b60018403818110610c0257610c02612a3b565b9150600101610fd8565b61107a8b8b6001840381811061101a5761101a612a3b565b905060200201602081019061102f91906128b2565b8c8c8481811061104157611041612a3b565b905060200201602081019061105691906128b2565b8b8b6001860381811061106b5761106b612a3b565b905060200201358a868a6118e3565b9b9a5050505050505050505050565b60006110a06001600160a01b038816333086611a67565b6110ae8787878787876118e3565b979650505050505050565b6001600160a01b0383166110ff5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420676175676560981b60448201526064016105ce565b600082116111405760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b60448201526064016105ce565b6111756001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085611a67565b604051636e553f6560e01b8152600481018390526001600160a01b038281166024830152841690636e553f6590604401600060405180830381600087803b1580156111bf57600080fd5b505af11580156111d3573d6000803e3d6000fd5b50505050505050565b60405163e162402f60e01b81523360048201526024810183905230604482015260009081906001600160a01b0386169063e162402f9060640160408051808303816000875af1158015611233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112579190612a51565b80925081935050506000856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561129f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c39190612c43565b9050600080841161133557866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113309190612c43565b611337565b815b90506000808511611348578361134a565b845b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113945761138f8682611b97565b6113a8565b6113a86001600160a01b0383168783611cd4565b505050935093915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b50505050506114587f0000000000000000000000000000000000000000000000000000000000000000878787348888611def565b9695505050505050565b606081806001600160401b0381111561147d5761147d612c2d565b6040519080825280602002602001820160405280156114b057816020015b606081526020019060019003908161149b5790505b50915060005b818110156115b157600080308787858181106114d4576114d4612a3b565b90506020028101906114e69190612c60565b6040516114f4929190612ca6565b600060405180830381855af49150503d806000811461152f576040519150601f19603f3d011682016040523d82523d6000602084013e611534565b606091505b5091509150816115805760448151101561154d57600080fd5b600481019050808060200190518101906115679190612cb6565b60405162461bcd60e51b81526004016105ce9190612d57565b8085848151811061159357611593612a3b565b60200260200101819052505050806115aa90612d6a565b90506114b6565b505092915050565b6000546001600160a01b031633146115e35760405162461bcd60e51b81526004016105ce90612d83565b6115f76001600160a01b0384168383611cd4565b505050565b6000546001600160a01b031633146116265760405162461bcd60e51b81526004016105ce90612d83565b6115f7828261163657600061163a565b6000195b6001600160a01b0386169190611f82565b60006116626001600160a01b038916333087611a67565b61167188888888888888611def565b98975050505050505050565b6000546001600160a01b031633146116a75760405162461bcd60e51b81526004016105ce90612d83565b6001600160a01b0381166116f45760405162461bcd60e51b81526020600482015260146024820152736f776e65722063616e6e6f74206265207a65726f60601b60448201526064016105ce565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49060200160405180910390a150565b60405163d505accf60e01b8152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e401600060405180830381600087803b1580156117b457600080fd5b505af11580156117c8573d6000803e3d6000fd5b50505050505050505050565b604051631edfa7eb60e21b81526001600160a01b03861690637b7e9fac9061180a90339030908990899089908990600401612da6565b600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118a057600080fd5b505af11580156118b4573d6000803e3d6000fd5b505050505061085b7f000000000000000000000000000000000000000000000000000000000000000086868634875b6000806119337f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a8a8a612096565b90506000611941898961215c565b509050806001600160a01b0316896001600160a01b0316036119de5760405163a9d9db4d60e01b81526001600160a01b038781166004830152602482018790526044820186905283169063a9d9db4d906064016020604051808303816000875af11580156119b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d79190612c14565b9250611a5b565b6040516353d56bf560e01b81526001600160a01b03878116600483015260248201879052604482018690528316906353d56bf5906064016020604051808303816000875af1158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a589190612c14565b92505b50509695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611acb9190612e03565b6000604051808303816000865af19150503d8060008114611b08576040519150601f19603f3d011682016040523d82523d6000602084013e611b0d565b606091505b5091509150818015611b37575080511580611b37575080806020019051810190611b379190612e1f565b611b8f5760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657248656c7065723a207472616e7366657246726f6d206661696044820152621b195960ea1b60648201526084016105ce565b505050505050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611bf957600080fd5b505af1158015611c0d573d6000803e3d6000fd5b50611c25925050506001600160a01b0383168261222a565b5050565b60b581600160881b8110611c425760409190911b9060801c5b69010000000000000000008110611c5e5760209190911b9060401c5b650100000000008110611c765760109190911b9060201c5b63010000008110611c8c5760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c808204811115611ccf5781045b919050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611d309190612e03565b6000604051808303816000865af19150503d8060008114611d6d576040519150601f19603f3d011682016040523d82523d6000602084013e611d72565b606091505b5091509150818015611d9c575080511580611d9c575080806020019051810190611d9c9190612e1f565b611de85760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657248656c7065723a207472616e73666572206661696c65640060448201526064016105ce565b5050505050565b600080611e3f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b8b8b612096565b90506000611e4d8a8a61215c565b509050806001600160a01b03168a6001600160a01b031603611ef157604051633851850760e21b81526001600160a01b03888116600483015260248201889052604482018790526064820186905283169063e146141c906084016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190612c14565b9250611f75565b60405163186b30c760e11b81526001600160a01b0388811660048301526024820188905260448201879052606482018690528316906330d6618e906084016020604051808303816000875af1158015611f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f729190612c14565b92505b5050979650505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691611fde9190612e03565b6000604051808303816000865af19150503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b509150915081801561204a57508051158061204a57508080602001905181019061204a9190612e1f565b611de85760405162461bcd60e51b815260206004820152601e60248201527f7472616e7366657248656c7065723a20617070726f7665206661696c6564000060448201526064016105ce565b60008060006120a5868661215c565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015260488101879052919350915088906068016040516020818303038152906040528051906020012088604051602001612138939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f19818403018152919052805160209091012098975050505050505050565b600080826001600160a01b0316846001600160a01b0316036121b65760405162461bcd60e51b81526020600482015260136024820152726964656e746963616c2061646472657373657360681b60448201526064016105ce565b826001600160a01b0316846001600160a01b0316106121d65782846121d9565b83835b90925090506001600160a01b0382166122235760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016105ce565b9250929050565b604080516000808252602082019092526001600160a01b0384169083906040516122549190612e03565b60006040518083038185875af1925050503d8060008114612291576040519150601f19603f3d011682016040523d82523d6000602084013e612296565b606091505b50509050806115f75760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657248656c7065723a20455448207472616e73666572206661696044820152621b195960ea1b60648201526084016105ce565b60008083601f84011261230557600080fd5b5081356001600160401b0381111561231c57600080fd5b6020830191508360208260051b850101111561222357600080fd5b6001600160a01b038116811461234c57600080fd5b50565b6000806000806000806080878903121561236857600080fd5b86356001600160401b038082111561237f57600080fd5b61238b8a838b016122f3565b909850965060208901359150808211156123a457600080fd5b506123b189828a016122f3565b90955093505060408701356123c581612337565b80925050606087013590509295509295509295565b600080600080600060a086880312156123f257600080fd5b85356123fd81612337565b945060208601359350604086013561241481612337565b94979396509394606081013594506080013592915050565b6000806040838503121561243f57600080fd5b823561244a81612337565b946020939093013593505050565b60008060006060848603121561246d57600080fd5b833561247881612337565b95602085013595506040909401359392505050565b600080600080600080600060a0888a0312156124a857600080fd5b87356001600160401b03808211156124bf57600080fd5b6124cb8b838c016122f3565b909950975060208a01359150808211156124e457600080fd5b506124f18a828b016122f3565b909650945050604088013561250581612337565b969995985093969295946060840135945060809093013592915050565b60008060006060848603121561253757600080fd5b833561254281612337565b925060208401359150604084013561255981612337565b809150509250925092565b6000806000806000806060878903121561257d57600080fd5b86356001600160401b038082111561259457600080fd5b6125a08a838b016122f3565b909850965060208901359150808211156125b957600080fd5b6125c58a838b016122f3565b909650945060408901359150808211156125de57600080fd5b506125eb89828a016122f3565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b8381101561262d57815187529582019590820190600101612611565b509495945050505050565b60408152600061264b60408301856125fd565b828103602084015261085b81856125fd565b60008060008060008060c0878903121561267657600080fd5b863561268181612337565b9550602087013561269181612337565b94506040870135935060608701356126a881612337565b9598949750929560808101359460a0909101359350915050565b600080602083850312156126d557600080fd5b82356001600160401b038111156126eb57600080fd5b6126f7858286016122f3565b90969095509350505050565b60005b8381101561271e578181015183820152602001612706565b50506000910152565b6000815180845261273f816020860160208601612703565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156127a857603f19888603018452612796858351612727565b9450928501929085019060010161277a565b5092979650505050505050565b6000806000606084860312156127ca57600080fd5b83356127d581612337565b925060208401356127e581612337565b929592945050506040919091013590565b801515811461234c57600080fd5b60008060006060848603121561281957600080fd5b833561282481612337565b9250602084013561283481612337565b91506040840135612559816127f6565b600080600080600080600060e0888a03121561285f57600080fd5b873561286a81612337565b9650602088013561287a81612337565b955060408801359450606088013561289181612337565b9699959850939660808101359560a0820135955060c0909101359350915050565b6000602082840312156128c457600080fd5b81356128cf81612337565b9392505050565b60008060008060008060c087890312156128ef57600080fd5b86356128fa81612337565b95506020870135945060408701359350606087013560ff811681146126a857600080fd5b60008060008060006080868803121561293657600080fd5b853561294181612337565b94506020860135612951816127f6565b93506040860135925060608601356001600160401b038082111561297457600080fd5b818801915088601f83011261298857600080fd5b81358181111561299757600080fd5b8960208285010111156129a957600080fd5b9699959850939650602001949392505050565b600080600080608085870312156129d257600080fd5b84356129dd81612337565b93506020850135925060408501356129f481612337565b9396929550929360600135925050565b6020808252601a908201527f696e76616c696420696e707574206172726179206c656e677468000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008060408385031215612a6457600080fd5b505080516020909101519092909150565b80516001600160401b0381168114611ccf57600080fd5b60008060408385031215612a9f57600080fd5b612aa883612a75565b9150612ab660208401612a75565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b818103818111156109a9576109a9612abf565b600181815b80851115612b23578160001904821115612b0957612b09612abf565b80851615612b1657918102915b93841c9390800290612aed565b509250929050565b600082612b3a575060016109a9565b81612b47575060006109a9565b8160018114612b5d5760028114612b6757612b83565b60019150506109a9565b60ff841115612b7857612b78612abf565b50506001821b6109a9565b5060208310610133831016604e8410600b8410161715612ba6575081810a6109a9565b612bb08383612ae8565b8060001904821115612bc457612bc4612abf565b029392505050565b60006128cf60ff841683612b2b565b80820281158282048414176109a9576109a9612abf565b600082612c0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c2657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612c5557600080fd5b81516128cf81612337565b6000808335601e19843603018112612c7757600080fd5b8301803591506001600160401b03821115612c9157600080fd5b60200191503681900382131561222357600080fd5b8183823760009101908152919050565b600060208284031215612cc857600080fd5b81516001600160401b0380821115612cdf57600080fd5b818401915084601f830112612cf357600080fd5b815181811115612d0557612d05612c2d565b604051601f8201601f19908116603f01168101908382118183101715612d2d57612d2d612c2d565b81604052828152876020848701011115612d4657600080fd5b6110ae836020830160208801612703565b6020815260006128cf6020830184612727565b600060018201612d7c57612d7c612abf565b5060010190565b6020808252600990820152683337b93134b23232b760b91b604082015260600190565b6001600160a01b0387811682528616602082015284151560408201526060810184905260a06080820181905281018290526000828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b60008251612e15818460208701612703565b9190910192915050565b600060208284031215612e3157600080fd5b81516128cf816127f656fea2646970667358221220b600e17299239c5f8fc5ec116dce94c4a7936e2f959c0bdb7dcca49f4625ad3364736f6c63430008110033000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f0000000000000000000000007e6d097a7d948454ea253d3610bd93bb9c508b3a000000000000000000000000ecd30c099c222abffdaf3e2a3d2455fc8e8c739e000000000000000000000000e3a39d3668c929421d3bef4f00e0cdbf42afd57d00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b83
Deployed Bytecode
0x6080604052600436106101855760003560e01c80638865305b116100d1578063d29f14091161008a578063f2fde38b11610064578063f2fde38b1461052b578063f3995c671461054b578063f5eacc2f1461056b578063fecc1b9f1461058b57600080fd5b8063d29f1409146104a3578063e14e8526146104c3578063e4021087146104f757600080fd5b80638865305b146103cf5780638da5cb5b146103e2578063ac9650d814610402578063ad5c46481461042f578063b2118a8d14610463578063c58b6a101461048357600080fd5b8063687a0b101161013e5780636d48058e116101185780636d48058e1461034f5780637129b6401461036f5780637c8d5f3b1461038f57806380500d20146103af57600080fd5b8063687a0b10146102cc57806369328dec146102ec5780636d3a957c1461032157600080fd5b806301c838fe146101c65780630cd19cbe146101ec5780630dff11651461020c57806312713bd214610240578063429d9b1d14610260578063505ce69e146102ac57600080fd5b366101c157336001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16146101bf57600080fd5b005b600080fd5b6101d96101d436600461234f565b61059e565b6040519081526020015b60405180910390f35b3480156101f857600080fd5b506101d96102073660046123da565b61080a565b34801561021857600080fd5b506101d97f5732d698e38d6b60fe8360cbe25cbfdd2a1de322fc5da7b8e028ef32976f470181565b34801561024c57600080fd5b506101d961025b36600461242c565b610864565b34801561026c57600080fd5b506102947f000000000000000000000000ecd30c099c222abffdaf3e2a3d2455fc8e8c739e81565b6040516001600160a01b0390911681526020016101e3565b3480156102b857600080fd5b506101d96102c7366004612458565b6109af565b3480156102d857600080fd5b506101d96102e736600461248d565b610ac8565b3480156102f857600080fd5b5061030c610307366004612522565b610cef565b604080519283526020830191909152016101e3565b34801561032d57600080fd5b5061034161033c366004612564565b610d78565b6040516101e3929190612638565b34801561035b57600080fd5b506101d961036a36600461248d565b610f8b565b34801561037b57600080fd5b506101d961038a36600461265d565b611089565b34801561039b57600080fd5b506101bf6103aa366004612522565b6110b9565b3480156103bb57600080fd5b5061030c6103ca366004612522565b6111dc565b6101d96103dd3660046123da565b6113b3565b3480156103ee57600080fd5b50600054610294906001600160a01b031681565b34801561040e57600080fd5b5061042261041d3660046126c2565b611462565b6040516101e39190612753565b34801561043b57600080fd5b506102947f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b34801561046f57600080fd5b506101bf61047e3660046127b5565b6115b9565b34801561048f57600080fd5b506101bf61049e366004612804565b6115fc565b3480156104af57600080fd5b506101d96104be366004612844565b61164b565b3480156104cf57600080fd5b506102947f000000000000000000000000e3a39d3668c929421d3bef4f00e0cdbf42afd57d81565b34801561050357600080fd5b506102947f00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b8381565b34801561053757600080fd5b506101bf6105463660046128b2565b61167d565b34801561055757600080fd5b506101bf6105663660046128d6565b611748565b34801561057757600080fd5b506101bf61058636600461291e565b6117d4565b6101d96105993660046129bc565b611843565b60008380158015906105b257506001810187145b6105d75760405162461bcd60e51b81526004016105ce90612a04565b60405180910390fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b03168888600081811061061457610614612a3b565b905060200201602081019061062991906128b2565b6001600160a01b03161461067f5760405162461bcd60e51b815260206004820152601860248201527f666972737420746f6b656e206d7573742062652057455448000000000000000060448201526064016105ce565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b503493506001925050505b828110156107845761077a8a8a6001840381811061071957610719612a3b565b905060200201602081019061072e91906128b2565b8b8b8481811061074057610740612a3b565b905060200201602081019061075591906128b2565b8a8a6001860381811061076a5761076a612a3b565b90506020020135308660006118e3565b91506001016106f9565b6107fc8a8a6001840381811061079c5761079c612a3b565b90506020020160208101906107b191906128b2565b8b8b848181106107c3576107c3612a3b565b90506020020160208101906107d891906128b2565b8a8a600186038181106107ed576107ed612a3b565b9050602002013589868a6118e3565b9a9950505050505050505050565b60006108216001600160a01b038716333086611a67565b61084f867f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f873087876118e3565b905061085b8482611b97565b95945050505050565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190612a51565b91509150600080866001600160a01b03166359362b886040518163ffffffff1660e01b81526004016040805180830381865afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109329190612a8c565b9092509050838361098e6109536001600160401b038516600160401b612ad5565b61096a6001600160401b038716600160401b612ad5565b61097560028c612bcc565b61097f9190612bdb565b6109899190612bf2565b611c29565b6109989190612bdb565b6109a29190612bf2565b9450505050505b92915050565b60008083116109f15760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b60448201526064016105ce565b610a266001600160a01b037f00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b8316333086611a67565b604051630c51b88f60e01b81526001600160a01b03858116600483015260248201859052604482018490527f000000000000000000000000e3a39d3668c929421d3bef4f00e0cdbf42afd57d1690630c51b88f906064016020604051808303816000875af1158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac09190612c14565b949350505050565b6000848015801590610adc57506001810188145b610af85760405162461bcd60e51b81526004016105ce90612a04565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316898983818110610b3457610b34612a3b565b9050602002016020810190610b4991906128b2565b6001600160a01b031614610b9f5760405162461bcd60e51b815260206004820152601760248201527f6c61737420746f6b656e206d757374206265205745544800000000000000000060448201526064016105ce565b610bde3330868c8c6000818110610bb857610bb8612a3b565b9050602002016020810190610bcd91906128b2565b6001600160a01b0316929190611a67565b8360015b82811015610c5d57610c538b8b60018403818110610c0257610c02612a3b565b9050602002016020810190610c1791906128b2565b8c8c84818110610c2957610c29612a3b565b9050602002016020810190610c3e91906128b2565b8b8b6001860381811061076a5761076a612a3b565b9150600101610be2565b610cd58b8b60018403818110610c7557610c75612a3b565b9050602002016020810190610c8a91906128b2565b8c8c84818110610c9c57610c9c612a3b565b9050602002016020810190610cb191906128b2565b8b8b60018603818110610cc657610cc6612a3b565b9050602002013530868a6118e3565b9350610ce18785611b97565b505050979650505050505050565b60405163e162402f60e01b8152336004820152602481018390526001600160a01b038281166044830152600091829186169063e162402f9060640160408051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c9190612a51565b91509150935093915050565b606080868581148015610d8a57508084145b610da65760405162461bcd60e51b81526004016105ce90612a04565b6000816001600160401b03811115610dc057610dc0612c2d565b604051908082528060200260200182016040528015610de9578160200160208202803683370190505b5090506000826001600160401b03811115610e0657610e06612c2d565b604051908082528060200260200182016040528015610e2f578160200160208202803683370190505b50905060005b83811015610f7a576000808d8d84818110610e5257610e52612a3b565b9050602002016020810190610e6791906128b2565b6001600160a01b031663e162402f338e8e87818110610e8857610e88612a3b565b905060200201358d8d88818110610ea157610ea1612a3b565b9050602002016020810190610eb691906128b2565b60405160e085901b6001600160e01b03191681526001600160a01b0393841660048201526024810192909252909116604482015260640160408051808303816000875af1158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190612a51565b9150915081858481518110610f4657610f46612a3b565b60200260200101818152505080848481518110610f6557610f65612a3b565b60209081029190910101525050600101610e35565b50909a909950975050505050505050565b6000848015801590610f9f57506001810188145b610fbb5760405162461bcd60e51b81526004016105ce90612a04565b610fd43330868c8c6000818110610bb857610bb8612a3b565b8360015b8281101561100257610ff88b8b60018403818110610c0257610c02612a3b565b9150600101610fd8565b61107a8b8b6001840381811061101a5761101a612a3b565b905060200201602081019061102f91906128b2565b8c8c8481811061104157611041612a3b565b905060200201602081019061105691906128b2565b8b8b6001860381811061106b5761106b612a3b565b905060200201358a868a6118e3565b9b9a5050505050505050505050565b60006110a06001600160a01b038816333086611a67565b6110ae8787878787876118e3565b979650505050505050565b6001600160a01b0383166110ff5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420676175676560981b60448201526064016105ce565b600082116111405760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b60448201526064016105ce565b6111756001600160a01b037f000000000000000000000000e3a39d3668c929421d3bef4f00e0cdbf42afd57d16333085611a67565b604051636e553f6560e01b8152600481018390526001600160a01b038281166024830152841690636e553f6590604401600060405180830381600087803b1580156111bf57600080fd5b505af11580156111d3573d6000803e3d6000fd5b50505050505050565b60405163e162402f60e01b81523360048201526024810183905230604482015260009081906001600160a01b0386169063e162402f9060640160408051808303816000875af1158015611233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112579190612a51565b80925081935050506000856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561129f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c39190612c43565b9050600080841161133557866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113309190612c43565b611337565b815b90506000808511611348578361134a565b845b90507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316826001600160a01b0316036113945761138f8682611b97565b6113a8565b6113a86001600160a01b0383168783611cd4565b505050935093915050565b60007f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b50505050506114587f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f878787348888611def565b9695505050505050565b606081806001600160401b0381111561147d5761147d612c2d565b6040519080825280602002602001820160405280156114b057816020015b606081526020019060019003908161149b5790505b50915060005b818110156115b157600080308787858181106114d4576114d4612a3b565b90506020028101906114e69190612c60565b6040516114f4929190612ca6565b600060405180830381855af49150503d806000811461152f576040519150601f19603f3d011682016040523d82523d6000602084013e611534565b606091505b5091509150816115805760448151101561154d57600080fd5b600481019050808060200190518101906115679190612cb6565b60405162461bcd60e51b81526004016105ce9190612d57565b8085848151811061159357611593612a3b565b60200260200101819052505050806115aa90612d6a565b90506114b6565b505092915050565b6000546001600160a01b031633146115e35760405162461bcd60e51b81526004016105ce90612d83565b6115f76001600160a01b0384168383611cd4565b505050565b6000546001600160a01b031633146116265760405162461bcd60e51b81526004016105ce90612d83565b6115f7828261163657600061163a565b6000195b6001600160a01b0386169190611f82565b60006116626001600160a01b038916333087611a67565b61167188888888888888611def565b98975050505050505050565b6000546001600160a01b031633146116a75760405162461bcd60e51b81526004016105ce90612d83565b6001600160a01b0381166116f45760405162461bcd60e51b81526020600482015260146024820152736f776e65722063616e6e6f74206265207a65726f60601b60448201526064016105ce565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49060200160405180910390a150565b60405163d505accf60e01b8152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e401600060405180830381600087803b1580156117b457600080fd5b505af11580156117c8573d6000803e3d6000fd5b50505050505050505050565b604051631edfa7eb60e21b81526001600160a01b03861690637b7e9fac9061180a90339030908990899089908990600401612da6565b600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b505050505050505050565b60007f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118a057600080fd5b505af11580156118b4573d6000803e3d6000fd5b505050505061085b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f86868634875b6000806119337f000000000000000000000000ecd30c099c222abffdaf3e2a3d2455fc8e8c739e7f5732d698e38d6b60fe8360cbe25cbfdd2a1de322fc5da7b8e028ef32976f47018a8a8a612096565b90506000611941898961215c565b509050806001600160a01b0316896001600160a01b0316036119de5760405163a9d9db4d60e01b81526001600160a01b038781166004830152602482018790526044820186905283169063a9d9db4d906064016020604051808303816000875af11580156119b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d79190612c14565b9250611a5b565b6040516353d56bf560e01b81526001600160a01b03878116600483015260248201879052604482018690528316906353d56bf5906064016020604051808303816000875af1158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a589190612c14565b92505b50509695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611acb9190612e03565b6000604051808303816000865af19150503d8060008114611b08576040519150601f19603f3d011682016040523d82523d6000602084013e611b0d565b606091505b5091509150818015611b37575080511580611b37575080806020019051810190611b379190612e1f565b611b8f5760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657248656c7065723a207472616e7366657246726f6d206661696044820152621b195960ea1b60648201526084016105ce565b505050505050565b604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611bf957600080fd5b505af1158015611c0d573d6000803e3d6000fd5b50611c25925050506001600160a01b0383168261222a565b5050565b60b581600160881b8110611c425760409190911b9060801c5b69010000000000000000008110611c5e5760209190911b9060401c5b650100000000008110611c765760109190911b9060201c5b63010000008110611c8c5760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c808204811115611ccf5781045b919050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611d309190612e03565b6000604051808303816000865af19150503d8060008114611d6d576040519150601f19603f3d011682016040523d82523d6000602084013e611d72565b606091505b5091509150818015611d9c575080511580611d9c575080806020019051810190611d9c9190612e1f565b611de85760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657248656c7065723a207472616e73666572206661696c65640060448201526064016105ce565b5050505050565b600080611e3f7f000000000000000000000000ecd30c099c222abffdaf3e2a3d2455fc8e8c739e7f5732d698e38d6b60fe8360cbe25cbfdd2a1de322fc5da7b8e028ef32976f47018b8b8b612096565b90506000611e4d8a8a61215c565b509050806001600160a01b03168a6001600160a01b031603611ef157604051633851850760e21b81526001600160a01b03888116600483015260248201889052604482018790526064820186905283169063e146141c906084016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190612c14565b9250611f75565b60405163186b30c760e11b81526001600160a01b0388811660048301526024820188905260448201879052606482018690528316906330d6618e906084016020604051808303816000875af1158015611f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f729190612c14565b92505b5050979650505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691611fde9190612e03565b6000604051808303816000865af19150503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b509150915081801561204a57508051158061204a57508080602001905181019061204a9190612e1f565b611de85760405162461bcd60e51b815260206004820152601e60248201527f7472616e7366657248656c7065723a20617070726f7665206661696c6564000060448201526064016105ce565b60008060006120a5868661215c565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015260488101879052919350915088906068016040516020818303038152906040528051906020012088604051602001612138939291906001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f19818403018152919052805160209091012098975050505050505050565b600080826001600160a01b0316846001600160a01b0316036121b65760405162461bcd60e51b81526020600482015260136024820152726964656e746963616c2061646472657373657360681b60448201526064016105ce565b826001600160a01b0316846001600160a01b0316106121d65782846121d9565b83835b90925090506001600160a01b0382166122235760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016105ce565b9250929050565b604080516000808252602082019092526001600160a01b0384169083906040516122549190612e03565b60006040518083038185875af1925050503d8060008114612291576040519150601f19603f3d011682016040523d82523d6000602084013e612296565b606091505b50509050806115f75760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657248656c7065723a20455448207472616e73666572206661696044820152621b195960ea1b60648201526084016105ce565b60008083601f84011261230557600080fd5b5081356001600160401b0381111561231c57600080fd5b6020830191508360208260051b850101111561222357600080fd5b6001600160a01b038116811461234c57600080fd5b50565b6000806000806000806080878903121561236857600080fd5b86356001600160401b038082111561237f57600080fd5b61238b8a838b016122f3565b909850965060208901359150808211156123a457600080fd5b506123b189828a016122f3565b90955093505060408701356123c581612337565b80925050606087013590509295509295509295565b600080600080600060a086880312156123f257600080fd5b85356123fd81612337565b945060208601359350604086013561241481612337565b94979396509394606081013594506080013592915050565b6000806040838503121561243f57600080fd5b823561244a81612337565b946020939093013593505050565b60008060006060848603121561246d57600080fd5b833561247881612337565b95602085013595506040909401359392505050565b600080600080600080600060a0888a0312156124a857600080fd5b87356001600160401b03808211156124bf57600080fd5b6124cb8b838c016122f3565b909950975060208a01359150808211156124e457600080fd5b506124f18a828b016122f3565b909650945050604088013561250581612337565b969995985093969295946060840135945060809093013592915050565b60008060006060848603121561253757600080fd5b833561254281612337565b925060208401359150604084013561255981612337565b809150509250925092565b6000806000806000806060878903121561257d57600080fd5b86356001600160401b038082111561259457600080fd5b6125a08a838b016122f3565b909850965060208901359150808211156125b957600080fd5b6125c58a838b016122f3565b909650945060408901359150808211156125de57600080fd5b506125eb89828a016122f3565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b8381101561262d57815187529582019590820190600101612611565b509495945050505050565b60408152600061264b60408301856125fd565b828103602084015261085b81856125fd565b60008060008060008060c0878903121561267657600080fd5b863561268181612337565b9550602087013561269181612337565b94506040870135935060608701356126a881612337565b9598949750929560808101359460a0909101359350915050565b600080602083850312156126d557600080fd5b82356001600160401b038111156126eb57600080fd5b6126f7858286016122f3565b90969095509350505050565b60005b8381101561271e578181015183820152602001612706565b50506000910152565b6000815180845261273f816020860160208601612703565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156127a857603f19888603018452612796858351612727565b9450928501929085019060010161277a565b5092979650505050505050565b6000806000606084860312156127ca57600080fd5b83356127d581612337565b925060208401356127e581612337565b929592945050506040919091013590565b801515811461234c57600080fd5b60008060006060848603121561281957600080fd5b833561282481612337565b9250602084013561283481612337565b91506040840135612559816127f6565b600080600080600080600060e0888a03121561285f57600080fd5b873561286a81612337565b9650602088013561287a81612337565b955060408801359450606088013561289181612337565b9699959850939660808101359560a0820135955060c0909101359350915050565b6000602082840312156128c457600080fd5b81356128cf81612337565b9392505050565b60008060008060008060c087890312156128ef57600080fd5b86356128fa81612337565b95506020870135945060408701359350606087013560ff811681146126a857600080fd5b60008060008060006080868803121561293657600080fd5b853561294181612337565b94506020860135612951816127f6565b93506040860135925060608601356001600160401b038082111561297457600080fd5b818801915088601f83011261298857600080fd5b81358181111561299757600080fd5b8960208285010111156129a957600080fd5b9699959850939650602001949392505050565b600080600080608085870312156129d257600080fd5b84356129dd81612337565b93506020850135925060408501356129f481612337565b9396929550929360600135925050565b6020808252601a908201527f696e76616c696420696e707574206172726179206c656e677468000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008060408385031215612a6457600080fd5b505080516020909101519092909150565b80516001600160401b0381168114611ccf57600080fd5b60008060408385031215612a9f57600080fd5b612aa883612a75565b9150612ab660208401612a75565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b818103818111156109a9576109a9612abf565b600181815b80851115612b23578160001904821115612b0957612b09612abf565b80851615612b1657918102915b93841c9390800290612aed565b509250929050565b600082612b3a575060016109a9565b81612b47575060006109a9565b8160018114612b5d5760028114612b6757612b83565b60019150506109a9565b60ff841115612b7857612b78612abf565b50506001821b6109a9565b5060208310610133831016604e8410600b8410161715612ba6575081810a6109a9565b612bb08383612ae8565b8060001904821115612bc457612bc4612abf565b029392505050565b60006128cf60ff841683612b2b565b80820281158282048414176109a9576109a9612abf565b600082612c0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c2657600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612c5557600080fd5b81516128cf81612337565b6000808335601e19843603018112612c7757600080fd5b8301803591506001600160401b03821115612c9157600080fd5b60200191503681900382131561222357600080fd5b8183823760009101908152919050565b600060208284031215612cc857600080fd5b81516001600160401b0380821115612cdf57600080fd5b818401915084601f830112612cf357600080fd5b815181811115612d0557612d05612c2d565b604051601f8201601f19908116603f01168101908382118183101715612d2d57612d2d612c2d565b81604052828152876020848701011115612d4657600080fd5b6110ae836020830160208801612703565b6020815260006128cf6020830184612727565b600060018201612d7c57612d7c612abf565b5060010190565b6020808252600990820152683337b93134b23232b760b91b604082015260600190565b6001600160a01b0387811682528616602082015284151560408201526060810184905260a06080820181905281018290526000828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b60008251612e15818460208701612703565b9190910192915050565b600060208284031215612e3157600080fd5b81516128cf816127f656fea2646970667358221220b600e17299239c5f8fc5ec116dce94c4a7936e2f959c0bdb7dcca49f4625ad3364736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f0000000000000000000000007e6d097a7d948454ea253d3610bd93bb9c508b3a000000000000000000000000ecd30c099c222abffdaf3e2a3d2455fc8e8c739e000000000000000000000000e3a39d3668c929421d3bef4f00e0cdbf42afd57d00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b83
-----Decoded View---------------
Arg [0] : _WETH (address): 0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f
Arg [1] : _owner (address): 0x7e6d097A7D948454eA253d3610bD93bB9c508B3a
Arg [2] : _factory (address): 0xecD30C099c222AbffDaf3E2A3d2455FC8e8c739E
Arg [3] : _sDYSON (address): 0xe3A39d3668C929421d3bEF4F00E0cDbf42AFd57D
Arg [4] : _DYSON (address): 0x65e413F21BF468Fed23996A8E701dD67FDf22B83
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f
Arg [1] : 0000000000000000000000007e6d097a7d948454ea253d3610bd93bb9c508b3a
Arg [2] : 000000000000000000000000ecd30c099c222abffdaf3e2a3d2455fc8e8c739e
Arg [3] : 000000000000000000000000e3a39d3668c929421d3bef4f00e0cdbf42afd57d
Arg [4] : 00000000000000000000000065e413f21bf468fed23996a8e701dd67fdf22b83
Loading...
Loading
Loading...
Loading
OVERVIEW
Router serves as an entry point for swapping, depositing, and withdrawing on pairs and gauges and sDysn. It helps users handle WETH wrap/unwrap issues and prevents token approval for multiple pairs. Users can deposit dual investments, swap, boost, and stake DYSON.Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
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.