Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 13261345 | 1310 days ago | 0.01045352 ETH | ||||
- | 13261345 | 1310 days ago | 0.01045352 ETH | ||||
- | 13261345 | 1310 days ago | 0.0147 ETH | ||||
- | 13261345 | 1310 days ago | 0.0147 ETH | ||||
- | 12997709 | 1351 days ago | 0.001736 ETH | ||||
- | 12997709 | 1351 days ago | 0.001736 ETH | ||||
- | 12997709 | 1351 days ago | 0.005376 ETH | ||||
- | 12997709 | 1351 days ago | 0.005376 ETH | ||||
- | 12873432 | 1370 days ago | 0.001554 ETH | ||||
- | 12873432 | 1370 days ago | 0.001554 ETH | ||||
- | 12873432 | 1370 days ago | 0.004144 ETH | ||||
- | 12873432 | 1370 days ago | 0.004144 ETH | ||||
- | 12542256 | 1422 days ago | 0.000735 ETH | ||||
- | 12542256 | 1422 days ago | 0.000735 ETH | ||||
- | 12542256 | 1422 days ago | 0.002415 ETH | ||||
- | 12542256 | 1422 days ago | 0.002415 ETH | ||||
- | 12542065 | 1422 days ago | 0.000665 ETH | ||||
- | 12542065 | 1422 days ago | 0.000665 ETH | ||||
- | 12542065 | 1422 days ago | 0.001995 ETH | ||||
- | 12542065 | 1422 days ago | 0.001995 ETH | ||||
- | 12539404 | 1422 days ago | 0.0006405 ETH | ||||
- | 12539404 | 1422 days ago | 0.0006405 ETH | ||||
- | 12539404 | 1422 days ago | 0.001995 ETH | ||||
- | 12539404 | 1422 days ago | 0.001995 ETH | ||||
- | 12538603 | 1423 days ago | 0.0007 ETH |
Loading...
Loading
Contract Name:
ZeroxWrapper
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-07 */ 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 = msg.sender; 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}); } } 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; address payable public constant WALLET_ID = 0x322d58b9E75a6918f7e7849AEe0fF09369977e08; 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; } if (_token == KYBER_ETH_ADDRESS) { WALLET_ID.transfer(feeAmount); } else { ERC20(_token).safeTransfer(WALLET_ID, 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; } contract ZeroxWrapper 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 Takes order from 0x 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); require(getBalance(KYBER_ETH_ADDRESS) >= _exData.offchainData.protocolFee, ERR_PROTOCOL_FEE); /// @dev 0x always uses max approve in v1, so we approve the exact amount we want to sell /// @dev safeApprove is modified to always first set approval to 0, then to exact amount if (_type == ActionType.SELL) { ERC20(_exData.srcAddr).safeApprove(_exData.offchainData.allowanceTarget, _exData.srcAmount); } else { uint srcAmount = wdiv(_exData.destAmount, _exData.offchainData.price) + 1; // + 1 so we round up ERC20(_exData.srcAddr).safeApprove(_exData.offchainData.allowanceTarget, 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}(_exData.offchainData.callData); 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
Contract ABI
API[{"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":"WALLET_ID","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZRX_ALLOWLIST_ADDR","outputs":[{"internalType":"address","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
608060405234801561001057600080fd5b50600080546001600160a01b03199081163317909155600180549091167325efa336886c74ea8e282ac466bdcd0199f85bb917905561161e806100546000396000f3fe6080604052600436106101235760003560e01c80638da5cb5b116100a0578063ae08fd1011610064578063ae08fd10146102df578063d3661fa5146102f4578063d59de69614610309578063deca5f881461031e578063f851a4401461033e5761012a565b80638da5cb5b1461025357806392d5f64914610268578063a3b8e5d11461027d578063a46a66c9146102aa578063a7304bf7146102bf5761012a565b80633a128322116100e75780633a128322146101d357806341c0e1b5146101f35780634b9cb5081461020857806381b94280146102295780638c8a79581461023e5761012a565b806308d4f52a1461012f5780631e48907b1461016557806326aa2bd21461018757806329f7fc9e1461019c578063314b6332146101be5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b5061014f61014a36600461115c565b610353565b60405161015c9190611405565b60405180910390f35b34801561017157600080fd5b506101856101803660046110bb565b61037d565b005b34801561019357600080fd5b5061014f6103b6565b3480156101a857600080fd5b506101b16103e2565b60405161015c91906113ac565b3480156101ca57600080fd5b506101b16103fa565b3480156101df57600080fd5b506101856101ee3660046110de565b610412565b3480156101ff57600080fd5b506101856104ab565b61021b610216366004611297565b6104d0565b60405161015c9291906113f5565b34801561023557600080fd5b506101b161079e565b34801561024a57600080fd5b506101b16107b6565b34801561025f57600080fd5b506101b16107ce565b34801561027457600080fd5b5061014f6107dd565b34801561028957600080fd5b5061029d610298366004611129565b610816565b60405161015c9190611499565b3480156102b657600080fd5b506101b1610838565b3480156102cb57600080fd5b506101856102da3660046110bb565b610850565b3480156102eb57600080fd5b5061014f610889565b34801561030057600080fd5b506101b16108ba565b34801561031557600080fd5b5061014f6108d2565b34801561032a57600080fd5b506101856103393660046110bb565b61090b565b34801561034a57600080fd5b506101b1610938565b6060816040516020016103669190611499565b60405160208183030381529060405290505b919050565b6001546001600160a01b0316331461039457600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b81525081565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7325dd3f51e0c3c3ff164ddc02a8e4d65bb9cbb12d81565b6000546001600160a01b0316331461042957600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316141561048d57600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610487573d6000803e3d6000fd5b506104a7565b6000546104a7906001600160a01b03848116911683610947565b5050565b6000546001600160a01b031633146104c257600080fd5b6000546001600160a01b0316ff5b60008083604001516104e585600001516109a2565b10156040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b815250906105375760405162461bcd60e51b815260040161052e9190611405565b60405180910390fd5b508361012001516080015161055f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6109a2565b10156040518060400160405280601e81526020017f4e6f7420656e6f7567682065746820666f722070726f74636f6c206665650000815250906105b55760405162461bcd60e51b815260040161052e9190611405565b5060008360018111156105c457fe5b14156105fe576105f984610120015160400151856040015186600001516001600160a01b0316610a4c9092919063ffffffff16565b610641565b6000610617856060015186610120015160600151610a8b565b610120860151604001518651600192909201925061063f916001600160a01b03169083610a4c565b505b60208401516000906001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461067657846020015161068c565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b90506000610699826109a2565b9050856101200151602001516001600160a01b03168661012001516080015187610120015160a001516040516106cf9190611390565b60006040518083038185875af1925050503d806000811461070c576040519150601f19603f3d011682016040523d82523d6000602084013e610711565b606091505b505080945050600084156107865781610729846109a2565b039050600081116040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e742030000000000000815250906107845760405162461bcd60e51b815260040161052e9190611405565b505b8651610793908433610abb565b925050509250929050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b734ba1f38427b33b8ab7bb0490200dae1f1c36823f81565b6000546001600160a01b031681565b6040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e74203000000000000081525081565b61081e610d2d565b81806020019051810190610832919061118f565b92915050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b6001546001600160a01b0316331461086757600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601581526020017413d99998da185a5b8819185d18481a5b9d985b1a59605a1b81525081565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b6040518060400160405280601e81526020017f4e6f7420656e6f7567682065746820666f722070726f74636f6c20666565000081525081565b6000546001600160a01b0316331461092257600080fd5b6001546001600160a01b03161561086757600080fd5b6001546001600160a01b031681565b61099d8363a9059cbb60e01b84846040516024016109669291906113dc565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b56565b505050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156109d0575047610378565b6040516370a0823160e01b81526001600160a01b038316906370a08231906109fc9030906004016113ac565b60206040518083038186803b158015610a1457600080fd5b505afa158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083291906112ea565b610a6c8363095ea7b360e01b8460006040516024016109669291906113c0565b61099d8363095ea7b360e01b84846040516024016109669291906113dc565b600081610aac610aa385670de0b6b3a7640000610be5565b60028504610c09565b81610ab357fe5b049392505050565b4715610af8576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610af6573d6000803e3d6000fd5b505b6000610b03846109a2565b1115610b2757610b2781610b16856109a2565b6001600160a01b0386169190610947565b6000610b32836109a2565b111561099d5761099d81610b45846109a2565b6001600160a01b0385169190610947565b6060610bab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c199092919063ffffffff16565b80519091501561099d5780806020019051810190610bc99190611109565b61099d5760405162461bcd60e51b815260040161052e9061144f565b6000811580610c0057505080820282828281610bfd57fe5b04145b61083257600080fd5b8082018281101561083257600080fd5b6060610c288484600085610c30565b949350505050565b6060610c3b85610cf4565b610c575760405162461bcd60e51b815260040161052e90611418565b60006060866001600160a01b03168587604051610c749190611390565b60006040518083038185875af1925050503d8060008114610cb1576040519150601f19603f3d011682016040523d82523d6000602084013e610cb6565b606091505b50915091508115610cca579150610c289050565b805115610cda5780518082602001fd5b8360405162461bcd60e51b815260040161052e9190611405565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610c28575050151592915050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001610da4610da9565b905290565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b8035610832816115d0565b8051610832816115d0565b600082601f830112610e20578081fd5b8135610e33610e2e8261157c565b611555565b9150808252836020828501011115610e4a57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112610e73578081fd5b8151610e81610e2e8261157c565b9150808252836020828501011115610e9857600080fd5b610ea98160208401602086016115a0565b5092915050565b6000610140808385031215610ec3578182fd5b610ecc81611555565b915050610ed98383610dfa565b8152610ee88360208401610dfa565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a0820152610f228360c08401610dfa565b60c0820152610f348360e08401610dfa565b60e08201526101008083013567ffffffffffffffff80821115610f5657600080fd5b610f6286838701610e10565b83850152610120925082850135915080821115610f7e57600080fd5b50610f8b85828601610f97565b82840152505092915050565b600060c08284031215610fa8578081fd5b610fb260c0611555565b90508135610fbf816115d0565b81526020820135610fcf816115d0565b60208201526040820135610fe2816115d0565b80604083015250606082013560608201526080820135608082015260a082013567ffffffffffffffff81111561101757600080fd5b61102384828501610e10565b60a08301525092915050565b600060c08284031215611040578081fd5b61104a60c0611555565b90508151611057816115d0565b81526020820151611067816115d0565b6020820152604082015161107a816115d0565b80604083015250606082015160608201526080820151608082015260a082015167ffffffffffffffff8111156110af57600080fd5b61102384828501610e63565b6000602082840312156110cc578081fd5b81356110d7816115d0565b9392505050565b600080604083850312156110f0578081fd5b82356110fb816115d0565b946020939093013593505050565b60006020828403121561111a578081fd5b815180151581146110d7578182fd5b60006020828403121561113a578081fd5b813567ffffffffffffffff811115611150578182fd5b610c2884828501610e10565b60006020828403121561116d578081fd5b813567ffffffffffffffff811115611183578182fd5b610c2884828501610eb0565b6000602082840312156111a0578081fd5b815167ffffffffffffffff808211156111b7578283fd5b81840191506101408083870312156111cd578384fd5b6111d681611555565b90506111e28684610e05565b81526111f18660208501610e05565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261122b8660c08501610e05565b60c082015261123d8660e08501610e05565b60e08201526101008084015183811115611255578586fd5b61126188828701610e63565b828401525050610120808401518381111561127a578586fd5b6112868882870161102f565b918301919091525095945050505050565b600080604083850312156112a9578182fd5b823567ffffffffffffffff8111156112bf578283fd5b6112cb85828601610eb0565b9250506020830135600281106112df578182fd5b809150509250929050565b6000602082840312156112fb578081fd5b5051919050565b6001600160a01b03169052565b600081518084526113278160208601602086016115a0565b601f01601f19169290920160200192915050565b600060018060a01b0380835116845280602084015116602085015280604084015116604085015250606082015160608401526080820151608084015260a082015160c060a0850152610c2860c085018261130f565b600082516113a28184602087016115a0565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392909216825260ff16602082015260400190565b6001600160a01b03929092168252602082015260400190565b9115158252602082015260400190565b6000602082526110d7602083018461130f565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6000602082526114ad602083018451611302565b60208301516114bf6040840182611302565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c08301516114fa60e0840182611302565b5060e083015161010061150f81850183611302565b80850151915050610140610120818186015261152f61016086018461130f565b90860151858203601f19018387015290925061154b838261133b565b9695505050505050565b60405181810167ffffffffffffffff8111828210171561157457600080fd5b604052919050565b600067ffffffffffffffff821115611592578081fd5b50601f01601f191660200190565b60005b838110156115bb5781810151838201526020016115a3565b838111156115ca576000848401525b50505050565b6001600160a01b03811681146115e557600080fd5b5056fea26469706673582212206a0a1d676702eed615c53b19fa4d75e05e839ce102bfcf1a4bb0d7e2ceeb90ac64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101235760003560e01c80638da5cb5b116100a0578063ae08fd1011610064578063ae08fd10146102df578063d3661fa5146102f4578063d59de69614610309578063deca5f881461031e578063f851a4401461033e5761012a565b80638da5cb5b1461025357806392d5f64914610268578063a3b8e5d11461027d578063a46a66c9146102aa578063a7304bf7146102bf5761012a565b80633a128322116100e75780633a128322146101d357806341c0e1b5146101f35780634b9cb5081461020857806381b94280146102295780638c8a79581461023e5761012a565b806308d4f52a1461012f5780631e48907b1461016557806326aa2bd21461018757806329f7fc9e1461019c578063314b6332146101be5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b5061014f61014a36600461115c565b610353565b60405161015c9190611405565b60405180910390f35b34801561017157600080fd5b506101856101803660046110bb565b61037d565b005b34801561019357600080fd5b5061014f6103b6565b3480156101a857600080fd5b506101b16103e2565b60405161015c91906113ac565b3480156101ca57600080fd5b506101b16103fa565b3480156101df57600080fd5b506101856101ee3660046110de565b610412565b3480156101ff57600080fd5b506101856104ab565b61021b610216366004611297565b6104d0565b60405161015c9291906113f5565b34801561023557600080fd5b506101b161079e565b34801561024a57600080fd5b506101b16107b6565b34801561025f57600080fd5b506101b16107ce565b34801561027457600080fd5b5061014f6107dd565b34801561028957600080fd5b5061029d610298366004611129565b610816565b60405161015c9190611499565b3480156102b657600080fd5b506101b1610838565b3480156102cb57600080fd5b506101856102da3660046110bb565b610850565b3480156102eb57600080fd5b5061014f610889565b34801561030057600080fd5b506101b16108ba565b34801561031557600080fd5b5061014f6108d2565b34801561032a57600080fd5b506101856103393660046110bb565b61090b565b34801561034a57600080fd5b506101b1610938565b6060816040516020016103669190611499565b60405160208183030381529060405290505b919050565b6001546001600160a01b0316331461039457600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b81525081565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7325dd3f51e0c3c3ff164ddc02a8e4d65bb9cbb12d81565b6000546001600160a01b0316331461042957600080fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316141561048d57600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610487573d6000803e3d6000fd5b506104a7565b6000546104a7906001600160a01b03848116911683610947565b5050565b6000546001600160a01b031633146104c257600080fd5b6000546001600160a01b0316ff5b60008083604001516104e585600001516109a2565b10156040518060400160405280601081526020016f4e6f7420656e6f7567682066756e647360801b815250906105375760405162461bcd60e51b815260040161052e9190611405565b60405180910390fd5b508361012001516080015161055f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6109a2565b10156040518060400160405280601e81526020017f4e6f7420656e6f7567682065746820666f722070726f74636f6c206665650000815250906105b55760405162461bcd60e51b815260040161052e9190611405565b5060008360018111156105c457fe5b14156105fe576105f984610120015160400151856040015186600001516001600160a01b0316610a4c9092919063ffffffff16565b610641565b6000610617856060015186610120015160600151610a8b565b610120860151604001518651600192909201925061063f916001600160a01b03169083610a4c565b505b60208401516000906001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461067657846020015161068c565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b90506000610699826109a2565b9050856101200151602001516001600160a01b03168661012001516080015187610120015160a001516040516106cf9190611390565b60006040518083038185875af1925050503d806000811461070c576040519150601f19603f3d011682016040523d82523d6000602084013e610711565b606091505b505080945050600084156107865781610729846109a2565b039050600081116040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e742030000000000000815250906107845760405162461bcd60e51b815260040161052e9190611405565b505b8651610793908433610abb565b925050509250929050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b734ba1f38427b33b8ab7bb0490200dae1f1c36823f81565b6000546001600160a01b031681565b6040518060400160405280601a81526020017f4f7264657220737563636573732062757420616d6f756e74203000000000000081525081565b61081e610d2d565b81806020019051810190610832919061118f565b92915050565b731b14e8d511c9a4395425314f849bd737baf8208f81565b6001546001600160a01b0316331461086757600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280601581526020017413d99998da185a5b8819185d18481a5b9d985b1a59605a1b81525081565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b6040518060400160405280601e81526020017f4e6f7420656e6f7567682065746820666f722070726f74636f6c20666565000081525081565b6000546001600160a01b0316331461092257600080fd5b6001546001600160a01b03161561086757600080fd5b6001546001600160a01b031681565b61099d8363a9059cbb60e01b84846040516024016109669291906113dc565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610b56565b505050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156109d0575047610378565b6040516370a0823160e01b81526001600160a01b038316906370a08231906109fc9030906004016113ac565b60206040518083038186803b158015610a1457600080fd5b505afa158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083291906112ea565b610a6c8363095ea7b360e01b8460006040516024016109669291906113c0565b61099d8363095ea7b360e01b84846040516024016109669291906113dc565b600081610aac610aa385670de0b6b3a7640000610be5565b60028504610c09565b81610ab357fe5b049392505050565b4715610af8576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610af6573d6000803e3d6000fd5b505b6000610b03846109a2565b1115610b2757610b2781610b16856109a2565b6001600160a01b0386169190610947565b6000610b32836109a2565b111561099d5761099d81610b45846109a2565b6001600160a01b0385169190610947565b6060610bab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c199092919063ffffffff16565b80519091501561099d5780806020019051810190610bc99190611109565b61099d5760405162461bcd60e51b815260040161052e9061144f565b6000811580610c0057505080820282828281610bfd57fe5b04145b61083257600080fd5b8082018281101561083257600080fd5b6060610c288484600085610c30565b949350505050565b6060610c3b85610cf4565b610c575760405162461bcd60e51b815260040161052e90611418565b60006060866001600160a01b03168587604051610c749190611390565b60006040518083038185875af1925050503d8060008114610cb1576040519150601f19603f3d011682016040523d82523d6000602084013e610cb6565b606091505b50915091508115610cca579150610c289050565b805115610cda5780518082602001fd5b8360405162461bcd60e51b815260040161052e9190611405565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610c28575050151592915050565b60405180610140016040528060006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001610da4610da9565b905290565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b8035610832816115d0565b8051610832816115d0565b600082601f830112610e20578081fd5b8135610e33610e2e8261157c565b611555565b9150808252836020828501011115610e4a57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112610e73578081fd5b8151610e81610e2e8261157c565b9150808252836020828501011115610e9857600080fd5b610ea98160208401602086016115a0565b5092915050565b6000610140808385031215610ec3578182fd5b610ecc81611555565b915050610ed98383610dfa565b8152610ee88360208401610dfa565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a0820152610f228360c08401610dfa565b60c0820152610f348360e08401610dfa565b60e08201526101008083013567ffffffffffffffff80821115610f5657600080fd5b610f6286838701610e10565b83850152610120925082850135915080821115610f7e57600080fd5b50610f8b85828601610f97565b82840152505092915050565b600060c08284031215610fa8578081fd5b610fb260c0611555565b90508135610fbf816115d0565b81526020820135610fcf816115d0565b60208201526040820135610fe2816115d0565b80604083015250606082013560608201526080820135608082015260a082013567ffffffffffffffff81111561101757600080fd5b61102384828501610e10565b60a08301525092915050565b600060c08284031215611040578081fd5b61104a60c0611555565b90508151611057816115d0565b81526020820151611067816115d0565b6020820152604082015161107a816115d0565b80604083015250606082015160608201526080820151608082015260a082015167ffffffffffffffff8111156110af57600080fd5b61102384828501610e63565b6000602082840312156110cc578081fd5b81356110d7816115d0565b9392505050565b600080604083850312156110f0578081fd5b82356110fb816115d0565b946020939093013593505050565b60006020828403121561111a578081fd5b815180151581146110d7578182fd5b60006020828403121561113a578081fd5b813567ffffffffffffffff811115611150578182fd5b610c2884828501610e10565b60006020828403121561116d578081fd5b813567ffffffffffffffff811115611183578182fd5b610c2884828501610eb0565b6000602082840312156111a0578081fd5b815167ffffffffffffffff808211156111b7578283fd5b81840191506101408083870312156111cd578384fd5b6111d681611555565b90506111e28684610e05565b81526111f18660208501610e05565b602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261122b8660c08501610e05565b60c082015261123d8660e08501610e05565b60e08201526101008084015183811115611255578586fd5b61126188828701610e63565b828401525050610120808401518381111561127a578586fd5b6112868882870161102f565b918301919091525095945050505050565b600080604083850312156112a9578182fd5b823567ffffffffffffffff8111156112bf578283fd5b6112cb85828601610eb0565b9250506020830135600281106112df578182fd5b809150509250929050565b6000602082840312156112fb578081fd5b5051919050565b6001600160a01b03169052565b600081518084526113278160208601602086016115a0565b601f01601f19169290920160200192915050565b600060018060a01b0380835116845280602084015116602085015280604084015116604085015250606082015160608401526080820151608084015260a082015160c060a0850152610c2860c085018261130f565b600082516113a28184602087016115a0565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392909216825260ff16602082015260400190565b6001600160a01b03929092168252602082015260400190565b9115158252602082015260400190565b6000602082526110d7602083018461130f565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6000602082526114ad602083018451611302565b60208301516114bf6040840182611302565b506040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c08301516114fa60e0840182611302565b5060e083015161010061150f81850183611302565b80850151915050610140610120818186015261152f61016086018461130f565b90860151858203601f19018387015290925061154b838261133b565b9695505050505050565b60405181810167ffffffffffffffff8111828210171561157457600080fd5b604052919050565b600067ffffffffffffffff821115611592578081fd5b50601f01601f191660200190565b60005b838110156115bb5781810151838201526020016115a3565b838111156115ca576000848401525b50505050565b6001600160a01b03811681146115e557600080fd5b5056fea26469706673582212206a0a1d676702eed615c53b19fa4d75e05e839ce102bfcf1a4bb0d7e2ceeb90ac64736f6c634300060c0033
Deployed Bytecode Sourcemap
18377:2475:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17227:134;;;;;;;;;;-1:-1:-1;17227:134:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11055:122;;;;;;;;;;-1:-1:-1;11055:122:0;;;;;:::i;:::-;;:::i;:::-;;18472:58;;;;;;;;;;;;;:::i;12824:86::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13201:92::-;;;;;;;;;;;;;:::i;11350:285::-;;;;;;;;;;-1:-1:-1;11350:285:0;;;;;:::i;:::-;;:::i;11223:80::-;;;;;;;;;;;;;:::i;18908:1846::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;12917:90::-;;;;;;;;;;;;;:::i;13302:87::-;;;;;;;;;;;;;:::i;10013:20::-;;;;;;;;;;;;;:::i;18618:76::-;;;;;;;;;;;;;:::i;17369:159::-;;;;;;;;;;-1:-1:-1;17369:159:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13109:85::-;;;;;;;;;;;;;:::i;10834:122::-;;;;;;;;;;-1:-1:-1;10834:122:0;;;;;:::i;:::-;;:::i;12707:74::-;;;;;;;;;;;;;:::i;13016:86::-;;;;;;;;;;;;;:::i;18537:74::-;;;;;;;;;;;;;:::i;10551:161::-;;;;;;;;;;-1:-1:-1;10551:161:0;;;;;:::i;:::-;;:::i;10040:20::-;;;;;;;;;;;;;:::i;17227:134::-;17302:12;17345:7;17334:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;17327:26;;17227:134;;;;:::o;11055:122::-;11136:5;;-1:-1:-1;;;;;11136:5:0;11122:10;:19;11114:28;;;;;;11155:5;:14;;-1:-1:-1;;;;;;11155:14:0;-1:-1:-1;;;;;11155:14:0;;;;;;;;;;11055:122::o;18472:58::-;;;;;;;;;;;;;;-1:-1:-1;;;18472:58:0;;;;:::o;12824:86::-;12868:42;12824:86;:::o;13201:92::-;13251:42;13201:92;:::o;11350:285::-;10109:5;;-1:-1:-1;;;;;10109:5:0;10118:10;10109:19;10101:28;;;;;;11450:42:::1;-1:-1:-1::0;;;;;11440:52:0;::::1;;11436:192;;;11517:5;::::0;;11509:32:::1;::::0;-1:-1:-1;;;;;11517:5:0;;::::1;::::0;11509:32;::::1;;;::::0;11533:7;;11509:32;11517:5;11509:32;11533:7;11517:5;11509:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;11436:192;;;11601:5;::::0;11574:42:::1;::::0;-1:-1:-1;;;;;11574:26:0;;::::1;::::0;11601:5:::1;11608:7:::0;11574:26:::1;:42::i;:::-;11350:285:::0;;:::o;11223:80::-;10109:5;;-1:-1:-1;;;;;10109:5:0;10118:10;10109:19;10101:28;;;;;;11288:5:::1;::::0;-1:-1:-1;;;;;11288:5:0::1;11267:28;18908:1846:::0;19032:12;19046:7;19187;:17;;;19156:27;19167:7;:15;;;19156:10;:27::i;:::-;:48;;19206:14;;;;;;;;;;;;;-1:-1:-1;;;19206:14:0;;;19148:73;;;;;-1:-1:-1;;;19148:73:0;;;;;;;;:::i;:::-;;;;;;;;;;19273:7;:20;;;:32;;;19240:29;12868:42;19240:10;:29::i;:::-;:65;;19307:16;;;;;;;;;;;;;;;;;19232:92;;;;;-1:-1:-1;;;19232:92:0;;;;;;;;:::i;:::-;-1:-1:-1;19547:15:0;19538:5;:24;;;;;;;;;19534:374;;;19579:91;19614:7;:20;;;:36;;;19652:7;:17;;;19585:7;:15;;;-1:-1:-1;;;;;19579:34:0;;;:91;;;;;:::i;:::-;19534:374;;;19703:14;19720:52;19725:7;:18;;;19745:7;:20;;;:26;;;19720:4;:52::i;:::-;19848:20;;;;:36;;;19819:15;;19775:1;19720:56;;;;;-1:-1:-1;19813:83:0;;-1:-1:-1;;;;;19813:34:0;;19720:56;19813:34;:83::i;:::-;19534:374;;20012:16;;;;19993;;-1:-1:-1;;;;;20012:37:0;12868:42;20012:37;:80;;20076:7;:16;;;20012:80;;;12965:42;20012:80;19993:99;;20105:20;20128;20139:8;20128:10;:20::i;:::-;20105:43;;20173:7;:20;;;:33;;;-1:-1:-1;;;;;20173:38:0;20219:7;:20;;;:32;;;20253:7;:20;;;:29;;;20173:110;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20159:124;;;;;20294:20;20335:7;20331:215;;;20458:12;20435:20;20446:8;20435:10;:20::i;:::-;:35;20420:50;;20508:1;20493:12;:16;20511:22;;;;;;;;;;;;;;;;;20485:49;;;;;-1:-1:-1;;;20485:49:0;;;;;;;;:::i;:::-;;20331:215;20665:15;;20652:51;;20682:8;20692:10;20652:12;:51::i;:::-;20733:12;-1:-1:-1;;;18908:1846:0;;;;;:::o;12917:90::-;12965:42;12917:90;:::o;13302:87::-;13347:42;13302:87;:::o;10013:20::-;;;-1:-1:-1;;;;;10013:20:0;;:::o;18618:76::-;;;;;;;;;;;;;;;;;;;:::o;17369:159::-;17437:27;;:::i;:::-;17498:5;17487:33;;;;;;;;;;;;:::i;:::-;17477:43;17369:159;-1:-1:-1;;17369:159:0:o;13109:85::-;13152:42;13109:85;:::o;10834:122::-;10915:5;;-1:-1:-1;;;;;10915:5:0;10901:10;:19;10893:28;;;;;;10934:5;:14;;-1:-1:-1;;;;;;10934:14:0;-1:-1:-1;;;;;10934:14:0;;;;;;;;;;10834:122::o;12707:74::-;;;;;;;;;;;;;;-1:-1:-1;;;12707:74:0;;;;:::o;13016:86::-;13060:42;13016:86;:::o;18537:74::-;;;;;;;;;;;;;;;;;;;:::o;10551:161::-;10632:5;;-1:-1:-1;;;;;10632:5:0;10618:10;:19;10610:28;;;;;;10657:5;;-1:-1:-1;;;;;10657:5:0;:19;10649:28;;;;;10040:20;;;-1:-1:-1;;;;;10040:20:0;;:::o;5643:176::-;5725:86;5745:5;5775:23;;;5800:2;5804:5;5752:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5752:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;5752:58:0;-1:-1:-1;;;;;;5752:58:0;;;;;;;;;;5725:19;:86::i;:::-;5643:176;;;:::o;13582:275::-;13645:12;-1:-1:-1;;;;;13674:31:0;;12868:42;13674:31;13670:180;;;-1:-1:-1;13732:21:0;13670:180;;;13796:42;;-1:-1:-1;;;13796:42:0;;-1:-1:-1;;;;;13796:27:0;;;;;:42;;13832:4;;13796:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6192:281::-;6278:86;6298:5;6328:22;;;6352:7;6361:1;6305:58;;;;;;;;;:::i;6278:86::-;6375:90;6395:5;6425:22;;;6449:7;6458:5;6402:62;;;;;;;;;:::i;8842:120::-;8901:9;8953:1;8927:23;8931:11;8935:1;8531:6;8931:3;:11::i;:::-;8948:1;8944;:5;8927:3;:23::i;:::-;:27;;;;;;;8842:120;-1:-1:-1;;;8842:120:0:o;13865:502::-;14020:21;:25;14016:93;;14062:35;;-1:-1:-1;;;;;14062:12:0;;;14075:21;14062:35;;;;;;;;;14075:21;14062:12;:35;;;;;;;;;;;;;;;;;;;;;14016:93;14148:1;14125:20;14136:8;14125:10;:20::i;:::-;:24;14121:112;;;14166:55;14195:3;14200:20;14211:8;14200:10;:20::i;:::-;-1:-1:-1;;;;;14166:28:0;;;:55;:28;:55::i;:::-;14273:1;14249:21;14260:9;14249:10;:21::i;:::-;:25;14245:115;;;14291:57;14321:3;14326:21;14337:9;14326:10;:21::i;:::-;-1:-1:-1;;;;;14291:29:0;;;:57;:29;:57::i;7112:419::-;7194:23;7220:69;7248:4;7220:69;;;;;;;;;;;;;;;;;7228:5;-1:-1:-1;;;;;7220:27:0;;;:69;;;;;:::i;:::-;7304:17;;7194:95;;-1:-1:-1;7304:21:0;7300:224;;7446:10;7435:30;;;;;;;;;;;;:::i;:::-;7427:85;;;;-1:-1:-1;;;7427:85:0;;;;;;;:::i;7801:127::-;7859:9;7889:6;;;:30;;-1:-1:-1;;7904:5:0;;;7918:1;7913;7904:5;7913:1;7899:15;;;;;:20;7889:30;7881:39;;;;;7559:113;7652:5;;;7647:16;;;;7639:25;;;;;2034:196;2137:12;2169:53;2192:6;2200:4;2206:1;2209:12;2169:22;:53::i;:::-;2162:60;2034:196;-1:-1:-1;;;;2034:196:0:o;2796:979::-;2926:12;2959:18;2970:6;2959:10;:18::i;:::-;2951:60;;;;-1:-1:-1;;;2951:60:0;;;;;;;:::i;:::-;3085:12;3099:23;3126:6;-1:-1:-1;;;;;3126:11:0;3146:8;3157:4;3126:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3084:78;;;;3177:7;3173:595;;;3208:10;-1:-1:-1;3201:17:0;;-1:-1:-1;3201:17:0;3173:595;3322:17;;:21;3318:439;;3585:10;3579:17;3646:15;3633:10;3629:2;3625:19;3618:44;3533:148;3728:12;3721:20;;-1:-1:-1;;;3721:20:0;;;;;;;;:::i;821:619::-;881:4;1349:20;;1192:66;1389:23;;;;;;:42;;-1:-1:-1;;1416:15:0;;;1381:51;-1:-1:-1;;821:619:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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;23471:6;717:4;709:6;705:17;717:4;743:5;739:16;23448:30;23527:1;23509:16;;;717:4;23509:16;23502: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;8079:20;2055:2;2074:5;2070:16;2063:75;2205:2;2263:9;2259:22;8079:20;2205:2;2224:5;2220:16;2213:75;2353:3;2412:9;2408:22;8079:20;2353:3;2373:5;2369:16;2362:75;2507:3;2566:9;2562:22;8079: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;8079:20;6207:2;6226:5;6222:16;6215:75;6358:3;6417:9;6413:22;8079: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;8227:13;7479:2;7498:5;7494:16;7487:86;7641:3;7711:9;7707:22;8227: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;8290:241::-;;8394:2;8382:9;8373:7;8369:23;8365:32;8362:2;;;-1:-1;;8400:12;8362:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8452:63;8356:175;-1:-1;;;8356:175::o;8538:366::-;;;8659:2;8647:9;8638:7;8634:23;8630:32;8627:2;;;-1:-1;;8665:12;8627:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8717:63;8817:2;8856:22;;;;8079:20;;-1:-1;;;8621:283::o;8911:257::-;;9023:2;9011:9;9002:7;8998:23;8994:32;8991:2;;;-1:-1;;9029:12;8991:2;364:6;358:13;24130:5;22949:13;22942:21;24108:5;24105:32;24095:2;;-1:-1;;24141:12;9175:345;;9288:2;9276:9;9267:7;9263:23;9259:32;9256:2;;;-1:-1;;9294:12;9256:2;9352:17;9339:31;9390:18;9382:6;9379:30;9376:2;;;-1:-1;;9412:12;9376:2;9442:62;9496:7;9487:6;9476:9;9472:22;9442:62;:::i;9527:387::-;;9661:2;9649:9;9640:7;9636:23;9632:32;9629:2;;;-1:-1;;9667:12;9629:2;9725:17;9712:31;9763:18;9755:6;9752:30;9749:2;;;-1:-1;;9785:12;9749:2;9815:83;9890:7;9881:6;9870:9;9866:22;9815:83;:::i;9921:402::-;;10066:2;10054:9;10045:7;10041:23;10037:32;10034:2;;;-1:-1;;10072:12;10034:2;10123:17;10117:24;10161:18;;10153:6;10150:30;10147:2;;;-1:-1;;10183:12;10147:2;10290:6;10279:9;10275: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;10066:2;3944:9;3940:22;3908:60;:::i;:::-;10066:2;3894:5;3890:16;3883:86;4035:2;4104:9;4100:22;8227:13;4035:2;4054:5;4050:16;4043:86;4196:2;4265:9;4261:22;8227:13;4196:2;4215:5;4211:16;4204:86;4355:3;4425:9;4421:22;8227:13;4355:3;4375:5;4371:16;4364:86;4520:3;4590:9;4586:22;8227: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;10161: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;10161: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;10028:295;-1:-1;;;;;10028:295::o;10330:542::-;;;10496:2;10484:9;10475:7;10471:23;10467:32;10464:2;;;-1:-1;;10502:12;10464:2;10560:17;10547:31;10598:18;10590:6;10587:30;10584:2;;;-1:-1;;10620:12;10584:2;10650:83;10725:7;10716:6;10705:9;10701:22;10650:83;:::i;:::-;10640:93;;;10770:2;10828:9;10824:22;1400:20;24251:1;24244:5;24241:12;24231:2;;-1:-1;;24257:12;24231:2;10778:78;;;;10458:414;;;;;:::o;10879:263::-;;10994:2;10982:9;10973:7;10969:23;10965:32;10962:2;;;-1:-1;;11000:12;10962:2;-1:-1;8227:13;;10956:186;-1:-1;10956:186::o;11149:137::-;-1:-1;;;;;23037:54;11236:45;;11230:56::o;11634:323::-;;11766:5;21852:12;22127:6;22122:3;22115:19;11849:52;11894:6;22164:4;22159:3;22155:14;22164:4;11875:5;11871:16;11849:52;:::i;:::-;23904:7;23888:14;-1:-1;;23884:28;11913:39;;;;22164:4;11913:39;;11714:243;-1:-1;;11714:243::o;16057:1219::-;;3005:18;;23048:42;;;;16283:16;16277:23;23037:54;11243:3;11236:45;23048:42;16456:4;16449:5;16445:16;16439:23;23037:54;16456:4;16520:3;16516:14;11236:45;23048:42;16621:4;16614:5;16610:16;16604:23;23037:54;16621:4;16685:3;16681:14;11236:45;;16776:4;16769:5;16765:16;16759:23;16776:4;16840:3;16836:14;17344:37;16937:4;16930:5;16926:16;16920:23;16937:4;17001:3;16997:14;17344:37;17095:4;17088:5;17084:16;17078:23;16208:4;17095;17125:3;17121:14;17114:38;17167:71;16208:4;16203:3;16199:14;17219:12;17167:71;:::i;17513:271::-;;12474:5;21852:12;12585:52;12630:6;12625:3;12618:4;12611:5;12607:16;12585:52;:::i;:::-;12649:16;;;;;17647:137;-1:-1;;17647:137::o;17791:222::-;-1:-1;;;;;23037:54;;;;11236:45;;17918:2;17903:18;;17889:124::o;18281:345::-;-1:-1;;;;;23037:54;;;;11236:45;;23253:4;23242:16;18612:2;18597:18;;12754:56;18442:2;18427:18;;18413:213::o;18633:333::-;-1:-1;;;;;23037:54;;;;11236:45;;18952:2;18937:18;;17344:37;18788:2;18773:18;;18759:207::o;18973:321::-;22949:13;;22942:21;11588:34;;19280:2;19265:18;;17344:37;19122:2;19107:18;;19093:201::o;19301:306::-;;19446:2;19467:17;19460:47;19521:76;19446:2;19435:9;19431:18;19583:6;19521:76;:::i;19931:416::-;20131:2;20145:47;;;13401:2;20116:18;;;22115:19;13437:31;22155:14;;;13417:52;13488:12;;;20102:245::o;20354:416::-;20554:2;20568:47;;;13739:2;20539:18;;;22115:19;13775:34;22155:14;;;13755:55;-1:-1;;;13830:12;;;13823:34;13876:12;;;20525:245::o;20777:390::-;;20964:2;20985:17;20978:47;14244:63;20964:2;20953:9;20949:18;14221:16;14215:23;14244:63;:::i;:::-;20964:2;14383:5;14379:16;14373:23;14402:63;14450:14;20953:9;14450:14;14436:12;14402:63;:::i;:::-;;14450:14;14542:5;14538:16;14532:23;14609:14;20953:9;14609:14;17344:37;14609:14;14702:5;14698:16;14692:23;14769:14;20953:9;14769:14;17344:37;14769:14;14860:5;14856:16;14850:23;14927:14;20953:9;14927:14;17344:37;14927:14;15023:5;15019:16;15013:23;15090:14;20953:9;15090:14;17344:37;15090:14;15177:5;15173:16;15167:23;15196:63;15244:14;20953:9;15244:14;15230:12;15196:63;:::i;:::-;;15244:14;15334:5;15330:16;15324:23;15401:14;15353:63;15401:14;20953:9;15401:14;15387:12;15353:63;:::i;:::-;15401:14;15495:5;15491:18;15485:25;15465:45;;;14144:6;15530:16;14144:6;15530:16;20953:9;15530:16;15523:40;15578:71;14135:16;20953:9;14135:16;15630:12;15578:71;:::i;:::-;15731:18;;;15725:25;15788:14;;;-1:-1;;15788:14;15770:16;;;15763:40;15570:79;;-1:-1;15818:113;15570:79;15725:25;15818:113;:::i;:::-;21031:126;20935:232;-1:-1;;;;;;20935:232::o;21174:256::-;21236:2;21230:9;21262:17;;;21337:18;21322:34;;21358:22;;;21319:62;21316:2;;;21394:1;;21384:12;21316:2;21236;21403:22;21214:216;;-1:-1;21214:216::o;21437:321::-;;21580:18;21572:6;21569:30;21566:2;;;-1:-1;;21602:12;21566:2;-1:-1;23904:7;21656:17;-1:-1;;21652:33;21743:4;21733:15;;21503:255::o;23544:268::-;23609:1;23616:101;23630:6;23627:1;23624:13;23616:101;;;23697:11;;;23691:18;23678:11;;;23671:39;23652:2;23645:10;23616:101;;;23732:6;23729:1;23726:13;23723:2;;;23609:1;23788:6;23783:3;23779:16;23772:27;23723:2;;23593:219;;;:::o;23925:117::-;-1:-1;;;;;23037:54;;23984:35;;23974:2;;24033:1;;24023:12;23974:2;23968:74;:::o
Swarm Source
ipfs://6a0a1d676702eed615c53b19fa4d75e05e839ce102bfcf1a4bb0d7e2ceeb90ac
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.