Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UniswapWrapperV3
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-18 */ // SPDX-License-Identifier: MIT pragma solidity =0.7.6; interface IERC20 { function totalSupply() external view returns (uint256 supply); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom( address _from, address _to, uint256 _value ) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function decimals() external view returns (uint256 digits); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } abstract contract IWETH { function allowance(address, address) public virtual returns (uint256); function balanceOf(address) public virtual returns (uint256); function approve(address, uint256) public virtual; function transfer(address, uint256) public virtual returns (bool); function transferFrom( address, address, uint256 ) public virtual returns (bool); function deposit() public payable virtual; function withdraw(uint256) public virtual; } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeERC20 { using SafeMath for uint256; using Address for address; 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) ); } /// @dev Edited so it always first approves 0 and then the value, because of non standard tokens function safeApprove( IERC20 token, address spender, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance) ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall( data, "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"); } } } library TokenUtils { using SafeERC20 for IERC20; address public constant WETH_ADDR = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address public constant ETH_ADDR = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; function approveToken( address _tokenAddr, address _to, uint256 _amount ) internal { if (_tokenAddr == ETH_ADDR) return; if (IERC20(_tokenAddr).allowance(address(this), _to) < _amount) { IERC20(_tokenAddr).safeApprove(_to, _amount); } } function pullTokensIfNeeded( address _token, address _from, uint256 _amount ) internal returns (uint256) { // handle max uint amount if (_amount == type(uint256).max) { uint256 userAllowance = IERC20(_token).allowance(_from, address(this)); uint256 balance = getBalance(_token, _from); // pull max allowance amount if balance is bigger than allowance _amount = (balance > userAllowance) ? userAllowance : balance; } if (_from != address(0) && _from != address(this) && _token != ETH_ADDR && _amount != 0) { IERC20(_token).safeTransferFrom(_from, address(this), _amount); } return _amount; } function withdrawTokens( address _token, address _to, uint256 _amount ) internal returns (uint256) { if (_amount == type(uint256).max) { _amount = getBalance(_token, address(this)); } if (_to != address(0) && _to != address(this) && _amount != 0) { if (_token != ETH_ADDR) { IERC20(_token).safeTransfer(_to, _amount); } else { payable(_to).transfer(_amount); } } return _amount; } function depositWeth(uint256 _amount) internal { IWETH(WETH_ADDR).deposit{value: _amount}(); } function withdrawWeth(uint256 _amount) internal { IWETH(WETH_ADDR).withdraw(_amount); } function getBalance(address _tokenAddr, address _acc) internal view returns (uint256) { if (_tokenAddr == ETH_ADDR) { return _acc.balance; } else { return IERC20(_tokenAddr).balanceOf(_acc); } } function getTokenDecimals(address _token) internal view returns (uint256) { if (_token == ETH_ADDR) return 18; return IERC20(_token).decimals(); } } interface IExchangeV3 { function sell(address _srcAddr, address _destAddr, uint _srcAmount, bytes memory _additionalData) external returns (uint); function buy(address _srcAddr, address _destAddr, uint _destAmount, bytes memory _additionalData) external returns(uint); function getSellRate(address _srcAddr, address _destAddr, uint _srcAmount, bytes memory _additionalData) external view returns (uint); function getBuyRate(address _srcAddr, address _destAddr, uint _srcAmount, bytes memory _additionalData) external view returns (uint); } abstract contract IUniswapRouter { function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual returns (uint256[] memory amounts); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual returns (uint256[] memory amounts); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual returns (uint256 amountA, uint256 amountB); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual returns (uint256 amountB); function getAmountsOut(uint256 amountIn, address[] memory path) public view virtual returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] memory path) public view virtual returns (uint256[] memory amounts); } contract DSMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, ""); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, ""); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, ""); } function div(uint256 x, uint256 y) internal pure returns (uint256 z) { return x / y; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { return x <= y ? x : y; } function max(uint256 x, uint256 y) internal pure returns (uint256 z) { return x >= y ? x : y; } function imin(int256 x, int256 y) internal pure returns (int256 z) { return x <= y ? x : y; } function imax(int256 x, int256 y) internal pure returns (int256 z) { return x >= y ? x : y; } uint256 constant WAD = 10**18; uint256 constant RAY = 10**27; function wmul(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint256 x, uint256 y) internal pure returns (uint256 z) { z = add(mul(x, RAY), y / 2) / y; } // This famous algorithm is called "exponentiation by squaring" // and calculates x^n with x as fixed-point and n as regular unsigned. // // It's O(log n), instead of O(n) for naive repeated multiplication. // // These facts are why it works: // // If n is even, then x^n = (x^2)^(n/2). // If n is odd, then x^n = x * x^(n-1), // and applying the equation for even x gives // x^n = x * (x^2)^((n-1) / 2). // // Also, EVM division is flooring and // floor[(n-1) / 2] = floor[n / 2]. // function rpow(uint256 x, uint256 n) internal pure returns (uint256 z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } abstract contract IDFSRegistry { function getAddr(bytes32 _id) public view virtual returns (address); function addNewContract( bytes32 _id, address _contractAddr, uint256 _waitPeriod ) public virtual; function startContractChange(bytes32 _id, address _newContractAddr) public virtual; function approveContractChange(bytes32 _id) public virtual; function cancelContractChange(bytes32 _id) public virtual; function changeWaitPeriod(bytes32 _id, uint256 _newWaitPeriod) public virtual; } /// @title A stateful contract that holds and can change owner/admin contract AdminVault { address public owner; address public admin; constructor() { owner = msg.sender; admin = 0x25eFA336886C74eA8E282ac466BdCd0199f85BB9; } /// @notice Admin is able to change owner /// @param _owner Address of new owner function changeOwner(address _owner) public { require(admin == msg.sender, "msg.sender not admin"); owner = _owner; } /// @notice Admin is able to set new admin /// @param _admin Address of multisig that becomes new admin function changeAdmin(address _admin) public { require(admin == msg.sender, "msg.sender not admin"); admin = _admin; } } /// @title AdminAuth Handles owner/admin privileges over smart contracts contract AdminAuth { using SafeERC20 for IERC20; address public constant ADMIN_VAULT_ADDR = 0xCCf3d848e08b94478Ed8f46fFead3008faF581fD; AdminVault public constant adminVault = AdminVault(ADMIN_VAULT_ADDR); modifier onlyOwner() { require(adminVault.owner() == msg.sender, "msg.sender not owner"); _; } modifier onlyAdmin() { require(adminVault.admin() == msg.sender, "msg.sender not admin"); _; } /// @notice withdraw stuck funds function withdrawStuckFunds(address _token, address _receiver, uint256 _amount) public onlyOwner { if (_token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { payable(_receiver).transfer(_amount); } else { IERC20(_token).safeTransfer(_receiver, _amount); } } /// @notice Destroy the contract function kill() public onlyAdmin { selfdestruct(payable(msg.sender)); } } /// @title DFS exchange wrapper for UniswapV2 contract UniswapWrapperV3 is DSMath, IExchangeV3, AdminAuth { using TokenUtils for address; address public constant KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; IUniswapRouter public constant router = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); using SafeERC20 for IERC20; /// @notice Sells a _srcAmount of tokens at UniswapV2 /// @param _srcAddr From token /// @param _srcAmount From amount /// @return uint Destination amount function sell(address _srcAddr, address, uint _srcAmount, bytes memory _additionalData) external override returns (uint) { uint[] memory amounts; address[] memory path = abi.decode(_additionalData, (address[])); IERC20(_srcAddr).safeApprove(address(router), _srcAmount); amounts = router.swapExactTokensForTokens(_srcAmount, 1, path, msg.sender, block.timestamp + 1); return amounts[amounts.length - 1]; } /// @notice Buys a _destAmount of tokens at UniswapV2 /// @param _srcAddr From token /// @param _destAmount To amount /// @return uint srcAmount function buy(address _srcAddr, address, uint _destAmount, bytes memory _additionalData) external override returns(uint) { uint[] memory amounts; address[] memory path = abi.decode(_additionalData, (address[])); uint srcAmount = _srcAddr.getBalance(address(this)); IERC20(_srcAddr).safeApprove(address(router), srcAmount); amounts = router.swapTokensForExactTokens(_destAmount, type(uint).max, path, msg.sender, block.timestamp + 1); // Send the leftover from the source token back sendLeftOver(_srcAddr); return amounts[0]; } /// @notice Return a rate for which we can sell an amount of tokens /// @param _srcAddr From token /// @param _destAddr To token /// @param _srcAmount From amount /// @return uint Rate function getSellRate(address _srcAddr, address _destAddr, uint _srcAmount, bytes memory _additionalData) public override view returns (uint) { address[] memory path = abi.decode(_additionalData, (address[])); uint[] memory amounts = router.getAmountsOut(_srcAmount, path); return wdiv(amounts[amounts.length - 1], _srcAmount); } /// @notice Return a rate for which we can buy an amount of tokens /// @param _srcAddr From token /// @param _destAddr To token /// @param _destAmount To amount /// @return uint Rate function getBuyRate(address _srcAddr, address _destAddr, uint _destAmount, bytes memory _additionalData) public override view returns (uint) { address[] memory path = abi.decode(_additionalData, (address[])); uint[] memory amounts = router.getAmountsIn(_destAmount, path); return wdiv(_destAmount, amounts[0]); } /// @notice Send any leftover tokens, we use to clear out srcTokens after buy /// @param _srcAddr Source token address function sendLeftOver(address _srcAddr) internal { msg.sender.transfer(address(this).balance); if (_srcAddr != KYBER_ETH_ADDRESS) { IERC20(_srcAddr).safeTransfer(msg.sender, IERC20(_srcAddr).balanceOf(address(this))); } } // solhint-disable-next-line no-empty-blocks receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"ADMIN_VAULT_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KYBER_ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminVault","outputs":[{"internalType":"contract AdminVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_srcAddr","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_destAmount","type":"uint256"},{"internalType":"bytes","name":"_additionalData","type":"bytes"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_srcAddr","type":"address"},{"internalType":"address","name":"_destAddr","type":"address"},{"internalType":"uint256","name":"_destAmount","type":"uint256"},{"internalType":"bytes","name":"_additionalData","type":"bytes"}],"name":"getBuyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_srcAddr","type":"address"},{"internalType":"address","name":"_destAddr","type":"address"},{"internalType":"uint256","name":"_srcAmount","type":"uint256"},{"internalType":"bytes","name":"_additionalData","type":"bytes"}],"name":"getSellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_srcAddr","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_srcAmount","type":"uint256"},{"internalType":"bytes","name":"_additionalData","type":"bytes"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506116d9806100206000396000f3fe6080604052600436106100955760003560e01c80635b6f36fc116100595780635b6f36fc1461036e5780638cedca711461043f578063c579d49014610454578063cd4709cb1461043f578063f887ea40146104975761009c565b806329f7fc9e146100a15780633924db66146100d257806341c0e1b5146101b557806349d66644146101cc57806354123c121461029d5761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100b66104ac565b604080516001600160a01b039092168252519081900360200190f35b3480156100de57600080fd5b506101a3600480360360808110156100f557600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561012f57600080fd5b82018360208201111561014157600080fd5b803590602001918460018302840111600160201b8311171561016257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104c4945050505050565b60408051918252519081900360200190f35b3480156101c157600080fd5b506101ca61076e565b005b3480156101d857600080fd5b506101a3600480360360808110156101ef57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561022957600080fd5b82018360208201111561023b57600080fd5b803590602001918460018302840111600160201b8311171561025c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610846945050505050565b3480156102a957600080fd5b506101a3600480360360808110156102c057600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156102fa57600080fd5b82018360208201111561030c57600080fd5b803590602001918460018302840111600160201b8311171561032d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a73945050505050565b34801561037a57600080fd5b506101a36004803603608081101561039157600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156103cb57600080fd5b8201836020820111156103dd57600080fd5b803590602001918460018302840111600160201b831117156103fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c98945050505050565b34801561044b57600080fd5b506100b6610f23565b34801561046057600080fd5b506101ca6004803603606081101561047757600080fd5b506001600160a01b03813581169160208101359091169060400135610f3b565b3480156104a357600080fd5b506100b661108a565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000606060008380602001905160208110156104df57600080fd5b8101908080516040519392919084600160201b8211156104fe57600080fd5b90830190602082018581111561051357600080fd5b82518660208202830111600160201b8211171561052f57600080fd5b82525081516020918201928201910280838360005b8381101561055c578181015183820152602001610544565b505050509050016040525050509050600061058930896001600160a01b03166110a290919063ffffffff16565b90506105b36001600160a01b038916737a250d5630b4cf539739df2c5dacb4c659f2488d8361115c565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316638803dbee876000198533426001016040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610650578181015183820152602001610638565b505050509050019650505050505050600060405180830381600087803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156106b657600080fd5b8101908080516040519392919084600160201b8211156106d557600080fd5b9083019060208201858111156106ea57600080fd5b82518660208202830111600160201b8211171561070657600080fd5b82525081516020918201928201910280838360005b8381101561073357818101518382015260200161071b565b50505050905001604052505050925061074b88611203565b8260008151811061075857fe5b602002602001015193505050505b949350505050565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c557600080fd5b505afa1580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b50516001600160a01b031614610843576040805162461bcd60e51b815260206004820152601460248201527336b9b39739b2b73232b9103737ba1030b236b4b760611b604482015290519081900360640190fd5b33ff5b60008082806020019051602081101561085e57600080fd5b8101908080516040519392919084600160201b82111561087d57600080fd5b90830190602082018581111561089257600080fd5b82518660208202830111600160201b821117156108ae57600080fd5b82525081516020918201928201910280838360005b838110156108db5781810151838201526020016108c3565b505050509190910160408181526307c0329d60e21b8252600482018b815260248301918252875160448401528751979850600097737a250d5630b4cf539739df2c5dacb4c659f2488d9750631f00ca7496508c9550899450909260640190602080860191028083838c5b8381101561095d578181015183820152602001610945565b50505050905001935050505060006040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156109be57600080fd5b8101908080516040519392919084600160201b8211156109dd57600080fd5b9083019060208201858111156109f257600080fd5b82518660208202830111600160201b82111715610a0e57600080fd5b82525081516020918201928201910280838360005b83811015610a3b578181015183820152602001610a23565b505050509050016040525050509050610a688582600081518110610a5b57fe5b60200260200101516112e5565b979650505050505050565b600080828060200190516020811015610a8b57600080fd5b8101908080516040519392919084600160201b821115610aaa57600080fd5b908301906020820185811115610abf57600080fd5b82518660208202830111600160201b82111715610adb57600080fd5b82525081516020918201928201910280838360005b83811015610b08578181015183820152602001610af0565b5050505091909101604081815263d06ca61f60e01b8252600482018b815260248301918252875160448401528751979850600097737a250d5630b4cf539739df2c5dacb4c659f2488d975063d06ca61f96508c9550899450909260640190602080860191028083838c5b83811015610b8a578181015183820152602001610b72565b50505050905001935050505060006040518083038186803b158015610bae57600080fd5b505afa158015610bc2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610beb57600080fd5b8101908080516040519392919084600160201b821115610c0a57600080fd5b908301906020820185811115610c1f57600080fd5b82518660208202830111600160201b82111715610c3b57600080fd5b82525081516020918201928201910280838360005b83811015610c68578181015183820152602001610c50565b505050509050016040525050509050610a6881600183510381518110610c8a57fe5b6020026020010151866112e5565b600060606000838060200190516020811015610cb357600080fd5b8101908080516040519392919084600160201b821115610cd257600080fd5b908301906020820185811115610ce757600080fd5b82518660208202830111600160201b82111715610d0357600080fd5b82525081516020918201928201910280838360005b83811015610d30578181015183820152602001610d18565b505050509050016040525050509050610d71737a250d5630b4cf539739df2c5dacb4c659f2488d86896001600160a01b031661115c9092919063ffffffff16565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398660018433426001016040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610e0d578181015183820152602001610df5565b505050509050019650505050505050600060405180830381600087803b158015610e3657600080fd5b505af1158015610e4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610e7357600080fd5b8101908080516040519392919084600160201b821115610e9257600080fd5b908301906020820185811115610ea757600080fd5b82518660208202830111600160201b82111715610ec357600080fd5b82525081516020918201928201910280838360005b83811015610ef0578181015183820152602001610ed8565b50505050905001604052505050915081600183510381518110610f0f57fe5b602002602001015192505050949350505050565b73ccf3d848e08b94478ed8f46ffead3008faf581fd81565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9257600080fd5b505afa158015610fa6573d6000803e3d6000fd5b505050506040513d6020811015610fbc57600080fd5b50516001600160a01b031614611010576040805162461bcd60e51b815260206004820152601460248201527336b9b39739b2b73232b9103737ba1037bbb732b960611b604482015290519081900360640190fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0384161415611071576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561106b573d6000803e3d6000fd5b50611085565b6110856001600160a01b0384168383611315565b505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156110da57506001600160a01b03811631611156565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b505190505b92915050565b604080516001600160a01b038416602482015260006044808301919091528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526111b1908490611363565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611085908490611363565b60405133904780156108fc02916000818181858888f1935050505015801561122f573d6000803e3d6000fd5b506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146112e2576112e233826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b50516001600160a01b0384169190611315565b50565b6000816113066112fd85670de0b6b3a7640000611414565b6002850461145a565b8161130d57fe5b049392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110859084905b60006113b8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661148c9092919063ffffffff16565b805190915015611085578080602001905160208110156113d757600080fd5b50516110855760405162461bcd60e51b815260040180806020018281038252602a81526020018061167a602a913960400191505060405180910390fd5b600081158061142f5750508082028282828161142c57fe5b04145b611156576040805162461bcd60e51b8152602060048201526000602482015290519081900360440190fd5b80820182811015611156576040805162461bcd60e51b8152602060048201526000602482015290519081900360440190fd5b6060610766848460008560606114a185611640565b6114f2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106115305780518252601f199092019160209182019101611511565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611592576040519150601f19603f3d011682016040523d82523d6000602084013e611597565b606091505b509150915081156115ab5791506107669050565b8051156115bb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116055781810151838201526020016115ed565b50505050905090810190601f1680156116325780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061076657505015159291505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220647638e5469b001b9bc6dcccc8b84e8ba4552ef7b598831b0d4e26d5005e712a64736f6c63430007060033
Deployed Bytecode
0x6080604052600436106100955760003560e01c80635b6f36fc116100595780635b6f36fc1461036e5780638cedca711461043f578063c579d49014610454578063cd4709cb1461043f578063f887ea40146104975761009c565b806329f7fc9e146100a15780633924db66146100d257806341c0e1b5146101b557806349d66644146101cc57806354123c121461029d5761009c565b3661009c57005b600080fd5b3480156100ad57600080fd5b506100b66104ac565b604080516001600160a01b039092168252519081900360200190f35b3480156100de57600080fd5b506101a3600480360360808110156100f557600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561012f57600080fd5b82018360208201111561014157600080fd5b803590602001918460018302840111600160201b8311171561016257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104c4945050505050565b60408051918252519081900360200190f35b3480156101c157600080fd5b506101ca61076e565b005b3480156101d857600080fd5b506101a3600480360360808110156101ef57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561022957600080fd5b82018360208201111561023b57600080fd5b803590602001918460018302840111600160201b8311171561025c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610846945050505050565b3480156102a957600080fd5b506101a3600480360360808110156102c057600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156102fa57600080fd5b82018360208201111561030c57600080fd5b803590602001918460018302840111600160201b8311171561032d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a73945050505050565b34801561037a57600080fd5b506101a36004803603608081101561039157600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156103cb57600080fd5b8201836020820111156103dd57600080fd5b803590602001918460018302840111600160201b831117156103fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c98945050505050565b34801561044b57600080fd5b506100b6610f23565b34801561046057600080fd5b506101ca6004803603606081101561047757600080fd5b506001600160a01b03813581169160208101359091169060400135610f3b565b3480156104a357600080fd5b506100b661108a565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000606060008380602001905160208110156104df57600080fd5b8101908080516040519392919084600160201b8211156104fe57600080fd5b90830190602082018581111561051357600080fd5b82518660208202830111600160201b8211171561052f57600080fd5b82525081516020918201928201910280838360005b8381101561055c578181015183820152602001610544565b505050509050016040525050509050600061058930896001600160a01b03166110a290919063ffffffff16565b90506105b36001600160a01b038916737a250d5630b4cf539739df2c5dacb4c659f2488d8361115c565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316638803dbee876000198533426001016040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610650578181015183820152602001610638565b505050509050019650505050505050600060405180830381600087803b15801561067957600080fd5b505af115801561068d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156106b657600080fd5b8101908080516040519392919084600160201b8211156106d557600080fd5b9083019060208201858111156106ea57600080fd5b82518660208202830111600160201b8211171561070657600080fd5b82525081516020918201928201910280838360005b8381101561073357818101518382015260200161071b565b50505050905001604052505050925061074b88611203565b8260008151811061075857fe5b602002602001015193505050505b949350505050565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c557600080fd5b505afa1580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b50516001600160a01b031614610843576040805162461bcd60e51b815260206004820152601460248201527336b9b39739b2b73232b9103737ba1030b236b4b760611b604482015290519081900360640190fd5b33ff5b60008082806020019051602081101561085e57600080fd5b8101908080516040519392919084600160201b82111561087d57600080fd5b90830190602082018581111561089257600080fd5b82518660208202830111600160201b821117156108ae57600080fd5b82525081516020918201928201910280838360005b838110156108db5781810151838201526020016108c3565b505050509190910160408181526307c0329d60e21b8252600482018b815260248301918252875160448401528751979850600097737a250d5630b4cf539739df2c5dacb4c659f2488d9750631f00ca7496508c9550899450909260640190602080860191028083838c5b8381101561095d578181015183820152602001610945565b50505050905001935050505060006040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156109be57600080fd5b8101908080516040519392919084600160201b8211156109dd57600080fd5b9083019060208201858111156109f257600080fd5b82518660208202830111600160201b82111715610a0e57600080fd5b82525081516020918201928201910280838360005b83811015610a3b578181015183820152602001610a23565b505050509050016040525050509050610a688582600081518110610a5b57fe5b60200260200101516112e5565b979650505050505050565b600080828060200190516020811015610a8b57600080fd5b8101908080516040519392919084600160201b821115610aaa57600080fd5b908301906020820185811115610abf57600080fd5b82518660208202830111600160201b82111715610adb57600080fd5b82525081516020918201928201910280838360005b83811015610b08578181015183820152602001610af0565b5050505091909101604081815263d06ca61f60e01b8252600482018b815260248301918252875160448401528751979850600097737a250d5630b4cf539739df2c5dacb4c659f2488d975063d06ca61f96508c9550899450909260640190602080860191028083838c5b83811015610b8a578181015183820152602001610b72565b50505050905001935050505060006040518083038186803b158015610bae57600080fd5b505afa158015610bc2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610beb57600080fd5b8101908080516040519392919084600160201b821115610c0a57600080fd5b908301906020820185811115610c1f57600080fd5b82518660208202830111600160201b82111715610c3b57600080fd5b82525081516020918201928201910280838360005b83811015610c68578181015183820152602001610c50565b505050509050016040525050509050610a6881600183510381518110610c8a57fe5b6020026020010151866112e5565b600060606000838060200190516020811015610cb357600080fd5b8101908080516040519392919084600160201b821115610cd257600080fd5b908301906020820185811115610ce757600080fd5b82518660208202830111600160201b82111715610d0357600080fd5b82525081516020918201928201910280838360005b83811015610d30578181015183820152602001610d18565b505050509050016040525050509050610d71737a250d5630b4cf539739df2c5dacb4c659f2488d86896001600160a01b031661115c9092919063ffffffff16565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166338ed17398660018433426001016040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610e0d578181015183820152602001610df5565b505050509050019650505050505050600060405180830381600087803b158015610e3657600080fd5b505af1158015610e4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610e7357600080fd5b8101908080516040519392919084600160201b821115610e9257600080fd5b908301906020820185811115610ea757600080fd5b82518660208202830111600160201b82111715610ec357600080fd5b82525081516020918201928201910280838360005b83811015610ef0578181015183820152602001610ed8565b50505050905001604052505050915081600183510381518110610f0f57fe5b602002602001015192505050949350505050565b73ccf3d848e08b94478ed8f46ffead3008faf581fd81565b336001600160a01b031673ccf3d848e08b94478ed8f46ffead3008faf581fd6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9257600080fd5b505afa158015610fa6573d6000803e3d6000fd5b505050506040513d6020811015610fbc57600080fd5b50516001600160a01b031614611010576040805162461bcd60e51b815260206004820152601460248201527336b9b39739b2b73232b9103737ba1037bbb732b960611b604482015290519081900360640190fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0384161415611071576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561106b573d6000803e3d6000fd5b50611085565b6110856001600160a01b0384168383611315565b505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156110da57506001600160a01b03811631611156565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b505190505b92915050565b604080516001600160a01b038416602482015260006044808301919091528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526111b1908490611363565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611085908490611363565b60405133904780156108fc02916000818181858888f1935050505015801561122f573d6000803e3d6000fd5b506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146112e2576112e233826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b50516001600160a01b0384169190611315565b50565b6000816113066112fd85670de0b6b3a7640000611414565b6002850461145a565b8161130d57fe5b049392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110859084905b60006113b8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661148c9092919063ffffffff16565b805190915015611085578080602001905160208110156113d757600080fd5b50516110855760405162461bcd60e51b815260040180806020018281038252602a81526020018061167a602a913960400191505060405180910390fd5b600081158061142f5750508082028282828161142c57fe5b04145b611156576040805162461bcd60e51b8152602060048201526000602482015290519081900360440190fd5b80820182811015611156576040805162461bcd60e51b8152602060048201526000602482015290519081900360440190fd5b6060610766848460008560606114a185611640565b6114f2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106115305780518252601f199092019160209182019101611511565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611592576040519150601f19603f3d011682016040523d82523d6000602084013e611597565b606091505b509150915081156115ab5791506107669050565b8051156115bb5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116055781810151838201526020016115ed565b50505050905090810190601f1680156116325780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061076657505015159291505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220647638e5469b001b9bc6dcccc8b84e8ba4552ef7b598831b0d4e26d5005e712a64736f6c63430007060033
Deployed Bytecode Sourcemap
19369:3401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19475:86;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19475:86:0;;;;;;;;;;;;;;20519:612;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20519:612:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20519:612:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20519:612:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20519:612:0;;-1:-1:-1;20519:612:0;;-1:-1:-1;;;;;20519:612:0:i;:::-;;;;;;;;;;;;;;;;19210:85;;;;;;;;;;;;;:::i;:::-;;21927:348;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21927:348:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21927:348:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21927:348:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21927:348:0;;-1:-1:-1;21927:348:0;;-1:-1:-1;;;;;21927:348:0:i;21349:362::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21349:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21349:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21349:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21349:362:0;;-1:-1:-1;21349:362:0;;-1:-1:-1;;;;;21349:362:0:i;19885:461::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19885:461:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19885:461:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19885:461:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19885:461:0;;-1:-1:-1;19885:461:0;;-1:-1:-1;;;;;19885:461:0:i;18483:68::-;;;;;;;;;;;;;:::i;18848:316::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18848:316:0;;;;;;;;;;;;;;;;;:::i;19568:98::-;;;;;;;;;;;;;:::i;19475:86::-;19519:42;19475:86;:::o;20519:612::-;20633:4;20650:21;20682;20717:15;20706:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20706:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20706:40:0;;;;;;;;;;;;-1:-1:-1;20706:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20682:64;;20759:14;20776:34;20804:4;20776:8;-1:-1:-1;;;;;20776:19:0;;;:34;;;;:::i;:::-;20759:51;-1:-1:-1;20823:56:0;-1:-1:-1;;;;;20823:28:0;;19623:42;20759:51;20823:28;:56::i;:::-;19623:42;-1:-1:-1;;;;;20902:31:0;;20934:11;-1:-1:-1;;20963:4:0;20969:10;20981:15;20999:1;20981:19;20902:99;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20902:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20902:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20902:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20902:99:0;;;;;;;;;;;;-1:-1:-1;20902:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20892:109;;21071:22;21084:8;21071:12;:22::i;:::-;21113:7;21121:1;21113:10;;;;;;;;;;;;;;21106:17;;;;;20519:612;;;;;;;:::o;19210:85::-;18747:10;-1:-1:-1;;;;;18725:32:0;18432:42;-1:-1:-1;;;;;18725:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18725:18:0;-1:-1:-1;;;;;18725:32:0;;18717:65;;;;;-1:-1:-1;;;18717:65:0;;;;;;;;;;;;-1:-1:-1;;;18717:65:0;;;;;;;;;;;;;;;19275:10:::1;19254:33;21927:348:::0;22062:4;22081:21;22116:15;22105:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22105:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22105:40:0;;;;;;;;;;;;-1:-1:-1;22105:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;22105:40:0;;;;;;;;-1:-1:-1;;;22182:38:0;;;;;;;;;;;;;;;;;;;;;;22081:64;;-1:-1:-1;22158:21:0;;19623:42;;-1:-1:-1;22182:19:0;;-1:-1:-1;22202:11:0;;-1:-1:-1;22081:64:0;;-1:-1:-1;22182:38:0;;;;;;;;;;;;;;22158:21;22182:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22182:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22182:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22182:38:0;;;;;;;;;;;;-1:-1:-1;22182:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22158:62;;22238:29;22243:11;22256:7;22264:1;22256:10;;;;;;;;;;;;;;22238:4;:29::i;:::-;22231:36;21927:348;-1:-1:-1;;;;;;;21927:348:0:o;21349:362::-;21484:4;21501:21;21536:15;21525:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21525:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21525:40:0;;;;;;;;;;;;-1:-1:-1;21525:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;21525:40:0;;;;;;;;-1:-1:-1;;;21602:38:0;;;;;;;;;;;;;;;;;;;;;;21501:64;;-1:-1:-1;21578:21:0;;19623:42;;-1:-1:-1;21602:20:0;;-1:-1:-1;21623:10:0;;-1:-1:-1;21501:64:0;;-1:-1:-1;21602:38:0;;;;;;;;;;;;;;21578:21;21602:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21602:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21602:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21602:38:0;;;;;;;;;;;;-1:-1:-1;21602:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21578:62;;21658:45;21663:7;21688:1;21671:7;:14;:18;21663:27;;;;;;;;;;;;;;21692:10;21658:4;:45::i;19885:461::-;20000:4;20017:21;20049;20084:15;20073:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20073:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20073:40:0;;;;;;;;;;;;-1:-1:-1;20073:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20049:64;;20126:57;19623:42;20172:10;20133:8;-1:-1:-1;;;;;20126:28:0;;;:57;;;;;:::i;:::-;19623:42;-1:-1:-1;;;;;20206:31:0;;20238:10;20250:1;20253:4;20259:10;20271:15;20289:1;20271:19;20206:85;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20206:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20206:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20206:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20206:85:0;;;;;;;;;;;;-1:-1:-1;20206:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20196:95;;20311:7;20336:1;20319:7;:14;:18;20311:27;;;;;;;;;;;;;;20304:34;;;;19885:461;;;;;;:::o;18483:68::-;18432:42;18483:68;:::o;18848:316::-;18622:10;-1:-1:-1;;;;;18600:32:0;18432:42;-1:-1:-1;;;;;18600:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18600:18:0;-1:-1:-1;;;;;18600:32:0;;18592:65;;;;;-1:-1:-1;;;18592:65:0;;;;;;;;;;;;-1:-1:-1;;;18592:65:0;;;;;;;;;;;;;;;18970:42:::1;-1:-1:-1::0;;;;;18960:52:0;::::1;;18956:201;;;19029:36;::::0;-1:-1:-1;;;;;19029:27:0;::::1;::::0;:36;::::1;;;::::0;19057:7;;19029:36:::1;::::0;;;19057:7;19029:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18956:201;;;19098:47;-1:-1:-1::0;;;;;19098:27:0;::::1;19126:9:::0;19137:7;19098:27:::1;:47::i;:::-;18848:316:::0;;;:::o;19568:98::-;19623:42;19568:98;:::o;10862:252::-;10939:7;-1:-1:-1;;;;;10963:22:0;;8943:42;10963:22;10959:148;;;-1:-1:-1;;;;;;11009:12:0;;;11002:19;;10959:148;11068:10;-1:-1:-1;;;;;11061:28:0;;11090:4;11061:34;;;;;;;;;;;;;-1:-1:-1;;;;;11061:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11061:34:0;;-1:-1:-1;10959:148:0;10862:252;;;;:::o;7139:316::-;7287:58;;;-1:-1:-1;;;;;7287:58:0;;;;;;7343:1;7287:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7287:58:0;-1:-1:-1;;;7287:58:0;;;7260:86;;7280:5;;7260:19;:86::i;:::-;7384:62;;;-1:-1:-1;;;;;7384:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7384:62:0;-1:-1:-1;;;7384:62:0;;;7357:90;;7377:5;;7357:19;:90::i;22412:268::-;22472:42;;:10;;22492:21;22472:42;;;;;;;;;22492:21;22472:10;:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22531:29:0;;19519:42;22531:29;22527:146;;22577:84;22607:10;22626:8;-1:-1:-1;;;;;22619:26:0;;22654:4;22619:41;;;;;;;;;;;;;-1:-1:-1;;;;;22619:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22619:41:0;-1:-1:-1;;;;;22577:29:0;;;:84;:29;:84::i;:::-;22412:268;:::o;15776:120::-;15835:9;15887:1;15861:23;15865:11;15869:1;15465:6;15865:3;:11::i;:::-;15882:1;15878;:5;15861:3;:23::i;:::-;:27;;;;;;;15776:120;-1:-1:-1;;;15776:120:0:o;6525:211::-;6669:58;;;-1:-1:-1;;;;;6669:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6669:58:0;-1:-1:-1;;;6669:58:0;;;6642:86;;6662:5;;8275:468;8356:23;8382:106;8424:4;8382:106;;;;;;;;;;;;;;;;;8390:5;-1:-1:-1;;;;;8382:27:0;;;:106;;;;;:::i;:::-;8503:17;;8356:132;;-1:-1:-1;8503:21:0;8499:237;;8658:10;8647:30;;;;;;;;;;;;;;;-1:-1:-1;8647:30:0;8639:85;;;;-1:-1:-1;;;8639:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14731:131;14789:9;14819:6;;;:30;;-1:-1:-1;;14834:5:0;;;14848:1;14843;14834:5;14843:1;14829:15;;;;;:20;14819:30;14811:43;;;;;-1:-1:-1;;;14811:43:0;;;;;;;;;;;;;;;;;;;;;;14481:117;14574:5;;;14569:16;;;;14561:29;;;;;-1:-1:-1;;;14561:29:0;;;;;;;;;;;;;;;;;;;;;;2625:230;2762:12;2794:53;2817:6;2825:4;2831:1;2834:12;3684;3717:18;3728:6;3717:10;:18::i;:::-;3709:60;;;;;-1:-1:-1;;;3709:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3843:12;3857:23;3884:6;-1:-1:-1;;;;;3884:11:0;3903:8;3913:4;3884:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3884:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3842:76;;;;3933:7;3929:595;;;3964:10;-1:-1:-1;3957:17:0;;-1:-1:-1;3957:17:0;3929:595;4078:17;;:21;4074:439;;4341:10;4335:17;4402:15;4389:10;4385:2;4381:19;4374:44;4289:148;4484:12;4477:20;;-1:-1:-1;;;4477:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:641;1450:4;1931:20;;1761:66;1980:23;;;;;;:42;;-1:-1:-1;;2007:15:0;;;1972:51;-1:-1:-1;;1390:641:0:o
Swarm Source
ipfs://647638e5469b001b9bc6dcccc8b84e8ba4552ef7b598831b0d4e26d5005e712a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.