Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More 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:
ParaswapWrapper
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-15 */ pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; interface ERC20 { 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); } 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(ERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. */ function safeApprove(ERC20 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(ERC20 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(ERC20 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(ERC20 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"); } } } 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); } } } } contract AdminAuth { using SafeERC20 for ERC20; address public owner; address public admin; modifier onlyOwner() { require(owner == msg.sender); _; } modifier onlyAdmin() { require(admin == msg.sender); _; } constructor() public { owner = 0xBc841B0dE0b93205e912CFBBd1D0c160A1ec6F00; admin = 0x25eFA336886C74eA8E282ac466BdCd0199f85BB9; } /// @notice Admin is set by owner first time, after that admin is super role and has permission to change owner /// @param _admin Address of multisig that becomes admin function setAdminByOwner(address _admin) public { require(msg.sender == owner); require(admin == address(0)); admin = _admin; } /// @notice Admin is able to set new admin /// @param _admin Address of multisig that becomes new admin function setAdminByAdmin(address _admin) public { require(msg.sender == admin); admin = _admin; } /// @notice Admin is able to change owner /// @param _owner Address of new owner function setOwnerByAdmin(address _owner) public { require(msg.sender == admin); owner = _owner; } /// @notice Destroy the contract function kill() public onlyOwner { selfdestruct(payable(owner)); } /// @notice withdraw stuck funds function withdrawStuckFunds(address _token, uint _amount) public onlyOwner { if (_token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { payable(owner).transfer(_amount); } else { ERC20(_token).safeTransfer(owner, _amount); } } } contract Discount { address public owner; mapping(address => CustomServiceFee) public serviceFees; uint256 constant MAX_SERVICE_FEE = 400; struct CustomServiceFee { bool active; uint256 amount; } constructor() public { owner = msg.sender; } function isCustomFeeSet(address _user) public view returns (bool) { return serviceFees[_user].active; } function getCustomServiceFee(address _user) public view returns (uint256) { return serviceFees[_user].amount; } function setServiceFee(address _user, uint256 _fee) public { require(msg.sender == owner, "Only owner"); require(_fee >= MAX_SERVICE_FEE || _fee == 0); serviceFees[_user] = CustomServiceFee({active: true, amount: _fee}); } function disableServiceFee(address _user) public { require(msg.sender == owner, "Only owner"); serviceFees[_user] = CustomServiceFee({active: false, amount: 0}); } } abstract contract IFeeRecipient { function getFeeAddr() public view virtual returns (address); function changeWalletAddr(address _newWallet) public virtual; } contract DFSExchangeHelper { string public constant ERR_OFFCHAIN_DATA_INVALID = "Offchain data invalid"; using SafeERC20 for ERC20; address public constant KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public constant EXCHANGE_WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IFeeRecipient public constant _feeRecipient = IFeeRecipient(0x39C4a92Dc506300c3Ea4c67ca4CA611102ee6F2A); address public constant DISCOUNT_ADDRESS = 0x1b14E8D511c9A4395425314f849bD737BAF8208F; address public constant SAVER_EXCHANGE_REGISTRY = 0x25dd3F51e0C3c3Ff164DDC02A8E4D65Bb9cBB12D; address public constant ZRX_ALLOWLIST_ADDR = 0x4BA1f38427b33B8ab7Bb0490200dAE1F1C36823F; function getDecimals(address _token) internal view returns (uint256) { if (_token == KYBER_ETH_ADDRESS) return 18; return ERC20(_token).decimals(); } function getBalance(address _tokenAddr) internal view returns (uint balance) { if (_tokenAddr == KYBER_ETH_ADDRESS) { balance = address(this).balance; } else { balance = ERC20(_tokenAddr).balanceOf(address(this)); } } function sendLeftover(address _srcAddr, address _destAddr, address payable _to) internal { // send back any leftover ether or tokens if (address(this).balance > 0) { _to.transfer(address(this).balance); } if (getBalance(_srcAddr) > 0) { ERC20(_srcAddr).safeTransfer(_to, getBalance(_srcAddr)); } if (getBalance(_destAddr) > 0) { ERC20(_destAddr).safeTransfer(_to, getBalance(_destAddr)); } } /// @notice Takes a feePercentage and sends it to wallet /// @param _amount Dai amount of the whole trade /// @param _user Address of the user /// @param _token Address of the token /// @param _dfsFeeDivider Dfs fee divider /// @return feeAmount Amount in Dai owner earned on the fee function getFee(uint256 _amount, address _user, address _token, uint256 _dfsFeeDivider) internal returns (uint256 feeAmount) { if (_dfsFeeDivider != 0 && Discount(DISCOUNT_ADDRESS).isCustomFeeSet(_user)) { _dfsFeeDivider = Discount(DISCOUNT_ADDRESS).getCustomServiceFee(_user); } if (_dfsFeeDivider == 0) { feeAmount = 0; } else { feeAmount = _amount / _dfsFeeDivider; // fee can't go over 10% of the whole amount if (feeAmount > (_amount / 10)) { feeAmount = _amount / 10; } address walletAddr = _feeRecipient.getFeeAddr(); if (_token == KYBER_ETH_ADDRESS) { payable(walletAddr).transfer(feeAmount); } else { ERC20(_token).safeTransfer(walletAddr, feeAmount); } } } function sliceUint(bytes memory bs, uint256 start) internal pure returns (uint256) { require(bs.length >= start + 32, "slicing out of range"); uint256 x; assembly { x := mload(add(bs, add(0x20, start))) } return x; } function writeUint256(bytes memory _b, uint256 _index, uint _input) internal pure { if (_b.length < _index + 32) { revert(ERR_OFFCHAIN_DATA_INVALID); } bytes32 input = bytes32(_input); _index += 32; // Read the bytes32 from array memory assembly { mstore(add(_b, _index), input) } } /// @notice Converts Kybers Eth address -> Weth /// @param _src Input address function ethToWethAddr(address _src) internal pure returns (address) { return _src == KYBER_ETH_ADDRESS ? EXCHANGE_WETH_ADDRESS : _src; } } contract DFSExchangeData { // first is empty to keep the legacy order in place enum ExchangeType { _, OASIS, KYBER, UNISWAP, ZEROX } enum ActionType { SELL, BUY } struct OffchainData { address wrapper; address exchangeAddr; address allowanceTarget; uint256 price; uint256 protocolFee; bytes callData; } struct ExchangeData { address srcAddr; address destAddr; uint256 srcAmount; uint256 destAmount; uint256 minPrice; uint256 dfsFeeDivider; // service fee divider address user; // user to check special fee address wrapper; bytes wrapperData; OffchainData offchainData; } function packExchangeData(ExchangeData memory _exData) public pure returns(bytes memory) { return abi.encode(_exData); } function unpackExchangeData(bytes memory _data) public pure returns(ExchangeData memory _exData) { _exData = abi.decode(_data, (ExchangeData)); } } abstract contract OffchainWrapperInterface is DFSExchangeData { function takeOrder( ExchangeData memory _exData, ActionType _type ) virtual public payable returns (bool success, uint256); } abstract contract TokenInterface { address public constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; 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 virtual payable; function withdraw(uint256) public virtual; } // SPDX-License-Identifier: MIT contract ParaswapWrapper is OffchainWrapperInterface, DFSExchangeHelper, AdminAuth, DSMath { string public constant ERR_SRC_AMOUNT = "Not enough funds"; string public constant ERR_PROTOCOL_FEE = "Not enough eth for protcol fee"; string public constant ERR_TOKENS_SWAPED_ZERO = "Order success but amount 0"; using SafeERC20 for ERC20; /// @notice offchainData.callData should be this struct encoded struct ParaswapCalldata{ bytes realCalldata; uint256 offset; } /// @notice Takes order from Scp and returns bool indicating if it is successful /// @param _exData Exchange data /// @param _type Action type (buy or sell) function takeOrder( ExchangeData memory _exData, ActionType _type ) override public payable returns (bool success, uint256) { // check that contract have enough balance for exchange and protocol fee require(getBalance(_exData.srcAddr) >= _exData.srcAmount, ERR_SRC_AMOUNT); ERC20(_exData.srcAddr).safeApprove(_exData.offchainData.allowanceTarget, _exData.srcAmount); ParaswapCalldata memory paraswapCalldata = abi.decode(_exData.offchainData.callData, (ParaswapCalldata)); // write in the exact amount we are selling/buing in an order if (_type == ActionType.SELL) { writeUint256(paraswapCalldata.realCalldata, paraswapCalldata.offset, _exData.srcAmount); } else { uint srcAmount = wdiv(_exData.destAmount, _exData.offchainData.price) + 1; // + 1 so we round up writeUint256(paraswapCalldata.realCalldata, paraswapCalldata.offset, srcAmount); } // we know that it will be eth if dest addr is either weth or eth address destAddr = _exData.destAddr == KYBER_ETH_ADDRESS ? EXCHANGE_WETH_ADDRESS : _exData.destAddr; uint256 tokensBefore = getBalance(destAddr); (success, ) = _exData.offchainData.exchangeAddr.call{value: _exData.offchainData.protocolFee}(paraswapCalldata.realCalldata); uint256 tokensSwaped = 0; if (success) { // get the current balance of the swaped tokens tokensSwaped = getBalance(destAddr) - tokensBefore; require(tokensSwaped > 0, ERR_TOKENS_SWAPED_ZERO); } // returns all funds from src addr, dest addr and eth funds (protocol fee leftovers) sendLeftover(_exData.srcAddr, destAddr, msg.sender); return (success, tokensSwaped); } // solhint-disable-next-line no-empty-blocks receive() external virtual payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"DISCOUNT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERR_OFFCHAIN_DATA_INVALID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERR_PROTOCOL_FEE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERR_SRC_AMOUNT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERR_TOKENS_SWAPED_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXCHANGE_WETH_ADDRESS","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":"SAVER_EXCHANGE_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZRX_ALLOWLIST_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRecipient","outputs":[{"internalType":"contract IFeeRecipient","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcAddr","type":"address"},{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"srcAmount","type":"uint256"},{"internalType":"uint256","name":"destAmount","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"dfsFeeDivider","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"wrapper","type":"address"},{"internalType":"bytes","name":"wrapperData","type":"bytes"},{"components":[{"internalType":"address","name":"wrapper","type":"address"},{"internalType":"address","name":"exchangeAddr","type":"address"},{"internalType":"address","name":"allowanceTarget","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"protocolFee","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct DFSExchangeData.OffchainData","name":"offchainData","type":"tuple"}],"internalType":"struct DFSExchangeData.ExchangeData","name":"_exData","type":"tuple"}],"name":"packExchangeData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdminByAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdminByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwnerByAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcAddr","type":"address"},{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"srcAmount","type":"uint256"},{"internalType":"uint256","name":"destAmount","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"dfsFeeDivider","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"wrapper","type":"address"},{"internalType":"bytes","name":"wrapperData","type":"bytes"},{"components":[{"internalType":"address","name":"wrapper","type":"address"},{"internalType":"address","name":"exchangeAddr","type":"address"},{"internalType":"address","name":"allowanceTarget","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"protocolFee","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct DFSExchangeData.OffchainData","name":"offchainData","type":"tuple"}],"internalType":"struct DFSExchangeData.ExchangeData","name":"_exData","type":"tuple"},{"internalType":"enum DFSExchangeData.ActionType","name":"_type","type":"uint8"}],"name":"takeOrder","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"unpackExchangeData","outputs":[{"components":[{"internalType":"address","name":"srcAddr","type":"address"},{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"srcAmount","type":"uint256"},{"internalType":"uint256","name":"destAmount","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"dfsFeeDivider","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"wrapper","type":"address"},{"internalType":"bytes","name":"wrapperData","type":"bytes"},{"components":[{"internalType":"address","name":"wrapper","type":"address"},{"internalType":"address","name":"exchangeAddr","type":"address"},{"internalType":"address","name":"allowanceTarget","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"protocolFee","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct DFSExchangeData.OffchainData","name":"offchainData","type":"tuple"}],"internalType":"struct DFSExchangeData.ExchangeData","name":"_exData","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031990811673bc841b0de0b93205e912cfbbd1d0c160a1ec6f0017909155600180549091167325efa336886c74ea8e282ac466bdcd0199f85bb91790556116b3806100686000396000f3fe6080604052600436106101235760003560e01c80638da5cb5b116100a0578063a7304bf711610064578063a7304bf7146102d4578063ae08fd10146102f4578063d59de69614610309578063deca5f881461031e578063f851a4401461033e5761012a565b80638da5cb5b1461025357806392d5f64914610268578063a342f2381461027d578063a3b8e5d114610292578063a46a66c9146102bf5761012a565b80633a128322116100e75780633a128322146101d357806341c0e1b5146101f35780634b9cb5081461020857806381b94280146102295780638c8a79581461023e5761012a565b806308d4f52a1461012f5780631e48907b1461016557806326aa2bd21461018757806329f7fc9e1461019c578063314b6332146101be5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b5061014f61014a366004611179565b610353565b60405161015c919061149a565b60405180910390f35b34801561017157600080fd5b506101856101803660046110d8565b61037d565b005b34801561019357600080fd5b5061014f6103b6565b3480156101a857600080fd5b506101b16103e2565b60405161015c9190611441565b3480156101ca57600080fd5b506101b16103fa565b3480156101df57600080fd5b506101856101ee3660046110fb565b610412565b3480156101ff57600080fd5b506101856104ab565b61021b6102163660046112b4565b6104d0565b60405161015c92919061148a565b34801561023557600080fd5b506101b161074a565b34801561024a57600080fd5b506101b1610762565b34801561025f57600080fd5b506101b161077a565b34801561027457600080fd5b5061014f610789565b34801561028957600080fd5b506101b16107c2565b34801561029e57600080fd5b506102b26102ad366004611146565b6107da565b60405161015c919061152e565b3480156102cb57600080fd5b506101b16107fc565b3480156102e057600080fd5b506101856102ef3660046110d8565b610814565b34801561030057600080fd5b5061014f61084d565b34801561031557600080fd5b5061014f61087e565b34801561032a57600080fd5b506101856103393660046110d8565b6108b7565b34801561034a57600080fd5b506101b16108e4565b606081604051602001610366919061152e565b60405160208183030381529060405290505b919050565b6001546001600160a01b0316331461039457600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b81525081565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7325dd3f51e0c3c3ff164ddc02a8e4d65bb9cbb12d81565b6000546001600160a01b0316331461042957600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316141561048d57600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610487573d6000803e3d6000fd5b506104a7565b6000546104a7906001600160a01b038481169116836108f3565b5050565b6000546001600160a01b031633146104c257600080fd5b6000546001600160a01b0316ff5b60008083604001516104e5856000015161094e565b10156040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b815250906105375760405162461bcd60e51b815260040161052e919061149a565b60405180910390fd5b5061056784610120015160400151856040015186600001516001600160a01b03166109f89092919063ffffffff16565b61056f610d30565b84610120015160a0015180602001905181019061058c9190611307565b9050600084600181111561059c57fe5b14156105be576105b9816000015182602001518760400151610a37565b6105f1565b60006105d7866060015187610120015160600151610a8e565b60010190506105ef8260000151836020015183610a37565b505b60208501516000906001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461062657856020015161063c565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b905060006106498261094e565b9050866101200151602001516001600160a01b031687610120015160800151846000015160405161067a9190611425565b60006040518083038185875af1925050503d80600081146106b7576040519150601f19603f3d011682016040523d82523d6000602084013e6106bc565b606091505b5050809550506000851561073157816106d48461094e565b039050600081116040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e7420300000000000008152509061072f5760405162461bcd60e51b815260040161052e919061149a565b505b875161073e908433610abe565b93505050509250929050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b734ba1f38427b33b8ab7bb0490200dae1f1c36823f81565b6000546001600160a01b031681565b6040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e74203000000000000081525081565b7339c4a92dc506300c3ea4c67ca4ca611102ee6f2a81565b6107e2610d4a565b818060200190518101906107f691906111ac565b92915050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b6001546001600160a01b0316331461082b57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601581526020017413d99998da185a5b8819185d18481a5b9d985b1a59605a1b81525081565b6040518060400160405280601e81526020017f4e6f7420656e6f7567682065746820666f722070726f74636f6c20666565000081525081565b6000546001600160a01b031633146108ce57600080fd5b6001546001600160a01b03161561082b57600080fd5b6001546001600160a01b031681565b6109498363a9059cbb60e01b8484604051602401610912929190611471565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b59565b505050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561097c575047610378565b6040516370a0823160e01b81526001600160a01b038316906370a08231906109a8903090600401611441565b60206040518083038186803b1580156109c057600080fd5b505afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f6919061137f565b610a188363095ea7b360e01b846000604051602401610912929190611455565b6109498363095ea7b360e01b8484604051602401610912929190611471565b8160200183511015610a8657604080518082018252601581527413d99998da185a5b8819185d18481a5b9d985b1a59605a1b6020820152905162461bcd60e51b815261052e919060040161149a565b910160200152565b600081610aaf610aa685670de0b6b3a7640000610be8565b60028504610c0c565b81610ab657fe5b049392505050565b4715610afb576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610af9573d6000803e3d6000fd5b505b6000610b068461094e565b1115610b2a57610b2a81610b198561094e565b6001600160a01b03861691906108f3565b6000610b358361094e565b11156109495761094981610b488461094e565b6001600160a01b03851691906108f3565b6060610bae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c1c9092919063ffffffff16565b8051909150156109495780806020019051810190610bcc9190611126565b6109495760405162461bcd60e51b815260040161052e906114e4565b6000811580610c0357505080820282828281610c0057fe5b04145b6107f657600080fd5b808201828110156107f657600080fd5b6060610c2b8484600085610c33565b949350505050565b6060610c3e85610cf7565b610c5a5760405162461bcd60e51b815260040161052e906114ad565b60006060866001600160a01b03168587604051610c779190611425565b60006040518083038185875af1925050503d8060008114610cb4576040519150601f19603f3d011682016040523d82523d6000602084013e610cb9565b606091505b50915091508115610ccd579150610c2b9050565b805115610cdd5780518082602001fd5b8360405162461bcd60e51b815260040161052e919061149a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610c2b575050151592915050565b604051806040016040528060608152602001600081525090565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001610dc1610dc6565b905290565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b80356107f681611665565b80516107f681611665565b600082601f830112610e3d578081fd5b8135610e50610e4b82611611565b6115ea565b9150808252836020828501011115610e6757600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112610e90578081fd5b8151610e9e610e4b82611611565b9150808252836020828501011115610eb557600080fd5b610ec6816020840160208601611635565b5092915050565b6000610140808385031215610ee0578182fd5b610ee9816115ea565b915050610ef68383610e17565b8152610f058360208401610e17565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a0820152610f3f8360c08401610e17565b60c0820152610f518360e08401610e17565b60e08201526101008083013567ffffffffffffffff80821115610f7357600080fd5b610f7f86838701610e2d565b83850152610120925082850135915080821115610f9b57600080fd5b50610fa885828601610fb4565b82840152505092915050565b600060c08284031215610fc5578081fd5b610fcf60c06115ea565b90508135610fdc81611665565b81526020820135610fec81611665565b60208201526040820135610fff81611665565b80604083015250606082013560608201526080820135608082015260a082013567ffffffffffffffff81111561103457600080fd5b61104084828501610e2d565b60a08301525092915050565b600060c0828403121561105d578081fd5b61106760c06115ea565b9050815161107481611665565b8152602082015161108481611665565b6020820152604082015161109781611665565b80604083015250606082015160608201526080820151608082015260a082015167ffffffffffffffff8111156110cc57600080fd5b61104084828501610e80565b6000602082840312156110e9578081fd5b81356110f481611665565b9392505050565b6000806040838503121561110d578081fd5b823561111881611665565b946020939093013593505050565b600060208284031215611137578081fd5b815180151581146110f4578182fd5b600060208284031215611157578081fd5b813567ffffffffffffffff81111561116d578182fd5b610c2b84828501610e2d565b60006020828403121561118a578081fd5b813567ffffffffffffffff8111156111a0578182fd5b610c2b84828501610ecd565b6000602082840312156111bd578081fd5b815167ffffffffffffffff808211156111d4578283fd5b81840191506101408083870312156111ea578384fd5b6111f3816115ea565b90506111ff8684610e22565b815261120e8660208501610e22565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201526112488660c08501610e22565b60c082015261125a8660e08501610e22565b60e08201526101008084015183811115611272578586fd5b61127e88828701610e80565b8284015250506101208084015183811115611297578586fd5b6112a38882870161104c565b918301919091525095945050505050565b600080604083850312156112c6578182fd5b823567ffffffffffffffff8111156112dc578283fd5b6112e885828601610ecd565b9250506020830135600281106112fc578182fd5b809150509250929050565b600060208284031215611318578081fd5b815167ffffffffffffffff8082111561132f578283fd5b9083019060408286031215611342578283fd5b61134c60406115ea565b82518281111561135a578485fd5b61136687828601610e80565b8252506020830151602082015280935050505092915050565b600060208284031215611390578081fd5b5051919050565b6001600160a01b03169052565b600081518084526113bc816020860160208601611635565b601f01601f19169290920160200192915050565b600060018060a01b0380835116845280602084015116602085015280604084015116604085015250606082015160608401526080820151608084015260a082015160c060a0850152610c2b60c08501826113a4565b60008251611437818460208701611635565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392909216825260ff16602082015260400190565b6001600160a01b03929092168252602082015260400190565b9115158252602082015260400190565b6000602082526110f460208301846113a4565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b600060208252611542602083018451611397565b60208301516115546040840182611397565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015161158f60e0840182611397565b5060e08301516101006115a481850183611397565b8085015191505061014061012081818601526115c46101608601846113a4565b90860151858203601f1901838701529092506115e083826113d0565b9695505050505050565b60405181810167ffffffffffffffff8111828210171561160957600080fd5b604052919050565b600067ffffffffffffffff821115611627578081fd5b50601f01601f191660200190565b60005b83811015611650578181015183820152602001611638565b8381111561165f576000848401525b50505050565b6001600160a01b038116811461167a57600080fd5b5056fea26469706673582212205ae5dd605b339e26b9ce6150ff39863637eb89c789f5e1ac257bc635f6e02d9364736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101235760003560e01c80638da5cb5b116100a0578063a7304bf711610064578063a7304bf7146102d4578063ae08fd10146102f4578063d59de69614610309578063deca5f881461031e578063f851a4401461033e5761012a565b80638da5cb5b1461025357806392d5f64914610268578063a342f2381461027d578063a3b8e5d114610292578063a46a66c9146102bf5761012a565b80633a128322116100e75780633a128322146101d357806341c0e1b5146101f35780634b9cb5081461020857806381b94280146102295780638c8a79581461023e5761012a565b806308d4f52a1461012f5780631e48907b1461016557806326aa2bd21461018757806329f7fc9e1461019c578063314b6332146101be5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b5061014f61014a366004611179565b610353565b60405161015c919061149a565b60405180910390f35b34801561017157600080fd5b506101856101803660046110d8565b61037d565b005b34801561019357600080fd5b5061014f6103b6565b3480156101a857600080fd5b506101b16103e2565b60405161015c9190611441565b3480156101ca57600080fd5b506101b16103fa565b3480156101df57600080fd5b506101856101ee3660046110fb565b610412565b3480156101ff57600080fd5b506101856104ab565b61021b6102163660046112b4565b6104d0565b60405161015c92919061148a565b34801561023557600080fd5b506101b161074a565b34801561024a57600080fd5b506101b1610762565b34801561025f57600080fd5b506101b161077a565b34801561027457600080fd5b5061014f610789565b34801561028957600080fd5b506101b16107c2565b34801561029e57600080fd5b506102b26102ad366004611146565b6107da565b60405161015c919061152e565b3480156102cb57600080fd5b506101b16107fc565b3480156102e057600080fd5b506101856102ef3660046110d8565b610814565b34801561030057600080fd5b5061014f61084d565b34801561031557600080fd5b5061014f61087e565b34801561032a57600080fd5b506101856103393660046110d8565b6108b7565b34801561034a57600080fd5b506101b16108e4565b606081604051602001610366919061152e565b60405160208183030381529060405290505b919050565b6001546001600160a01b0316331461039457600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b81525081565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7325dd3f51e0c3c3ff164ddc02a8e4d65bb9cbb12d81565b6000546001600160a01b0316331461042957600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316141561048d57600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610487573d6000803e3d6000fd5b506104a7565b6000546104a7906001600160a01b038481169116836108f3565b5050565b6000546001600160a01b031633146104c257600080fd5b6000546001600160a01b0316ff5b60008083604001516104e5856000015161094e565b10156040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b815250906105375760405162461bcd60e51b815260040161052e919061149a565b60405180910390fd5b5061056784610120015160400151856040015186600001516001600160a01b03166109f89092919063ffffffff16565b61056f610d30565b84610120015160a0015180602001905181019061058c9190611307565b9050600084600181111561059c57fe5b14156105be576105b9816000015182602001518760400151610a37565b6105f1565b60006105d7866060015187610120015160600151610a8e565b60010190506105ef8260000151836020015183610a37565b505b60208501516000906001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461062657856020015161063c565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b905060006106498261094e565b9050866101200151602001516001600160a01b031687610120015160800151846000015160405161067a9190611425565b60006040518083038185875af1925050503d80600081146106b7576040519150601f19603f3d011682016040523d82523d6000602084013e6106bc565b606091505b5050809550506000851561073157816106d48461094e565b039050600081116040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e7420300000000000008152509061072f5760405162461bcd60e51b815260040161052e919061149a565b505b875161073e908433610abe565b93505050509250929050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b734ba1f38427b33b8ab7bb0490200dae1f1c36823f81565b6000546001600160a01b031681565b6040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e74203000000000000081525081565b7339c4a92dc506300c3ea4c67ca4ca611102ee6f2a81565b6107e2610d4a565b818060200190518101906107f691906111ac565b92915050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b6001546001600160a01b0316331461082b57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601581526020017413d99998da185a5b8819185d18481a5b9d985b1a59605a1b81525081565b6040518060400160405280601e81526020017f4e6f7420656e6f7567682065746820666f722070726f74636f6c20666565000081525081565b6000546001600160a01b031633146108ce57600080fd5b6001546001600160a01b03161561082b57600080fd5b6001546001600160a01b031681565b6109498363a9059cbb60e01b8484604051602401610912929190611471565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b59565b505050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561097c575047610378565b6040516370a0823160e01b81526001600160a01b038316906370a08231906109a8903090600401611441565b60206040518083038186803b1580156109c057600080fd5b505afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f6919061137f565b610a188363095ea7b360e01b846000604051602401610912929190611455565b6109498363095ea7b360e01b8484604051602401610912929190611471565b8160200183511015610a8657604080518082018252601581527413d99998da185a5b8819185d18481a5b9d985b1a59605a1b6020820152905162461bcd60e51b815261052e919060040161149a565b910160200152565b600081610aaf610aa685670de0b6b3a7640000610be8565b60028504610c0c565b81610ab657fe5b049392505050565b4715610afb576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610af9573d6000803e3d6000fd5b505b6000610b068461094e565b1115610b2a57610b2a81610b198561094e565b6001600160a01b03861691906108f3565b6000610b358361094e565b11156109495761094981610b488461094e565b6001600160a01b03851691906108f3565b6060610bae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c1c9092919063ffffffff16565b8051909150156109495780806020019051810190610bcc9190611126565b6109495760405162461bcd60e51b815260040161052e906114e4565b6000811580610c0357505080820282828281610c0057fe5b04145b6107f657600080fd5b808201828110156107f657600080fd5b6060610c2b8484600085610c33565b949350505050565b6060610c3e85610cf7565b610c5a5760405162461bcd60e51b815260040161052e906114ad565b60006060866001600160a01b03168587604051610c779190611425565b60006040518083038185875af1925050503d8060008114610cb4576040519150601f19603f3d011682016040523d82523d6000602084013e610cb9565b606091505b50915091508115610ccd579150610c2b9050565b805115610cdd5780518082602001fd5b8360405162461bcd60e51b815260040161052e919061149a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610c2b575050151592915050565b604051806040016040528060608152602001600081525090565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001610dc1610dc6565b905290565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b80356107f681611665565b80516107f681611665565b600082601f830112610e3d578081fd5b8135610e50610e4b82611611565b6115ea565b9150808252836020828501011115610e6757600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112610e90578081fd5b8151610e9e610e4b82611611565b9150808252836020828501011115610eb557600080fd5b610ec6816020840160208601611635565b5092915050565b6000610140808385031215610ee0578182fd5b610ee9816115ea565b915050610ef68383610e17565b8152610f058360208401610e17565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a0820152610f3f8360c08401610e17565b60c0820152610f518360e08401610e17565b60e08201526101008083013567ffffffffffffffff80821115610f7357600080fd5b610f7f86838701610e2d565b83850152610120925082850135915080821115610f9b57600080fd5b50610fa885828601610fb4565b82840152505092915050565b600060c08284031215610fc5578081fd5b610fcf60c06115ea565b90508135610fdc81611665565b81526020820135610fec81611665565b60208201526040820135610fff81611665565b80604083015250606082013560608201526080820135608082015260a082013567ffffffffffffffff81111561103457600080fd5b61104084828501610e2d565b60a08301525092915050565b600060c0828403121561105d578081fd5b61106760c06115ea565b9050815161107481611665565b8152602082015161108481611665565b6020820152604082015161109781611665565b80604083015250606082015160608201526080820151608082015260a082015167ffffffffffffffff8111156110cc57600080fd5b61104084828501610e80565b6000602082840312156110e9578081fd5b81356110f481611665565b9392505050565b6000806040838503121561110d578081fd5b823561111881611665565b946020939093013593505050565b600060208284031215611137578081fd5b815180151581146110f4578182fd5b600060208284031215611157578081fd5b813567ffffffffffffffff81111561116d578182fd5b610c2b84828501610e2d565b60006020828403121561118a578081fd5b813567ffffffffffffffff8111156111a0578182fd5b610c2b84828501610ecd565b6000602082840312156111bd578081fd5b815167ffffffffffffffff808211156111d4578283fd5b81840191506101408083870312156111ea578384fd5b6111f3816115ea565b90506111ff8684610e22565b815261120e8660208501610e22565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201526112488660c08501610e22565b60c082015261125a8660e08501610e22565b60e08201526101008084015183811115611272578586fd5b61127e88828701610e80565b8284015250506101208084015183811115611297578586fd5b6112a38882870161104c565b918301919091525095945050505050565b600080604083850312156112c6578182fd5b823567ffffffffffffffff8111156112dc578283fd5b6112e885828601610ecd565b9250506020830135600281106112fc578182fd5b809150509250929050565b600060208284031215611318578081fd5b815167ffffffffffffffff8082111561132f578283fd5b9083019060408286031215611342578283fd5b61134c60406115ea565b82518281111561135a578485fd5b61136687828601610e80565b8252506020830151602082015280935050505092915050565b600060208284031215611390578081fd5b5051919050565b6001600160a01b03169052565b600081518084526113bc816020860160208601611635565b601f01601f19169290920160200192915050565b600060018060a01b0380835116845280602084015116602085015280604084015116604085015250606082015160608401526080820151608084015260a082015160c060a0850152610c2b60c08501826113a4565b60008251611437818460208701611635565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392909216825260ff16602082015260400190565b6001600160a01b03929092168252602082015260400190565b9115158252602082015260400190565b6000602082526110f460208301846113a4565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b600060208252611542602083018451611397565b60208301516115546040840182611397565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015161158f60e0840182611397565b5060e08301516101006115a481850183611397565b8085015191505061014061012081818601526115c46101608601846113a4565b90860151858203601f1901838701529092506115e083826113d0565b9695505050505050565b60405181810167ffffffffffffffff8111828210171561160957600080fd5b604052919050565b600067ffffffffffffffff821115611627578081fd5b50601f01601f191660200190565b60005b83811015611650578181015183820152602001611638565b8381111561165f576000848401525b50505050565b6001600160a01b038116811461167a57600080fd5b5056fea26469706673582212205ae5dd605b339e26b9ce6150ff39863637eb89c789f5e1ac257bc635f6e02d9364736f6c634300060c0033
Deployed Bytecode Sourcemap
18701:2645:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17520:134;;;;;;;;;;-1:-1:-1;17520:134:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11081:122;;;;;;;;;;-1:-1:-1;11081:122:0;;;;;:::i;:::-;;:::i;:::-;;18802:58;;;;;;;;;;;;;:::i;13026:86::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13422:92::-;;;;;;;;;;;;;:::i;11376:285::-;;;;;;;;;;-1:-1:-1;11376:285:0;;;;;:::i;:::-;;:::i;11249:80::-;;;;;;;;;;;;;:::i;19404:1843::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;13119:90::-;;;;;;;;;;;;;:::i;13523:87::-;;;;;;;;;;;;;:::i;10007:20::-;;;;;;;;;;;;;:::i;18948:76::-;;;;;;;;;;;;;:::i;13218:103::-;;;;;;;;;;;;;:::i;17662:159::-;;;;;;;;;;-1:-1:-1;17662:159:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13330:85::-;;;;;;;;;;;;;:::i;10860:122::-;;;;;;;;;;-1:-1:-1;10860:122:0;;;;;:::i;:::-;;:::i;12909:74::-;;;;;;;;;;;;;:::i;18867:::-;;;;;;;;;;;;;:::i;10577:161::-;;;;;;;;;;-1:-1:-1;10577:161:0;;;;;:::i;:::-;;:::i;10034:20::-;;;;;;;;;;;;;:::i;17520:134::-;17595:12;17638:7;17627:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;17620:26;;17520:134;;;;:::o;11081:122::-;11162:5;;-1:-1:-1;;;;;11162:5:0;11148:10;:19;11140:28;;;;;;11181:5;:14;;-1:-1:-1;;;;;;11181:14:0;-1:-1:-1;;;;;11181:14:0;;;;;;;;;;11081:122::o;18802:58::-;;;;;;;;;;;;;;-1:-1:-1;;;18802:58:0;;;;:::o;13026:86::-;13070:42;13026:86;:::o;13422:92::-;13472:42;13422:92;:::o;11376:285::-;10103:5;;-1:-1:-1;;;;;10103:5:0;10112:10;10103:19;10095:28;;;;;;11476:42:::1;-1:-1:-1::0;;;;;11466:52:0;::::1;;11462:192;;;11543:5;::::0;;11535:32:::1;::::0;-1:-1:-1;;;;;11543:5:0;;::::1;::::0;11535:32;::::1;;;::::0;11559:7;;11535:32;11543:5;11535:32;11559:7;11543:5;11535:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;11462:192;;;11627:5;::::0;11600:42:::1;::::0;-1:-1:-1;;;;;11600:26:0;;::::1;::::0;11627:5:::1;11634:7:::0;11600:26:::1;:42::i;:::-;11376:285:::0;;:::o;11249:80::-;10103:5;;-1:-1:-1;;;;;10103:5:0;10112:10;10103:19;10095:28;;;;;;11314:5:::1;::::0;-1:-1:-1;;;;;11314:5:0::1;11293:28;19404:1843:::0;19528:12;19542:7;19683;:17;;;19652:27;19663:7;:15;;;19652:10;:27::i;:::-;:48;;19702:14;;;;;;;;;;;;;-1:-1:-1;;;19702:14:0;;;19644:73;;;;;-1:-1:-1;;;19644:73:0;;;;;;;;:::i;:::-;;;;;;;;;;19731:91;19766:7;:20;;;:36;;;19804:7;:17;;;19737:7;:15;;;-1:-1:-1;;;;;19731:34:0;;;:91;;;;;:::i;:::-;19836:40;;:::i;:::-;19890:7;:20;;;:29;;;19879:61;;;;;;;;;;;;:::i;:::-;19836:104;-1:-1:-1;20038:15:0;20029:5;:24;;;;;;;;;20025:366;;;20070:87;20083:16;:29;;;20114:16;:23;;;20139:7;:17;;;20070:12;:87::i;:::-;20025:366;;;20190:14;20207:52;20212:7;:18;;;20232:7;:20;;;:26;;;20207:4;:52::i;:::-;20262:1;20207:56;20190:73;;20300:79;20313:16;:29;;;20344:16;:23;;;20369:9;20300:12;:79::i;:::-;20025:366;;20498:16;;;;20479;;-1:-1:-1;;;;;20498:37:0;13070:42;20498:37;:80;;20562:7;:16;;;20498:80;;;13167:42;20498:80;20479:99;;20592:20;20615;20626:8;20615:10;:20::i;:::-;20592:43;;20660:7;:20;;;:33;;;-1:-1:-1;;;;;20660:38:0;20706:7;:20;;;:32;;;20740:16;:29;;;20660:110;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20646:124;;;;;20781:20;20826:7;20822:215;;;20949:12;20926:20;20937:8;20926:10;:20::i;:::-;:35;20911:50;;20999:1;20984:12;:16;21002:22;;;;;;;;;;;;;;;;;20976:49;;;;;-1:-1:-1;;;20976:49:0;;;;;;;;:::i;:::-;;20822:215;21157:15;;21144:51;;21174:8;21184:10;21144:12;:51::i;:::-;21226:12;-1:-1:-1;;;;19404:1843:0;;;;;:::o;13119:90::-;13167:42;13119:90;:::o;13523:87::-;13568:42;13523:87;:::o;10007:20::-;;;-1:-1:-1;;;;;10007:20:0;;:::o;18948:76::-;;;;;;;;;;;;;;;;;;;:::o;13218:103::-;13278:42;13218:103;:::o;17662:159::-;17730:27;;:::i;:::-;17791:5;17780:33;;;;;;;;;;;;:::i;:::-;17770:43;17662:159;-1:-1:-1;;17662:159:0:o;13330:85::-;13373:42;13330:85;:::o;10860:122::-;10941:5;;-1:-1:-1;;;;;10941:5:0;10927:10;:19;10919:28;;;;;;10960:5;:14;;-1:-1:-1;;;;;;10960:14:0;-1:-1:-1;;;;;10960:14:0;;;;;;;;;;10860:122::o;12909:74::-;;;;;;;;;;;;;;-1:-1:-1;;;12909:74:0;;;;:::o;18867:::-;;;;;;;;;;;;;;;;;;;:::o;10577:161::-;10658:5;;-1:-1:-1;;;;;10658:5:0;10644:10;:19;10636:28;;;;;;10683:5;;-1:-1:-1;;;;;10683:5:0;:19;10675:28;;;;;10034:20;;;-1:-1:-1;;;;;10034:20:0;;:::o;5639:176::-;5721:86;5741:5;5771:23;;;5796:2;5800:5;5748:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5748:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;5748:58:0;-1:-1:-1;;;;;;5748:58:0;;;;;;;;;;5721:19;:86::i;:::-;5639:176;;;:::o;13803:275::-;13866:12;-1:-1:-1;;;;;13895:31:0;;13070:42;13895:31;13891:180;;;-1:-1:-1;13953:21:0;13891:180;;;14017:42;;-1:-1:-1;;;14017:42:0;;-1:-1:-1;;;;;14017:27:0;;;;;:42;;14053:4;;14017:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6188:281::-;6274:86;6294:5;6324:22;;;6348:7;6357:1;6301:58;;;;;;;;;:::i;6274:86::-;6371:90;6391:5;6421:22;;;6445:7;6454:5;6398:62;;;;;;;;;:::i;16118:382::-;16227:6;16236:2;16227:11;16215:2;:9;:23;16211:89;;;16262:25;;;;;;;;;;;-1:-1:-1;;;16262:25:0;;;;16255:33;;-1:-1:-1;;;16255:33:0;;;;16262:25;16255:33;;;:::i;16211:89::-;16459:15;;16366:2;16459:15;16452:30;16437:56::o;8837:120::-;8896:9;8948:1;8922:23;8926:11;8930:1;8526:6;8926:3;:11::i;:::-;8943:1;8939;:5;8922:3;:23::i;:::-;:27;;;;;;;8837:120;-1:-1:-1;;;8837:120:0:o;14086:502::-;14241:21;:25;14237:93;;14283:35;;-1:-1:-1;;;;;14283:12:0;;;14296:21;14283:35;;;;;;;;;14296:21;14283:12;:35;;;;;;;;;;;;;;;;;;;;;14237:93;14369:1;14346:20;14357:8;14346:10;:20::i;:::-;:24;14342:112;;;14387:55;14416:3;14421:20;14432:8;14421:10;:20::i;:::-;-1:-1:-1;;;;;14387:28:0;;;:55;:28;:55::i;:::-;14494:1;14470:21;14481:9;14470:10;:21::i;:::-;:25;14466:115;;;14512:57;14542:3;14547:21;14558:9;14547:10;:21::i;:::-;-1:-1:-1;;;;;14512:29:0;;;:57;:29;:57::i;7108:419::-;7190:23;7216:69;7244:4;7216:69;;;;;;;;;;;;;;;;;7224:5;-1:-1:-1;;;;;7216:27:0;;;:69;;;;;:::i;:::-;7300:17;;7190:95;;-1:-1:-1;7300:21:0;7296:224;;7442:10;7431:30;;;;;;;;;;;;:::i;:::-;7423:85;;;;-1:-1:-1;;;7423:85:0;;;;;;;:::i;7796:127::-;7854:9;7884:6;;;:30;;-1:-1:-1;;7899:5:0;;;7913:1;7908;7899:5;7908:1;7894:15;;;;;:20;7884:30;7876:39;;;;;7554:113;7647:5;;;7642:16;;;;7634:25;;;;;2032:196;2135:12;2167:53;2190:6;2198:4;2204:1;2207:12;2167:22;:53::i;:::-;2160:60;2032:196;-1:-1:-1;;;;2032:196:0:o;2794:979::-;2924:12;2957:18;2968:6;2957:10;:18::i;:::-;2949:60;;;;-1:-1:-1;;;2949:60:0;;;;;;;:::i;:::-;3083:12;3097:23;3124:6;-1:-1:-1;;;;;3124:11:0;3144:8;3155:4;3124:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3082:78;;;;3175:7;3171:595;;;3206:10;-1:-1:-1;3199:17:0;;-1:-1:-1;3199:17:0;3171:595;3320:17;;:21;3316:439;;3583:10;3577:17;3644:15;3631:10;3627:2;3623:19;3616:44;3531:148;3726:12;3719:20;;-1:-1:-1;;;3719:20:0;;;;;;;;:::i;819:619::-;879:4;1347:20;;1190:66;1387:23;;;;;;:42;;-1:-1:-1;;1414:15:0;;;1379:51;-1:-1:-1;;819:619:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;:::i;142:134::-;220:13;;238:33;220:13;238:33;:::i;419:440::-;;520:3;513:4;505:6;501:17;497:27;487:2;;-1:-1;;528:12;487:2;575:6;562:20;597:64;612:48;653:6;612:48;:::i;:::-;597:64;:::i;:::-;588:73;;681:6;674:5;667:21;785:3;717:4;776:6;709;767:16;;764:25;761:2;;;802:1;;792:12;761:2;24796:6;717:4;709:6;705:17;717:4;743:5;739:16;24773:30;24852:1;24834:16;;;717:4;24834:16;24827:27;743:5;480:379;-1:-1;;480:379::o;868:442::-;;980:3;973:4;965:6;961:17;957:27;947:2;;-1:-1;;988:12;947:2;1028:6;1022:13;1050:64;1065:48;1106:6;1065:48;:::i;1050:64::-;1041:73;;1134:6;1127:5;1120:21;1238:3;1170:4;1229:6;1162;1220:16;;1217:25;1214:2;;;1255:1;;1245:12;1214:2;1265:39;1297:6;1170:4;1196:5;1192:16;1170:4;1162:6;1158:17;1265:39;:::i;:::-;;940:370;;;;:::o;1527:1898::-;;1646:6;;1634:9;1629:3;1625:19;1621:32;1618:2;;;-1:-1;;1656:12;1618:2;1684:22;1646:6;1684:22;:::i;:::-;1675:31;;;1791:49;1836:3;1812:22;1791:49;:::i;:::-;1773:16;1766:75;1939:49;1984:3;1906:2;1964:9;1960:22;1939:49;:::i;:::-;1906:2;1925:5;1921:16;1914:75;2055:2;2113:9;2109:22;8739:20;2055:2;2074:5;2070:16;2063:75;2205:2;2263:9;2259:22;8739:20;2205:2;2224:5;2220:16;2213:75;2353:3;2412:9;2408:22;8739:20;2353:3;2373:5;2369:16;2362:75;2507:3;2566:9;2562:22;8739:20;2507:3;2527:5;2523:16;2516:75;2686:49;2731:3;2652;2711:9;2707:22;2686:49;:::i;:::-;2652:3;2672:5;2668:16;2661:75;2834:49;2879:3;2800;2859:9;2855:22;2834:49;:::i;:::-;2800:3;2820:5;2816:16;2809:75;2980:3;;2969:9;2965:19;2952:33;3005:18;;2997:6;2994:30;2991:2;;;1759:1;;3027:12;2991:2;3074:58;3128:3;3119:6;3108:9;3104:22;3074:58;:::i;:::-;2980:3;3058:5;3054:18;3047:86;3230:3;;;;3219:9;3215:19;3202:33;3188:47;;3005:18;3247:6;3244:30;3241:2;;;1759:1;;3277:12;3241:2;;3324:79;3399:3;3390:6;3379:9;3375:22;3324:79;:::i;:::-;3230:3;3308:5;3304:18;3297:107;;;1612:1813;;;;:::o;5528:1179::-;;5647:4;5635:9;5630:3;5626:19;5622:30;5619:2;;;-1:-1;;5655:12;5619:2;5683:20;5647:4;5683:20;:::i;:::-;5674:29;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5763:75;;5907:2;5961:22;;72:20;97:33;72:20;97:33;:::i;:::-;5907:2;5922:16;;5915:75;6062:2;6116:22;;72:20;97:33;72:20;97:33;:::i;:::-;6095:49;6062:2;6081:5;6077:16;6070:75;;6207:2;6265:9;6261:22;8739:20;6207:2;6226:5;6222:16;6215:75;6358:3;6417:9;6413:22;8739:20;6358:3;6378:5;6374:16;6367:75;6535:3;6524:9;6520:19;6507:33;6560:18;6552:6;6549:30;6546:2;;;-1:-1;;6582:12;6546:2;6627:58;6681:3;6672:6;6661:9;6657:22;6627:58;:::i;:::-;6535:3;6613:5;6609:16;6602:84;;5613:1094;;;;:::o;6756:1249::-;;6886:4;6874:9;6869:3;6865:19;6861:30;6858:2;;;-1:-1;;6894:12;6858:2;6922:20;6886:4;6922:20;:::i;:::-;6913:29;;226:6;220:13;238:33;265:5;238:33;:::i;:::-;7002:86;;7157:2;7222:22;;220:13;238:33;220:13;238:33;:::i;:::-;7157:2;7172:16;;7165:86;7323:2;7388:22;;220:13;238:33;220:13;238:33;:::i;:::-;7356:60;7323:2;7342:5;7338:16;7331:86;;7479:2;7548:9;7544:22;8887:13;7479:2;7498:5;7494:16;7487:86;7641:3;7711:9;7707:22;8887:13;7641:3;7661:5;7657:16;7650:86;7822:3;7811:9;7807:19;7801:26;7847:18;7839:6;7836:30;7833:2;;;-1:-1;;7869:12;7833:2;7914:69;7979:3;7970:6;7959:9;7955:22;7914:69;:::i;8950:241::-;;9054:2;9042:9;9033:7;9029:23;9025:32;9022:2;;;-1:-1;;9060:12;9022:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;9112:63;9016:175;-1:-1;;;9016:175::o;9198:366::-;;;9319:2;9307:9;9298:7;9294:23;9290:32;9287:2;;;-1:-1;;9325:12;9287:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;9377:63;9477:2;9516:22;;;;8739:20;;-1:-1;;;9281:283::o;9571:257::-;;9683:2;9671:9;9662:7;9658:23;9654:32;9651:2;;;-1:-1;;9689:12;9651:2;364:6;358:13;25455:5;23965:13;23958:21;25433:5;25430:32;25420:2;;-1:-1;;25466:12;9835:345;;9948:2;9936:9;9927:7;9923:23;9919:32;9916:2;;;-1:-1;;9954:12;9916:2;10012:17;9999:31;10050:18;10042:6;10039:30;10036:2;;;-1:-1;;10072:12;10036:2;10102:62;10156:7;10147:6;10136:9;10132:22;10102:62;:::i;10187:387::-;;10321:2;10309:9;10300:7;10296:23;10292:32;10289:2;;;-1:-1;;10327:12;10289:2;10385:17;10372:31;10423:18;10415:6;10412:30;10409:2;;;-1:-1;;10445:12;10409:2;10475:83;10550:7;10541:6;10530:9;10526:22;10475:83;:::i;10581:402::-;;10726:2;10714:9;10705:7;10701:23;10697:32;10694:2;;;-1:-1;;10732:12;10694:2;10783:17;10777:24;10821:18;;10813:6;10810:30;10807:2;;;-1:-1;;10843:12;10807:2;10950:6;10939:9;10935:22;;;3604:6;;3592:9;3587:3;3583:19;3579:32;3576:2;;;-1:-1;;3614:12;3576:2;3642:22;3604:6;3642:22;:::i;:::-;3633:31;;3749:60;3805:3;3781:22;3749:60;:::i;:::-;3731:16;3724:86;3908:60;3964:3;10726:2;3944:9;3940:22;3908:60;:::i;:::-;10726:2;3894:5;3890:16;3883:86;4035:2;4104:9;4100:22;8887:13;4035:2;4054:5;4050:16;4043:86;4196:2;4265:9;4261:22;8887:13;4196:2;4215:5;4211:16;4204:86;4355:3;4425:9;4421:22;8887:13;4355:3;4375:5;4371:16;4364:86;4520:3;4590:9;4586:22;8887:13;4520:3;4540:5;4536:16;4529:86;4710:60;4766:3;4676;4746:9;4742:22;4710:60;:::i;:::-;4676:3;4696:5;4692:16;4685:86;4869:60;4925:3;4835;4905:9;4901:22;4869:60;:::i;:::-;4835:3;4855:5;4851:16;4844:86;5019:3;;5008:9;5004:19;4998:26;10821:18;5036:6;5033:30;5030:2;;;-1:-1;;5066:12;5030:2;5113:69;5178:3;5169:6;5158:9;5154:22;5113:69;:::i;:::-;5019:3;5097:5;5093:18;5086:97;;;5273:3;;5262:9;5258:19;5252:26;10821:18;5290:6;5287:30;5284:2;;;-1:-1;;5320:12;5284:2;5367:90;5453:3;5444:6;5433:9;5429:22;5367:90;:::i;:::-;5347:18;;;5340:118;;;;-1:-1;5351:5;10688:295;-1:-1;;;;;10688:295::o;10990:542::-;;;11156:2;11144:9;11135:7;11131:23;11127:32;11124:2;;;-1:-1;;11162:12;11124:2;11220:17;11207:31;11258:18;11250:6;11247:30;11244:2;;;-1:-1;;11280:12;11244:2;11310:83;11385:7;11376:6;11365:9;11361:22;11310:83;:::i;:::-;11300:93;;;11430:2;11488:9;11484:22;1400:20;25576:1;25569:5;25566:12;25556:2;;-1:-1;;25582:12;25556:2;11438:78;;;;11118:414;;;;;:::o;11539:410::-;;11688:2;11676:9;11667:7;11663:23;11659:32;11656:2;;;-1:-1;;11694:12;11656:2;11745:17;11739:24;11783:18;;11775:6;11772:30;11769:2;;;-1:-1;;11805:12;11769:2;11901:22;;;;8192:4;8171:19;;;8167:30;8164:2;;;-1:-1;;8200:12;8164:2;8228:20;8192:4;8228:20;:::i;:::-;8312:17;8306:24;11783:18;8342:6;8339:30;8336:2;;;-1:-1;;8372:12;8336:2;8417:69;8482:3;8473:6;8462:9;8458:22;8417:69;:::i;:::-;8399:16;8392:95;;11688:2;8619:9;8615:22;8887:13;11688:2;8569:5;8565:16;8558:86;11825:108;;;;;;11650:299;;;;:::o;11956:263::-;;12071:2;12059:9;12050:7;12046:23;12042:32;12039:2;;;-1:-1;;12077:12;12039:2;-1:-1;8887:13;;12033:186;-1:-1;12033:186::o;12226:103::-;-1:-1;;;;;24053:54;12287:37;;12281:48::o;12567:323::-;;12699:5;22974:12;23249:6;23244:3;23237:19;12782:52;12827:6;23286:4;23281:3;23277:14;23286:4;12808:5;12804:16;12782:52;:::i;:::-;25229:7;25213:14;-1:-1;;25209:28;12846:39;;;;23286:4;12846:39;;12647:243;-1:-1;;12647:243::o;17167:1219::-;;3005:18;;24064:42;;;;17393:16;17387:23;24053:54;12294:3;12287:37;24064:42;17566:4;17559:5;17555:16;17549:23;24053:54;17566:4;17630:3;17626:14;12287:37;24064:42;17731:4;17724:5;17720:16;17714:23;24053:54;17731:4;17795:3;17791:14;12287:37;;17886:4;17879:5;17875:16;17869:23;17886:4;17950:3;17946:14;18454:37;18047:4;18040:5;18036:16;18030:23;18047:4;18111:3;18107:14;18454:37;18205:4;18198:5;18194:16;18188:23;17318:4;18205;18235:3;18231:14;18224:38;18277:71;17318:4;17313:3;17309:14;18329:12;18277:71;:::i;18623:271::-;;13407:5;22974:12;13518:52;13563:6;13558:3;13551:4;13544:5;13540:16;13518:52;:::i;:::-;13582:16;;;;;18757:137;-1:-1;;18757:137::o;18901:222::-;-1:-1;;;;;24053:54;;;;12287:37;;19028:2;19013:18;;18999:124::o;19130:345::-;-1:-1;;;;;24053:54;;;;12287:37;;24269:4;24258:16;19461:2;19446:18;;13864:56;19291:2;19276:18;;19262:213::o;19482:333::-;-1:-1;;;;;24053:54;;;;12287:37;;19801:2;19786:18;;18454:37;19637:2;19622:18;;19608:207::o;19822:321::-;23965:13;;23958:21;12521:34;;20129:2;20114:18;;18454:37;19971:2;19956:18;;19942:201::o;20150:306::-;;20295:2;20316:17;20309:47;20370:76;20295:2;20284:9;20280:18;20432:6;20370:76;:::i;21053:416::-;21253:2;21267:47;;;14511:2;21238:18;;;23237:19;14547:31;23277:14;;;14527:52;14598:12;;;21224:245::o;21476:416::-;21676:2;21690:47;;;14849:2;21661:18;;;23237:19;14885:34;23277:14;;;14865:55;-1:-1;;;14940:12;;;14933:34;14986:12;;;21647:245::o;21899:390::-;;22086:2;22107:17;22100:47;15354:63;22086:2;22075:9;22071:18;15331:16;15325:23;15354:63;:::i;:::-;22086:2;15493:5;15489:16;15483:23;15512:63;15560:14;22075:9;15560:14;15546:12;15512:63;:::i;:::-;;15560:14;15652:5;15648:16;15642:23;15719:14;22075:9;15719:14;18454:37;15719:14;15812:5;15808:16;15802:23;15879:14;22075:9;15879:14;18454:37;15879:14;15970:5;15966:16;15960:23;16037:14;22075:9;16037:14;18454:37;16037:14;16133:5;16129:16;16123:23;16200:14;22075:9;16200:14;18454:37;16200:14;16287:5;16283:16;16277:23;16306:63;16354:14;22075:9;16354:14;16340:12;16306:63;:::i;:::-;;16354:14;16444:5;16440:16;16434:23;16511:14;16463:63;16511:14;22075:9;16511:14;16497:12;16463:63;:::i;:::-;16511:14;16605:5;16601:18;16595:25;16575:45;;;15254:6;16640:16;15254:6;16640:16;22075:9;16640:16;16633:40;16688:71;15245:16;22075:9;15245:16;16740:12;16688:71;:::i;:::-;16841:18;;;16835:25;16898:14;;;-1:-1;;16898:14;16880:16;;;16873:40;16680:79;;-1:-1;16928:113;16680:79;16835:25;16928:113;:::i;:::-;22153:126;22057:232;-1:-1;;;;;;22057:232::o;22296:256::-;22358:2;22352:9;22384:17;;;22459:18;22444:34;;22480:22;;;22441:62;22438:2;;;22516:1;;22506:12;22438:2;22358;22525:22;22336:216;;-1:-1;22336:216::o;22559:321::-;;22702:18;22694:6;22691:30;22688:2;;;-1:-1;;22724:12;22688:2;-1:-1;25229:7;22778:17;-1:-1;;22774:33;22865:4;22855:15;;22625:255::o;24869:268::-;24934:1;24941:101;24955:6;24952:1;24949:13;24941:101;;;25022:11;;;25016:18;25003:11;;;24996:39;24977:2;24970:10;24941:101;;;25057:6;25054:1;25051:13;25048:2;;;24934:1;25113:6;25108:3;25104:16;25097:27;25048:2;;24918:219;;;:::o;25250:117::-;-1:-1;;;;;24053:54;;25309:35;;25299:2;;25358:1;;25348:12;25299:2;25293:74;:::o
Swarm Source
ipfs://5ae5dd605b339e26b9ce6150ff39863637eb89c789f5e1ac257bc635f6e02d93
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.