Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,781 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Reinvest | 15001805 | 904 days ago | IN | 0 ETH | 0.00815187 | ||||
Reinvest | 13669040 | 1114 days ago | IN | 0 ETH | 0.05001601 | ||||
Reinvest | 13221803 | 1184 days ago | IN | 0 ETH | 0.01717452 | ||||
Reinvest | 13072449 | 1207 days ago | IN | 0 ETH | 0.00854452 | ||||
Reinvest | 13029354 | 1214 days ago | IN | 0 ETH | 0.00934852 | ||||
Reinvest | 12996738 | 1219 days ago | IN | 0 ETH | 0.0114907 | ||||
Reinvest | 12988305 | 1220 days ago | IN | 0 ETH | 0.01085223 | ||||
Reinvest | 12982411 | 1221 days ago | IN | 0 ETH | 0.01386566 | ||||
Reinvest | 12974899 | 1222 days ago | IN | 0 ETH | 0.01441811 | ||||
Reinvest | 12967972 | 1224 days ago | IN | 0 ETH | 0.01356999 | ||||
Reinvest | 12961689 | 1224 days ago | IN | 0 ETH | 0.01170231 | ||||
Reinvest | 12955386 | 1225 days ago | IN | 0 ETH | 0.01120092 | ||||
Reinvest | 12950705 | 1226 days ago | IN | 0 ETH | 0.01014201 | ||||
Reinvest | 12945174 | 1227 days ago | IN | 0 ETH | 0.00764328 | ||||
Reinvest | 12942509 | 1228 days ago | IN | 0 ETH | 0.01086149 | ||||
Reinvest | 12939777 | 1228 days ago | IN | 0 ETH | 0.00764328 | ||||
Reinvest | 12937658 | 1228 days ago | IN | 0 ETH | 0.01076906 | ||||
Reinvest | 12935177 | 1229 days ago | IN | 0 ETH | 0.01175151 | ||||
Reinvest | 12932235 | 1229 days ago | IN | 0 ETH | 0.00764328 | ||||
Reinvest | 12930248 | 1229 days ago | IN | 0 ETH | 0.00750248 | ||||
Reinvest | 12928355 | 1230 days ago | IN | 0 ETH | 0.01045921 | ||||
Reinvest | 12925684 | 1230 days ago | IN | 0 ETH | 0.00788675 | ||||
Reinvest | 12923966 | 1230 days ago | IN | 0 ETH | 0.01090675 | ||||
Reinvest | 12921512 | 1231 days ago | IN | 0 ETH | 0.01086149 | ||||
Reinvest | 12918818 | 1231 days ago | IN | 0 ETH | 0.00889432 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15718570 | 793 days ago | 0.07777586 ETH | ||||
15718570 | 793 days ago | 0.07777586 ETH | ||||
15562299 | 815 days ago | 0.05092094 ETH | ||||
15562299 | 815 days ago | 0.05092094 ETH | ||||
14865051 | 927 days ago | 0.04382155 ETH | ||||
14865051 | 927 days ago | 0.04382155 ETH | ||||
14757855 | 944 days ago | 3.15920243 ETH | ||||
14757855 | 944 days ago | 3.15920243 ETH | ||||
13737959 | 1103 days ago | 5.76676171 ETH | ||||
13737959 | 1103 days ago | 5.76676171 ETH | ||||
13681919 | 1112 days ago | 12.73701813 ETH | ||||
13681919 | 1112 days ago | 12.73701813 ETH | ||||
13662091 | 1115 days ago | 6.10283459 ETH | ||||
13662091 | 1115 days ago | 6.10283459 ETH | ||||
13623685 | 1121 days ago | 10.96879803 ETH | ||||
13623685 | 1121 days ago | 10.96879803 ETH | ||||
13591000 | 1127 days ago | 8.10208257 ETH | ||||
13591000 | 1127 days ago | 8.10208257 ETH | ||||
13485174 | 1143 days ago | 3.45477507 ETH | ||||
13485174 | 1143 days ago | 3.45477507 ETH | ||||
13475405 | 1145 days ago | 13.55694218 ETH | ||||
13475405 | 1145 days ago | 13.55694218 ETH | ||||
13473486 | 1145 days ago | 12.85512159 ETH | ||||
13473486 | 1145 days ago | 12.85512159 ETH | ||||
13341837 | 1166 days ago | 6.94010726 ETH |
Loading...
Loading
Contract Name:
SushiswapPool12Goblin
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-26 */ // File: openzeppelin-solidity-2.3.0/contracts/ownership/Ownable.sol pragma solidity ^0.5.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * > Note: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: openzeppelin-solidity-2.3.0/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ 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-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // File: openzeppelin-solidity-2.3.0/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the `nonReentrant` modifier * available, which can be aplied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. */ contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } } // File: openzeppelin-solidity-2.3.0/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see `ERC20Detailed`. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an `Approval` event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @uniswap/v2-core/contracts/libraries/Math.sol pragma solidity =0.5.16; // a library for performing various math operations library Math { function min(uint x, uint y) internal pure returns (uint z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint y) internal pure returns (uint z) { if (y > 3) { z = y; uint x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } // File: contracts/5/uniswap/IUniswapV2Router02.sol pragma solidity >=0.5.0; interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: contracts/5/Strategy.sol pragma solidity 0.5.16; interface Strategy { /// @dev Execute worker strategy. Take LP tokens + ETH. Return LP tokens + ETH. /// @param user The original user that is interacting with the operator. /// @param debt The user's total debt, for better decision making context. /// @param data Extra calldata information passed along to this strategy. function execute(address user, uint256 debt, bytes calldata data) external payable; } // File: contracts/5/SafeToken.sol pragma solidity 0.5.16; interface ERC20Interface { function balanceOf(address user) external view returns (uint256); } library SafeToken { function myBalance(address token) internal view returns (uint256) { return ERC20Interface(token).balanceOf(address(this)); } function balanceOf(address token, address user) internal view returns (uint256) { return ERC20Interface(token).balanceOf(user); } function safeApprove(address token, address to, uint256 value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeApprove"); } function safeTransfer(address token, address to, uint256 value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeTransfer"); } function safeTransferFrom(address token, address from, address to, uint256 value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeTransferFrom"); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call.value(value)(new bytes(0)); require(success, "!safeTransferETH"); } } // File: contracts/5/Goblin.sol pragma solidity 0.5.16; interface Goblin { /// @dev Work on a (potentially new) position. Optionally send ETH back to Bank. function work(uint256 id, address user, uint256 debt, bytes calldata data) external payable; /// @dev Re-invest whatever the goblin is working on. function reinvest() external; /// @dev Return the amount of ETH wei to get back if we are to liquidate the position. function health(uint256 id) external view returns (uint256); /// @dev Liquidate the given position to ETH. Send all ETH back to Bank. function liquidate(uint256 id) external; } // File: contracts/5/interfaces/IMasterChef.sol pragma solidity 0.5.16; // Making the original MasterChef as an interface leads to compilation fail. // Use Contract instead of Interface here contract IMasterChef { // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } // Info of each pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. SUSHIs to distribute per block. uint256 lastRewardBlock; // Last block number that SUSHIs distribution occurs. uint256 accSushiPerShare; // Accumulated SUSHIs per share, times 1e12. See below. } address public sushi; // Info of each user that stakes LP tokens. mapping(uint256 => PoolInfo) public poolInfo; mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Deposit LP tokens to MasterChef for SUSHI allocation. function deposit(uint256 _pid, uint256 _amount) external {} // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) external {} } // File: contracts/5/SushiswapPool12Goblin.sol pragma solidity 0.5.16; // SushiswapPool12Goblin is specific for SUSHI-ETH pool in Sushiswap. // In this case, fToken = SUSHI and pid = 12. contract SushiswapPool12Goblin is Ownable, ReentrancyGuard, Goblin { /// @notice Libraries using SafeToken for address; using SafeMath for uint256; /// @notice Events event Reinvest(address indexed caller, uint256 reward, uint256 bounty); event AddShare(uint256 indexed id, uint256 share); event RemoveShare(uint256 indexed id, uint256 share); event Liquidate(uint256 indexed id, uint256 wad); /// @notice Immutable variables IMasterChef public masterChef; IUniswapV2Factory public factory; IUniswapV2Router02 public router; IUniswapV2Pair public lpToken; address public weth; address public sushi; address public operator; uint256 public constant pid = 12; /// @notice Mutable state variables mapping(uint256 => uint256) public shares; mapping(address => bool) public okStrats; uint256 public totalShare; Strategy public addStrat; Strategy public liqStrat; uint256 public reinvestBountyBps; constructor( address _operator, IMasterChef _masterChef, IUniswapV2Router02 _router, Strategy _addStrat, Strategy _liqStrat, uint256 _reinvestBountyBps ) public { operator = _operator; weth = _router.WETH(); masterChef = _masterChef; router = _router; factory = IUniswapV2Factory(_router.factory()); (IERC20 _lpToken, , , ) = masterChef.poolInfo(pid); lpToken = IUniswapV2Pair(address(_lpToken)); sushi = address(masterChef.sushi()); addStrat = _addStrat; liqStrat = _liqStrat; okStrats[address(addStrat)] = true; okStrats[address(liqStrat)] = true; reinvestBountyBps = _reinvestBountyBps; lpToken.approve(address(_masterChef), uint256(-1)); // 100% trust in the staking pool lpToken.approve(address(router), uint256(-1)); // 100% trust in the router sushi.safeApprove(address(router), uint256(-1)); // 100% trust in the router } /// @dev Require that the caller must be an EOA account to avoid flash loans. modifier onlyEOA() { require(msg.sender == tx.origin, "not eoa"); _; } /// @dev Require that the caller must be the operator (the bank). modifier onlyOperator() { require(msg.sender == operator, "not operator"); _; } /// @dev Return the entitied LP token balance for the given shares. /// @param share The number of shares to be converted to LP balance. function shareToBalance(uint256 share) public view returns (uint256) { if (totalShare == 0) return share; // When there's no share, 1 share = 1 balance. (uint256 totalBalance, ) = masterChef.userInfo(pid, address(this)); return share.mul(totalBalance).div(totalShare); } /// @dev Return the number of shares to receive if staking the given LP tokens. /// @param balance the number of LP tokens to be converted to shares. function balanceToShare(uint256 balance) public view returns (uint256) { if (totalShare == 0) return balance; // When there's no share, 1 share = 1 balance. (uint256 totalBalance, ) = masterChef.userInfo(pid, address(this)); return balance.mul(totalShare).div(totalBalance); } /// @dev Re-invest whatever this worker has earned back to staked LP tokens. function reinvest() public onlyEOA nonReentrant { // 1. Withdraw all the rewards. masterChef.withdraw(pid, 0); uint256 reward = sushi.balanceOf(address(this)); if (reward == 0) return; // 2. Send the reward bounty to the caller. uint256 bounty = reward.mul(reinvestBountyBps) / 10000; sushi.safeTransfer(msg.sender, bounty); // 3. Use add Two-side optimal strategy to convert sushi to ETH and add // liquidity to get LP tokens. sushi.safeTransfer(address(addStrat), reward.sub(bounty)); addStrat.execute(address(this), 0, abi.encode(sushi, 0, 0)); // 4. Mint more LP tokens and stake them for more rewards. masterChef.deposit(pid, lpToken.balanceOf(address(this))); emit Reinvest(msg.sender, reward, bounty); } /// @dev Work on the given position. Must be called by the operator. /// @param id The position ID to work on. /// @param user The original user that is interacting with the operator. /// @param debt The amount of user debt to help the strategy make decisions. /// @param data The encoded data, consisting of strategy address and calldata. function work(uint256 id, address user, uint256 debt, bytes calldata data) external payable onlyOperator nonReentrant { // 1. Convert this position back to LP tokens. _removeShare(id); // 2. Perform the worker strategy; sending LP tokens + ETH; expecting LP tokens + ETH. (address strat, bytes memory ext) = abi.decode(data, (address, bytes)); require(okStrats[strat], "unapproved work strategy"); lpToken.transfer(strat, lpToken.balanceOf(address(this))); Strategy(strat).execute.value(msg.value)(user, debt, ext); // 3. Add LP tokens back to the farming pool. _addShare(id); // 4. Return any remaining ETH back to the operator. SafeToken.safeTransferETH(msg.sender, address(this).balance); } /// @dev Return maximum output given the input amount and the status of Uniswap reserves. /// @param aIn The amount of asset to market sell. /// @param rIn the amount of asset in reserve for input. /// @param rOut The amount of asset in reserve for output. function getMktSellAmount(uint256 aIn, uint256 rIn, uint256 rOut) public pure returns (uint256) { if (aIn == 0) return 0; require(rIn > 0 && rOut > 0, "bad reserve values"); uint256 aInWithFee = aIn.mul(997); uint256 numerator = aInWithFee.mul(rOut); uint256 denominator = rIn.mul(1000).add(aInWithFee); return numerator / denominator; } /// @dev Return the amount of ETH to receive if we are to liquidate the given position. /// @param id The position ID to perform health check. function health(uint256 id) external view returns (uint256) { // 1. Get the position's LP balance and LP total supply. uint256 lpBalance = shareToBalance(shares[id]); uint256 lpSupply = lpToken.totalSupply(); // Ignore pending mintFee as it is insignificant // 2. Get the pool's total supply of WETH and farming token. (uint256 r0, uint256 r1,) = lpToken.getReserves(); (uint256 totalWETH, uint256 totalSushi) = lpToken.token0() == weth ? (r0, r1) : (r1, r0); // 3. Convert the position's LP tokens to the underlying assets. uint256 userWETH = lpBalance.mul(totalWETH).div(lpSupply); uint256 userSushi = lpBalance.mul(totalSushi).div(lpSupply); // 4. Convert all farming tokens to ETH and return total ETH. return getMktSellAmount( userSushi, totalSushi.sub(userSushi), totalWETH.sub(userWETH) ).add(userWETH); } /// @dev Liquidate the given position by converting it to ETH and return back to caller. /// @param id The position ID to perform liquidation function liquidate(uint256 id) external onlyOperator nonReentrant { // 1. Convert the position back to LP tokens and use liquidate strategy. _removeShare(id); lpToken.transfer(address(liqStrat), lpToken.balanceOf(address(this))); liqStrat.execute(address(0), 0, abi.encode(sushi, 0)); // 2. Return all available ETH back to the operator. uint256 wad = address(this).balance; SafeToken.safeTransferETH(msg.sender, wad); emit Liquidate(id, wad); } /// @dev Internal function to stake all outstanding LP tokens to the given position ID. function _addShare(uint256 id) internal { uint256 balance = lpToken.balanceOf(address(this)); if (balance > 0) { uint256 share = balanceToShare(balance); masterChef.deposit(pid, balance); shares[id] = shares[id].add(share); totalShare = totalShare.add(share); emit AddShare(id, share); } } /// @dev Internal function to remove shares of the ID and convert to outstanding LP tokens. function _removeShare(uint256 id) internal { uint256 share = shares[id]; if (share > 0) { uint256 balance = shareToBalance(share); masterChef.withdraw(pid, balance); totalShare = totalShare.sub(share); shares[id] = 0; emit RemoveShare(id, share); } } /// @dev Recover ERC20 tokens that were accidentally sent to this smart contract. /// @param token The token contract. Can be anything. This contract should not hold ERC20 tokens. /// @param to The address to send the tokens to. /// @param value The number of tokens to transfer to `to`. function recover(address token, address to, uint256 value) external onlyOwner nonReentrant { token.safeTransfer(to, value); } /// @dev Set the reward bounty for calling reinvest operations. /// @param _reinvestBountyBps The bounty value to update. function setReinvestBountyBps(uint256 _reinvestBountyBps) external onlyOwner { reinvestBountyBps = _reinvestBountyBps; } /// @dev Set the given strategies' approval status. /// @param strats The strategy addresses. /// @param isOk Whether to approve or unapprove the given strategies. function setStrategyOk(address[] calldata strats, bool isOk) external onlyOwner { uint256 len = strats.length; for (uint256 idx = 0; idx < len; idx++) { okStrats[strats[idx]] = isOk; } } /// @dev Update critical strategy smart contracts. EMERGENCY ONLY. Bad strategies can steal funds. /// @param _addStrat The new add strategy contract. /// @param _liqStrat The new liquidate strategy contract. function setCriticalStrategies(Strategy _addStrat, Strategy _liqStrat) external onlyOwner { addStrat = _addStrat; liqStrat = _liqStrat; } function() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"contract IMasterChef","name":"_masterChef","type":"address"},{"internalType":"contract IUniswapV2Router02","name":"_router","type":"address"},{"internalType":"contract Strategy","name":"_addStrat","type":"address"},{"internalType":"contract Strategy","name":"_liqStrat","type":"address"},{"internalType":"uint256","name":"_reinvestBountyBps","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"AddShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Liquidate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bounty","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"RemoveShare","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"addStrat","outputs":[{"internalType":"contract Strategy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"balanceToShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"aIn","type":"uint256"},{"internalType":"uint256","name":"rIn","type":"uint256"},{"internalType":"uint256","name":"rOut","type":"uint256"}],"name":"getMktSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"health","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"liqStrat","outputs":[{"internalType":"contract Strategy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"liquidate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lpToken","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"masterChef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"okStrats","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"recover","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reinvestBountyBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract Strategy","name":"_addStrat","type":"address"},{"internalType":"contract Strategy","name":"_liqStrat","type":"address"}],"name":"setCriticalStrategies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_reinvestBountyBps","type":"uint256"}],"name":"setReinvestBountyBps","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"strats","type":"address[]"},{"internalType":"bool","name":"isOk","type":"bool"}],"name":"setStrategyOk","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"share","type":"uint256"}],"name":"shareToBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sushi","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debt","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"work","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620028b8380380620028b8833981810160405260c08110156200003757600080fd5b50805160208201516040808401516060850151608086015160a090960151600080546001600160a01b031916331780825594519697959693959294929391926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001808190555085600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200010d57600080fd5b505afa15801562000122573d6000803e3d6000fd5b505050506040513d60208110156200013957600080fd5b5051600680546001600160a01b03199081166001600160a01b03938416179091556002805482168884161790556004805490911691861691821781556040805163c45a015560e01b8152905163c45a015592828101926020929190829003018186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d6020811015620001d557600080fd5b5051600380546001600160a01b0319166001600160a01b0392831617905560025460408051631526fe2760e01b8152600c600482015290516000939290921691631526fe2791602480820192608092909190829003018186803b1580156200023c57600080fd5b505afa15801562000251573d6000803e3d6000fd5b505050506040513d60808110156200026857600080fd5b5051600580546001600160a01b0319166001600160a01b038084169190911790915560025460408051630a08790360e01b81529051939450911691630a08790391600480820192602092909190829003018186803b158015620002ca57600080fd5b505afa158015620002df573d6000803e3d6000fd5b505050506040513d6020811015620002f657600080fd5b5051600780546001600160a01b03199081166001600160a01b0393841617909155600c805482168784161790819055600d805490921686841617825582166000908152600a60209081526040808320805460ff199081166001908117909255945486168452818420805490951617909355600e869055600554835163095ea7b360e01b81528b861660048201526000196024820152935194169363095ea7b393604480820194918390030190829087803b158015620003b457600080fd5b505af1158015620003c9573d6000803e3d6000fd5b505050506040513d6020811015620003e057600080fd5b5050600554600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b1580156200043e57600080fd5b505af115801562000453573d6000803e3d6000fd5b505050506040513d60208110156200046a57600080fd5b505060045460075462000499916001600160a01b039182169116600019620004a6602090811b6200209317901c565b5050505050505062000607565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b60208310620005255780518252601f19909201916020918201910162000504565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462000589576040519150601f19603f3d011682016040523d82523d6000602084013e6200058e565b606091505b5091509150818015620005bf575080511580620005bf5750808060200190516020811015620005bc57600080fd5b50515b62000600576040805162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b604482015290519081900360640190fd5b5050505050565b6122a180620006176000396000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063c7aa6ae711610095578063f2fde38b11610064578063f2fde38b146105e7578063f3b8912b1461061a578063f887ea401461064d578063fdb5a03e14610662576101c2565b8063c7aa6ae714610508578063d75734c81461051d578063e7956f2114610553578063f1068454146105d2576101c2565b80638da5cb5b116100d15780638da5cb5b1461047a5780638f32d59b1461048f5780638fa4a940146104b8578063c45a0155146104f3576101c2565b8063715018a614610411578063783b6d60146104265780638195510514610450576101c2565b806348db8cc411610164578063578993991161013e57806357899399146103a857806357a858fc146103bd5780635fcbd285146103e75780636191e37b146103fc576101c2565b806348db8cc4146102f2578063570ca7351461037e578063575a86b214610393576101c2565b80631620fbd5116101a05780631620fbd5146102465780631ec82cb8146102705780633fc8cef3146102b3578063415f1240146102c8576101c2565b8063026c4207146101c45780630a087903146101eb5780631363bdd31461021c575b005b3480156101d057600080fd5b506101d9610677565b60408051918252519081900360200190f35b3480156101f757600080fd5b5061020061067d565b604080516001600160a01b039092168252519081900360200190f35b34801561022857600080fd5b506101d96004803603602081101561023f57600080fd5b503561068c565b34801561025257600080fd5b506101c26004803603602081101561026957600080fd5b503561074c565b34801561027c57600080fd5b506101c26004803603606081101561029357600080fd5b506001600160a01b03813581169160208101359091169060400135610798565b3480156102bf57600080fd5b5061020061084d565b3480156102d457600080fd5b506101c2600480360360208110156102eb57600080fd5b503561085c565b6101c26004803603608081101561030857600080fd5b8135916001600160a01b03602082013516916040820135919081019060808101606082013564010000000081111561033f57600080fd5b82018360208201111561035157600080fd5b8035906020019184600183028401116401000000008311171561037357600080fd5b509092509050610b4a565b34801561038a57600080fd5b50610200610eff565b34801561039f57600080fd5b50610200610f0e565b3480156103b457600080fd5b50610200610f1d565b3480156103c957600080fd5b506101d9600480360360208110156103e057600080fd5b5035610f2c565b3480156103f357600080fd5b50610200610f3e565b34801561040857600080fd5b50610200610f4d565b34801561041d57600080fd5b506101c2610f5c565b34801561043257600080fd5b506101d96004803603602081101561044957600080fd5b5035610fed565b34801561045c57600080fd5b506101d96004803603602081101561047357600080fd5b5035611229565b34801561048657600080fd5b506102006112d1565b34801561049b57600080fd5b506104a46112e0565b604080519115158252519081900360200190f35b3480156104c457600080fd5b506101c2600480360360408110156104db57600080fd5b506001600160a01b03813581169160200135166112f1565b3480156104ff57600080fd5b50610200611366565b34801561051457600080fd5b506101d9611375565b34801561052957600080fd5b506101d96004803603606081101561054057600080fd5b508035906020810135906040013561137b565b34801561055f57600080fd5b506101c26004803603604081101561057657600080fd5b81019060208101813564010000000081111561059157600080fd5b8201836020820111156105a357600080fd5b803590602001918460208302840111640100000000831117156105c557600080fd5b919350915035151561143b565b3480156105de57600080fd5b506101d96114df565b3480156105f357600080fd5b506101c26004803603602081101561060a57600080fd5b50356001600160a01b03166114e4565b34801561062657600080fd5b506104a46004803603602081101561063d57600080fd5b50356001600160a01b0316611537565b34801561065957600080fd5b5061020061154c565b34801561066e57600080fd5b506101c261155b565b600b5481565b6007546001600160a01b031681565b6000600b54600014156106a0575080610747565b600254604080516393f1a40b60e01b8152600c600482015230602482015281516000936001600160a01b0316926393f1a40b9260448082019391829003018186803b1580156106ee57600080fd5b505afa158015610702573d6000803e3d6000fd5b505050506040513d604081101561071857600080fd5b5051600b5490915061074390829061073790869063ffffffff61192716565b9063ffffffff61198916565b9150505b919050565b6107546112e0565b610793576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600e55565b6107a06112e0565b6107df576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600180548101908190556108036001600160a01b038516848463ffffffff6119f316565b6001548114610847576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b50505050565b6006546001600160a01b031681565b6008546001600160a01b031633146108aa576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1037b832b930ba37b960a11b604482015290519081900360640190fd5b600180548101908190556108bd82611b46565b600554600d54604080516370a0823160e01b815230600482015290516001600160a01b039384169363a9059cbb93169184916370a0823191602480820192602092909190829003018186803b15801561091557600080fd5b505afa158015610929573d6000803e3d6000fd5b505050506040513d602081101561093f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561099057600080fd5b505af11580156109a4573d6000803e3d6000fd5b505050506040513d60208110156109ba57600080fd5b5050600d54600754604080516001600160a01b039283166020828101919091526000828401819052835180840385018152606080850195869052635b0e93fb60e11b909552606484018281526084850183905260a48501958652815160c48601528151969097169663b61d27f6969295869592949193909260e40191850190808383895b83811015610a56578181015183820152602001610a3e565b50505050905090810190601f168015610a835780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050506000479050610acb3382611c38565b60408051828152905184917f253e5385159062a101837d58c10ad4694c58979ebc3ba6b5cb2cbba2fe461692919081900360200190a2506001548114610b46576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b5050565b6008546001600160a01b03163314610b98576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1037b832b930ba37b960a11b604482015290519081900360640190fd5b60018054810190819055610bab86611b46565b6000606084846040811015610bbf57600080fd5b6001600160a01b038235169190810190604081016020820135640100000000811115610bea57600080fd5b820183602082011115610bfc57600080fd5b80359060200191846001830284011164010000000083111715610c1e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001600160a01b0389168152600a60205260409020549799509297505060ff9095169450610cca9350505050576040805162461bcd60e51b815260206004820152601860248201527f756e617070726f76656420776f726b2073747261746567790000000000000000604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91859184916370a08231916024808301926020929190829003018186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d6020811015610d4857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610d9957600080fd5b505af1158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b5050604051635b0e93fb60e11b81526001600160a01b0388811660048301908152602483018990526060604484019081528451606485015284519286169363b61d27f69334938d938d938993608490910190602085019080838360005b83811015610e38578181015183820152602001610e20565b50505050905090810190601f168015610e655780820380516001836020036101000a031916815260200191505b509450505050506000604051808303818588803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b5050505050610ea788611d39565b610eb13347611c38565b50506001548114610ef7576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b505050505050565b6008546001600160a01b031681565b6002546001600160a01b031681565b600c546001600160a01b031681565b60096020526000908152604090205481565b6005546001600160a01b031681565b600d546001600160a01b031681565b610f646112e0565b610fa3576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600081815260096020526040812054819061100790611229565b90506000600560009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561105957600080fd5b505afa15801561106d573d6000803e3d6000fd5b505050506040513d602081101561108357600080fd5b505160055460408051630240bc6b60e21b8152905192935060009283926001600160a01b031691630902f1ac916004808301926060929190829003018186803b1580156110cf57600080fd5b505afa1580156110e3573d6000803e3d6000fd5b505050506040513d60608110156110f957600080fd5b50805160209182015160065460055460408051630dfe168160e01b815290516dffffffffffffffffffffffffffff958616985094909316955060009485946001600160a01b03938416949390921692630dfe16819260048083019392829003018186803b15801561116957600080fd5b505afa15801561117d573d6000803e3d6000fd5b505050506040513d602081101561119357600080fd5b50516001600160a01b0316146111aa5782846111ad565b83835b909250905060006111c886610737898663ffffffff61192716565b905060006111e0876107378a8663ffffffff61192716565b905061121b8261120f836111fa878263ffffffff611eb116565b61120a898863ffffffff611eb116565b61137b565b9063ffffffff611f0e16565b9a9950505050505050505050565b6000600b546000141561123d575080610747565b600254604080516393f1a40b60e01b8152600c600482015230602482015281516000936001600160a01b0316926393f1a40b9260448082019391829003018186803b15801561128b57600080fd5b505afa15801561129f573d6000803e3d6000fd5b505050506040513d60408110156112b557600080fd5b5051600b5490915061074390610737858463ffffffff61192716565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6112f96112e0565b611338576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600c80546001600160a01b039384166001600160a01b031991821617909155600d8054929093169116179055565b6003546001600160a01b031681565b600e5481565b60008361138a57506000611434565b60008311801561139a5750600082115b6113e0576040805162461bcd60e51b815260206004820152601260248201527162616420726573657276652076616c75657360701b604482015290519081900360640190fd5b60006113f4856103e563ffffffff61192716565b90506000611408828563ffffffff61192716565b905060006114228361120f886103e863ffffffff61192716565b905080828161142d57fe5b0493505050505b9392505050565b6114436112e0565b611482576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b8160005b818110156114d85782600a600087878581811061149f57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611486565b5050505050565b600c81565b6114ec6112e0565b61152b576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b61153481611f68565b50565b600a6020526000908152604090205460ff1681565b6004546001600160a01b031681565b333214611599576040805162461bcd60e51b81526020600482015260076024820152666e6f7420656f6160c81b604482015290519081900360640190fd5b6001805481019081905560025460408051630441a3e760e41b8152600c600482015260006024820181905291516001600160a01b039093169263441a3e709260448084019391929182900301818387803b1580156115f657600080fd5b505af115801561160a573d6000803e3d6000fd5b50506007546000925061162d91506001600160a01b03163063ffffffff61200816565b90508061163a57506118e3565b6000612710611654600e548461192790919063ffffffff16565b8161165b57fe5b600754919004915061167d906001600160a01b0316338363ffffffff6119f316565b600c546116b6906001600160a01b031661169d848463ffffffff611eb116565b6007546001600160a01b0316919063ffffffff6119f316565b600c54600754604080516001600160a01b03928316602080830191909152600082840181905260608084018290528451808503820181526080850195869052635b0e93fb60e11b909552306084850181815260a4860184905260c48601928352865160e48701528651979098169763b61d27f6979196939593949093610104019190850190808383895b83811015611758578181015183820152602001611740565b50505050905090810190601f1680156117855780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156117a657600080fd5b505af11580156117ba573d6000803e3d6000fd5b5050600254600554604080516370a0823160e01b815230600482015290516001600160a01b03938416955063e2bbb1589450600c93909216916370a0823191602480820192602092909190829003018186803b15801561181957600080fd5b505afa15801561182d573d6000803e3d6000fd5b505050506040513d602081101561184357600080fd5b5051604080516001600160e01b031960e086901b1681526004810193909352602483019190915251604480830192600092919082900301818387803b15801561188b57600080fd5b505af115801561189f573d6000803e3d6000fd5b5050604080518581526020810185905281513394507fc003f45bc224d116b6d079100d4ab57a5b9633244c47a5a92a176c5b79a85f2893509081900390910190a250505b6001548114611534576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b60008261193657506000611983565b8282028284828161194357fe5b04146119805760405162461bcd60e51b815260040180806020018281038252602181526020018061222c6021913960400191505060405180910390fd5b90505b92915050565b60008082116119df576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b60008284816119ea57fe5b04949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310611a705780518252601f199092019160209182019101611a51565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ad2576040519150601f19603f3d011682016040523d82523d6000602084013e611ad7565b606091505b5091509150818015611b05575080511580611b055750808060200190516020811015611b0257600080fd5b50515b6114d8576040805162461bcd60e51b815260206004820152600d60248201526c10b9b0b332aa3930b739b332b960991b604482015290519081900360640190fd5b6000818152600960205260409020548015610b46576000611b6682611229565b60025460408051630441a3e760e41b8152600c60048201526024810184905290519293506001600160a01b039091169163441a3e709160448082019260009290919082900301818387803b158015611bbd57600080fd5b505af1158015611bd1573d6000803e3d6000fd5b5050600b54611be9925090508363ffffffff611eb116565b600b556000838152600960209081526040808320929092558151848152915185927fca07b1e9ff462c1feca0fa258869d03f3657c3a02eaceed810db4f58848856dc92908290030190a2505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310611c845780518252601f199092019160209182019101611c65565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611ce6576040519150601f19603f3d011682016040523d82523d6000602084013e611ceb565b606091505b5050905080611d34576040805162461bcd60e51b815260206004820152601060248201526f042e6c2cccaa8e4c2dce6cccae48aa8960831b604482015290519081900360640190fd5b505050565b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d8457600080fd5b505afa158015611d98573d6000803e3d6000fd5b505050506040513d6020811015611dae57600080fd5b505190508015610b46576000611dc38261068c565b60025460408051631c57762b60e31b8152600c60048201526024810186905290519293506001600160a01b039091169163e2bbb1589160448082019260009290919082900301818387803b158015611e1a57600080fd5b505af1158015611e2e573d6000803e3d6000fd5b505050600084815260096020526040902054611e5191508263ffffffff611f0e16565b600084815260096020526040902055600b54611e73908263ffffffff611f0e16565b600b5560408051828152905184917fdbdb2d65c9e75a246e9a50307e793774f5ad8d986766a102b8a0eacb58208da2919081900360200190a2505050565b600082821115611f08576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611980576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038116611fad5760405162461bcd60e51b81526004018080602001828103825260268152602001806122066026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561206057600080fd5b505afa158015612074573d6000803e3d6000fd5b505050506040513d602081101561208a57600080fd5b50519392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106121105780518252601f1990920191602091820191016120f1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612172576040519150601f19603f3d011682016040523d82523d6000602084013e612177565b606091505b50915091508180156121a55750805115806121a557508080602001905160208110156121a257600080fd5b50515b6114d8576040805162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b604482015290519081900360640190fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820cf3c430146df6990a0b10bcdaa17e28928fe91f563cead21a5583cd949b16dfd64736f6c6343000510003200000000000000000000000067b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a000000000000000000000000c2edad668740f1aa35e4d8f227fb8e17dca888cd000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f0000000000000000000000003721dcd1c1793f945006a967a91da81562d1b5880000000000000000000000006b4f168e91452a0ac2cff9f4f745f5efad09861c000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode
0x6080604052600436106101c25760003560e01c8063715018a6116100f7578063c7aa6ae711610095578063f2fde38b11610064578063f2fde38b146105e7578063f3b8912b1461061a578063f887ea401461064d578063fdb5a03e14610662576101c2565b8063c7aa6ae714610508578063d75734c81461051d578063e7956f2114610553578063f1068454146105d2576101c2565b80638da5cb5b116100d15780638da5cb5b1461047a5780638f32d59b1461048f5780638fa4a940146104b8578063c45a0155146104f3576101c2565b8063715018a614610411578063783b6d60146104265780638195510514610450576101c2565b806348db8cc411610164578063578993991161013e57806357899399146103a857806357a858fc146103bd5780635fcbd285146103e75780636191e37b146103fc576101c2565b806348db8cc4146102f2578063570ca7351461037e578063575a86b214610393576101c2565b80631620fbd5116101a05780631620fbd5146102465780631ec82cb8146102705780633fc8cef3146102b3578063415f1240146102c8576101c2565b8063026c4207146101c45780630a087903146101eb5780631363bdd31461021c575b005b3480156101d057600080fd5b506101d9610677565b60408051918252519081900360200190f35b3480156101f757600080fd5b5061020061067d565b604080516001600160a01b039092168252519081900360200190f35b34801561022857600080fd5b506101d96004803603602081101561023f57600080fd5b503561068c565b34801561025257600080fd5b506101c26004803603602081101561026957600080fd5b503561074c565b34801561027c57600080fd5b506101c26004803603606081101561029357600080fd5b506001600160a01b03813581169160208101359091169060400135610798565b3480156102bf57600080fd5b5061020061084d565b3480156102d457600080fd5b506101c2600480360360208110156102eb57600080fd5b503561085c565b6101c26004803603608081101561030857600080fd5b8135916001600160a01b03602082013516916040820135919081019060808101606082013564010000000081111561033f57600080fd5b82018360208201111561035157600080fd5b8035906020019184600183028401116401000000008311171561037357600080fd5b509092509050610b4a565b34801561038a57600080fd5b50610200610eff565b34801561039f57600080fd5b50610200610f0e565b3480156103b457600080fd5b50610200610f1d565b3480156103c957600080fd5b506101d9600480360360208110156103e057600080fd5b5035610f2c565b3480156103f357600080fd5b50610200610f3e565b34801561040857600080fd5b50610200610f4d565b34801561041d57600080fd5b506101c2610f5c565b34801561043257600080fd5b506101d96004803603602081101561044957600080fd5b5035610fed565b34801561045c57600080fd5b506101d96004803603602081101561047357600080fd5b5035611229565b34801561048657600080fd5b506102006112d1565b34801561049b57600080fd5b506104a46112e0565b604080519115158252519081900360200190f35b3480156104c457600080fd5b506101c2600480360360408110156104db57600080fd5b506001600160a01b03813581169160200135166112f1565b3480156104ff57600080fd5b50610200611366565b34801561051457600080fd5b506101d9611375565b34801561052957600080fd5b506101d96004803603606081101561054057600080fd5b508035906020810135906040013561137b565b34801561055f57600080fd5b506101c26004803603604081101561057657600080fd5b81019060208101813564010000000081111561059157600080fd5b8201836020820111156105a357600080fd5b803590602001918460208302840111640100000000831117156105c557600080fd5b919350915035151561143b565b3480156105de57600080fd5b506101d96114df565b3480156105f357600080fd5b506101c26004803603602081101561060a57600080fd5b50356001600160a01b03166114e4565b34801561062657600080fd5b506104a46004803603602081101561063d57600080fd5b50356001600160a01b0316611537565b34801561065957600080fd5b5061020061154c565b34801561066e57600080fd5b506101c261155b565b600b5481565b6007546001600160a01b031681565b6000600b54600014156106a0575080610747565b600254604080516393f1a40b60e01b8152600c600482015230602482015281516000936001600160a01b0316926393f1a40b9260448082019391829003018186803b1580156106ee57600080fd5b505afa158015610702573d6000803e3d6000fd5b505050506040513d604081101561071857600080fd5b5051600b5490915061074390829061073790869063ffffffff61192716565b9063ffffffff61198916565b9150505b919050565b6107546112e0565b610793576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600e55565b6107a06112e0565b6107df576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600180548101908190556108036001600160a01b038516848463ffffffff6119f316565b6001548114610847576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b50505050565b6006546001600160a01b031681565b6008546001600160a01b031633146108aa576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1037b832b930ba37b960a11b604482015290519081900360640190fd5b600180548101908190556108bd82611b46565b600554600d54604080516370a0823160e01b815230600482015290516001600160a01b039384169363a9059cbb93169184916370a0823191602480820192602092909190829003018186803b15801561091557600080fd5b505afa158015610929573d6000803e3d6000fd5b505050506040513d602081101561093f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561099057600080fd5b505af11580156109a4573d6000803e3d6000fd5b505050506040513d60208110156109ba57600080fd5b5050600d54600754604080516001600160a01b039283166020828101919091526000828401819052835180840385018152606080850195869052635b0e93fb60e11b909552606484018281526084850183905260a48501958652815160c48601528151969097169663b61d27f6969295869592949193909260e40191850190808383895b83811015610a56578181015183820152602001610a3e565b50505050905090810190601f168015610a835780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050506000479050610acb3382611c38565b60408051828152905184917f253e5385159062a101837d58c10ad4694c58979ebc3ba6b5cb2cbba2fe461692919081900360200190a2506001548114610b46576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b5050565b6008546001600160a01b03163314610b98576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1037b832b930ba37b960a11b604482015290519081900360640190fd5b60018054810190819055610bab86611b46565b6000606084846040811015610bbf57600080fd5b6001600160a01b038235169190810190604081016020820135640100000000811115610bea57600080fd5b820183602082011115610bfc57600080fd5b80359060200191846001830284011164010000000083111715610c1e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001600160a01b0389168152600a60205260409020549799509297505060ff9095169450610cca9350505050576040805162461bcd60e51b815260206004820152601860248201527f756e617070726f76656420776f726b2073747261746567790000000000000000604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91859184916370a08231916024808301926020929190829003018186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d6020811015610d4857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610d9957600080fd5b505af1158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b5050604051635b0e93fb60e11b81526001600160a01b0388811660048301908152602483018990526060604484019081528451606485015284519286169363b61d27f69334938d938d938993608490910190602085019080838360005b83811015610e38578181015183820152602001610e20565b50505050905090810190601f168015610e655780820380516001836020036101000a031916815260200191505b509450505050506000604051808303818588803b158015610e8557600080fd5b505af1158015610e99573d6000803e3d6000fd5b5050505050610ea788611d39565b610eb13347611c38565b50506001548114610ef7576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b505050505050565b6008546001600160a01b031681565b6002546001600160a01b031681565b600c546001600160a01b031681565b60096020526000908152604090205481565b6005546001600160a01b031681565b600d546001600160a01b031681565b610f646112e0565b610fa3576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600081815260096020526040812054819061100790611229565b90506000600560009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561105957600080fd5b505afa15801561106d573d6000803e3d6000fd5b505050506040513d602081101561108357600080fd5b505160055460408051630240bc6b60e21b8152905192935060009283926001600160a01b031691630902f1ac916004808301926060929190829003018186803b1580156110cf57600080fd5b505afa1580156110e3573d6000803e3d6000fd5b505050506040513d60608110156110f957600080fd5b50805160209182015160065460055460408051630dfe168160e01b815290516dffffffffffffffffffffffffffff958616985094909316955060009485946001600160a01b03938416949390921692630dfe16819260048083019392829003018186803b15801561116957600080fd5b505afa15801561117d573d6000803e3d6000fd5b505050506040513d602081101561119357600080fd5b50516001600160a01b0316146111aa5782846111ad565b83835b909250905060006111c886610737898663ffffffff61192716565b905060006111e0876107378a8663ffffffff61192716565b905061121b8261120f836111fa878263ffffffff611eb116565b61120a898863ffffffff611eb116565b61137b565b9063ffffffff611f0e16565b9a9950505050505050505050565b6000600b546000141561123d575080610747565b600254604080516393f1a40b60e01b8152600c600482015230602482015281516000936001600160a01b0316926393f1a40b9260448082019391829003018186803b15801561128b57600080fd5b505afa15801561129f573d6000803e3d6000fd5b505050506040513d60408110156112b557600080fd5b5051600b5490915061074390610737858463ffffffff61192716565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6112f96112e0565b611338576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b600c80546001600160a01b039384166001600160a01b031991821617909155600d8054929093169116179055565b6003546001600160a01b031681565b600e5481565b60008361138a57506000611434565b60008311801561139a5750600082115b6113e0576040805162461bcd60e51b815260206004820152601260248201527162616420726573657276652076616c75657360701b604482015290519081900360640190fd5b60006113f4856103e563ffffffff61192716565b90506000611408828563ffffffff61192716565b905060006114228361120f886103e863ffffffff61192716565b905080828161142d57fe5b0493505050505b9392505050565b6114436112e0565b611482576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b8160005b818110156114d85782600a600087878581811061149f57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611486565b5050505050565b600c81565b6114ec6112e0565b61152b576040805162461bcd60e51b8152602060048201819052602482015260008051602061224d833981519152604482015290519081900360640190fd5b61153481611f68565b50565b600a6020526000908152604090205460ff1681565b6004546001600160a01b031681565b333214611599576040805162461bcd60e51b81526020600482015260076024820152666e6f7420656f6160c81b604482015290519081900360640190fd5b6001805481019081905560025460408051630441a3e760e41b8152600c600482015260006024820181905291516001600160a01b039093169263441a3e709260448084019391929182900301818387803b1580156115f657600080fd5b505af115801561160a573d6000803e3d6000fd5b50506007546000925061162d91506001600160a01b03163063ffffffff61200816565b90508061163a57506118e3565b6000612710611654600e548461192790919063ffffffff16565b8161165b57fe5b600754919004915061167d906001600160a01b0316338363ffffffff6119f316565b600c546116b6906001600160a01b031661169d848463ffffffff611eb116565b6007546001600160a01b0316919063ffffffff6119f316565b600c54600754604080516001600160a01b03928316602080830191909152600082840181905260608084018290528451808503820181526080850195869052635b0e93fb60e11b909552306084850181815260a4860184905260c48601928352865160e48701528651979098169763b61d27f6979196939593949093610104019190850190808383895b83811015611758578181015183820152602001611740565b50505050905090810190601f1680156117855780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156117a657600080fd5b505af11580156117ba573d6000803e3d6000fd5b5050600254600554604080516370a0823160e01b815230600482015290516001600160a01b03938416955063e2bbb1589450600c93909216916370a0823191602480820192602092909190829003018186803b15801561181957600080fd5b505afa15801561182d573d6000803e3d6000fd5b505050506040513d602081101561184357600080fd5b5051604080516001600160e01b031960e086901b1681526004810193909352602483019190915251604480830192600092919082900301818387803b15801561188b57600080fd5b505af115801561189f573d6000803e3d6000fd5b5050604080518581526020810185905281513394507fc003f45bc224d116b6d079100d4ab57a5b9633244c47a5a92a176c5b79a85f2893509081900390910190a250505b6001548114611534576040805162461bcd60e51b815260206004820152601f60248201526000805160206121e6833981519152604482015290519081900360640190fd5b60008261193657506000611983565b8282028284828161194357fe5b04146119805760405162461bcd60e51b815260040180806020018281038252602181526020018061222c6021913960400191505060405180910390fd5b90505b92915050565b60008082116119df576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b60008284816119ea57fe5b04949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310611a705780518252601f199092019160209182019101611a51565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ad2576040519150601f19603f3d011682016040523d82523d6000602084013e611ad7565b606091505b5091509150818015611b05575080511580611b055750808060200190516020811015611b0257600080fd5b50515b6114d8576040805162461bcd60e51b815260206004820152600d60248201526c10b9b0b332aa3930b739b332b960991b604482015290519081900360640190fd5b6000818152600960205260409020548015610b46576000611b6682611229565b60025460408051630441a3e760e41b8152600c60048201526024810184905290519293506001600160a01b039091169163441a3e709160448082019260009290919082900301818387803b158015611bbd57600080fd5b505af1158015611bd1573d6000803e3d6000fd5b5050600b54611be9925090508363ffffffff611eb116565b600b556000838152600960209081526040808320929092558151848152915185927fca07b1e9ff462c1feca0fa258869d03f3657c3a02eaceed810db4f58848856dc92908290030190a2505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310611c845780518252601f199092019160209182019101611c65565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611ce6576040519150601f19603f3d011682016040523d82523d6000602084013e611ceb565b606091505b5050905080611d34576040805162461bcd60e51b815260206004820152601060248201526f042e6c2cccaa8e4c2dce6cccae48aa8960831b604482015290519081900360640190fd5b505050565b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d8457600080fd5b505afa158015611d98573d6000803e3d6000fd5b505050506040513d6020811015611dae57600080fd5b505190508015610b46576000611dc38261068c565b60025460408051631c57762b60e31b8152600c60048201526024810186905290519293506001600160a01b039091169163e2bbb1589160448082019260009290919082900301818387803b158015611e1a57600080fd5b505af1158015611e2e573d6000803e3d6000fd5b505050600084815260096020526040902054611e5191508263ffffffff611f0e16565b600084815260096020526040902055600b54611e73908263ffffffff611f0e16565b600b5560408051828152905184917fdbdb2d65c9e75a246e9a50307e793774f5ad8d986766a102b8a0eacb58208da2919081900360200190a2505050565b600082821115611f08576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611980576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038116611fad5760405162461bcd60e51b81526004018080602001828103825260268152602001806122066026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561206057600080fd5b505afa158015612074573d6000803e3d6000fd5b505050506040513d602081101561208a57600080fd5b50519392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106121105780518252601f1990920191602091820191016120f1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612172576040519150601f19603f3d011682016040523d82523d6000602084013e612177565b606091505b50915091508180156121a55750805115806121a557508080602001905160208110156121a257600080fd5b50515b6114d8576040805162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b604482015290519081900360640190fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820cf3c430146df6990a0b10bcdaa17e28928fe91f563cead21a5583cd949b16dfd64736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000067b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a000000000000000000000000c2edad668740f1aa35e4d8f227fb8e17dca888cd000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f0000000000000000000000003721dcd1c1793f945006a967a91da81562d1b5880000000000000000000000006b4f168e91452a0ac2cff9f4f745f5efad09861c000000000000000000000000000000000000000000000000000000000000012c
-----Decoded View---------------
Arg [0] : _operator (address): 0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A
Arg [1] : _masterChef (address): 0xc2EdaD668740f1aA35E4D8f227fB8E17dcA888Cd
Arg [2] : _router (address): 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F
Arg [3] : _addStrat (address): 0x3721dCD1C1793f945006a967A91Da81562d1B588
Arg [4] : _liqStrat (address): 0x6B4f168e91452A0aC2CFF9F4F745f5eFAd09861C
Arg [5] : _reinvestBountyBps (uint256): 300
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000067b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a
Arg [1] : 000000000000000000000000c2edad668740f1aa35e4d8f227fb8e17dca888cd
Arg [2] : 000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f
Arg [3] : 0000000000000000000000003721dcd1c1793f945006a967a91da81562d1b588
Arg [4] : 0000000000000000000000006b4f168e91452a0ac2cff9f4f745f5efad09861c
Arg [5] : 000000000000000000000000000000000000000000000000000000000000012c
Deployed Bytecode Sourcemap
24750:10542:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25644:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25644:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;25410:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25410:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;25410:20:0;;;;;;;;;;;;;;27849:308;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27849:308:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27849:308:0;;:::i;34307:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34307:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34307:134:0;;:::i;34028:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34028:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34028:139:0;;;;;;;;;;;;;;;;;:::i;25380:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25380:19:0;;;:::i;32249:522::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32249:522:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32249:522:0;;:::i;29486:823::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;29486:823:0;;;-1:-1:-1;;;;;29486:823:0;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;29486:823:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29486:823:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;29486:823:0;;-1:-1:-1;29486:823:0;-1:-1:-1;29486:823:0;:::i;25437:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25437:23:0;;;:::i;25230:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25230:29:0;;;:::i;25676:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25676:24:0;;;:::i;25549:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25549:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25549:41:0;;:::i;25344:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25344:29:0;;;:::i;25707:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25707:24:0;;;:::i;1724:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1724:140:0;;;:::i;31151:938::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31151:938:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31151:938:0;;:::i;27379:302::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27379:302:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27379:302:0;;:::i;913:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;913:79:0;;;:::i;1279:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1279:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;35091:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35091:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35091:160:0;;;;;;;;;;:::i;25266:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25266:32:0;;;:::i;25738:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25738:32:0;;;:::i;30594:396::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30594:396:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30594:396:0;;;;;;;;;;;;:::i;34628:231::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34628:231:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34628:231:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;34628:231:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34628:231:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34628:231:0;;-1:-1:-1;34628:231:0;-1:-1:-1;34628:231:0;;;;:::i;25467:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25467:32:0;;;:::i;2019:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2019:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2019:109:0;-1:-1:-1;;;;;2019:109:0;;:::i;25597:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25597:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25597:40:0;-1:-1:-1;;;;;25597:40:0;;:::i;25305:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25305:32:0;;;:::i;28247:866::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28247:866:0;;;:::i;25644:25::-;;;;:::o;25410:20::-;;;-1:-1:-1;;;;;25410:20:0;;:::o;27849:308::-;27911:7;27935:10;;27949:1;27935:15;27931:35;;;-1:-1:-1;27959:7:0;27952:14;;27931:35;28051:10;;:39;;;-1:-1:-1;;;28051:39:0;;25497:2;28051:39;;;;28084:4;28051:39;;;;;;28025:20;;-1:-1:-1;;;;;28051:10:0;;:19;;:39;;;;;;;;;;;:10;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;28051:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28051:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28051:39:0;28120:10;;28051:39;;-1:-1:-1;28108:41:0;;28051:39;;28108:23;;:7;;:23;:11;:23;:::i;:::-;:27;:41;:27;:41;:::i;:::-;28101:48;;;27849:308;;;;:::o;34307:134::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;34395:17;:38;34307:134::o;34028:139::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;7601:1;7584:18;;;;;;;;34130:29;-1:-1:-1;;;;;34130:18:0;;34149:2;34153:5;34130:29;:18;:29;:::i;:::-;7696:13;;7680:12;:29;7672:73;;;;;-1:-1:-1;;;7672:73:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7672:73:0;;;;;;;;;;;;;;;1182:1;34028:139;;;:::o;25380:19::-;;;-1:-1:-1;;;;;25380:19:0;;:::o;32249:522::-;27179:8;;-1:-1:-1;;;;;27179:8:0;27165:10;:22;27157:47;;;;;-1:-1:-1;;;27157:47:0;;;;;;;;;;;;-1:-1:-1;;;27157:47:0;;;;;;;;;;;;;;;7601:1;7584:18;;;;;;;;32408:16;32421:2;32408:12;:16::i;:::-;32435:7;;32460:8;;32471:32;;;-1:-1:-1;;;32471:32:0;;32497:4;32471:32;;;;;;-1:-1:-1;;;;;32435:7:0;;;;:16;;32460:8;;32435:7;;32471:17;;:32;;;;;;;;;;;;;;;32435:7;32471:32;;;5:2:-1;;;;30:1;27;20:12;5:2;32471:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32471:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32471:32:0;32435:69;;;-1:-1:-1;;;;;;32435:69:0;;;;;;;-1:-1:-1;;;;;32435:69:0;;;;;;;;;;;;;;;;;;;;32471:32;;32435:69;;;;;;;-1:-1:-1;32435:69:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;32435:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32435:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;32515:8:0;;32558:5;;32547:20;;;-1:-1:-1;;;;;32558:5:0;;;32435:69;32547:20;;;;;;;32515:8;32547:20;;;;;;;;26:21:-1;;;22:32;;6:49;;32547:20:0;;;;;;;;-1:-1:-1;;;32515:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;;;;;:16;;:8;;;;32547:20;;32515:53;;;;;;;;;;;;;:8;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32515:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32515:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32515:53:0;;;;32641:11;32655:21;32641:35;;32687:42;32713:10;32725:3;32687:25;:42::i;:::-;32745:18;;;;;;;;32755:2;;32745:18;;;;;;;;;;7660:1;7696:13;;7680:12;:29;7672:73;;;;;-1:-1:-1;;;7672:73:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7672:73:0;;;;;;;;;;;;;;;27215:1;32249:522;:::o;29486:823::-;27179:8;;-1:-1:-1;;;;;27179:8:0;27165:10;:22;27157:47;;;;;-1:-1:-1;;;27157:47:0;;;;;;;;;;;;-1:-1:-1;;;27157:47:0;;;;;;;;;;;;;;;7601:1;7584:18;;;;;;;;29697:16;29710:2;29697:12;:16::i;:::-;29821:13;29836:16;29867:4;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;29856:34:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;29856:34:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29856:34:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29856:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;;;;;;29909:15:0;;;;:8;:15;;;;;;29820:70;;-1:-1:-1;29856:34:0;;-1:-1:-1;;29909:15:0;;;;;-1:-1:-1;29901:52:0;;-1:-1:-1;;;;29901:52:0;;;;-1:-1:-1;;;29901:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29964:7;;29988:32;;;-1:-1:-1;;;29988:32:0;;30014:4;29988:32;;;;;;-1:-1:-1;;;;;29964:7:0;;;;:16;;29981:5;;29964:7;;29988:17;;:32;;;;;;;;;;;;;;29964:7;29988:32;;;5:2:-1;;;;30:1;27;20:12;5:2;29988:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29988:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29988:32:0;29964:57;;;-1:-1:-1;;;;;;29964:57:0;;;;;;;-1:-1:-1;;;;;29964:57:0;;;;;;;;;;;;;;;;;;;;29988:32;;29964:57;;;;;;;-1:-1:-1;29964:57:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;29964:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29964:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;30032:57:0;;-1:-1:-1;;;30032:57:0;;-1:-1:-1;;;;;30032:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;;;30062:9;;30073:4;;30079;;30085:3;;30032:57;;;;;29964;30032;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30032:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30032:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30032:57:0;;;;;30155:13;30165:2;30155:9;:13::i;:::-;30241:60;30267:10;30279:21;30241:25;:60::i;:::-;7660:1;;7696:13;;7680:12;:29;7672:73;;;;;-1:-1:-1;;;7672:73:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7672:73:0;;;;;;;;;;;;;;;27215:1;29486:823;;;;;:::o;25437:23::-;;;-1:-1:-1;;;;;25437:23:0;;:::o;25230:29::-;;;-1:-1:-1;;;;;25230:29:0;;:::o;25676:24::-;;;-1:-1:-1;;;;;25676:24:0;;:::o;25549:41::-;;;;;;;;;;;;;:::o;25344:29::-;;;-1:-1:-1;;;;;25344:29:0;;:::o;25707:24::-;;;-1:-1:-1;;;;;25707:24:0;;:::o;1724:140::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;1823:1;1807:6;;1786:40;;-1:-1:-1;;;;;1807:6:0;;;;1786:40;;1823:1;;1786:40;1854:1;1837:19;;-1:-1:-1;;;;;;1837:19:0;;;1724:140::o;31151:938::-;31202:7;31323:10;;;:6;:10;;;;;;31202:7;;31308:26;;:14;:26::i;:::-;31288:46;;31345:16;31364:7;;;;;;;;;-1:-1:-1;;;;;31364:7:0;-1:-1:-1;;;;;31364:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31364:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31364:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31364:21:0;31543:7;;:21;;;-1:-1:-1;;;31543:21:0;;;;31364;;-1:-1:-1;31516:10:0;;;;-1:-1:-1;;;;;31543:7:0;;:19;;:21;;;;;;;;;;;;;;:7;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;31543:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31543:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31543:21:0;;;;;;;31637:4;;31617:7;;31543:21;31617:16;;-1:-1:-1;;;31617:16:0;;;;31515:49;;;;;-1:-1:-1;31515:49:0;;;;;-1:-1:-1;31576:17:0;;;;-1:-1:-1;;;;;31637:4:0;;;;31617:7;;;;;:14;;:16;;;;;31543:21;31617:16;;;;;:7;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;31617:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31617:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31617:16:0;-1:-1:-1;;;;;31617:24:0;;:46;;31656:2;31660;31617:46;;;31645:2;31649;31617:46;31575:88;;-1:-1:-1;31575:88:0;-1:-1:-1;31748:16:0;31767:38;31796:8;31767:24;:9;31575:88;31767:24;:13;:24;:::i;:38::-;31748:57;-1:-1:-1;31816:17:0;31836:39;31866:8;31836:25;:9;31850:10;31836:25;:13;:25;:::i;:39::-;31816:59;-1:-1:-1;31964:117:0;32072:8;31964:103;31816:59;32006:25;:10;31816:59;32006:25;:14;:25;:::i;:::-;32033:23;:9;32047:8;32033:23;:13;:23;:::i;:::-;31964:16;:103::i;:::-;:107;:117;:107;:117;:::i;:::-;31957:124;31151:938;-1:-1:-1;;;;;;;;;;31151:938:0:o;27379:302::-;27439:7;27463:10;;27477:1;27463:15;27459:33;;;-1:-1:-1;27487:5:0;27480:12;;27459:33;27577:10;;:39;;;-1:-1:-1;;;27577:39:0;;25497:2;27577:39;;;;27610:4;27577:39;;;;;;27551:20;;-1:-1:-1;;;;;27577:10:0;;:19;;:39;;;;;;;;;;;:10;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;27577:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27577:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27577:39:0;27662:10;;27577:39;;-1:-1:-1;27634:39:0;;:23;:5;27577:39;27634:23;:9;:23;:::i;913:79::-;951:7;978:6;-1:-1:-1;;;;;978:6:0;913:79;:::o;1279:92::-;1319:4;1357:6;-1:-1:-1;;;;;1357:6:0;1343:10;:20;;1279:92::o;35091:160::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;35192:8;:20;;-1:-1:-1;;;;;35192:20:0;;;-1:-1:-1;;;;;;35192:20:0;;;;;;;35223:8;:20;;;;;;;;;;;35091:160::o;25266:32::-;;;-1:-1:-1;;;;;25266:32:0;;:::o;25738:::-;;;;:::o;30594:396::-;30681:7;30705:8;30701:22;;-1:-1:-1;30722:1:0;30715:8;;30701:22;30748:1;30742:3;:7;:19;;;;;30760:1;30753:4;:8;30742:19;30734:50;;;;;-1:-1:-1;;;30734:50:0;;;;;;;;;;;;-1:-1:-1;;;30734:50:0;;;;;;;;;;;;;;;30795:18;30816:12;:3;30824;30816:12;:7;:12;:::i;:::-;30795:33;-1:-1:-1;30839:17:0;30859:20;30795:33;30874:4;30859:20;:14;:20;:::i;:::-;30839:40;-1:-1:-1;30890:19:0;30912:29;30930:10;30912:13;:3;30920:4;30912:13;:7;:13;:::i;:29::-;30890:51;;30971:11;30959:9;:23;;;;;;30952:30;;;;;30594:396;;;;;;:::o;34628:231::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;34733:6;34719:11;34757:95;34785:3;34779;:9;34757:95;;;34836:4;34812:8;:21;34821:6;;34828:3;34821:11;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34821:11:0;34812:21;;-1:-1:-1;34812:21:0;;;;;;;;-1:-1:-1;34812:21:0;:28;;-1:-1:-1;;34812:28:0;;;;;;;;;;-1:-1:-1;34790:5:0;34757:95;;;;1182:1;34628:231;;;:::o;25467:32::-;25497:2;25467:32;:::o;2019:109::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;2092:28;2111:8;2092:18;:28::i;:::-;2019:109;:::o;25597:40::-;;;;;;;;;;;;;;;:::o;25305:32::-;;;-1:-1:-1;;;;;25305:32:0;;:::o;28247:866::-;26988:10;27002:9;26988:23;26980:43;;;;;-1:-1:-1;;;26980:43:0;;;;;;;;;;;;-1:-1:-1;;;26980:43:0;;;;;;;;;;;;;;;7601:1;7584:18;;;;;;;;28355:10;;:27;;;-1:-1:-1;;;28355:27:0;;25497:2;28355:27;;;;7584:13;28355:27;;;;;;;;-1:-1:-1;;;;;28355:10:0;;;;:19;;:27;;;;;7584:13;;28355:27;;;;;;7584:13;28355:10;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;28355:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28410:5:0;;28393:14;;-1:-1:-1;28410:30:0;;-1:-1:-1;;;;;;28410:5:0;28434:4;28410:30;:15;:30;:::i;:::-;28393:47;-1:-1:-1;28463:11:0;28459:24;;28476:7;;;28459:24;28546:14;28595:5;28563:29;28574:17;;28563:6;:10;;:29;;;;:::i;:::-;:37;;;;;28619:5;;28563:37;;;;-1:-1:-1;28619:38:0;;-1:-1:-1;;;;;28619:5:0;28638:10;28563:37;28619:38;:18;:38;:::i;:::-;28817:8;;28790:57;;-1:-1:-1;;;;;28817:8:0;28828:18;:6;28839;28828:18;:10;:18;:::i;:::-;28790:5;;-1:-1:-1;;;;;28790:5:0;;:57;;:18;:57;:::i;:::-;28858:8;;28904:5;;28893:23;;;-1:-1:-1;;;;;28904:5:0;;;28893:23;;;;;;;;28858:8;28893:23;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;28893:23:0;;;;;;;-1:-1:-1;;;28858:59:0;;;28883:4;28858:59;;;;;;;;;;;;;;;;;;;;;;;;;;:8;;;;;:16;;28883:4;;28858:8;;28893:23;;28858:59;;;;;;;;;;;;:8;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28858:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28858:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28996:10:0;;29020:7;;:32;;;-1:-1:-1;;;29020:32:0;;29046:4;29020:32;;;;;;-1:-1:-1;;;;;28996:10:0;;;;-1:-1:-1;28996:18:0;;-1:-1:-1;25497:2:0;;29020:7;;;;:17;;:32;;;;;;;;;;;;;;;:7;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;29020:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29020:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29020:32:0;28996:57;;;-1:-1:-1;;;;;;28996:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28996:57:0;;;;;;;-1:-1:-1;28996:57:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;28996:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29069:36:0;;;;;;;;;;;;;;29078:10;;-1:-1:-1;29069:36:0;;-1:-1:-1;29069:36:0;;;;;;;;;7660:1;;;7696:13;;7680:12;:29;7672:73;;;;;-1:-1:-1;;;7672:73:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7672:73:0;;;;;;;;;;;;;;4288:470;4346:7;4590:6;4586:47;;-1:-1:-1;4620:1:0;4613:8;;4586:47;4657:5;;;4661:1;4657;:5;:1;4681:5;;;;;:10;4673:56;;;;-1:-1:-1;;;4673:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4749:1;-1:-1:-1;4288:470:0;;;;;:::o;5226:333::-;5284:7;5383:1;5379;:5;5371:44;;;;;-1:-1:-1;;;5371:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5426:9;5442:1;5438;:5;;;;;;;5226:333;-1:-1:-1;;;;5226:333:0:o;21665:346::-;21863:45;;;-1:-1:-1;;;;;21863:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21863:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21852:57:0;;;;21817:12;;21831:17;;21852:10;;;;21863:45;21852:57;;;25:18:-1;21852:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21852:57:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;21816:93:0;;;;21928:7;:57;;;;-1:-1:-1;21940:11:0;;:16;;:44;;;21971:4;21960:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21960:24:0;21940:44;21920:83;;;;;-1:-1:-1;;;21920:83:0;;;;;;;;;;;;-1:-1:-1;;;21920:83:0;;;;;;;;;;;;;;33365:347;33419:13;33435:10;;;:6;:10;;;;;;33460:9;;33456:249;;33486:15;33504:21;33519:5;33504:14;:21::i;:::-;33540:10;;:33;;;-1:-1:-1;;;33540:33:0;;25497:2;33540:33;;;;;;;;;;;;33486:39;;-1:-1:-1;;;;;;33540:10:0;;;;:19;;:33;;;;;:10;;:33;;;;;;;;:10;;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;33540:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33601:10:0;;:21;;-1:-1:-1;33601:10:0;-1:-1:-1;33616:5:0;33601:21;:14;:21;:::i;:::-;33588:10;:34;33650:1;33637:10;;;:6;:10;;;;;;;;:14;;;;33671:22;;;;;;;33644:2;;33671:22;;;;;;;;;33456:249;33365:347;;:::o;22413:180::-;22525:12;;;22486;22525;;;;;;;;;-1:-1:-1;;;;;22504:7:0;;;22518:5;;22504:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;22504:34:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;22485:53:0;;;22557:7;22549:36;;;;;-1:-1:-1;;;22549:36:0;;;;;;;;;;;;-1:-1:-1;;;22549:36:0;;;;;;;;;;;;;;;22413:180;;;:::o;32872:388::-;32941:7;;:32;;;-1:-1:-1;;;32941:32:0;;32967:4;32941:32;;;;;;32923:15;;-1:-1:-1;;;;;32941:7:0;;:17;;:32;;;;;;;;;;;;;;:7;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;32941:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32941:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32941:32:0;;-1:-1:-1;32990:11:0;;32986:267;;33018:13;33034:23;33049:7;33034:14;:23::i;:::-;33072:10;;:32;;;-1:-1:-1;;;33072:32:0;;25497:2;33072:32;;;;;;;;;;;;33018:39;;-1:-1:-1;;;;;;33072:10:0;;;;:18;;:32;;;;;:10;;:32;;;;;;;;:10;;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;33072:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;33132:10:0;;;;:6;:10;;;;;;:21;;-1:-1:-1;33147:5:0;33132:21;:14;:21;:::i;:::-;33119:10;;;;:6;:10;;;;;:34;33181:10;;:21;;33196:5;33181:21;:14;:21;:::i;:::-;33168:10;:34;33222:19;;;;;;;;33231:2;;33222:19;;;;;;;;;;32986:267;32872:388;;:::o;3853:184::-;3911:7;3944:1;3939;:6;;3931:49;;;;;-1:-1:-1;;;3931:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4003:5:0;;;3853:184::o;3397:181::-;3455:7;3487:5;;;3511:6;;;;3503:46;;;;;-1:-1:-1;;;3503:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2234:229;-1:-1:-1;;;;;2308:22:0;;2300:73;;;;-1:-1:-1;;;2300:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2410:6;;;2389:38;;-1:-1:-1;;;;;2389:38:0;;;;2410:6;;;2389:38;;;2438:6;:17;;-1:-1:-1;;;;;;2438:17:0;-1:-1:-1;;;;;2438:17:0;;;;;;;;;;2234:229::o;21163:143::-;21234:7;21276:5;-1:-1:-1;;;;;21261:31:0;;21293:4;21261:37;;;;;;;;;;;;;-1:-1:-1;;;;;21261:37:0;-1:-1:-1;;;;;21261:37:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21261:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21261:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21261:37:0;;21163:143;-1:-1:-1;;;21163:143:0:o;21314:343::-;21510:45;;;-1:-1:-1;;;;;21510:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21510:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21499:57:0;;;;21464:12;;21478:17;;21499:10;;;;21510:45;21499:57;;;25:18:-1;21499:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21499:57:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;21463:93:0;;;;21575:7;:57;;;;-1:-1:-1;21587:11:0;;:16;;:44;;;21618:4;21607:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21607:24:0;21587:44;21567:82;;;;;-1:-1:-1;;;21567:82:0;;;;;;;;;;;;-1:-1:-1;;;21567:82:0;;;;;;;;;;;;;
Swarm Source
bzzr://cf3c430146df6990a0b10bcdaa17e28928fe91f563cead21a5583cd949b16dfd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2.3 | 18.0662 | $41.55 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.