More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,960 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
External Swap | 11664738 | 1448 days ago | IN | 0.01 ETH | 0.00113352 | ||||
External Swap | 11652884 | 1450 days ago | IN | 1 ETH | 0.02566138 | ||||
External Swap | 11651834 | 1450 days ago | IN | 0 ETH | 0.04132495 | ||||
External Swap | 11651828 | 1450 days ago | IN | 0 ETH | 0.0234771 | ||||
External Swap | 11651824 | 1450 days ago | IN | 0 ETH | 0.01525387 | ||||
External Swap | 11651773 | 1450 days ago | IN | 0 ETH | 0.00726526 | ||||
External Swap | 11651764 | 1450 days ago | IN | 0 ETH | 0.00744584 | ||||
Dodo Swap V1 | 11651604 | 1450 days ago | IN | 0 ETH | 0.01553343 | ||||
External Swap | 11651601 | 1450 days ago | IN | 0 ETH | 0.02342533 | ||||
Dodo Swap V1 | 11651579 | 1450 days ago | IN | 0 ETH | 0.00751364 | ||||
External Swap | 11651572 | 1450 days ago | IN | 0 ETH | 0.00814687 | ||||
Dodo Swap V1 | 11651521 | 1450 days ago | IN | 0 ETH | 0.01307943 | ||||
Dodo Swap V1 | 11651427 | 1450 days ago | IN | 0 ETH | 0.00966618 | ||||
Dodo Swap V1 | 11651299 | 1450 days ago | IN | 0 ETH | 0.00977317 | ||||
Dodo Swap V1 | 11651293 | 1450 days ago | IN | 0 ETH | 0.00933278 | ||||
Dodo Swap V1 | 11651239 | 1450 days ago | IN | 0 ETH | 0.00112865 | ||||
Dodo Swap V1 | 11651222 | 1450 days ago | IN | 0 ETH | 0.01770481 | ||||
External Swap | 11651216 | 1450 days ago | IN | 0 ETH | 0.03491587 | ||||
External Swap | 11651154 | 1450 days ago | IN | 0 ETH | 0.03491179 | ||||
External Swap | 11650883 | 1450 days ago | IN | 0 ETH | 0.01058668 | ||||
Dodo Swap V1 | 11650873 | 1450 days ago | IN | 0 ETH | 0.01549672 | ||||
External Swap | 11650837 | 1450 days ago | IN | 0 ETH | 0.00977499 | ||||
External Swap | 11650544 | 1450 days ago | IN | 0.48725503 ETH | 0.01660005 | ||||
External Swap | 11650382 | 1450 days ago | IN | 0 ETH | 0.02961047 | ||||
Dodo Swap V1 | 11650050 | 1451 days ago | IN | 0 ETH | 0.01186824 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
11652884 | 1450 days ago | 1 ETH | ||||
11651828 | 1450 days ago | 0.16104031 ETH | ||||
11651828 | 1450 days ago | 0.16104031 ETH | ||||
11651824 | 1450 days ago | 0.1590606 ETH | ||||
11651773 | 1450 days ago | 0.1507383 ETH | ||||
11651773 | 1450 days ago | 0.1507383 ETH | ||||
11651764 | 1450 days ago | 0.04658371 ETH | ||||
11651764 | 1450 days ago | 0.04658371 ETH | ||||
11651601 | 1450 days ago | 0.91363338 ETH | ||||
11651601 | 1450 days ago | 0.91363338 ETH | ||||
11651572 | 1450 days ago | 0.0627619 ETH | ||||
11651572 | 1450 days ago | 0.0627619 ETH | ||||
11650544 | 1450 days ago | 0.48725503 ETH | ||||
11650382 | 1450 days ago | 1.61046076 ETH | ||||
11650382 | 1450 days ago | 1.61046076 ETH | ||||
11649769 | 1451 days ago | 0.1563 ETH | ||||
11649612 | 1451 days ago | 0.2974099 ETH | ||||
11649612 | 1451 days ago | 0.2974099 ETH | ||||
11649216 | 1451 days ago | 0.84640981 ETH | ||||
11649216 | 1451 days ago | 0.84640981 ETH | ||||
11648536 | 1451 days ago | 0.99731018 ETH | ||||
11648536 | 1451 days ago | 0.99731018 ETH | ||||
11648305 | 1451 days ago | 0.56 ETH | ||||
11648248 | 1451 days ago | 4.63120843 ETH | ||||
11648248 | 1451 days ago | 4.63120843 ETH |
Loading...
Loading
Contract Name:
DODOV1Proxy01
Compiler Version
v0.6.9+commit.3e3065ac
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-14 */ // File: contracts/intf/IERC20.sol // This is a file copied from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol pragma solidity 0.6.9; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function name() external view returns (string memory); function symbol() external view returns (string memory); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); } // File: contracts/lib/SafeMath.sol /** * @title SafeMath * @author DODO Breeder * * @notice Math operations with safety checks that revert on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "MUL_ERROR"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "DIVIDING_ERROR"); return a / b; } function divCeil(uint256 a, uint256 b) internal pure returns (uint256) { uint256 quotient = div(a, b); uint256 remainder = a - quotient * b; if (remainder > 0) { return quotient + 1; } else { return quotient; } } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SUB_ERROR"); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "ADD_ERROR"); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = x / 2 + 1; y = x; while (z < y) { y = z; z = (x / z + z) / 2; } } } // File: contracts/lib/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/SmartRoute/lib/UniversalERC20.sol library UniversalERC20 { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 private constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); function universalTransfer( IERC20 token, address payable to, uint256 amount ) internal { if (amount > 0) { if (isETH(token)) { to.transfer(amount); } else { token.safeTransfer(to, amount); } } } function universalApproveMax( IERC20 token, address to, uint256 amount ) internal { uint256 allowance = token.allowance(address(this), to); if (allowance < amount) { if (allowance > 0) { token.safeApprove(to, 0); } token.safeApprove(to, uint256(-1)); } } function universalBalanceOf(IERC20 token, address who) internal view returns (uint256) { if (isETH(token)) { return who.balance; } else { return token.balanceOf(who); } } function tokenBalanceOf(IERC20 token, address who) internal view returns (uint256) { return token.balanceOf(who); } function isETH(IERC20 token) internal pure returns (bool) { return token == ETH_ADDRESS; } } // File: contracts/SmartRoute/intf/IDODOV1.sol interface IDODOV1 { function init( address owner, address supervisor, address maintainer, address baseToken, address quoteToken, address oracle, uint256 lpFeeRate, uint256 mtFeeRate, uint256 k, uint256 gasPriceLimit ) external; function transferOwnership(address newOwner) external; function claimOwnership() external; function sellBaseToken( uint256 amount, uint256 minReceiveQuote, bytes calldata data ) external returns (uint256); function buyBaseToken( uint256 amount, uint256 maxPayQuote, bytes calldata data ) external returns (uint256); function querySellBaseToken(uint256 amount) external view returns (uint256 receiveQuote); function queryBuyBaseToken(uint256 amount) external view returns (uint256 payQuote); function depositBaseTo(address to, uint256 amount) external returns (uint256); function withdrawBase(uint256 amount) external returns (uint256); function withdrawAllBase() external returns (uint256); function depositQuoteTo(address to, uint256 amount) external returns (uint256); function withdrawQuote(uint256 amount) external returns (uint256); function withdrawAllQuote() external returns (uint256); function _BASE_CAPITAL_TOKEN_() external returns (address); function _QUOTE_CAPITAL_TOKEN_() external returns (address); function _BASE_TOKEN_() external returns (address); function _QUOTE_TOKEN_() external returns (address); function _R_STATUS_() external view returns (uint8); function _QUOTE_BALANCE_() external view returns (uint256); function _BASE_BALANCE_() external view returns (uint256); function _K_() external view returns (uint256); function _MT_FEE_RATE_() external view returns (uint256); function _LP_FEE_RATE_() external view returns (uint256); function getExpectedTarget() external view returns (uint256 baseTarget, uint256 quoteTarget); function getOraclePrice() external view returns (uint256); function getMidPrice() external view returns (uint256 midPrice); } // File: contracts/lib/DecimalMath.sol /** * @title DecimalMath * @author DODO Breeder * * @notice Functions for fixed point number with 18 decimals */ library DecimalMath { using SafeMath for uint256; uint256 internal constant ONE = 10**18; uint256 internal constant ONE2 = 10**36; function mulFloor(uint256 target, uint256 d) internal pure returns (uint256) { return target.mul(d) / (10**18); } function mulCeil(uint256 target, uint256 d) internal pure returns (uint256) { return target.mul(d).divCeil(10**18); } function divFloor(uint256 target, uint256 d) internal pure returns (uint256) { return target.mul(10**18).div(d); } function divCeil(uint256 target, uint256 d) internal pure returns (uint256) { return target.mul(10**18).divCeil(d); } function reciprocalFloor(uint256 target) internal pure returns (uint256) { return uint256(10**36).div(target); } function reciprocalCeil(uint256 target) internal pure returns (uint256) { return uint256(10**36).divCeil(target); } } // File: contracts/SmartRoute/helper/DODOSellHelper.sol /** *Submitted for verification at Etherscan.io on 2020-10-10 */ // File: contracts/intf/IDODO.sol // import {DODOMath} from "../lib/DODOMath.sol"; interface IDODOSellHelper { function querySellQuoteToken(address dodo, uint256 amount) external view returns (uint256); function querySellBaseToken(address dodo, uint256 amount) external view returns (uint256); } // File: contracts/intf/IWETH.sol interface IWETH { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address src, address dst, uint256 wad ) external returns (bool); function deposit() external payable; function withdraw(uint256 wad) external; } // File: contracts/SmartRoute/intf/IChi.sol interface IChi { function freeUpTo(uint256 value) external returns (uint256); } // File: contracts/SmartRoute/intf/IUni.sol interface IUni { function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); } // File: contracts/intf/IDODOApprove.sol interface IDODOApprove { function claimTokens(address token,address who,address dest,uint256 amount) external; function getDODOProxy() external view returns (address); } // File: contracts/SmartRoute/intf/IDODOV1Proxy01.sol interface IDODOV1Proxy01 { function dodoSwapV1( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] memory dodoPairs, uint8[] memory directions, uint256 deadLine ) external payable returns (uint256 returnAmount); function externalSwap( address fromToken, address toToken, address approveTarget, address to, uint256 fromTokenAmount, uint256 minReturnAmount, bytes memory callDataConcat, uint256 deadLine ) external payable returns (uint256 returnAmount); function mixSwapV1( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] memory mixPairs, uint8[] memory directions, address[] memory portionPath, uint256 deadLine ) external payable returns (uint256 returnAmount); } // File: contracts/lib/InitializableOwnable.sol /** * @title Ownable * @author DODO Breeder * * @notice Ownership related functions */ contract InitializableOwnable { address public _OWNER_; address public _NEW_OWNER_; bool internal _INITIALIZED_; // ============ Events ============ event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // ============ Modifiers ============ modifier notInitialized() { require(!_INITIALIZED_, "DODO_INITIALIZED"); _; } modifier onlyOwner() { require(msg.sender == _OWNER_, "NOT_OWNER"); _; } // ============ Functions ============ function initOwner(address newOwner) public notInitialized { _INITIALIZED_ = true; _OWNER_ = newOwner; } function transferOwnership(address newOwner) public onlyOwner { emit OwnershipTransferPrepared(_OWNER_, newOwner); _NEW_OWNER_ = newOwner; } function claimOwnership() public { require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM"); emit OwnershipTransferred(_OWNER_, _NEW_OWNER_); _OWNER_ = _NEW_OWNER_; _NEW_OWNER_ = address(0); } } // File: contracts/SmartRoute/DODOV1Proxy01.sol /** * @title DODOV1Proxy01 * @author DODO Breeder * * @notice Entrance of trading in DODO platform */ contract DODOV1Proxy01 is IDODOV1Proxy01, InitializableOwnable { using SafeMath for uint256; using UniversalERC20 for IERC20; // ============ Storage ============ address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public immutable _DODO_APPROVE_; address public immutable _DODO_SELL_HELPER_; address public immutable _WETH_; address public immutable _CHI_TOKEN_; uint8 public _GAS_DODO_MAX_RETURN_ = 0; uint8 public _GAS_EXTERNAL_RETURN_ = 0; mapping (address => bool) public isWhiteListed; // ============ Events ============ event OrderHistory( address indexed fromToken, address indexed toToken, address indexed sender, uint256 fromAmount, uint256 returnAmount ); // ============ Modifiers ============ modifier judgeExpired(uint256 deadLine) { require(deadLine >= block.timestamp, "DODOV1Proxy01: EXPIRED"); _; } constructor( address dodoApporve, address dodoSellHelper, address weth, address chiToken ) public { _DODO_APPROVE_ = dodoApporve; _DODO_SELL_HELPER_ = dodoSellHelper; _WETH_ = weth; _CHI_TOKEN_ = chiToken; } fallback() external payable {} receive() external payable {} function updateGasReturn(uint8 newDodoGasReturn, uint8 newExternalGasReturn) public onlyOwner { _GAS_DODO_MAX_RETURN_ = newDodoGasReturn; _GAS_EXTERNAL_RETURN_ = newExternalGasReturn; } function addWhiteList (address contractAddr) public onlyOwner { isWhiteListed[contractAddr] = true; } function removeWhiteList (address contractAddr) public onlyOwner { isWhiteListed[contractAddr] = false; } function dodoSwapV1( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] memory dodoPairs, uint8[] memory directions, uint256 deadLine ) external override payable judgeExpired(deadLine) returns (uint256 returnAmount) { require(dodoPairs.length == directions.length, "DODOV1Proxy01: PARAMS_LENGTH_NOT_MATCH"); uint256 originGas = gasleft(); if (fromToken != _ETH_ADDRESS_) { IDODOApprove(_DODO_APPROVE_).claimTokens( fromToken, msg.sender, address(this), fromTokenAmount ); } else { require(msg.value == fromTokenAmount, "DODOV1Proxy01: ETH_AMOUNT_NOT_MATCH"); IWETH(_WETH_).deposit{value: fromTokenAmount}(); } for (uint8 i = 0; i < dodoPairs.length; i++) { address curDodoPair = dodoPairs[i]; if (directions[i] == 0) { address curDodoBase = IDODOV1(curDodoPair)._BASE_TOKEN_(); uint256 curAmountIn = IERC20(curDodoBase).balanceOf(address(this)); IERC20(curDodoBase).universalApproveMax(curDodoPair, curAmountIn); IDODOV1(curDodoPair).sellBaseToken(curAmountIn, 0, ""); } else { address curDodoQuote = IDODOV1(curDodoPair)._QUOTE_TOKEN_(); uint256 curAmountIn = IERC20(curDodoQuote).balanceOf(address(this)); IERC20(curDodoQuote).universalApproveMax(curDodoPair, curAmountIn); uint256 canBuyBaseAmount = IDODOSellHelper(_DODO_SELL_HELPER_).querySellQuoteToken( curDodoPair, curAmountIn ); IDODOV1(curDodoPair).buyBaseToken(canBuyBaseAmount, curAmountIn, ""); } } if (toToken == _ETH_ADDRESS_) { returnAmount = IWETH(_WETH_).balanceOf(address(this)); IWETH(_WETH_).withdraw(returnAmount); } else { returnAmount = IERC20(toToken).tokenBalanceOf(address(this)); } require(returnAmount >= minReturnAmount, "DODOV1Proxy01: Return amount is not enough"); IERC20(toToken).universalTransfer(msg.sender, returnAmount); emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount); uint8 _gasDodoMaxReturn = _GAS_DODO_MAX_RETURN_; if(_gasDodoMaxReturn > 0) { uint256 calcGasTokenBurn = originGas.sub(gasleft()) / 65000; uint256 gasTokenBurn = calcGasTokenBurn > _gasDodoMaxReturn ? _gasDodoMaxReturn : calcGasTokenBurn; if(gasleft() > 27710 + gasTokenBurn * 6080) IChi(_CHI_TOKEN_).freeUpTo(gasTokenBurn); } } function externalSwap( address fromToken, address toToken, address approveTarget, address swapTarget, uint256 fromTokenAmount, uint256 minReturnAmount, bytes memory callDataConcat, uint256 deadLine ) external override payable judgeExpired(deadLine) returns (uint256 returnAmount) { address _fromToken = fromToken; address _toToken = toToken; uint256 toTokenOriginBalance = IERC20(_toToken).universalBalanceOf(msg.sender); if (_fromToken != _ETH_ADDRESS_) { IDODOApprove(_DODO_APPROVE_).claimTokens( _fromToken, msg.sender, address(this), fromTokenAmount ); IERC20(_fromToken).universalApproveMax(approveTarget, fromTokenAmount); } require(isWhiteListed[swapTarget], "DODOV1Proxy01: Not Whitelist Contract"); (bool success, ) = swapTarget.call{value: _fromToken == _ETH_ADDRESS_ ? msg.value : 0}(callDataConcat); require(success, "DODOV1Proxy01: External Swap execution Failed"); IERC20(_fromToken).universalTransfer( msg.sender, IERC20(_fromToken).universalBalanceOf(address(this)) ); IERC20(_toToken).universalTransfer( msg.sender, IERC20(_toToken).universalBalanceOf(address(this)) ); returnAmount = IERC20(_toToken).universalBalanceOf(msg.sender).sub(toTokenOriginBalance); require(returnAmount >= minReturnAmount, "DODOV1Proxy01: Return amount is not enough"); emit OrderHistory(_fromToken, _toToken, msg.sender, fromTokenAmount, returnAmount); uint8 _gasExternalReturn = _GAS_EXTERNAL_RETURN_; if(_gasExternalReturn > 0) { if(gasleft() > 27710 + _gasExternalReturn * 6080) IChi(_CHI_TOKEN_).freeUpTo(_gasExternalReturn); } } function mixSwapV1( address fromToken, address toToken, uint256 fromTokenAmount, uint256 minReturnAmount, address[] memory mixPairs, uint8[] memory directions, address[] memory portionPath, uint256 deadLine ) external override payable judgeExpired(deadLine) returns (uint256 returnAmount) { require(mixPairs.length == directions.length, "DODOV1Proxy01: PARAMS_LENGTH_NOT_MATCH"); uint256 toTokenOriginBalance = IERC20(toToken).universalBalanceOf(msg.sender); if (fromToken != _ETH_ADDRESS_) { IDODOApprove(_DODO_APPROVE_).claimTokens( fromToken, msg.sender, address(this), fromTokenAmount ); } else { require(msg.value == fromTokenAmount, "DODOV1Proxy01: ETH_AMOUNT_NOT_MATCH"); IWETH(_WETH_).deposit{value: fromTokenAmount}(); } for (uint8 i = 0; i < mixPairs.length; i++) { address curPair = mixPairs[i]; if (directions[i] == 0) { address curDodoBase = IDODOV1(curPair)._BASE_TOKEN_(); uint256 curAmountIn = IERC20(curDodoBase).balanceOf(address(this)); IERC20(curDodoBase).universalApproveMax(curPair, curAmountIn); IDODOV1(curPair).sellBaseToken(curAmountIn, 0, ""); } else if(directions[i] == 1){ address curDodoQuote = IDODOV1(curPair)._QUOTE_TOKEN_(); uint256 curAmountIn = IERC20(curDodoQuote).balanceOf(address(this)); IERC20(curDodoQuote).universalApproveMax(curPair, curAmountIn); uint256 canBuyBaseAmount = IDODOSellHelper(_DODO_SELL_HELPER_).querySellQuoteToken( curPair, curAmountIn ); IDODOV1(curPair).buyBaseToken(canBuyBaseAmount, curAmountIn, ""); } else { uint256 curAmountIn = IERC20(portionPath[0]).balanceOf(address(this)); IERC20(portionPath[0]).universalApproveMax(curPair, curAmountIn); IUni(curPair).swapExactTokensForTokens(curAmountIn,0,portionPath,address(this),deadLine); } } IERC20(fromToken).universalTransfer( msg.sender, IERC20(fromToken).universalBalanceOf(address(this)) ); IERC20(toToken).universalTransfer( msg.sender, IERC20(toToken).universalBalanceOf(address(this)) ); returnAmount = IERC20(toToken).universalBalanceOf(msg.sender).sub(toTokenOriginBalance); require(returnAmount >= minReturnAmount, "DODOV1Proxy01: Return amount is not enough"); emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount); uint8 _gasExternalReturn = _GAS_EXTERNAL_RETURN_; if(_gasExternalReturn > 0) { if(gasleft() > 27710 + _gasExternalReturn * 6080) IChi(_CHI_TOKEN_).freeUpTo(_gasExternalReturn); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"dodoApporve","type":"address"},{"internalType":"address","name":"dodoSellHelper","type":"address"},{"internalType":"address","name":"weth","type":"address"},{"internalType":"address","name":"chiToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromToken","type":"address"},{"indexed":true,"internalType":"address","name":"toToken","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"}],"name":"OrderHistory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferPrepared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_CHI_TOKEN_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_DODO_APPROVE_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_DODO_SELL_HELPER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_GAS_DODO_MAX_RETURN_","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_GAS_EXTERNAL_RETURN_","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_NEW_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_OWNER_","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":"contractAddr","type":"address"}],"name":"addWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"address[]","name":"dodoPairs","type":"address[]"},{"internalType":"uint8[]","name":"directions","type":"uint8[]"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"dodoSwapV1","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"address","name":"approveTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"},{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"bytes","name":"callDataConcat","type":"bytes"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"externalSwap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"address[]","name":"mixPairs","type":"address[]"},{"internalType":"uint8[]","name":"directions","type":"uint8[]"},{"internalType":"address[]","name":"portionPath","type":"address[]"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"mixSwapV1","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newDodoGasReturn","type":"uint8"},{"internalType":"uint8","name":"newExternalGasReturn","type":"uint8"}],"name":"updateGasReturn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040526001805461ffff60a81b1916905534801561001f57600080fd5b50604051612bd1380380612bd18339818101604052608081101561004257600080fd5b508051602082015160408301516060938401516001600160601b031993851b841660805291841b831660a052831b821660c05290911b1660e05260805160601c60a05160601c60c05160601c60e05160601c612ad86100f960003980610753528061112f5280611bdf52806120725250806107ff5280610a325280610f045280610f9a528061137f525080610dae528061171d52806122b252508061098b52806112d85280611d4b528061211a5250612ad86000f3fe60806040526004361061010d5760003560e01c80634e71e0c8116100955780638456db15116100645780638456db15146106ac5780639f687322146106c1578063af1280b0146106d6578063e7cd4a04146106eb578063f2fde38b1461071e57610114565b80634e71e0c8146105f05780634f99835d1461060557806369dba8ee1461063a5780636f9170f61461066557610114565b80632042e5c2116100dc5780632042e5c2146101a457806322d1b732146101d7578063385533821461033357806338f4c1881461050057806346e74298146105db57610114565b8063056fc2ee146101165780630d009297146101475780630d4eec8f1461017a57806316048bc41461018f57610114565b3661011457005b005b34801561012257600080fd5b5061012b610751565b604080516001600160a01b039092168252519081900360200190f35b34801561015357600080fd5b506101146004803603602081101561016a57600080fd5b50356001600160a01b0316610775565b34801561018657600080fd5b5061012b6107fd565b34801561019b57600080fd5b5061012b610821565b3480156101b057600080fd5b50610114600480360360208110156101c757600080fd5b50356001600160a01b0316610830565b610321600480360360e08110156101ed57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561022c57600080fd5b82018360208201111561023e57600080fd5b803590602001918460208302840111600160201b8311171561025f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102ae57600080fd5b8201836020820111156102c057600080fd5b803590602001918460208302840111600160201b831117156102e157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061089c915050565b60408051918252519081900360200190f35b610321600480360361010081101561034a57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561038957600080fd5b82018360208201111561039b57600080fd5b803590602001918460208302840111600160201b831117156103bc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460208302840111600160201b8311171561043e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561048d57600080fd5b82018360208201111561049f57600080fd5b803590602001918460208302840111600160201b831117156104c057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506111d1915050565b610321600480360361010081101561051757600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a0820135919081019060e0810160c0820135600160201b81111561056557600080fd5b82018360208201111561057757600080fd5b803590602001918460018302840111600160201b8311171561059857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611c82915050565b3480156105e757600080fd5b5061012b612118565b3480156105fc57600080fd5b5061011461213c565b34801561061157600080fd5b506101146004803603604081101561062857600080fd5b5060ff813581169160200135166121ef565b34801561064657600080fd5b5061064f61226c565b6040805160ff9092168252519081900360200190f35b34801561067157600080fd5b506106986004803603602081101561068857600080fd5b50356001600160a01b031661227c565b604080519115158252519081900360200190f35b3480156106b857600080fd5b5061012b612291565b3480156106cd57600080fd5b5061064f6122a0565b3480156106e257600080fd5b5061012b6122b0565b3480156106f757600080fd5b506101146004803603602081101561070e57600080fd5b50356001600160a01b03166122d4565b34801561072a57600080fd5b506101146004803603602081101561074157600080fd5b50356001600160a01b0316612343565b7f000000000000000000000000000000000000000000000000000000000000000081565b600154600160a01b900460ff16156107c7576040805162461bcd60e51b815260206004820152601060248201526f1113d113d7d25392551250531256915160821b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031681565b6000546001600160a01b0316331461087b576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001600160a01b03166000908152600260205260409020805460ff19169055565b600081428110156108ed576040805162461bcd60e51b81526020600482015260166024820152751113d113d58c541c9bde1e4c0c4e881156141254915160521b604482015290519081900360640190fd5b835185511461092d5760405162461bcd60e51b815260040180806020018281038252602681526020018061297e6026913960400191505060405180910390fd5b60005a90506001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146109f2576040805163052f523360e11b81526001600160a01b038c81166004830152336024830152306044830152606482018b905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b1580156109d557600080fd5b505af11580156109e9573d6000803e3d6000fd5b50505050610aa5565b873414610a305760405162461bcd60e51b81526004018080602001828103825260238152602001806129d16023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0896040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a8b57600080fd5b505af1158015610a9f573d6000803e3d6000fd5b50505050505b60005b86518160ff161015610ebe576000878260ff1681518110610ac557fe5b60200260200101519050868260ff1681518110610ade57fe5b602002602001015160ff1660001415610c85576000816001600160a01b0316634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b505050506040513d6020811015610b5857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610ba657600080fd5b505afa158015610bba573d6000803e3d6000fd5b505050506040513d6020811015610bd057600080fd5b50519050610bee6001600160a01b038316848363ffffffff6123e916565b826001600160a01b0316638dae73338260006040518363ffffffff1660e01b815260040180838152602001828152602001806020018281038252600081526020016020019350505050602060405180830381600087803b158015610c5157600080fd5b505af1158015610c65573d6000803e3d6000fd5b505050506040513d6020811015610c7b57600080fd5b50610eb592505050565b6000816001600160a01b031663d4b970466040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610cc257600080fd5b505af1158015610cd6573d6000803e3d6000fd5b505050506040513d6020811015610cec57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610d3a57600080fd5b505afa158015610d4e573d6000803e3d6000fd5b505050506040513d6020811015610d6457600080fd5b50519050610d826001600160a01b038316848363ffffffff6123e916565b6040805163ca19ebd960e01b81526001600160a01b0385811660048301526024820184905291516000927f0000000000000000000000000000000000000000000000000000000000000000169163ca19ebd9916044808301926020929190829003018186803b158015610df457600080fd5b505afa158015610e08573d6000803e3d6000fd5b505050506040513d6020811015610e1e57600080fd5b50516040805163733e738360e11b815260048101839052602481018590526060604482015260006064820181905291519293506001600160a01b0387169263e67ce7069260a480840193602093929083900390910190829087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b505050506040513d6020811015610eaf57600080fd5b50505050505b50600101610aa8565b506001600160a01b03891673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610fff57604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b158015610f4a57600080fd5b505afa158015610f5e573d6000803e3d6000fd5b505050506040513d6020811015610f7457600080fd5b505160408051632e1a7d4d60e01b81526004810183905290519194506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691632e1a7d4d9160248082019260009290919082900301818387803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505061101b565b6110186001600160a01b038a163063ffffffff6124b316565b92505b8683101561105a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806129f4602a913960400191505060405180910390fd5b6110746001600160a01b038a16338563ffffffff61254016565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878b87604051808381526020018281526020019250505060405180910390a4600154600160a81b900460ff1680156111c357600061fde86110fa5a859063ffffffff6125af16565b8161110157fe5b04905060008260ff168211611116578161111b565b8260ff165b9050806117c002616c3e015a11156111c0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636366b936826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561119357600080fd5b505af11580156111a7573d6000803e3d6000fd5b505050506040513d60208110156111bd57600080fd5b50505b50505b505050979650505050505050565b60008142811015611222576040805162461bcd60e51b81526020600482015260166024820152751113d113d58c541c9bde1e4c0c4e881156141254915160521b604482015290519081900360640190fd5b84518651146112625760405162461bcd60e51b815260040180806020018281038252602681526020018061297e6026913960400191505060405180910390fd5b600061127d6001600160a01b038b163363ffffffff6125f816565b90506001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461133f576040805163052f523360e11b81526001600160a01b038d81166004830152336024830152306044830152606482018c905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b15801561132257600080fd5b505af1158015611336573d6000803e3d6000fd5b505050506113f2565b88341461137d5760405162461bcd60e51b81526004018080602001828103825260238152602001806129d16023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b50505050505b60005b87518160ff161015611a83576000888260ff168151811061141257fe5b60200260200101519050878260ff168151811061142b57fe5b602002602001015160ff16600014156115d2576000816001600160a01b0316634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561147b57600080fd5b505af115801561148f573d6000803e3d6000fd5b505050506040513d60208110156114a557600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156114f357600080fd5b505afa158015611507573d6000803e3d6000fd5b505050506040513d602081101561151d57600080fd5b5051905061153b6001600160a01b038316848363ffffffff6123e916565b826001600160a01b0316638dae73338260006040518363ffffffff1660e01b815260040180838152602001828152602001806020018281038252600081526020016020019350505050602060405180830381600087803b15801561159e57600080fd5b505af11580156115b2573d6000803e3d6000fd5b505050506040513d60208110156115c857600080fd5b50611a7a92505050565b878260ff16815181106115e157fe5b602002602001015160ff1660011415611829576000816001600160a01b031663d4b970466040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b505050506040513d602081101561165b57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156116a957600080fd5b505afa1580156116bd573d6000803e3d6000fd5b505050506040513d60208110156116d357600080fd5b505190506116f16001600160a01b038316848363ffffffff6123e916565b6040805163ca19ebd960e01b81526001600160a01b0385811660048301526024820184905291516000927f0000000000000000000000000000000000000000000000000000000000000000169163ca19ebd9916044808301926020929190829003018186803b15801561176357600080fd5b505afa158015611777573d6000803e3d6000fd5b505050506040513d602081101561178d57600080fd5b50516040805163733e738360e11b815260048101839052602481018590526060604482015260006064820181905291519293506001600160a01b0387169263e67ce7069260a480840193602093929083900390910190829087803b1580156117f457600080fd5b505af1158015611808573d6000803e3d6000fd5b505050506040513d602081101561181e57600080fd5b50611a7a9350505050565b60008760008151811061183857fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d60208110156118bf57600080fd5b505188519091506118f990839083908b906000906118d957fe5b60200260200101516001600160a01b03166123e99092919063ffffffff16565b816001600160a01b03166338ed17398260008b308c6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561198757818101518382015260200161196f565b505050509050019650505050505050600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156119ed57600080fd5b8101908080516040519392919084600160201b821115611a0c57600080fd5b908301906020820185811115611a2157600080fd5b82518660208202830111600160201b82111715611a3d57600080fd5b82525081516020918201928201910280838360005b83811015611a6a578181015183820152602001611a52565b5050505090500160405250505050505b506001016113f5565b50611ab833611aa16001600160a01b038e163063ffffffff6125f816565b6001600160a01b038e16919063ffffffff61254016565b611aec33611ad56001600160a01b038d163063ffffffff6125f816565b6001600160a01b038d16919063ffffffff61254016565b611b1581611b096001600160a01b038d163363ffffffff6125f816565b9063ffffffff6125af16565b925087831015611b565760405162461bcd60e51b815260040180806020018281038252602a8152602001806129f4602a913960400191505060405180910390fd5b336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878c87604051808381526020018281526020019250505060405180910390a4600154600160b01b900460ff168015611c73578060ff166117c002616c3e0161ffff165a1115611c73577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636366b936826040518263ffffffff1660e01b8152600401808260ff168152602001915050602060405180830381600087803b158015611c4657600080fd5b505af1158015611c5a573d6000803e3d6000fd5b505050506040513d6020811015611c7057600080fd5b50505b50505098975050505050505050565b60008142811015611cd3576040805162461bcd60e51b81526020600482015260166024820152751113d113d58c541c9bde1e4c0c4e881156141254915160521b604482015290519081900360640190fd5b89896000611cf06001600160a01b0383163363ffffffff6125f816565b90506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611dc2576040805163052f523360e11b81526001600160a01b038581166004830152336024830152306044830152606482018c905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b158015611d9557600080fd5b505af1158015611da9573d6000803e3d6000fd5b50611dc2925050506001600160a01b0384168c8b6123e9565b6001600160a01b038a1660009081526002602052604090205460ff16611e195760405162461bcd60e51b8152600401808060200182810382526025815260200180612a7e6025913960400191505060405180910390fd5b60006001600160a01b03808c1690851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611e4a576000611e4c565b345b896040518082805190602001908083835b60208310611e7c5780518252601f199092019160209182019101611e5d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611ede576040519150601f19603f3d011682016040523d82523d6000602084013e611ee3565b606091505b5050905080611f235760405162461bcd60e51b815260040180806020018281038252602d8152602001806129a4602d913960400191505060405180910390fd5b611f5733611f406001600160a01b0387163063ffffffff6125f816565b6001600160a01b038716919063ffffffff61254016565b611f8b33611f746001600160a01b0386163063ffffffff6125f816565b6001600160a01b038616919063ffffffff61254016565b611fa882611b096001600160a01b0386163363ffffffff6125f816565b955088861015611fe95760405162461bcd60e51b815260040180806020018281038252602a8152602001806129f4602a913960400191505060405180910390fd5b336001600160a01b0316836001600160a01b0316856001600160a01b03167f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878d8a604051808381526020018281526020019250505060405180910390a4600154600160b01b900460ff168015612106578060ff166117c002616c3e0161ffff165a1115612106577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636366b936826040518263ffffffff1660e01b8152600401808260ff168152602001915050602060405180830381600087803b1580156120d957600080fd5b505af11580156120ed573d6000803e3d6000fd5b505050506040513d602081101561210357600080fd5b50505b50505050505098975050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b0316331461218b576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f434c41494d60981b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b0316331461223a576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001805460ff928316600160b01b0260ff60b01b1994909316600160a81b0260ff60a81b199091161792909216179055565b600154600160b01b900460ff1681565b60026020526000908152604090205460ff1681565b6001546001600160a01b031681565b600154600160a81b900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b0316331461231f576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000546001600160a01b0316331461238e576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60408051636eb1769f60e11b81523060048201526001600160a01b038481166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b15801561243a57600080fd5b505afa15801561244e573d6000803e3d6000fd5b505050506040513d602081101561246457600080fd5b50519050818110156124ad578015612491576124916001600160a01b03851684600063ffffffff6126a216565b6124ad6001600160a01b0385168460001963ffffffff6126a216565b50505050565b6000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561250b57600080fd5b505afa15801561251f573d6000803e3d6000fd5b505050506040513d602081101561253557600080fd5b505190505b92915050565b80156125aa5761254f836127b5565b15612590576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561258a573d6000803e3d6000fd5b506125aa565b6125aa6001600160a01b038416838363ffffffff6127da16565b505050565b6000828211156125f2576040805162461bcd60e51b815260206004820152600960248201526829aaa12fa2a92927a960b91b604482015290519081900360640190fd5b50900390565b6000612603836127b5565b1561261957506001600160a01b0381163161253a565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561266f57600080fd5b505afa158015612683573d6000803e3d6000fd5b505050506040513d602081101561269957600080fd5b5051905061253a565b801580612728575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156126fa57600080fd5b505afa15801561270e573d6000803e3d6000fd5b505050506040513d602081101561272457600080fd5b5051155b6127635760405162461bcd60e51b8152600401808060200182810382526036815260200180612a486036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526125aa908490612828565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526125aa9084905b60006060836001600160a01b0316836040518082805190602001908083835b602083106128665780518252601f199092019160209182019101612847565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146128c8576040519150601f19603f3d011682016040523d82523d6000602084013e6128cd565b606091505b509150915081612924576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156124ad5780806020019051602081101561294057600080fd5b50516124ad5760405162461bcd60e51b815260040180806020018281038252602a815260200180612a1e602a913960400191505060405180910390fdfe444f444f563150726f787930313a20504152414d535f4c454e4754485f4e4f545f4d41544348444f444f563150726f787930313a2045787465726e616c205377617020657865637574696f6e204661696c6564444f444f563150726f787930313a204554485f414d4f554e545f4e4f545f4d41544348444f444f563150726f787930313a2052657475726e20616d6f756e74206973206e6f7420656e6f7567685361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365444f444f563150726f787930313a204e6f742057686974656c69737420436f6e7472616374a26469706673582212208a89d88113ff5936573f2713ee92b08ed8f3163e45c14f6370cc8fcbd4e0644c64736f6c63430006090033000000000000000000000000cb859ea579b28e02b87a1fde08d087ab9dbe5149000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c
Deployed Bytecode
0x60806040526004361061010d5760003560e01c80634e71e0c8116100955780638456db15116100645780638456db15146106ac5780639f687322146106c1578063af1280b0146106d6578063e7cd4a04146106eb578063f2fde38b1461071e57610114565b80634e71e0c8146105f05780634f99835d1461060557806369dba8ee1461063a5780636f9170f61461066557610114565b80632042e5c2116100dc5780632042e5c2146101a457806322d1b732146101d7578063385533821461033357806338f4c1881461050057806346e74298146105db57610114565b8063056fc2ee146101165780630d009297146101475780630d4eec8f1461017a57806316048bc41461018f57610114565b3661011457005b005b34801561012257600080fd5b5061012b610751565b604080516001600160a01b039092168252519081900360200190f35b34801561015357600080fd5b506101146004803603602081101561016a57600080fd5b50356001600160a01b0316610775565b34801561018657600080fd5b5061012b6107fd565b34801561019b57600080fd5b5061012b610821565b3480156101b057600080fd5b50610114600480360360208110156101c757600080fd5b50356001600160a01b0316610830565b610321600480360360e08110156101ed57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561022c57600080fd5b82018360208201111561023e57600080fd5b803590602001918460208302840111600160201b8311171561025f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102ae57600080fd5b8201836020820111156102c057600080fd5b803590602001918460208302840111600160201b831117156102e157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061089c915050565b60408051918252519081900360200190f35b610321600480360361010081101561034a57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561038957600080fd5b82018360208201111561039b57600080fd5b803590602001918460208302840111600160201b831117156103bc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460208302840111600160201b8311171561043e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561048d57600080fd5b82018360208201111561049f57600080fd5b803590602001918460208302840111600160201b831117156104c057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506111d1915050565b610321600480360361010081101561051757600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a0820135919081019060e0810160c0820135600160201b81111561056557600080fd5b82018360208201111561057757600080fd5b803590602001918460018302840111600160201b8311171561059857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611c82915050565b3480156105e757600080fd5b5061012b612118565b3480156105fc57600080fd5b5061011461213c565b34801561061157600080fd5b506101146004803603604081101561062857600080fd5b5060ff813581169160200135166121ef565b34801561064657600080fd5b5061064f61226c565b6040805160ff9092168252519081900360200190f35b34801561067157600080fd5b506106986004803603602081101561068857600080fd5b50356001600160a01b031661227c565b604080519115158252519081900360200190f35b3480156106b857600080fd5b5061012b612291565b3480156106cd57600080fd5b5061064f6122a0565b3480156106e257600080fd5b5061012b6122b0565b3480156106f757600080fd5b506101146004803603602081101561070e57600080fd5b50356001600160a01b03166122d4565b34801561072a57600080fd5b506101146004803603602081101561074157600080fd5b50356001600160a01b0316612343565b7f0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c81565b600154600160a01b900460ff16156107c7576040805162461bcd60e51b815260206004820152601060248201526f1113d113d7d25392551250531256915160821b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000546001600160a01b031681565b6000546001600160a01b0316331461087b576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001600160a01b03166000908152600260205260409020805460ff19169055565b600081428110156108ed576040805162461bcd60e51b81526020600482015260166024820152751113d113d58c541c9bde1e4c0c4e881156141254915160521b604482015290519081900360640190fd5b835185511461092d5760405162461bcd60e51b815260040180806020018281038252602681526020018061297e6026913960400191505060405180910390fd5b60005a90506001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146109f2576040805163052f523360e11b81526001600160a01b038c81166004830152336024830152306044830152606482018b905291517f000000000000000000000000cb859ea579b28e02b87a1fde08d087ab9dbe514990921691630a5ea4669160848082019260009290919082900301818387803b1580156109d557600080fd5b505af11580156109e9573d6000803e3d6000fd5b50505050610aa5565b873414610a305760405162461bcd60e51b81526004018080602001828103825260238152602001806129d16023913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0896040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a8b57600080fd5b505af1158015610a9f573d6000803e3d6000fd5b50505050505b60005b86518160ff161015610ebe576000878260ff1681518110610ac557fe5b60200260200101519050868260ff1681518110610ade57fe5b602002602001015160ff1660001415610c85576000816001600160a01b0316634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b505050506040513d6020811015610b5857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610ba657600080fd5b505afa158015610bba573d6000803e3d6000fd5b505050506040513d6020811015610bd057600080fd5b50519050610bee6001600160a01b038316848363ffffffff6123e916565b826001600160a01b0316638dae73338260006040518363ffffffff1660e01b815260040180838152602001828152602001806020018281038252600081526020016020019350505050602060405180830381600087803b158015610c5157600080fd5b505af1158015610c65573d6000803e3d6000fd5b505050506040513d6020811015610c7b57600080fd5b50610eb592505050565b6000816001600160a01b031663d4b970466040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610cc257600080fd5b505af1158015610cd6573d6000803e3d6000fd5b505050506040513d6020811015610cec57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610d3a57600080fd5b505afa158015610d4e573d6000803e3d6000fd5b505050506040513d6020811015610d6457600080fd5b50519050610d826001600160a01b038316848363ffffffff6123e916565b6040805163ca19ebd960e01b81526001600160a01b0385811660048301526024820184905291516000927f000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb169163ca19ebd9916044808301926020929190829003018186803b158015610df457600080fd5b505afa158015610e08573d6000803e3d6000fd5b505050506040513d6020811015610e1e57600080fd5b50516040805163733e738360e11b815260048101839052602481018590526060604482015260006064820181905291519293506001600160a01b0387169263e67ce7069260a480840193602093929083900390910190829087803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b505050506040513d6020811015610eaf57600080fd5b50505050505b50600101610aa8565b506001600160a01b03891673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610fff57604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a08231916024808301926020929190829003018186803b158015610f4a57600080fd5b505afa158015610f5e573d6000803e3d6000fd5b505050506040513d6020811015610f7457600080fd5b505160408051632e1a7d4d60e01b81526004810183905290519194506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21691632e1a7d4d9160248082019260009290919082900301818387803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505061101b565b6110186001600160a01b038a163063ffffffff6124b316565b92505b8683101561105a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806129f4602a913960400191505060405180910390fd5b6110746001600160a01b038a16338563ffffffff61254016565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878b87604051808381526020018281526020019250505060405180910390a4600154600160a81b900460ff1680156111c357600061fde86110fa5a859063ffffffff6125af16565b8161110157fe5b04905060008260ff168211611116578161111b565b8260ff165b9050806117c002616c3e015a11156111c0577f0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c6001600160a01b0316636366b936826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561119357600080fd5b505af11580156111a7573d6000803e3d6000fd5b505050506040513d60208110156111bd57600080fd5b50505b50505b505050979650505050505050565b60008142811015611222576040805162461bcd60e51b81526020600482015260166024820152751113d113d58c541c9bde1e4c0c4e881156141254915160521b604482015290519081900360640190fd5b84518651146112625760405162461bcd60e51b815260040180806020018281038252602681526020018061297e6026913960400191505060405180910390fd5b600061127d6001600160a01b038b163363ffffffff6125f816565b90506001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461133f576040805163052f523360e11b81526001600160a01b038d81166004830152336024830152306044830152606482018c905291517f000000000000000000000000cb859ea579b28e02b87a1fde08d087ab9dbe514990921691630a5ea4669160848082019260009290919082900301818387803b15801561132257600080fd5b505af1158015611336573d6000803e3d6000fd5b505050506113f2565b88341461137d5760405162461bcd60e51b81526004018080602001828103825260238152602001806129d16023913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db08a6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113d857600080fd5b505af11580156113ec573d6000803e3d6000fd5b50505050505b60005b87518160ff161015611a83576000888260ff168151811061141257fe5b60200260200101519050878260ff168151811061142b57fe5b602002602001015160ff16600014156115d2576000816001600160a01b0316634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561147b57600080fd5b505af115801561148f573d6000803e3d6000fd5b505050506040513d60208110156114a557600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156114f357600080fd5b505afa158015611507573d6000803e3d6000fd5b505050506040513d602081101561151d57600080fd5b5051905061153b6001600160a01b038316848363ffffffff6123e916565b826001600160a01b0316638dae73338260006040518363ffffffff1660e01b815260040180838152602001828152602001806020018281038252600081526020016020019350505050602060405180830381600087803b15801561159e57600080fd5b505af11580156115b2573d6000803e3d6000fd5b505050506040513d60208110156115c857600080fd5b50611a7a92505050565b878260ff16815181106115e157fe5b602002602001015160ff1660011415611829576000816001600160a01b031663d4b970466040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b505050506040513d602081101561165b57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156116a957600080fd5b505afa1580156116bd573d6000803e3d6000fd5b505050506040513d60208110156116d357600080fd5b505190506116f16001600160a01b038316848363ffffffff6123e916565b6040805163ca19ebd960e01b81526001600160a01b0385811660048301526024820184905291516000927f000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb169163ca19ebd9916044808301926020929190829003018186803b15801561176357600080fd5b505afa158015611777573d6000803e3d6000fd5b505050506040513d602081101561178d57600080fd5b50516040805163733e738360e11b815260048101839052602481018590526060604482015260006064820181905291519293506001600160a01b0387169263e67ce7069260a480840193602093929083900390910190829087803b1580156117f457600080fd5b505af1158015611808573d6000803e3d6000fd5b505050506040513d602081101561181e57600080fd5b50611a7a9350505050565b60008760008151811061183857fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189557600080fd5b505afa1580156118a9573d6000803e3d6000fd5b505050506040513d60208110156118bf57600080fd5b505188519091506118f990839083908b906000906118d957fe5b60200260200101516001600160a01b03166123e99092919063ffffffff16565b816001600160a01b03166338ed17398260008b308c6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561198757818101518382015260200161196f565b505050509050019650505050505050600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156119ed57600080fd5b8101908080516040519392919084600160201b821115611a0c57600080fd5b908301906020820185811115611a2157600080fd5b82518660208202830111600160201b82111715611a3d57600080fd5b82525081516020918201928201910280838360005b83811015611a6a578181015183820152602001611a52565b5050505090500160405250505050505b506001016113f5565b50611ab833611aa16001600160a01b038e163063ffffffff6125f816565b6001600160a01b038e16919063ffffffff61254016565b611aec33611ad56001600160a01b038d163063ffffffff6125f816565b6001600160a01b038d16919063ffffffff61254016565b611b1581611b096001600160a01b038d163363ffffffff6125f816565b9063ffffffff6125af16565b925087831015611b565760405162461bcd60e51b815260040180806020018281038252602a8152602001806129f4602a913960400191505060405180910390fd5b336001600160a01b03168a6001600160a01b03168c6001600160a01b03167f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878c87604051808381526020018281526020019250505060405180910390a4600154600160b01b900460ff168015611c73578060ff166117c002616c3e0161ffff165a1115611c73577f0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c6001600160a01b0316636366b936826040518263ffffffff1660e01b8152600401808260ff168152602001915050602060405180830381600087803b158015611c4657600080fd5b505af1158015611c5a573d6000803e3d6000fd5b505050506040513d6020811015611c7057600080fd5b50505b50505098975050505050505050565b60008142811015611cd3576040805162461bcd60e51b81526020600482015260166024820152751113d113d58c541c9bde1e4c0c4e881156141254915160521b604482015290519081900360640190fd5b89896000611cf06001600160a01b0383163363ffffffff6125f816565b90506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611dc2576040805163052f523360e11b81526001600160a01b038581166004830152336024830152306044830152606482018c905291517f000000000000000000000000cb859ea579b28e02b87a1fde08d087ab9dbe514990921691630a5ea4669160848082019260009290919082900301818387803b158015611d9557600080fd5b505af1158015611da9573d6000803e3d6000fd5b50611dc2925050506001600160a01b0384168c8b6123e9565b6001600160a01b038a1660009081526002602052604090205460ff16611e195760405162461bcd60e51b8152600401808060200182810382526025815260200180612a7e6025913960400191505060405180910390fd5b60006001600160a01b03808c1690851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611e4a576000611e4c565b345b896040518082805190602001908083835b60208310611e7c5780518252601f199092019160209182019101611e5d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611ede576040519150601f19603f3d011682016040523d82523d6000602084013e611ee3565b606091505b5050905080611f235760405162461bcd60e51b815260040180806020018281038252602d8152602001806129a4602d913960400191505060405180910390fd5b611f5733611f406001600160a01b0387163063ffffffff6125f816565b6001600160a01b038716919063ffffffff61254016565b611f8b33611f746001600160a01b0386163063ffffffff6125f816565b6001600160a01b038616919063ffffffff61254016565b611fa882611b096001600160a01b0386163363ffffffff6125f816565b955088861015611fe95760405162461bcd60e51b815260040180806020018281038252602a8152602001806129f4602a913960400191505060405180910390fd5b336001600160a01b0316836001600160a01b0316856001600160a01b03167f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a52217878d8a604051808381526020018281526020019250505060405180910390a4600154600160b01b900460ff168015612106578060ff166117c002616c3e0161ffff165a1115612106577f0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c6001600160a01b0316636366b936826040518263ffffffff1660e01b8152600401808260ff168152602001915050602060405180830381600087803b1580156120d957600080fd5b505af11580156120ed573d6000803e3d6000fd5b505050506040513d602081101561210357600080fd5b50505b50505050505098975050505050505050565b7f000000000000000000000000cb859ea579b28e02b87a1fde08d087ab9dbe514981565b6001546001600160a01b0316331461218b576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f434c41494d60981b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b0316331461223a576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001805460ff928316600160b01b0260ff60b01b1994909316600160a81b0260ff60a81b199091161792909216179055565b600154600160b01b900460ff1681565b60026020526000908152604090205460ff1681565b6001546001600160a01b031681565b600154600160a81b900460ff1681565b7f000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb81565b6000546001600160a01b0316331461231f576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000546001600160a01b0316331461238e576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60408051636eb1769f60e11b81523060048201526001600160a01b038481166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b15801561243a57600080fd5b505afa15801561244e573d6000803e3d6000fd5b505050506040513d602081101561246457600080fd5b50519050818110156124ad578015612491576124916001600160a01b03851684600063ffffffff6126a216565b6124ad6001600160a01b0385168460001963ffffffff6126a216565b50505050565b6000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561250b57600080fd5b505afa15801561251f573d6000803e3d6000fd5b505050506040513d602081101561253557600080fd5b505190505b92915050565b80156125aa5761254f836127b5565b15612590576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561258a573d6000803e3d6000fd5b506125aa565b6125aa6001600160a01b038416838363ffffffff6127da16565b505050565b6000828211156125f2576040805162461bcd60e51b815260206004820152600960248201526829aaa12fa2a92927a960b91b604482015290519081900360640190fd5b50900390565b6000612603836127b5565b1561261957506001600160a01b0381163161253a565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561266f57600080fd5b505afa158015612683573d6000803e3d6000fd5b505050506040513d602081101561269957600080fd5b5051905061253a565b801580612728575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156126fa57600080fd5b505afa15801561270e573d6000803e3d6000fd5b505050506040513d602081101561272457600080fd5b5051155b6127635760405162461bcd60e51b8152600401808060200182810382526036815260200180612a486036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526125aa908490612828565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526125aa9084905b60006060836001600160a01b0316836040518082805190602001908083835b602083106128665780518252601f199092019160209182019101612847565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146128c8576040519150601f19603f3d011682016040523d82523d6000602084013e6128cd565b606091505b509150915081612924576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156124ad5780806020019051602081101561294057600080fd5b50516124ad5760405162461bcd60e51b815260040180806020018281038252602a815260200180612a1e602a913960400191505060405180910390fdfe444f444f563150726f787930313a20504152414d535f4c454e4754485f4e4f545f4d41544348444f444f563150726f787930313a2045787465726e616c205377617020657865637574696f6e204661696c6564444f444f563150726f787930313a204554485f414d4f554e545f4e4f545f4d41544348444f444f563150726f787930313a2052657475726e20616d6f756e74206973206e6f7420656e6f7567685361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365444f444f563150726f787930313a204e6f742057686974656c69737420436f6e7472616374a26469706673582212208a89d88113ff5936573f2713ee92b08ed8f3163e45c14f6370cc8fcbd4e0644c64736f6c63430006090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cb859ea579b28e02b87a1fde08d087ab9dbe5149000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c
-----Decoded View---------------
Arg [0] : dodoApporve (address): 0xCB859eA579b28e02B87A1FDE08d087ab9dbE5149
Arg [1] : dodoSellHelper (address): 0x533dA777aeDCE766CEAe696bf90f8541A4bA80Eb
Arg [2] : weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [3] : chiToken (address): 0x0000000000004946c0e9F43F4Dee607b0eF1fA1c
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb859ea579b28e02b87a1fde08d087ab9dbe5149
Arg [1] : 000000000000000000000000533da777aedce766ceae696bf90f8541a4ba80eb
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [3] : 0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c
Deployed Bytecode Sourcemap
16534:9894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16937:36;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16937:36:0;;;;;;;;;;;;;;15803:127;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15803:127:0;-1:-1:-1;;;;;15803:127:0;;:::i;16899:31::-;;;;;;;;;;;;;:::i;15170:22::-;;;;;;;;;;;;;:::i;18263:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18263:119:0;-1:-1:-1;;;;;18263:119:0;;:::i;18390:2887::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18390:2887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18390:2887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18390:2887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18390:2887:0;;;;;;;;-1:-1:-1;18390:2887:0;;-1:-1:-1;;;;;18390:2887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18390:2887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18390:2887:0;;-1:-1:-1;;18390:2887:0;;;-1:-1:-1;18390:2887:0;;-1:-1:-1;;18390:2887:0:i;:::-;;;;;;;;;;;;;;;;23289:3136;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23289:3136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23289:3136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23289:3136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23289:3136:0;;;;;;;;-1:-1:-1;23289:3136:0;;-1:-1:-1;;;;;23289:3136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23289:3136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23289:3136:0;;;;;;;;-1:-1:-1;23289:3136:0;;-1:-1:-1;;;;;23289:3136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23289:3136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23289:3136:0;;-1:-1:-1;;23289:3136:0;;;-1:-1:-1;23289:3136:0;;-1:-1:-1;;23289:3136:0:i;21285:1994::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21285:1994:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21285:1994:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21285:1994:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21285:1994:0;;-1:-1:-1;;21285:1994:0;;;-1:-1:-1;21285:1994:0;;-1:-1:-1;;21285:1994:0:i;16803:39::-;;;;;;;;;;;;;:::i;16109:228::-;;;;;;;;;;;;;:::i;17924:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17924:208:0;;;;;;;;;;;:::i;17025:38::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17070:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17070:46:0;-1:-1:-1;;;;;17070:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;15199:26;;;;;;;;;;;;;:::i;16980:38::-;;;;;;;;;;;;;:::i;16849:43::-;;;;;;;;;;;;;:::i;18140:115::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18140:115:0;-1:-1:-1;;;;;18140:115:0;;:::i;15938:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15938:163:0;-1:-1:-1;;;;;15938:163:0;;:::i;16937:36::-;;;:::o;15803:127::-;15592:13;;-1:-1:-1;;;15592:13:0;;;;15591:14;15583:43;;;;;-1:-1:-1;;;15583:43:0;;;;;;;;;;;;-1:-1:-1;;;15583:43:0;;;;;;;;;;;;;;;15889:4:::1;15873:20:::0;;-1:-1:-1;;;;15873:20:0::1;-1:-1:-1::0;;;15873:20:0::1;::::0;;;15904:18;;-1:-1:-1;;;;;15904:18:0;;::::1;-1:-1:-1::0;;;;;;15904:18:0;;::::1;::::0;;;::::1;::::0;;15803:127::o;16899:31::-;;;:::o;15170:22::-;;;-1:-1:-1;;;;;15170:22:0;;:::o;18263:119::-;15708:7;;-1:-1:-1;;;;;15708:7:0;15694:10;:21;15686:43;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18339:27:0::1;18369:5;18339:27:::0;;;:13:::1;:27;::::0;;;;:35;;-1:-1:-1;;18339:35:0::1;::::0;;18263:119::o;18390:2887::-;18697:20;18678:8;17482:15;17470:8;:27;;17462:62;;;;;-1:-1:-1;;;17462:62:0;;;;;;;;;;;;-1:-1:-1;;;17462:62:0;;;;;;;;;;;;;;;18758:10:::1;:17;18738:9;:16;:37;18730:88;;;;-1:-1:-1::0;;;18730:88:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18829:17;18849:9;18829:29:::0;-1:-1:-1;;;;;;18875:26:0;::::1;16754:42;18875:26;18871:408;;18918:178;::::0;;-1:-1:-1;;;18918:178:0;;-1:-1:-1;;;;;18918:178:0;;::::1;;::::0;::::1;::::0;19005:10:::1;18918:178:::0;;;;19042:4:::1;18918:178:::0;;;;;;;;;;;;18931:14:::1;18918:40:::0;;::::1;::::0;::::1;::::0;:178;;;;;-1:-1:-1;;18918:178:0;;;;;;;;-1:-1:-1;18918:40:0;:178;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18871:408;;;19150:15;19137:9;:28;19129:76;;;;-1:-1:-1::0;;;19129:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19226:6;-1:-1:-1::0;;;;;19220:21:0::1;;19249:15;19220:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;18871:408;19296:7;19291:1024;19313:9;:16;19309:1;:20;;;19291:1024;;;19351:19;19373:9;19383:1;19373:12;;;;;;;;;;;;;;;;19351:34;;19404:10;19415:1;19404:13;;;;;;;;;;;;;;;;:18;;19421:1;19404:18;19400:904;;;19443:19;19473:11;-1:-1:-1::0;;;;;19465:33:0::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19465:35:0;19541:44:::1;::::0;;-1:-1:-1;;;19541:44:0;;19579:4:::1;19541:44;::::0;::::1;::::0;;;19465:35;;-1:-1:-1;19519:19:0::1;::::0;-1:-1:-1;;;;;19541:29:0;::::1;::::0;::::1;::::0;:44;;;;;19465:35:::1;::::0;19541:44;;;;;;;:29;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19541:44:0;;-1:-1:-1;19604:65:0::1;-1:-1:-1::0;;;;;19604:39:0;::::1;19644:11:::0;19541:44;19604:65:::1;:39;:65;:::i;:::-;19696:11;-1:-1:-1::0;;;;;19688:34:0::1;;19723:11;19736:1;19688:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19400:904:0::1;::::0;-1:-1:-1;;;19400:904:0::1;;19783:20;19814:11;-1:-1:-1::0;;;;;19806:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19806:36:0;19883:45:::1;::::0;;-1:-1:-1;;;19883:45:0;;19922:4:::1;19883:45;::::0;::::1;::::0;;;19806:36;;-1:-1:-1;19861:19:0::1;::::0;-1:-1:-1;;;;;19883:30:0;::::1;::::0;::::1;::::0;:45;;;;;19806:36:::1;::::0;19883:45;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19883:45:0;;-1:-1:-1;19947:66:0::1;-1:-1:-1::0;;;;;19947:40:0;::::1;19988:11:::0;19883:45;19947:66:::1;:40;:66;:::i;:::-;20059:142;::::0;;-1:-1:-1;;;20059:142:0;;-1:-1:-1;;;;;20059:142:0;;::::1;;::::0;::::1;::::0;;;;;;;;;20032:24:::1;::::0;20075:18:::1;20059:55;::::0;::::1;::::0;:142;;;;;::::1;::::0;;;;;;;;:55;:142;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20059:142:0;20220:68:::1;::::0;;-1:-1:-1;;;20220:68:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;-1:-1:-1;20220:68:0;;;;;;;;20059:142;;-1:-1:-1;;;;;;20220:33:0;::::1;::::0;::::1;::::0;:68;;;;;20059:142:::1;::::0;20220:68;;;;;;;;;;;:33;:68;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;19400:904:0::1;-1:-1:-1::0;19331:3:0::1;;19291:1024;;;-1:-1:-1::0;;;;;;20331:24:0;::::1;16754:42;20331:24;20327:254;;;20387:38;::::0;;-1:-1:-1;;;20387:38:0;;20419:4:::1;20387:38;::::0;::::1;::::0;;;-1:-1:-1;;;;;20393:6:0::1;20387:23;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;:23;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20387:38:0;20440:36:::1;::::0;;-1:-1:-1;;;20440:36:0;;::::1;::::0;::::1;::::0;;;;;20387:38;;-1:-1:-1;;;;;;20446:6:0::1;20440:22;::::0;::::1;::::0;:36;;;;;-1:-1:-1;;20440:36:0;;;;;;;;-1:-1:-1;20440:22:0;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20327:254;;;20524:45;-1:-1:-1::0;;;;;20524:30:0;::::1;20563:4;20524:45;:30;:45;:::i;:::-;20509:60;;20327:254;20625:15;20609:12;:31;;20601:86;;;;-1:-1:-1::0;;;20601:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20698:59;-1:-1:-1::0;;;;;20698:33:0;::::1;20732:10;20744:12:::0;20698:59:::1;:33;:59;:::i;:::-;20816:10;-1:-1:-1::0;;;;;20783:75:0::1;20807:7;-1:-1:-1::0;;;;;20783:75:0::1;20796:9;-1:-1:-1::0;;;;;20783:75:0::1;;20828:15;20845:12;20783:75;;;;;;;;;;;;;;;;;;;;;;;;20897:21;::::0;-1:-1:-1;;;20897:21:0;::::1;;;20932::::0;;20929:341:::1;;20970:24;21024:5;20997:24;21011:9;20997::::0;;:24:::1;:13;:24;:::i;:::-;:32;;;;;;20970:59;;21044:20;21086:17;21067:36;;:16;:36;:75;;21126:16;21067:75;;;21106:17;21067:75;;;21044:98;;21180:12;21195:4;21180:19;21172:5;:27;21160:9;:39;21157:101;;;21223:11;-1:-1:-1::0;;;;;21218:26:0::1;;21245:12;21218:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;21157:101:0::1;20929:341;;;17535:1;;18390:2887:::0;;;;;;;;;;:::o;23289:3136::-;23633:20;23614:8;17482:15;17470:8;:27;;17462:62;;;;;-1:-1:-1;;;17462:62:0;;;;;;;;;;;;-1:-1:-1;;;17462:62:0;;;;;;;;;;;;;;;23693:10:::1;:17;23674:8;:15;:36;23666:87;;;;-1:-1:-1::0;;;23666:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23764:28;23795:46;-1:-1:-1::0;;;;;23795:34:0;::::1;23830:10;23795:46;:34;:46;:::i;:::-;23764:77:::0;-1:-1:-1;;;;;;23858:26:0;::::1;16754:42;23858:26;23854:408;;23901:178;::::0;;-1:-1:-1;;;23901:178:0;;-1:-1:-1;;;;;23901:178:0;;::::1;;::::0;::::1;::::0;23988:10:::1;23901:178:::0;;;;24025:4:::1;23901:178:::0;;;;;;;;;;;;23914:14:::1;23901:40:::0;;::::1;::::0;::::1;::::0;:178;;;;;-1:-1:-1;;23901:178:0;;;;;;;;-1:-1:-1;23901:40:0;:178;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23854:408;;;24133:15;24120:9;:28;24112:76;;;;-1:-1:-1::0;;;24112:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:6;-1:-1:-1::0;;;;;24203:21:0::1;;24232:15;24203:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;23854:408;24279:7;24274:1312;24296:8;:15;24292:1;:19;;;24274:1312;;;24333:15;24351:8;24360:1;24351:11;;;;;;;;;;;;;;;;24333:29;;24381:10;24392:1;24381:13;;;;;;;;;;;;;;;;:18;;24398:1;24381:18;24377:1198;;;24420:19;24450:7;-1:-1:-1::0;;;;;24442:29:0::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24442:31:0;24514:44:::1;::::0;;-1:-1:-1;;;24514:44:0;;24552:4:::1;24514:44;::::0;::::1;::::0;;;24442:31;;-1:-1:-1;24492:19:0::1;::::0;-1:-1:-1;;;;;24514:29:0;::::1;::::0;::::1;::::0;:44;;;;;24442:31:::1;::::0;24514:44;;;;;;;:29;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24514:44:0;;-1:-1:-1;24577:61:0::1;-1:-1:-1::0;;;;;24577:39:0;::::1;24617:7:::0;24514:44;24577:61:::1;:39;:61;:::i;:::-;24665:7;-1:-1:-1::0;;;;;24657:30:0::1;;24688:11;24701:1;24657:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24377:1198:0::1;::::0;-1:-1:-1;;;24377:1198:0::1;;24732:10;24743:1;24732:13;;;;;;;;;;;;;;;;:18;;24749:1;24732:18;24729:846;;;24770:20;24801:7;-1:-1:-1::0;;;;;24793:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24793:32:0;24866:45:::1;::::0;;-1:-1:-1;;;24866:45:0;;24905:4:::1;24866:45;::::0;::::1;::::0;;;24793:32;;-1:-1:-1;24844:19:0::1;::::0;-1:-1:-1;;;;;24866:30:0;::::1;::::0;::::1;::::0;:45;;;;;24793:32:::1;::::0;24866:45;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24866:45:0;;-1:-1:-1;24930:62:0::1;-1:-1:-1::0;;;;;24930:40:0;::::1;24971:7:::0;24866:45;24930:62:::1;:40;:62;:::i;:::-;25038:138;::::0;;-1:-1:-1;;;25038:138:0;;-1:-1:-1;;;;;25038:138:0;;::::1;;::::0;::::1;::::0;;;;;;;;;25011:24:::1;::::0;25054:18:::1;25038:55;::::0;::::1;::::0;:138;;;;;::::1;::::0;;;;;;;;:55;:138;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25038:138:0;25195:64:::1;::::0;;-1:-1:-1;;;25195:64:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;-1:-1:-1;25195:64:0;;;;;;;;25038:138;;-1:-1:-1;;;;;;25195:29:0;::::1;::::0;::::1;::::0;:64;;;;;25038:138:::1;::::0;25195:64;;;;;;;;;;;:29;:64;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24729:846:0::1;::::0;-1:-1:-1;;;;24729:846:0::1;;25300:19;25329:11;25341:1;25329:14;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25322:32:0::1;;25363:4;25322:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;25322:47:0::1;-1:-1:-1::0;;;;;25322:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25322:47:0;25395:14;;25322:47;;-1:-1:-1;25388:64:0::1;::::0;25431:7;;25322:47;;25395:11;;25407:1:::1;::::0;25395:14:::1;;;;;;;;;;-1:-1:-1::0;;;;;25388:42:0::1;;;:64;;;;;:::i;:::-;25476:7;-1:-1:-1::0;;;;;25471:38:0::1;;25510:11;25522:1;25524:11;25544:4;25550:8;25471:88;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25471:88:0::1;-1:-1:-1::0;;;;;25471:88:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;25471:88:0::1;::::0;::::1;;::::0;::::1;::::0;::::1;;;;;::::0;::::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;25471:88:0::1;;;;;;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;;;;;::::0;::::1;;;;;;;;;;;-1:-1:-1::0;;;25471:88:0::1;;;;;;;::::0;::::1;;::::0;;-1:-1:-1;25471:88:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;::::0;::::1;;;24729:846;;-1:-1:-1::0;24313:3:0::1;;24274:1312;;;-1:-1:-1::0;25598:137:0::1;25648:10;25673:51;-1:-1:-1::0;;;;;25673:36:0;::::1;25718:4;25673:51;:36;:51;:::i;:::-;-1:-1:-1::0;;;;;25598:35:0;::::1;::::0;:137;::::1;:35;:137;:::i;:::-;25748:133;25796:10;25821:49;-1:-1:-1::0;;;;;25821:34:0;::::1;25864:4;25821:49;:34;:49;:::i;:::-;-1:-1:-1::0;;;;;25748:33:0;::::1;::::0;:133;::::1;:33;:133;:::i;:::-;25909:72;25960:20:::0;25909:46:::1;-1:-1:-1::0;;;;;25909:34:0;::::1;25944:10;25909:46;:34;:46;:::i;:::-;:50:::0;:72:::1;:50;:72;:::i;:::-;25894:87;;26016:15;26000:12;:31;;25992:86;;;;-1:-1:-1::0;;;25992:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26129:10;-1:-1:-1::0;;;;;26096:75:0::1;26120:7;-1:-1:-1::0;;;;;26096:75:0::1;26109:9;-1:-1:-1::0;;;;;26096:75:0::1;;26141:15;26158:12;26096:75;;;;;;;;;;;;;;;;;;;;;;;;26219:21;::::0;-1:-1:-1;;;26219:21:0;::::1;;;26254:22:::0;;26251:167:::1;;26316:18;:25;;26337:4;26316:25;26308:5;:33;26296:45;;:9;:45;26293:113;;;26365:11;-1:-1:-1::0;;;;;26360:26:0::1;;26387:18;26360:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;26293:113:0::1;17535:1;;23289:3136:::0;;;;;;;;;;;:::o;21285:1994::-;21620:20;21601:8;17482:15;17470:8;:27;;17462:62;;;;;-1:-1:-1;;;17462:62:0;;;;;;;;;;;;-1:-1:-1;;;17462:62:0;;;;;;;;;;;;;;;21674:9;21713:7;21653:18:::1;21772:47;-1:-1:-1::0;;;;;21772:35:0;::::1;21808:10;21772:47;:35;:47;:::i;:::-;21741:78:::0;-1:-1:-1;;;;;;21836:27:0;::::1;16754:42;21836:27;21832:324;;21880:179;::::0;;-1:-1:-1;;;21880:179:0;;-1:-1:-1;;;;;21880:179:0;;::::1;;::::0;::::1;::::0;21968:10:::1;21880:179:::0;;;;22005:4:::1;21880:179:::0;;;;;;;;;;;;21893:14:::1;21880:40:::0;;::::1;::::0;::::1;::::0;:179;;;;;-1:-1:-1;;21880:179:0;;;;;;;;-1:-1:-1;21880:40:0;:179;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;22074:70:0::1;::::0;-1:-1:-1;;;;;;;;22074:38:0;::::1;22113:13:::0;22128:15;22074:38:::1;:70::i;:::-;-1:-1:-1::0;;;;;22176:25:0;::::1;;::::0;;;:13:::1;:25;::::0;;;;;::::1;;22168:75;;;;-1:-1:-1::0;;;22168:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22255:12;-1:-1:-1::0;;;;;22273:15:0;;::::1;::::0;22296:27;::::1;16754:42;22296:27;:43;;22338:1;22296:43;;;22326:9;22296:43;22341:14;22273:83;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;22273:83:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22254:102;;;22377:7;22369:65;;;;-1:-1:-1::0;;;22369:65:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22447:139;22498:10;22523:52;-1:-1:-1::0;;;;;22523:37:0;::::1;22569:4;22523:52;:37;:52;:::i;:::-;-1:-1:-1::0;;;;;22447:36:0;::::1;::::0;:139;::::1;:36;:139;:::i;:::-;22599:135;22648:10;22673:50;-1:-1:-1::0;;;;;22673:35:0;::::1;22717:4;22673:50;:35;:50;:::i;:::-;-1:-1:-1::0;;;;;22599:34:0;::::1;::::0;:135;::::1;:34;:135;:::i;:::-;22760:73;22812:20:::0;22760:47:::1;-1:-1:-1::0;;;;;22760:35:0;::::1;22796:10;22760:47;:35;:47;:::i;:73::-;22745:88;;22868:15;22852:12;:31;;22844:86;;;;-1:-1:-1::0;;;22844:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22983:10;-1:-1:-1::0;;;;;22948:77:0::1;22973:8;-1:-1:-1::0;;;;;22948:77:0::1;22961:10;-1:-1:-1::0;;;;;22948:77:0::1;;22995:15;23012:12;22948:77;;;;;;;;;;;;;;;;;;;;;;;;23073:21;::::0;-1:-1:-1;;;23073:21:0;::::1;;;23108:22:::0;;23105:167:::1;;23170:18;:25;;23191:4;23170:25;23162:5;:33;23150:45;;:9;:45;23147:113;;;23219:11;-1:-1:-1::0;;;;;23214:26:0::1;;23241:18;23214:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23147:113:0::1;17535:1;;;;;21285:1994:::0;;;;;;;;;;;:::o;16803:39::-;;;:::o;16109:228::-;16175:11;;-1:-1:-1;;;;;16175:11:0;16161:10;:25;16153:51;;;;;-1:-1:-1;;;16153:51:0;;;;;;;;;;;;-1:-1:-1;;;16153:51:0;;;;;;;;;;;;;;;16250:11;;;16241:7;;16220:42;;-1:-1:-1;;;;;16250:11:0;;;;16241:7;;;;16220:42;;;16283:11;;;;16273:21;;-1:-1:-1;;;;;;16273:21:0;;;-1:-1:-1;;;;;16283:11:0;;16273:21;;;;16305:24;;;16109:228::o;17924:208::-;15708:7;;-1:-1:-1;;;;;15708:7:0;15694:10;:21;15686:43;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;;;;18029:21:::1;:40:::0;;::::1;18080:44:::0;;::::1;-1:-1:-1::0;;;18080:44:0::1;-1:-1:-1::0;;;;18029:40:0;;;::::1;-1:-1:-1::0;;;18029:40:0::1;-1:-1:-1::0;;;;18029:40:0;;::::1;;18080:44:::0;;;::::1;;::::0;;17924:208::o;17025:38::-;;;-1:-1:-1;;;17025:38:0;;;;;:::o;17070:46::-;;;;;;;;;;;;;;;:::o;15199:26::-;;;-1:-1:-1;;;;;15199:26:0;;:::o;16980:38::-;;;-1:-1:-1;;;16980:38:0;;;;;:::o;16849:43::-;;;:::o;18140:115::-;15708:7;;-1:-1:-1;;;;;15708:7:0;15694:10;:21;15686:43;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18213:27:0::1;;::::0;;;:13:::1;:27;::::0;;;;:34;;-1:-1:-1;;18213:34:0::1;18243:4;18213:34;::::0;;18140:115::o;15938:163::-;15708:7;;-1:-1:-1;;;;;15708:7:0;15694:10;:21;15686:43;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;-1:-1:-1;;;15686:43:0;;;;;;;;;;;;;;;16042:7:::1;::::0;;16016:44:::1;::::0;-1:-1:-1;;;;;16016:44:0;;::::1;::::0;16042:7;::::1;::::0;16016:44:::1;::::0;::::1;16071:11;:22:::0;;-1:-1:-1;;;;;;16071:22:0::1;-1:-1:-1::0;;;;;16071:22:0;;;::::1;::::0;;;::::1;::::0;;15938:163::o;7815:374::-;7960:34;;;-1:-1:-1;;;7960:34:0;;7984:4;7960:34;;;;-1:-1:-1;;;;;7960:34:0;;;;;;;;;7940:17;;7960:15;;;;;:34;;;;;;;;;;;;;;:15;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7960:34:0;;-1:-1:-1;8009:18:0;;;8005:177;;;8048:13;;8044:78;;8082:24;-1:-1:-1;;;;;8082:17:0;;8100:2;8104:1;8082:24;:17;:24;:::i;:::-;8136:34;-1:-1:-1;;;;;8136:17:0;;8154:2;-1:-1:-1;;8136:34:0;:17;:34;:::i;:::-;7815:374;;;;:::o;8433:129::-;8507:7;8534:5;-1:-1:-1;;;;;8534:15:0;;8550:3;8534:20;;;;;;;;;;;;;-1:-1:-1;;;;;8534:20:0;-1:-1:-1;;;;;8534:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8534:20:0;;-1:-1:-1;8433:129:0;;;;;:::o;7484:323::-;7619:10;;7615:185;;7650:12;7656:5;7650;:12::i;:::-;7646:143;;;7683:19;;-1:-1:-1;;;;;7683:11:0;;;:19;;;;;7695:6;;7683:19;;;;7695:6;7683:11;:19;;;;;;;;;;;;;;;;;;;;;7646:143;;;7743:30;-1:-1:-1;;;;;7743:18:0;;7762:2;7766:6;7743:30;:18;:30;:::i;:::-;7484:323;;;:::o;3505:137::-;3563:7;3596:1;3591;:6;;3583:28;;;;;-1:-1:-1;;;3583:28:0;;;;;;;;;;;;-1:-1:-1;;;3583:28:0;;;;;;;;;;;;;;;-1:-1:-1;3629:5:0;;;3505:137::o;8197:228::-;8275:7;8299:12;8305:5;8299;:12::i;:::-;8295:123;;;-1:-1:-1;;;;;;8335:11:0;;;8328:18;;8295:123;8386:5;-1:-1:-1;;;;;8386:15:0;;8402:3;8386:20;;;;;;;;;;;;;-1:-1:-1;;;;;8386:20:0;-1:-1:-1;;;;;8386:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8386:20:0;;-1:-1:-1;8379:27:0;;5113:670;5531:10;;;5530:62;;-1:-1:-1;5547:39:0;;;-1:-1:-1;;;5547:39:0;;5571:4;5547:39;;;;-1:-1:-1;;;;;5547:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5547:39:0;:44;5530:62;5508:166;;;;-1:-1:-1;;;5508:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5712:62;;;-1:-1:-1;;;;;5712:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5712:62:0;-1:-1:-1;;;5712:62:0;;;5685:90;;5705:5;;5685:19;:90::i;8570:104::-;-1:-1:-1;;;;;8646:20:0;;7432:42;8646:20;8570:104;;;:::o;4601:211::-;4745:58;;;-1:-1:-1;;;;;4745:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4745:58:0;-1:-1:-1;;;4745:58:0;;;4718:86;;4738:5;;6174:1046;6834:12;6848:23;6883:5;-1:-1:-1;;;;;6875:19:0;6895:4;6875:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6875:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6833:67;;;;6919:7;6911:52;;;;;-1:-1:-1;;;6911:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6980:17;;:21;6976:237;;7135:10;7124:30;;;;;;;;;;;;;;;-1:-1:-1;7124:30:0;7116:85;;;;-1:-1:-1;;;7116:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://8a89d88113ff5936573f2713ee92b08ed8f3163e45c14f6370cc8fcbd4e0644c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.