More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 473 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exit | 11224661 | 1542 days ago | IN | 0 ETH | 0.0034098 | ||||
Exit | 11102021 | 1561 days ago | IN | 0 ETH | 0.00335678 | ||||
Withdraw | 11013076 | 1575 days ago | IN | 0 ETH | 0.00410593 | ||||
Get Reward | 11013075 | 1575 days ago | IN | 0 ETH | 0.00337405 | ||||
Withdraw | 10984851 | 1579 days ago | IN | 0 ETH | 0.00328431 | ||||
Get Reward | 10984562 | 1579 days ago | IN | 0 ETH | 0.00629823 | ||||
Withdraw | 10977457 | 1580 days ago | IN | 0 ETH | 0.00780297 | ||||
Exit | 10976210 | 1581 days ago | IN | 0 ETH | 0.00408177 | ||||
Withdraw | 10975299 | 1581 days ago | IN | 0 ETH | 0.00707898 | ||||
Get Reward | 10975128 | 1581 days ago | IN | 0 ETH | 0.0081629 | ||||
Exit | 10975116 | 1581 days ago | IN | 0 ETH | 0.0092917 | ||||
Get Reward | 10973379 | 1581 days ago | IN | 0 ETH | 0.00449874 | ||||
Withdraw | 10972635 | 1581 days ago | IN | 0 ETH | 0.0044237 | ||||
Get Reward | 10972627 | 1581 days ago | IN | 0 ETH | 0.00419882 | ||||
Exit | 10972145 | 1581 days ago | IN | 0 ETH | 0.00284487 | ||||
Get Reward | 10972145 | 1581 days ago | IN | 0 ETH | 0.00344903 | ||||
Get Reward | 10972048 | 1581 days ago | IN | 0 ETH | 0.00464869 | ||||
Withdraw | 10972039 | 1581 days ago | IN | 0 ETH | 0.00687714 | ||||
Get Reward | 10971690 | 1581 days ago | IN | 0 ETH | 0.00599832 | ||||
Get Reward | 10971392 | 1581 days ago | IN | 0 ETH | 0.01702023 | ||||
Get Reward | 10971238 | 1581 days ago | IN | 0 ETH | 0.01241395 | ||||
Get Reward | 10970899 | 1581 days ago | IN | 0 ETH | 0.00791576 | ||||
Exit | 10970894 | 1581 days ago | IN | 0 ETH | 0.00912121 | ||||
Get Reward | 10970576 | 1582 days ago | IN | 0 ETH | 0.00634481 | ||||
Get Reward | 10970326 | 1582 days ago | IN | 0 ETH | 0.00473834 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BoostRewardsV2
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-17 */ // File: contracts/SafeMath.sol pragma solidity 0.5.17; // Note: This file has been modified to include the sqrt function for quadratic voting /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } /** * Imported from: https://github.com/alianse777/solidity-standard-library/blob/master/Math.sol * @dev Compute square root of x * @return sqrt(x) */ function sqrt(uint256 x) internal pure returns (uint256) { uint256 n = x / 2; uint256 lstX = 0; while (n != lstX){ lstX = n; n = (n + x/n) / 2; } return uint256(n); } } /** * @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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); 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-contracts/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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @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) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts/zeppelin/Ownable.sol pragma solidity 0.5.17; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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 applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { 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 = _msgSender(); 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 _msgSender() == _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: contracts/zeppelin/Address.sol pragma solidity 0.5.17; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * IMPORTANT: It is unsafe to assume that an address for which this * function returns false is an externally-owned account (EOA) and not a * contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // File: contracts/IERC20.sol //SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.5.17; /** * @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. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @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: contracts/zeppelin/SafeERC20.sol pragma solidity 0.5.17; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/IERC20Burnable.sol //SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.5.17; interface IERC20Burnable { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function burn(uint256 amount) external; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/ITreasury.sol pragma solidity 0.5.17; interface ITreasury { function defaultToken() external view returns (IERC20); function deposit(IERC20 token, uint256 amount) external; function withdraw(uint256 amount, address withdrawAddress) external; } // File: contracts/ISwapRouter.sol //SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.5.17; interface SwapRouter { function WETH() external pure returns (address); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); } // File: contracts/LPTokenWrapper.sol //SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.5.17; contract LPTokenWrapper { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public stakeToken; uint256 private _totalSupply; mapping(address => uint256) private _balances; constructor(IERC20 _stakeToken) public { stakeToken = _stakeToken; } function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function stake(uint256 amount) public { _totalSupply = _totalSupply.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); // safeTransferFrom shifted to overriden method } function withdraw(uint256 amount) public { _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); // safeTransferFrom shifted to overriden method } } // File: contracts/BoostRewardsV2.sol //SPDX-License-Identifier: MIT /* * MIT License * =========== * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ pragma solidity 0.5.17; contract BoostRewardsV2 is LPTokenWrapper, Ownable { IERC20 public boostToken; ITreasury public treasury; SwapRouter public swapRouter; IERC20 public stablecoin; uint256 public tokenCapAmount; uint256 public starttime; uint256 public duration; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; // booster variables // variables to keep track of totalSupply and balances (after accounting for multiplier) uint256 public boostedTotalSupply; uint256 public lastBoostPurchase; // timestamp of lastBoostPurchase mapping(address => uint256) public boostedBalances; mapping(address => uint256) public numBoostersBought; // each booster = 5% increase in stake amt mapping(address => uint256) public nextBoostPurchaseTime; // timestamp for which user is eligible to purchase another booster uint256 public globalBoosterPrice = 1e18; uint256 public boostThreshold = 10; uint256 public boostScaleFactor = 20; uint256 public scaleFactor = 320; event RewardAdded(uint256 reward); event RewardPaid(address indexed user, uint256 reward); modifier checkStart() { require(block.timestamp >= starttime,"not start"); _; } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } constructor( uint256 _tokenCapAmount, IERC20 _stakeToken, IERC20 _boostToken, address _treasury, SwapRouter _swapRouter, uint256 _starttime, uint256 _duration ) public LPTokenWrapper(_stakeToken) { tokenCapAmount = _tokenCapAmount; boostToken = _boostToken; treasury = ITreasury(_treasury); stablecoin = treasury.defaultToken(); swapRouter = _swapRouter; starttime = _starttime; lastBoostPurchase = _starttime; duration = _duration; boostToken.safeApprove(address(_swapRouter), uint256(-1)); stablecoin.safeApprove(address(treasury), uint256(-1)); } function lastTimeRewardApplicable() public view returns (uint256) { return Math.min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (boostedTotalSupply == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(lastUpdateTime) .mul(rewardRate) .mul(1e18) .div(boostedTotalSupply) ); } function earned(address account) public view returns (uint256) { return boostedBalances[account] .mul(rewardPerToken().sub(userRewardPerTokenPaid[account])) .div(1e18) .add(rewards[account]); } function getBoosterPrice(address user) public view returns (uint256 boosterPrice, uint256 newBoostBalance) { if (boostedTotalSupply == 0) return (0,0); // 5% increase for each previously user-purchased booster uint256 boostersBought = numBoostersBought[user]; boosterPrice = globalBoosterPrice.mul(boostersBought.mul(5).add(100)).div(100); // increment boostersBought by 1 boostersBought = boostersBought.add(1); // if no. of boosters exceed threshold, increase booster price by boostScaleFactor; if (boostersBought >= boostThreshold) { boosterPrice = boosterPrice .mul((boostersBought.sub(boostThreshold)).mul(boostScaleFactor).add(100)) .div(100); } // 2.5% decrease for every 2 hour interval since last global boost purchase boosterPrice = pow(boosterPrice, 975, 1000, (block.timestamp.sub(lastBoostPurchase)).div(2 hours)); // adjust price based on expected increase in boost supply // boostersBought has been incremented by 1 already newBoostBalance = balanceOf(user) .mul(boostersBought.mul(5).add(100)) .div(100); uint256 boostBalanceIncrease = newBoostBalance.sub(boostedBalances[user]); boosterPrice = boosterPrice .mul(boostBalanceIncrease) .mul(scaleFactor) .div(boostedTotalSupply); } // stake visibility is public as overriding LPTokenWrapper's stake() function function stake(uint256 amount) public updateReward(msg.sender) checkStart { require(amount > 0, "Cannot stake 0"); super.stake(amount); // check user cap require( balanceOf(msg.sender) <= tokenCapAmount || block.timestamp >= starttime.add(86400), "token cap exceeded" ); // boosters do not affect new amounts boostedBalances[msg.sender] = boostedBalances[msg.sender].add(amount); boostedTotalSupply = boostedTotalSupply.add(amount); _getReward(msg.sender); // transfer token last, to follow CEI pattern stakeToken.safeTransferFrom(msg.sender, address(this), amount); } function withdraw(uint256 amount) public updateReward(msg.sender) checkStart { require(amount > 0, "Cannot withdraw 0"); super.withdraw(amount); // reset boosts :( numBoostersBought[msg.sender] = 0; // update boosted balance and supply updateBoostBalanceAndSupply(msg.sender, 0); // in case _getReward function fails, continue (bool success, ) = address(this).call( abi.encodeWithSignature( "_getReward(address)", msg.sender ) ); // to remove compiler warning success; // transfer token last, to follow CEI pattern stakeToken.safeTransfer(msg.sender, amount); } function getReward() public updateReward(msg.sender) checkStart { _getReward(msg.sender); } function exit() external { withdraw(balanceOf(msg.sender)); } function setScaleFactorsAndThreshold( uint256 _boostThreshold, uint256 _boostScaleFactor, uint256 _scaleFactor ) external onlyOwner { boostThreshold = _boostThreshold; boostScaleFactor = _boostScaleFactor; scaleFactor = _scaleFactor; } function boost() external updateReward(msg.sender) checkStart { require( block.timestamp > nextBoostPurchaseTime[msg.sender], "early boost purchase" ); // save current booster price, since transfer is done last // since getBoosterPrice() returns new boost balance, avoid re-calculation (uint256 boosterAmount, uint256 newBoostBalance) = getBoosterPrice(msg.sender); // user's balance and boostedSupply will be changed in this function applyBoost(msg.sender, newBoostBalance); _getReward(msg.sender); boostToken.safeTransferFrom(msg.sender, address(this), boosterAmount); IERC20Burnable burnableBoostToken = IERC20Burnable(address(boostToken)); // burn 25% uint256 burnAmount = boosterAmount.div(4); burnableBoostToken.burn(burnAmount); boosterAmount = boosterAmount.sub(burnAmount); // swap to stablecoin address[] memory routeDetails = new address[](3); routeDetails[0] = address(boostToken); routeDetails[1] = swapRouter.WETH(); routeDetails[2] = address(stablecoin); uint[] memory amounts = swapRouter.swapExactTokensForTokens( boosterAmount, 0, routeDetails, address(this), block.timestamp + 100 ); // transfer to treasury // index 2 = final output amt treasury.deposit(stablecoin, amounts[2]); } function notifyRewardAmount(uint256 reward) external onlyOwner updateReward(address(0)) { rewardRate = reward.div(duration); lastUpdateTime = starttime; periodFinish = starttime.add(duration); emit RewardAdded(reward); } function updateBoostBalanceAndSupply(address user, uint256 newBoostBalance) internal { // subtract existing balance from boostedSupply boostedTotalSupply = boostedTotalSupply.sub(boostedBalances[user]); // when applying boosts, // newBoostBalance has already been calculated in getBoosterPrice() if (newBoostBalance == 0) { // each booster adds 5% to current stake amount newBoostBalance = balanceOf(user).mul(numBoostersBought[user].mul(5).add(100)).div(100); } // update user's boosted balance boostedBalances[user] = newBoostBalance; // update boostedSupply boostedTotalSupply = boostedTotalSupply.add(newBoostBalance); } function applyBoost(address user, uint256 newBoostBalance) internal { // increase no. of boosters bought numBoostersBought[user] = numBoostersBought[user].add(1); updateBoostBalanceAndSupply(user, newBoostBalance); // increase next purchase eligibility by an hour nextBoostPurchaseTime[user] = block.timestamp.add(3600); // increase global booster price by 1% globalBoosterPrice = globalBoosterPrice.mul(101).div(100); lastBoostPurchase = block.timestamp; } function _getReward(address user) internal { uint256 reward = earned(user); if (reward > 0) { rewards[user] = 0; boostToken.safeTransfer(user, reward); emit RewardPaid(user, reward); } } /// Imported from: https://forum.openzeppelin.com/t/does-safemath-library-need-a-safe-power-function/871/7 /// Modified so that it takes in 3 arguments for base /// @return a * (b / c)^exponent function pow(uint256 a, uint256 b, uint256 c, uint256 exponent) internal pure returns (uint256) { if (exponent == 0) { return a; } else if (exponent == 1) { return a.mul(b).div(c); } else if (a == 0 && exponent != 0) { return 0; } else { uint256 z = a.mul(b).div(c); for (uint256 i = 1; i < exponent; i++) z = z.mul(b).div(c); return z; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_tokenCapAmount","type":"uint256"},{"internalType":"contract IERC20","name":"_stakeToken","type":"address"},{"internalType":"contract IERC20","name":"_boostToken","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"contract SwapRouter","name":"_swapRouter","type":"address"},{"internalType":"uint256","name":"_starttime","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"boost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"boostScaleFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"boostThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"boostToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boostedBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"boostedTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getBoosterPrice","outputs":[{"internalType":"uint256","name":"boosterPrice","type":"uint256"},{"internalType":"uint256","name":"newBoostBalance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"globalBoosterPrice","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":"lastBoostPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextBoostPurchaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numBoostersBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"periodFinish","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":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"scaleFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_boostThreshold","type":"uint256"},{"internalType":"uint256","name":"_boostScaleFactor","type":"uint256"},{"internalType":"uint256","name":"_scaleFactor","type":"uint256"}],"name":"setScaleFactorsAndThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stablecoin","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract SwapRouter","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenCapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","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":"treasury","outputs":[{"internalType":"contract ITreasury","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b556000600c55670de0b6b3a7640000601655600a60175560146018556101406019553480156200003757600080fd5b50604051620027ef380380620027ef833981810160405260e08110156200005d57600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151600080546001600160a01b0319166001600160a01b0387161790559495939492939192909190620000af62000229565b600380546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36008879055600480546001600160a01b038088166001600160a01b0319928316178355600580548883169316929092179182905560408051633a609fed60e11b8152905192909116926374c13fda928282019260209290829003018186803b1580156200016757600080fd5b505afa1580156200017c573d6000803e3d6000fd5b505050506040513d60208110156200019357600080fd5b5051600780546001600160a01b03199081166001600160a01b03938416179091556006805490911685831617905560098390556012839055600a829055600454620001ef9116846000196200022d602090811b62001fe617901c565b6005546007546200021c916001600160a01b0391821691166000196200022d602090811b62001fe617901c565b5050505050505062000563565b3390565b801580620002b7575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156200028757600080fd5b505afa1580156200029c573d6000803e3d6000fd5b505050506040513d6020811015620002b357600080fd5b5051155b620002f45760405162461bcd60e51b8152600401808060200182810382526036815260200180620027b96036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200034c9185916200035116565b505050565b62000370826001600160a01b03166200052660201b62001faf1760201c565b620003c2576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310620004025780518252601f199092019160209182019101620003e1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462000466576040519150601f19603f3d011682016040523d82523d6000602084013e6200046b565b606091505b509150915081620004c3576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156200052057808060200190516020811015620004e157600080fd5b5051620005205760405162461bcd60e51b815260040180806020018281038252602a8152602001806200278f602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906200055b5750808214155b949350505050565b61221c80620005736000396000f3fe608060405234801561001057600080fd5b50600436106102c75760003560e01c806380faa57d1161017b578063c31c9c07116100d8578063e72c3c421161008c578063e9fad8ee11610071578063e9fad8ee146105a1578063ebe2b12b146105a9578063f2fde38b146105b1576102c7565b8063e72c3c4214610573578063e9cbd82214610599576102c7565b8063c8f33c91116100bd578063c8f33c911461055b578063cd3daf9d14610563578063df136d651461056b576102c7565b8063c31c9c071461054b578063c675ccc114610553576102c7565b80638da588971161012f5780638f32d59b116101145780638f32d59b1461050a578063a66f42c014610526578063a694fc3a1461052e576102c7565b80638da58897146104fa5780638da5cb5b14610502576102c7565b80638b876347116101605780638b876347146104a35780638b8d67d5146104c95780638c445cab146104d1576102c7565b806380faa57d146104935780638112643c1461049b576102c7565b80633d18b9121161022957806364044fd9116101dd57806370a08231116101c257806370a082311461045d578063715018a6146104835780637b0a47ee1461048b576102c7565b806364044fd91461042f578063683dd19114610455576102c7565b806351ed6a301161020e57806351ed6a30146104175780635be4d8001461041f57806361d027b314610427576102c7565b80633d18b912146104075780634c5be6f31461040f576102c7565b80632e1a7d4d116102805780633a589b97116102655780633a589b97146103a05780633ba35551146103c45780633c6b16ab146103ea576102c7565b80632e1a7d4d146103795780633004b46614610398576102c7565b80630d7373a7116102b15780630d7373a71461032a5780630fb5a6b41461036957806318160ddd14610371576102c7565b80628cc262146102cc5780630700037d14610304575b600080fd5b6102f2600480360360208110156102e257600080fd5b50356001600160a01b03166105d7565b60408051918252519081900360200190f35b6102f26004803603602081101561031a57600080fd5b50356001600160a01b031661066d565b6103506004803603602081101561034057600080fd5b50356001600160a01b031661067f565b6040805192835260208301919091528051918290030190f35b6102f26107ea565b6102f26107f0565b6103966004803603602081101561038f57600080fd5b50356107f7565b005b6102f2610a67565b6103a8610a6d565b604080516001600160a01b039092168252519081900360200190f35b6102f2600480360360208110156103da57600080fd5b50356001600160a01b0316610a7c565b6103966004803603602081101561040057600080fd5b5035610a8e565b610396610baf565b6102f2610c6d565b6103a8610c73565b6102f2610c82565b6103a8610c88565b6102f26004803603602081101561044557600080fd5b50356001600160a01b0316610c97565b6102f2610ca9565b6102f26004803603602081101561047357600080fd5b50356001600160a01b0316610caf565b610396610cca565b6102f2610d85565b6102f2610d8b565b6102f2610d9e565b6102f2600480360360208110156104b957600080fd5b50356001600160a01b0316610da4565b6102f2610db6565b610396600480360360608110156104e757600080fd5b5080359060208101359060400135610dbc565b6102f2610e23565b6103a8610e29565b610512610e38565b604080519115158252519081900360200190f35b610396610e5e565b6103966004803603602081101561054457600080fd5b50356113c9565b6103a86115c9565b6102f26115d8565b6102f26115de565b6102f26115e4565b6102f2611632565b6102f26004803603602081101561058957600080fd5b50356001600160a01b0316611638565b6103a861164a565b610396611659565b6102f261166c565b610396600480360360208110156105c757600080fd5b50356001600160a01b0316611672565b6001600160a01b038116600090815260106020908152604080832054600f909252822054610667919061065b90670de0b6b3a76400009061064f9061062a9061061e6115e4565b9063ffffffff6116d416565b6001600160a01b0388166000908152601360205260409020549063ffffffff61171d16565b9063ffffffff61177616565b9063ffffffff6117b816565b92915050565b60106020526000908152604090205481565b60008060115460001415610698575060009050806107e5565b6001600160a01b0383166000908152601460205260409020546106dd606461064f6106ce8261065b86600563ffffffff61171d16565b6016549063ffffffff61171d16565b92506106f081600163ffffffff6117b816565b9050601754811061073f5761073c606461064f61072f606461065b601854610723601754896116d490919063ffffffff16565b9063ffffffff61171d16565b869063ffffffff61171d16565b92505b610769836103cf6103e8610764611c2061064f601254426116d490919063ffffffff16565b611812565b9250610791606461064f6107888261065b86600563ffffffff61171d16565b61072388610caf565b6001600160a01b038516600090815260136020526040812054919350906107bf90849063ffffffff6116d416565b90506107e060115461064f601954610723858961171d90919063ffffffff16565b935050505b915091565b600a5481565b6001545b90565b336108006115e4565b600e5561080b610d8b565b600d556001600160a01b0381161561085257610826816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b6009544210156108a9576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116108fe576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b610907826118ab565b33600081815260146020526040812081905561092391906118f4565b604080513360248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad360a500000000000000000000000000000000000000000000000000000000017815291518151600093309392918291908083835b602083106109d957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161099c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610a3b576040519150601f19603f3d011682016040523d82523d6000602084013e610a40565b606091505b5050600054909150610a62906001600160a01b0316338563ffffffff6119a316565b505050565b60125481565b6004546001600160a01b031681565b60136020526000908152604090205481565b610a96610e38565b610ae7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000610af16115e4565b600e55610afc610d8b565b600d556001600160a01b03811615610b4357610b17816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b600a54610b5790839063ffffffff61177616565b600c55600954600d819055600a54610b75919063ffffffff6117b816565b600b556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b33610bb86115e4565b600e55610bc3610d8b565b600d556001600160a01b03811615610c0a57610bde816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b600954421015610c61576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610c6a33611a23565b50565b60175481565b6000546001600160a01b031681565b60085481565b6005546001600160a01b031681565b60156020526000908152604090205481565b60195481565b6001600160a01b031660009081526002602052604090205490565b610cd2610e38565b610d23576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5481565b6000610d9942600b54611aa8565b905090565b60115481565b600f6020526000908152604090205481565b60185481565b610dc4610e38565b610e15576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601792909255601855601955565b60095481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610e4f611abe565b6001600160a01b031614905090565b33610e676115e4565b600e55610e72610d8b565b600d556001600160a01b03811615610eb957610e8d816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b600954421015610f10576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152601560205260409020544211610f73576040805162461bcd60e51b815260206004820152601460248201527f6561726c7920626f6f7374207075726368617365000000000000000000000000604482015290519081900360640190fd5b600080610f7f3361067f565b91509150610f8d3382611ac2565b610f9633611a23565b600454610fb4906001600160a01b031633308563ffffffff611b6016565b600480546001600160a01b031690600090610fd690859063ffffffff61177616565b9050816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561101e57600080fd5b505af1158015611032573d6000803e3d6000fd5b5050505061104981856116d490919063ffffffff16565b6040805160038082526080820190925291955060609190602082018380388339505060045482519293506001600160a01b03169183915060009061108957fe5b6001600160a01b03928316602091820292909201810191909152600654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156110f657600080fd5b505afa15801561110a573d6000803e3d6000fd5b505050506040513d602081101561112057600080fd5b505181518290600190811061113157fe5b6001600160a01b03928316602091820292909201015260075482519116908290600290811061115c57fe5b6001600160a01b039283166020918202929092018101919091526006546040517f38ed17390000000000000000000000000000000000000000000000000000000081526004810189815260006024830181905230606484810182905242016084850181905260a060448601908152895160a4870152895160609997909716976338ed1739978f9795968c9690939260c49091019187820191028083838b5b838110156112125781810151838201526020016111fa565b505050509050019650505050505050600060405180830381600087803b15801561123b57600080fd5b505af115801561124f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561129657600080fd5b81019080805160405193929190846401000000008211156112b657600080fd5b9083019060208201858111156112cb57600080fd5b82518660208202830111640100000000821117156112e857600080fd5b82525081516020918201928201910280838360005b838110156113155781810151838201526020016112fd565b5050505091909101604052505060055460075484519495506001600160a01b03918216946347e7ef249450911691508490600290811061135157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156113a857600080fd5b505af11580156113bc573d6000803e3d6000fd5b5050505050505050505050565b336113d26115e4565b600e556113dd610d8b565b600d556001600160a01b03811615611424576113f8816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b60095442101561147b576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116114d0576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6114d982611bee565b6008546114e533610caf565b1115806115075750600954611503906201518063ffffffff6117b816565b4210155b611558576040805162461bcd60e51b815260206004820152601260248201527f746f6b656e206361702065786365656465640000000000000000000000000000604482015290519081900360640190fd5b33600090815260136020526040902054611578908363ffffffff6117b816565b3360009081526013602052604090205560115461159b908363ffffffff6117b816565b6011556115a733611a23565b6000546115c5906001600160a01b031633308563ffffffff611b6016565b5050565b6006546001600160a01b031681565b60165481565b600d5481565b6000601154600014156115fa5750600e546107f4565b610d9961162360115461064f670de0b6b3a7640000610723600c54610723600d5461061e610d8b565b600e549063ffffffff6117b816565b600e5481565b60146020526000908152604090205481565b6007546001600160a01b031681565b61166a61166533610caf565b6107f7565b565b600b5481565b61167a610e38565b6116cb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610c6a81611c24565b600061171683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cdd565b9392505050565b60008261172c57506000610667565b8282028284828161173957fe5b04146117165760405162461bcd60e51b81526004018080602001828103825260218152602001806121676021913960400191505060405180910390fd5b600061171683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d74565b600082820183811015611716576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816118205750836118a3565b81600114156118445761183d8361064f878763ffffffff61171d16565b90506118a3565b8415801561185157508115155b1561185e575060006118a3565b60006118748461064f888863ffffffff61171d16565b905060015b8381101561189f576118958561064f848963ffffffff61171d16565b9150600101611879565b5090505b949350505050565b6001546118be908263ffffffff6116d416565b600155336000908152600260205260409020546118e1908263ffffffff6116d416565b3360009081526002602052604090205550565b6001600160a01b03821660009081526013602052604090205460115461191f9163ffffffff6116d416565b6011558061196e576001600160a01b03821660009081526014602052604090205461196b9060649061064f9061196290839061065b90600563ffffffff61171d16565b61072386610caf565b90505b6001600160a01b038216600090815260136020526040902081905560115461199c908263ffffffff6117b816565b6011555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a62908490611dd9565b6000611a2e826105d7565b905080156115c5576001600160a01b03808316600090815260106020526040812055600454611a659116838363ffffffff6119a316565b6040805182815290516001600160a01b038416917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25050565b6000818310611ab75781611716565b5090919050565b3390565b6001600160a01b038216600090815260146020526040902054611aec90600163ffffffff6117b816565b6001600160a01b038316600090815260146020526040902055611b0f82826118f4565b611b2142610e1063ffffffff6117b816565b6001600160a01b038316600090815260156020526040902055601654611b559060649061064f90606563ffffffff61171d16565b601655505042601255565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611be8908590611dd9565b50505050565b600154611c01908263ffffffff6117b816565b600155336000908152600260205260409020546118e1908263ffffffff6117b816565b6001600160a01b038116611c695760405162461bcd60e51b81526004018080602001828103825260268152602001806121416026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008184841115611d6c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d31578181015183820152602001611d19565b50505050905090810190601f168015611d5e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611dc35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d31578181015183820152602001611d19565b506000838581611dcf57fe5b0495945050505050565b611deb826001600160a01b0316611faf565b611e3c576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611e9857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e5b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611efa576040519150601f19603f3d011682016040523d82523d6000602084013e611eff565b606091505b509150915081611f56576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611be857808060200190516020811015611f7257600080fd5b5051611be85760405162461bcd60e51b815260040180806020018281038252602a815260200180612188602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906118a35750141592915050565b8015806120855750604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561205757600080fd5b505afa15801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b5051155b6120c05760405162461bcd60e51b81526004018080602001828103825260368152602001806121b26036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610a62908490611dd956fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820482c2071aaae0822d70ed05bd14d728a54e131ceeea891018c2f5d006cf2550f64736f6c634300051100325361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000c0f0ab9767ec5117cc640127255fad744ddc55b00000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e7800000000000000000000000071151b7ae78459093f1b29583f2b24aef603cb700000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000005f635dd00000000000000000000000000000000000000000000000000000000000127500
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102c75760003560e01c806380faa57d1161017b578063c31c9c07116100d8578063e72c3c421161008c578063e9fad8ee11610071578063e9fad8ee146105a1578063ebe2b12b146105a9578063f2fde38b146105b1576102c7565b8063e72c3c4214610573578063e9cbd82214610599576102c7565b8063c8f33c91116100bd578063c8f33c911461055b578063cd3daf9d14610563578063df136d651461056b576102c7565b8063c31c9c071461054b578063c675ccc114610553576102c7565b80638da588971161012f5780638f32d59b116101145780638f32d59b1461050a578063a66f42c014610526578063a694fc3a1461052e576102c7565b80638da58897146104fa5780638da5cb5b14610502576102c7565b80638b876347116101605780638b876347146104a35780638b8d67d5146104c95780638c445cab146104d1576102c7565b806380faa57d146104935780638112643c1461049b576102c7565b80633d18b9121161022957806364044fd9116101dd57806370a08231116101c257806370a082311461045d578063715018a6146104835780637b0a47ee1461048b576102c7565b806364044fd91461042f578063683dd19114610455576102c7565b806351ed6a301161020e57806351ed6a30146104175780635be4d8001461041f57806361d027b314610427576102c7565b80633d18b912146104075780634c5be6f31461040f576102c7565b80632e1a7d4d116102805780633a589b97116102655780633a589b97146103a05780633ba35551146103c45780633c6b16ab146103ea576102c7565b80632e1a7d4d146103795780633004b46614610398576102c7565b80630d7373a7116102b15780630d7373a71461032a5780630fb5a6b41461036957806318160ddd14610371576102c7565b80628cc262146102cc5780630700037d14610304575b600080fd5b6102f2600480360360208110156102e257600080fd5b50356001600160a01b03166105d7565b60408051918252519081900360200190f35b6102f26004803603602081101561031a57600080fd5b50356001600160a01b031661066d565b6103506004803603602081101561034057600080fd5b50356001600160a01b031661067f565b6040805192835260208301919091528051918290030190f35b6102f26107ea565b6102f26107f0565b6103966004803603602081101561038f57600080fd5b50356107f7565b005b6102f2610a67565b6103a8610a6d565b604080516001600160a01b039092168252519081900360200190f35b6102f2600480360360208110156103da57600080fd5b50356001600160a01b0316610a7c565b6103966004803603602081101561040057600080fd5b5035610a8e565b610396610baf565b6102f2610c6d565b6103a8610c73565b6102f2610c82565b6103a8610c88565b6102f26004803603602081101561044557600080fd5b50356001600160a01b0316610c97565b6102f2610ca9565b6102f26004803603602081101561047357600080fd5b50356001600160a01b0316610caf565b610396610cca565b6102f2610d85565b6102f2610d8b565b6102f2610d9e565b6102f2600480360360208110156104b957600080fd5b50356001600160a01b0316610da4565b6102f2610db6565b610396600480360360608110156104e757600080fd5b5080359060208101359060400135610dbc565b6102f2610e23565b6103a8610e29565b610512610e38565b604080519115158252519081900360200190f35b610396610e5e565b6103966004803603602081101561054457600080fd5b50356113c9565b6103a86115c9565b6102f26115d8565b6102f26115de565b6102f26115e4565b6102f2611632565b6102f26004803603602081101561058957600080fd5b50356001600160a01b0316611638565b6103a861164a565b610396611659565b6102f261166c565b610396600480360360208110156105c757600080fd5b50356001600160a01b0316611672565b6001600160a01b038116600090815260106020908152604080832054600f909252822054610667919061065b90670de0b6b3a76400009061064f9061062a9061061e6115e4565b9063ffffffff6116d416565b6001600160a01b0388166000908152601360205260409020549063ffffffff61171d16565b9063ffffffff61177616565b9063ffffffff6117b816565b92915050565b60106020526000908152604090205481565b60008060115460001415610698575060009050806107e5565b6001600160a01b0383166000908152601460205260409020546106dd606461064f6106ce8261065b86600563ffffffff61171d16565b6016549063ffffffff61171d16565b92506106f081600163ffffffff6117b816565b9050601754811061073f5761073c606461064f61072f606461065b601854610723601754896116d490919063ffffffff16565b9063ffffffff61171d16565b869063ffffffff61171d16565b92505b610769836103cf6103e8610764611c2061064f601254426116d490919063ffffffff16565b611812565b9250610791606461064f6107888261065b86600563ffffffff61171d16565b61072388610caf565b6001600160a01b038516600090815260136020526040812054919350906107bf90849063ffffffff6116d416565b90506107e060115461064f601954610723858961171d90919063ffffffff16565b935050505b915091565b600a5481565b6001545b90565b336108006115e4565b600e5561080b610d8b565b600d556001600160a01b0381161561085257610826816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b6009544210156108a9576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116108fe576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b610907826118ab565b33600081815260146020526040812081905561092391906118f4565b604080513360248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad360a500000000000000000000000000000000000000000000000000000000017815291518151600093309392918291908083835b602083106109d957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161099c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610a3b576040519150601f19603f3d011682016040523d82523d6000602084013e610a40565b606091505b5050600054909150610a62906001600160a01b0316338563ffffffff6119a316565b505050565b60125481565b6004546001600160a01b031681565b60136020526000908152604090205481565b610a96610e38565b610ae7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000610af16115e4565b600e55610afc610d8b565b600d556001600160a01b03811615610b4357610b17816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b600a54610b5790839063ffffffff61177616565b600c55600954600d819055600a54610b75919063ffffffff6117b816565b600b556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b33610bb86115e4565b600e55610bc3610d8b565b600d556001600160a01b03811615610c0a57610bde816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b600954421015610c61576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610c6a33611a23565b50565b60175481565b6000546001600160a01b031681565b60085481565b6005546001600160a01b031681565b60156020526000908152604090205481565b60195481565b6001600160a01b031660009081526002602052604090205490565b610cd2610e38565b610d23576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5481565b6000610d9942600b54611aa8565b905090565b60115481565b600f6020526000908152604090205481565b60185481565b610dc4610e38565b610e15576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b601792909255601855601955565b60095481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610e4f611abe565b6001600160a01b031614905090565b33610e676115e4565b600e55610e72610d8b565b600d556001600160a01b03811615610eb957610e8d816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b600954421015610f10576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152601560205260409020544211610f73576040805162461bcd60e51b815260206004820152601460248201527f6561726c7920626f6f7374207075726368617365000000000000000000000000604482015290519081900360640190fd5b600080610f7f3361067f565b91509150610f8d3382611ac2565b610f9633611a23565b600454610fb4906001600160a01b031633308563ffffffff611b6016565b600480546001600160a01b031690600090610fd690859063ffffffff61177616565b9050816001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561101e57600080fd5b505af1158015611032573d6000803e3d6000fd5b5050505061104981856116d490919063ffffffff16565b6040805160038082526080820190925291955060609190602082018380388339505060045482519293506001600160a01b03169183915060009061108957fe5b6001600160a01b03928316602091820292909201810191909152600654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b1580156110f657600080fd5b505afa15801561110a573d6000803e3d6000fd5b505050506040513d602081101561112057600080fd5b505181518290600190811061113157fe5b6001600160a01b03928316602091820292909201015260075482519116908290600290811061115c57fe5b6001600160a01b039283166020918202929092018101919091526006546040517f38ed17390000000000000000000000000000000000000000000000000000000081526004810189815260006024830181905230606484810182905242016084850181905260a060448601908152895160a4870152895160609997909716976338ed1739978f9795968c9690939260c49091019187820191028083838b5b838110156112125781810151838201526020016111fa565b505050509050019650505050505050600060405180830381600087803b15801561123b57600080fd5b505af115801561124f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561129657600080fd5b81019080805160405193929190846401000000008211156112b657600080fd5b9083019060208201858111156112cb57600080fd5b82518660208202830111640100000000821117156112e857600080fd5b82525081516020918201928201910280838360005b838110156113155781810151838201526020016112fd565b5050505091909101604052505060055460075484519495506001600160a01b03918216946347e7ef249450911691508490600290811061135157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156113a857600080fd5b505af11580156113bc573d6000803e3d6000fd5b5050505050505050505050565b336113d26115e4565b600e556113dd610d8b565b600d556001600160a01b03811615611424576113f8816105d7565b6001600160a01b038216600090815260106020908152604080832093909355600e54600f909152919020555b60095442101561147b576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116114d0576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6114d982611bee565b6008546114e533610caf565b1115806115075750600954611503906201518063ffffffff6117b816565b4210155b611558576040805162461bcd60e51b815260206004820152601260248201527f746f6b656e206361702065786365656465640000000000000000000000000000604482015290519081900360640190fd5b33600090815260136020526040902054611578908363ffffffff6117b816565b3360009081526013602052604090205560115461159b908363ffffffff6117b816565b6011556115a733611a23565b6000546115c5906001600160a01b031633308563ffffffff611b6016565b5050565b6006546001600160a01b031681565b60165481565b600d5481565b6000601154600014156115fa5750600e546107f4565b610d9961162360115461064f670de0b6b3a7640000610723600c54610723600d5461061e610d8b565b600e549063ffffffff6117b816565b600e5481565b60146020526000908152604090205481565b6007546001600160a01b031681565b61166a61166533610caf565b6107f7565b565b600b5481565b61167a610e38565b6116cb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610c6a81611c24565b600061171683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cdd565b9392505050565b60008261172c57506000610667565b8282028284828161173957fe5b04146117165760405162461bcd60e51b81526004018080602001828103825260218152602001806121676021913960400191505060405180910390fd5b600061171683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d74565b600082820183811015611716576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000816118205750836118a3565b81600114156118445761183d8361064f878763ffffffff61171d16565b90506118a3565b8415801561185157508115155b1561185e575060006118a3565b60006118748461064f888863ffffffff61171d16565b905060015b8381101561189f576118958561064f848963ffffffff61171d16565b9150600101611879565b5090505b949350505050565b6001546118be908263ffffffff6116d416565b600155336000908152600260205260409020546118e1908263ffffffff6116d416565b3360009081526002602052604090205550565b6001600160a01b03821660009081526013602052604090205460115461191f9163ffffffff6116d416565b6011558061196e576001600160a01b03821660009081526014602052604090205461196b9060649061064f9061196290839061065b90600563ffffffff61171d16565b61072386610caf565b90505b6001600160a01b038216600090815260136020526040902081905560115461199c908263ffffffff6117b816565b6011555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a62908490611dd9565b6000611a2e826105d7565b905080156115c5576001600160a01b03808316600090815260106020526040812055600454611a659116838363ffffffff6119a316565b6040805182815290516001600160a01b038416917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25050565b6000818310611ab75781611716565b5090919050565b3390565b6001600160a01b038216600090815260146020526040902054611aec90600163ffffffff6117b816565b6001600160a01b038316600090815260146020526040902055611b0f82826118f4565b611b2142610e1063ffffffff6117b816565b6001600160a01b038316600090815260156020526040902055601654611b559060649061064f90606563ffffffff61171d16565b601655505042601255565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611be8908590611dd9565b50505050565b600154611c01908263ffffffff6117b816565b600155336000908152600260205260409020546118e1908263ffffffff6117b816565b6001600160a01b038116611c695760405162461bcd60e51b81526004018080602001828103825260268152602001806121416026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008184841115611d6c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d31578181015183820152602001611d19565b50505050905090810190601f168015611d5e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611dc35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d31578181015183820152602001611d19565b506000838581611dcf57fe5b0495945050505050565b611deb826001600160a01b0316611faf565b611e3c576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611e9857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e5b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611efa576040519150601f19603f3d011682016040523d82523d6000602084013e611eff565b606091505b509150915081611f56576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611be857808060200190516020811015611f7257600080fd5b5051611be85760405162461bcd60e51b815260040180806020018281038252602a815260200180612188602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906118a35750141592915050565b8015806120855750604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561205757600080fd5b505afa15801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b5051155b6120c05760405162461bcd60e51b81526004018080602001828103825260368152602001806121b26036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610a62908490611dd956fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820482c2071aaae0822d70ed05bd14d728a54e131ceeea891018c2f5d006cf2550f64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000c0f0ab9767ec5117cc640127255fad744ddc55b00000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e7800000000000000000000000071151b7ae78459093f1b29583f2b24aef603cb700000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000005f635dd00000000000000000000000000000000000000000000000000000000000127500
-----Decoded View---------------
Arg [0] : _tokenCapAmount (uint256): 10000000000000000000000
Arg [1] : _stakeToken (address): 0xc0F0aB9767Ec5117CC640127255FAd744DdC55B0
Arg [2] : _boostToken (address): 0x3e780920601D61cEdb860fe9c4a90c9EA6A35E78
Arg [3] : _treasury (address): 0x71151b7AE78459093f1B29583f2B24aEF603cB70
Arg [4] : _swapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [5] : _starttime (uint256): 1600347600
Arg [6] : _duration (uint256): 1209600
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000
Arg [1] : 000000000000000000000000c0f0ab9767ec5117cc640127255fad744ddc55b0
Arg [2] : 0000000000000000000000003e780920601d61cedb860fe9c4a90c9ea6a35e78
Arg [3] : 00000000000000000000000071151b7ae78459093f1b29583f2b24aef603cb70
Arg [4] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [5] : 000000000000000000000000000000000000000000000000000000005f635dd0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000127500
Deployed Bytecode Sourcemap
24029:11126:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24029:11126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27137:271;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27137:271:0;-1:-1:-1;;;;;27137:271:0;;:::i;:::-;;;;;;;;;;;;;;;;24535:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24535:42:0;-1:-1:-1;;;;;24535:42:0;;:::i;27416:1481::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27416:1481:0;-1:-1:-1;;;;;27416:1481:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24289:23;;;:::i;22134:91::-;;;:::i;29702:759::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29702:759:0;;:::i;:::-;;24750:32;;;:::i;24087:24::-;;;:::i;:::-;;;;-1:-1:-1;;;;;24087:24:0;;;;;;;;;;;;;;24823:50;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24823:50:0;-1:-1:-1;;;;;24823:50:0;;:::i;32539:293::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32539:293:0;;:::i;30469:105::-;;;:::i;25160:34::-;;;:::i;21922:24::-;;;:::i;24222:29::-;;;:::i;24118:25::-;;;:::i;24982:56::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24982:56:0;-1:-1:-1;;;;;24982:56:0;;:::i;25244:32::-;;;:::i;22233:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22233:110:0;-1:-1:-1;;;;;22233:110:0;;:::i;9597:140::-;;;:::i;24357:29::-;;;:::i;26560:131::-;;;:::i;24710:33::-;;;:::i;24471:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24471:57:0;-1:-1:-1;;;;;24471:57:0;;:::i;25201:36::-;;;:::i;30665:304::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30665:304:0;;;;;;;;;;;;:::i;24258:24::-;;;:::i;8786:79::-;;;:::i;9152:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;30981:1550;;;:::i;28988:706::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28988:706:0;;:::i;24150:28::-;;;:::i;25113:40::-;;;:::i;24393:29::-;;;:::i;26699:430::-;;;:::i;24429:35::-;;;:::i;24880:52::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24880:52:0;-1:-1:-1;;;;;24880:52:0;;:::i;24185:24::-;;;:::i;30582:75::-;;;:::i;24319:31::-;;;:::i;9892:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9892:109:0;-1:-1:-1;;;;;9892:109:0;;:::i;27137:271::-;-1:-1:-1;;;;;27383:16:0;;27191:7;27383:16;;;:7;:16;;;;;;;;;27299:22;:31;;;;;;27231:169;;27383:16;27231:129;;27355:4;;27231:101;;27278:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;-1:-1:-1;;;;;27231:24:0;;;;;;:15;:24;;;;;;;:101;:46;:101;:::i;:::-;:123;:129;:123;:129;:::i;:::-;:151;:169;:151;:169;:::i;:::-;27211:189;27137:271;-1:-1:-1;;27137:271:0:o;24535:42::-;;;;;;;;;;;;;:::o;27416:1481::-;27485:20;27507:23;27552:18;;27574:1;27552:23;27548:41;;;-1:-1:-1;27585:1:0;;-1:-1:-1;27585:1:0;27577:12;;27548:41;-1:-1:-1;;;;;27694:23:0;;27669:22;27694:23;;;:17;:23;;;;;;27743:63;27802:3;27743:54;27766:30;27802:3;27766:21;27694:23;27785:1;27766:21;:18;:21;:::i;:30::-;27743:18;;;:54;:22;:54;:::i;:63::-;27728:78;-1:-1:-1;27878:21:0;:14;27897:1;27878:21;:18;:21;:::i;:::-;27861:38;;28027:14;;28009;:32;28005:210;;28073:130;28199:3;28073:103;28108:67;28171:3;28108:58;28149:16;;28109:34;28128:14;;28109;:18;;:34;;;;:::i;:::-;28108:40;:58;:40;:58;:::i;:67::-;28073:12;;:103;:34;:103;:::i;:130::-;28058:145;;28005:210;28327:83;28331:12;28345:3;28350:4;28356:53;28401:7;28357:38;28377:17;;28357:15;:19;;:38;;;;:::i;28356:53::-;28327:3;:83::i;:::-;28312:98;-1:-1:-1;28570:88:0;28654:3;28570:65;28604:30;28654:3;28604:21;:14;28623:1;28604:21;:18;:21;:::i;:30::-;28570:15;28580:4;28570:9;:15::i;:88::-;-1:-1:-1;;;;;28720:21:0;;28669:28;28720:21;;;:15;:21;;;;;;28552:106;;-1:-1:-1;28669:28:0;28700:42;;28552:106;;28700:42;:19;:42;:::i;:::-;28669:73;;28768:121;28870:18;;28768:83;28839:11;;28768:52;28799:20;28768:12;:30;;:52;;;;:::i;:121::-;28753:136;;27416:1481;;;;;;:::o;24289:23::-;;;;:::o;22134:91::-;22205:12;;22134:91;;:::o;29702:759::-;29756:10;25571:16;:14;:16::i;:::-;25548:20;:39;25615:26;:24;:26::i;:::-;25598:14;:43;-1:-1:-1;;;;;25656:21:0;;;25652:157;;25713:15;25720:7;25713:6;:15::i;:::-;-1:-1:-1;;;;;25694:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25777:20;;25743:22;:31;;;;;;:54;25652:157;25448:9;;25429:15;:28;;25421:49;;;;;-1:-1:-1;;;25421:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29807:1;29798:6;:10;29790:40;;;;;-1:-1:-1;;;29790:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29841:22;29856:6;29841:14;:22::i;:::-;29930:10;29944:1;29912:29;;;:17;:29;;;;;:33;;;30004:42;;29930:10;30004:27;:42::i;:::-;30167:107;;;30249:10;30167:107;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30167:107:0;;;;;;;25:18:-1;;61:17;;30167:107:0;182:15:-1;30167:107:0;179:29:-1;160:49;;30134:151:0;;;;30116:12;;30142:4;;30167:107;30134:151;;;25:18:-1;30134:151:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;30134:151: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;-1:-1;;30410:10:0;;30115:170;;-1:-1:-1;30410:43:0;;-1:-1:-1;;;;;30410:10:0;30434;30446:6;30410:43;:23;:43;:::i;:::-;25481:1;29702:759;;:::o;24750:32::-;;;;:::o;24087:24::-;;;-1:-1:-1;;;;;24087:24:0;;:::o;24823:50::-;;;;;;;;;;;;;:::o;32539:293::-;8998:9;:7;:9::i;:::-;8990:54;;;;;-1:-1:-1;;;8990:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32650:1;25571:16;:14;:16::i;:::-;25548:20;:39;25615:26;:24;:26::i;:::-;25598:14;:43;-1:-1:-1;;;;;25656:21:0;;;25652:157;;25713:15;25720:7;25713:6;:15::i;:::-;-1:-1:-1;;;;;25694:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25777:20;;25743:22;:31;;;;;;:54;25652:157;32694:8;;32683:20;;:6;;:20;:10;:20;:::i;:::-;32670:10;:33;32731:9;;32714:14;:26;;;32780:8;;32766:23;;32731:9;32766:23;:13;:23;:::i;:::-;32751:12;:38;32805:19;;;;;;;;;;;;;;;;;9055:1;32539:293;:::o;30469:105::-;30510:10;25571:16;:14;:16::i;:::-;25548:20;:39;25615:26;:24;:26::i;:::-;25598:14;:43;-1:-1:-1;;;;;25656:21:0;;;25652:157;;25713:15;25720:7;25713:6;:15::i;:::-;-1:-1:-1;;;;;25694:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25777:20;;25743:22;:31;;;;;;:54;25652:157;25448:9;;25429:15;:28;;25421:49;;;;;-1:-1:-1;;;25421:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30544:22;30555:10;30544;:22::i;:::-;30469:105;:::o;25160:34::-;;;;:::o;21922:24::-;;;-1:-1:-1;;;;;21922:24:0;;:::o;24222:29::-;;;;:::o;24118:25::-;;;-1:-1:-1;;;;;24118:25:0;;:::o;24982:56::-;;;;;;;;;;;;;:::o;25244:32::-;;;;:::o;22233:110::-;-1:-1:-1;;;;;22317:18:0;22290:7;22317:18;;;:9;:18;;;;;;;22233:110::o;9597:140::-;8998:9;:7;:9::i;:::-;8990:54;;;;;-1:-1:-1;;;8990:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9680:6;;9659:40;;9696:1;;-1:-1:-1;;;;;9680:6:0;;9659:40;;9696:1;;9659:40;9710:6;:19;;;;;;9597:140::o;24357:29::-;;;;:::o;26560:131::-;26617:7;26644:39;26653:15;26670:12;;26644:8;:39::i;:::-;26637:46;;26560:131;:::o;24710:33::-;;;;:::o;24471:57::-;;;;;;;;;;;;;:::o;25201:36::-;;;;:::o;30665:304::-;8998:9;:7;:9::i;:::-;8990:54;;;;;-1:-1:-1;;;8990:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30845:14;:32;;;;30888:16;:36;30935:11;:26;30665:304::o;24258:24::-;;;;:::o;8786:79::-;8851:6;;-1:-1:-1;;;;;8851:6:0;8786:79;:::o;9152:94::-;9232:6;;9192:4;;-1:-1:-1;;;;;9232:6:0;9216:12;:10;:12::i;:::-;-1:-1:-1;;;;;9216:22:0;;9209:29;;9152:94;:::o;30981:1550::-;31020:10;25571:16;:14;:16::i;:::-;25548:20;:39;25615:26;:24;:26::i;:::-;25598:14;:43;-1:-1:-1;;;;;25656:21:0;;;25652:157;;25713:15;25720:7;25713:6;:15::i;:::-;-1:-1:-1;;;;;25694:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25777:20;;25743:22;:31;;;;;;:54;25652:157;25448:9;;25429:15;:28;;25421:49;;;;;-1:-1:-1;;;25421:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31116:10;31094:33;;;;:21;:33;;;;;;31076:15;:51;31054:121;;;;;-1:-1:-1;;;31054:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31341:21;31364:23;31391:27;31407:10;31391:15;:27::i;:::-;31340:78;;;;31507:39;31518:10;31530:15;31507:10;:39::i;:::-;31567:22;31578:10;31567;:22::i;:::-;31602:10;;:69;;-1:-1:-1;;;;;31602:10:0;31630;31650:4;31657:13;31602:69;:27;:69;:::i;:::-;31751:10;;;-1:-1:-1;;;;;31751:10:0;;31692:33;;31818:20;;:13;;:20;:17;:20;:::i;:::-;31797:41;;31849:18;-1:-1:-1;;;;;31849:23:0;;31873:10;31849:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31849:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31849:35:0;;;;31911:29;31929:10;31911:13;:17;;:29;;;;:::i;:::-;32024:16;;;32038:1;32024:16;;;;;;;;;31895:45;;-1:-1:-1;31992:29:0;;32024:16;;;;31992:29;;105:10:-1;32024:16:0;88:34:-1;-1:-1;;32077:10:0;;32051:15;;;;-1:-1:-1;;;;;;32077:10:0;;32051:15;;-1:-1:-1;32077:10:0;;32051:15;;;;-1:-1:-1;;;;;32051:37:0;;;:15;;;;;;;;;;:37;;;;32117:10;;:17;;;;;;;;:10;;;;;:15;;:17;;;;;32051:15;;32117:17;;;;;:10;:17;;;5:2:-1;;;;30:1;27;20:12;5:2;32117:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32117:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32117:17:0;32099:15;;:12;;32112:1;;32099:15;;;;;;-1:-1:-1;;;;;32099:35:0;;;:15;;;;;;;;;:35;32171:10;;32145:15;;32171:10;;;32145:12;;32158:1;;32145:15;;;;;;-1:-1:-1;;;;;32145:37:0;;;:15;;;;;;;;;;:37;;;;32217:10;;:181;;;;;;;;;;;:10;:181;;;;;;32346:4;32384:3;32217:181;;;;;;32366:15;:21;32217:181;;;;;;;;;;;;;;;;;;;;;32193:21;;32217:10;;;;;:35;;32267:13;;32217:10;;32311:12;;32217:181;;;;;;;;;;;;;;;;:10;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;32217:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32217:181:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32217:181:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;32217:181:0;80:15:-1;;;97:9;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;32217:181:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;32217:181:0;;421:4:-1;412:14;;;;32217:181:0;;;;;412:14:-1;32217:181:0;23: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;;;-1:-1;;;;32217:181:0;;;;;;-1:-1:-1;;32483:8:0;;32500:10;;32512;;32193:205;;-1:-1:-1;;;;;;32483:8:0;;;;:16;;-1:-1:-1;32500:10:0;;;-1:-1:-1;32193:205:0;;32520:1;;32512:10;;;;;;;;;;;;32483:40;;;;;;;;;;;;;-1:-1:-1;;;;;32483:40:0;-1:-1:-1;;;;;32483:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32483:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32483:40:0;;;;25481:1;;;;;;30981:1550;:::o;28988:706::-;29039:10;25571:16;:14;:16::i;:::-;25548:20;:39;25615:26;:24;:26::i;:::-;25598:14;:43;-1:-1:-1;;;;;25656:21:0;;;25652:157;;25713:15;25720:7;25713:6;:15::i;:::-;-1:-1:-1;;;;;25694:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25777:20;;25743:22;:31;;;;;;:54;25652:157;25448:9;;25429:15;:28;;25421:49;;;;;-1:-1:-1;;;25421:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29090:1;29081:6;:10;29073:37;;;;;-1:-1:-1;;;29073:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29121:19;29133:6;29121:11;:19::i;:::-;29227:14;;29202:21;29212:10;29202:9;:21::i;:::-;:39;;:82;;;-1:-1:-1;29264:9:0;;:20;;29278:5;29264:20;:13;:20;:::i;:::-;29245:15;:39;;29202:82;29180:150;;;;;-1:-1:-1;;;29180:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29436:10;29420:27;;;;:15;:27;;;;;;:39;;29452:6;29420:39;:31;:39;:::i;:::-;29406:10;29390:27;;;;:15;:27;;;;;:69;29491:18;;:30;;29514:6;29491:30;:22;:30;:::i;:::-;29470:18;:51;29534:22;29545:10;29534;:22::i;:::-;29624:10;;:62;;-1:-1:-1;;;;;29624:10:0;29652;29672:4;29679:6;29624:62;:27;:62;:::i;:::-;28988:706;;:::o;24150:28::-;;;-1:-1:-1;;;;;24150:28:0;;:::o;25113:40::-;;;;:::o;24393:29::-;;;;:::o;26699:430::-;26746:7;26770:18;;26792:1;26770:23;26766:83;;;-1:-1:-1;26817:20:0;;26810:27;;26766:83;26879:242;26922:184;27087:18;;26922:138;27055:4;26922:106;27017:10;;26922:68;26975:14;;26922:26;:24;:26::i;:184::-;26879:20;;;:242;:24;:242;:::i;24429:35::-;;;;:::o;24880:52::-;;;;;;;;;;;;;:::o;24185:24::-;;;-1:-1:-1;;;;;24185:24:0;;:::o;30582:75::-;30618:31;30627:21;30637:10;30627:9;:21::i;:::-;30618:8;:31::i;:::-;30582:75::o;24319:31::-;;;;:::o;9892:109::-;8998:9;:7;:9::i;:::-;8990:54;;;;;-1:-1:-1;;;8990:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9965:28;9984:8;9965:18;:28::i;2628:136::-;2686:7;2713:43;2717:1;2720;2713:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2706:50;2628:136;-1:-1:-1;;;2628:136:0:o;3544:471::-;3602:7;3847:6;3843:47;;-1:-1:-1;3877:1:0;3870:8;;3843:47;3914:5;;;3918:1;3914;:5;:1;3938:5;;;;;:10;3930:56;;;;-1:-1:-1;;;3930:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4483:132;4541:7;4568:39;4572:1;4575;4568:39;;;;;;;;;;;;;;;;;:3;:39::i;2172:181::-;2230:7;2262:5;;;2286:6;;;;2278:46;;;;;-1:-1:-1;;;2278:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34640:512;34727:7;34751:13;34747:398;;-1:-1:-1;34788:1:0;34781:8;;34747:398;34820:8;34832:1;34820:13;34816:329;;;34857:15;34870:1;34857:8;:1;34863;34857:8;:5;:8;:::i;:15::-;34850:22;;;;34816:329;34903:6;;:23;;;;-1:-1:-1;34913:13:0;;;34903:23;34899:246;;;-1:-1:-1;34950:1:0;34943:8;;34899:246;34993:9;35005:15;35018:1;35005:8;:1;35011;35005:8;:5;:8;:::i;:15::-;34993:27;-1:-1:-1;35052:1:0;35035:75;35059:8;35055:1;:12;35035:75;;;35095:15;35108:1;35095:8;:1;35101;35095:8;:5;:8;:::i;:15::-;35091:19;-1:-1:-1;35069:3:0;;35035:75;;;-1:-1:-1;35132:1:0;-1:-1:-1;34899:246:0;34640:512;;;;;;:::o;22580:224::-;22647:12;;:24;;22664:6;22647:24;:16;:24;:::i;:::-;22632:12;:39;22716:10;22706:21;;;;:9;:21;;;;;;:33;;22732:6;22706:33;:25;:33;:::i;:::-;22692:10;22682:21;;;;:9;:21;;;;;:57;-1:-1:-1;22580:224:0:o;32844:759::-;-1:-1:-1;;;;;33041:21:0;;;;;;:15;:21;;;;;;33018:18;;:45;;;:22;:45;:::i;:::-;32997:18;:66;33195:20;33191:201;;-1:-1:-1;;;;;33331:23:0;;;;;;:17;:23;;;;;;33311:69;;33376:3;;33311:60;;33331:39;;33376:3;;33331:30;;33359:1;33331:30;:27;:30;:::i;:39::-;33311:15;33321:4;33311:9;:15::i;:69::-;33293:87;;33191:201;-1:-1:-1;;;;;33446:21:0;;;;;;:15;:21;;;;;:39;;;33556:18;;:39;;33470:15;33556:39;:22;:39;:::i;:::-;33535:18;:60;-1:-1:-1;;32844:759:0:o;17006:176::-;17115:58;;;-1:-1:-1;;;;;17115:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;17115:58:0;;;;;;;;25:18:-1;;61:17;;17115:58:0;182:15:-1;17138:23:0;179:29:-1;160:49;;17089:85:0;;17108:5;;17089:18;:85::i;34169:257::-;34223:14;34240:12;34247:4;34240:6;:12::i;:::-;34223:29;-1:-1:-1;34267:10:0;;34263:156;;-1:-1:-1;;;;;34294:13:0;;;34310:1;34294:13;;;:7;:13;;;;;:17;34326:10;;:37;;:10;34302:4;34356:6;34326:37;:23;:37;:::i;:::-;34383:24;;;;;;;;-1:-1:-1;;;;;34383:24:0;;;;;;;;;;;;;34169:257;;:::o;497:106::-;555:7;586:1;582;:5;:13;;594:1;582:13;;;-1:-1:-1;590:1:0;;497:106;-1:-1:-1;497:106:0:o;7620:98::-;7700:10;7620:98;:::o;33611:550::-;-1:-1:-1;;;;;33760:23:0;;;;;;:17;:23;;;;;;:30;;33788:1;33760:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;33734:23:0;;;;;;:17;:23;;;;;:56;33803:50;33752:4;33837:15;33803:27;:50::i;:::-;33962:25;:15;33982:4;33962:25;:19;:25;:::i;:::-;-1:-1:-1;;;;;33932:27:0;;;;;;:21;:27;;;;;:55;34069:18;;:36;;34101:3;;34069:27;;34092:3;34069:27;:22;:27;:::i;:36::-;34048:18;:57;-1:-1:-1;;34138:15:0;34118:17;:35;33611:550::o;17190:204::-;17317:68;;;-1:-1:-1;;;;;17317:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;17317:68:0;;;;;;;;25:18:-1;;61:17;;17317:68:0;182:15:-1;17340:27:0;179:29:-1;160:49;;17291:95:0;;17310:5;;17291:18;:95::i;:::-;17190:204;;;;:::o;22351:221::-;22415:12;;:24;;22432:6;22415:24;:16;:24;:::i;:::-;22400:12;:39;22484:10;22474:21;;;;:9;:21;;;;;;:33;;22500:6;22474:33;:25;:33;:::i;10107:229::-;-1:-1:-1;;;;;10181:22:0;;10173:73;;;;-1:-1:-1;;;10173:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10283:6;;10262:38;;-1:-1:-1;;;;;10262:38:0;;;;10283:6;;10262:38;;10283:6;;10262:38;10311:6;:17;;;;-1:-1:-1;;;;;10311:17:0;;;;;;;;;;10107:229::o;3101:192::-;3187:7;3223:12;3215:6;;;;3207:29;;;;-1:-1:-1;;;3207:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23: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;3207:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3259:5:0;;;3101:192::o;5145:345::-;5231:7;5333:12;5326:5;5318:28;;;;-1:-1:-1;;;5318:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5318:28:0;;5357:9;5373:1;5369;:5;;;;;;;5145:345;-1:-1:-1;;;;;5145:345:0:o;19045:1114::-;19649:27;19657:5;-1:-1:-1;;;;;19649:25:0;;:27::i;:::-;19641:71;;;;;-1:-1:-1;;;19641:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19786:12;19800:23;19835:5;-1:-1:-1;;;;;19827:19:0;19847:4;19827:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;19827:25: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;;19785:67:0;;;;19871:7;19863:52;;;;;-1:-1:-1;;;19863:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19932:17;;:21;19928:224;;20074:10;20063:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20063:30:0;20055:85;;;;-1:-1:-1;;;20055:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10962:810;11022:4;11681:20;;11524:66;11721:15;;;;;:42;;-1:-1:-1;11740:23:0;;;11713:51;-1:-1:-1;;10962:810:0:o;17402:621::-;17772:10;;;17771:62;;-1:-1:-1;17788:39:0;;;;;;17812:4;17788:39;;;;-1:-1:-1;;;;;17788:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;17788:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17788:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17788:39:0;:44;17771:62;17763:152;;;;-1:-1:-1;;;17763:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17952:62;;;-1:-1:-1;;;;;17952:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;17952:62:0;;;;;;;;25:18:-1;;61:17;;17952:62:0;182:15:-1;17975:22:0;179:29:-1;160:49;;17926:89:0;;17945:5;;17926:18;:89::i
Swarm Source
bzzr://482c2071aaae0822d70ed05bd14d728a54e131ceeea891018c2f5d006cf2550f
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.