Contract 0x38f41f346577d1950a6d48b261c31f7c5eb6591d 8
Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
StrategyAribtrumStargateUsdc
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2022-03-28 */ // SPDX-License-Identifier: MIXED // File src/lib/safe-math.sol // License-Identifier: MIT pragma solidity ^0.8.6; /** * @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. */ 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. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @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. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File src/lib/context.sol // License-Identifier: MIT pragma solidity ^0.8.6; /* * @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. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File src/lib/erc20.sol // File: contracts/GSN/Context.sol // License-Identifier: MIT pragma solidity ^0.8.6; // File: contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is 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. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/token/ERC20/ERC20.sol /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor(string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @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 IERC20;` 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) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ 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. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } // File src/interfaces/jar.sol // License-Identifier: MIT pragma solidity ^0.8.6; interface IJar is IERC20 { function token() external view returns (address); function reward() external view returns (address); function claimInsurance() external; // NOTE: Only yDelegatedVault implements this function getRatio() external view returns (uint256); function depositAll() external; function balance() external view returns (uint256); function deposit(uint256) external; function withdrawAll() external; function withdraw(uint256) external; function earn() external; function decimals() external view returns (uint8); } // File src/interfaces/uniswapv2.sol // License-Identifier: MIT pragma solidity ^0.8.6; interface UniswapRouterV2 { function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function createPair(address tokenA, address tokenB) external returns (address pair); } // File src/interfaces/controller.sol // License-Identifier: MIT pragma solidity ^0.8.6; interface IController { function jars(address) external view returns (address); function rewards() external view returns (address); function devfund() external view returns (address); function treasury() external view returns (address); function balanceOf(address) external view returns (uint256); function withdraw(address, uint256) external; function withdrawReward(address, uint256) external; function earn(address, uint256) external; function strategies(address) external view returns (address); } // File src/strategies/arbitrum/strategy-base.sol pragma solidity ^0.8.6; // Strategy Contract Basics abstract contract StrategyBase { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; // Perfomance fees - start with 20% uint256 public performanceTreasuryFee = 0; uint256 public constant performanceTreasuryMax = 10000; uint256 public performanceDevFee = 0; uint256 public constant performanceDevMax = 10000; // Withdrawal fee 0% // - 0% to treasury // - 0% to dev fund uint256 public withdrawalTreasuryFee = 0; uint256 public constant withdrawalTreasuryMax = 100000; uint256 public withdrawalDevFundFee = 0; uint256 public constant withdrawalDevFundMax = 100000; // How much Reward tokens to keep? uint256 public keepReward = 420; uint256 public constant keepRewardMax = 10000; // Tokens address public want; address public constant weth = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; // User accounts address public governance; address public controller; address public strategist; address public timelock; // Dex address public sushiRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; mapping(address => bool) public harvesters; constructor( address _want, address _governance, address _strategist, address _controller, address _timelock ) { require(_want != address(0)); require(_governance != address(0)); require(_strategist != address(0)); require(_controller != address(0)); require(_timelock != address(0)); want = _want; governance = _governance; strategist = _strategist; controller = _controller; timelock = _timelock; } // **** Modifiers **** // modifier onlyBenevolent() { require( harvesters[msg.sender] || msg.sender == governance || msg.sender == strategist ); _; } // **** Views **** // function balanceOfWant() public view returns (uint256) { return IERC20(want).balanceOf(address(this)); } function balanceOfPool() public view virtual returns (uint256); function balanceOf() public view returns (uint256) { return balanceOfWant().add(balanceOfPool()); } function getName() external pure virtual returns (string memory); // **** Setters **** // function whitelistHarvesters(address[] calldata _harvesters) external { require( msg.sender == governance || msg.sender == strategist || harvesters[msg.sender], "not authorized" ); for (uint256 i = 0; i < _harvesters.length; i++) { harvesters[_harvesters[i]] = true; } } function revokeHarvesters(address[] calldata _harvesters) external { require( msg.sender == governance || msg.sender == strategist, "not authorized" ); for (uint256 i = 0; i < _harvesters.length; i++) { harvesters[_harvesters[i]] = false; } } function setWithdrawalDevFundFee(uint256 _withdrawalDevFundFee) external { require(msg.sender == timelock, "!timelock"); withdrawalDevFundFee = _withdrawalDevFundFee; } function setWithdrawalTreasuryFee(uint256 _withdrawalTreasuryFee) external { require(msg.sender == timelock, "!timelock"); withdrawalTreasuryFee = _withdrawalTreasuryFee; } function setPerformanceDevFee(uint256 _performanceDevFee) external { require(msg.sender == timelock, "!timelock"); performanceDevFee = _performanceDevFee; } function setPerformanceTreasuryFee(uint256 _performanceTreasuryFee) external { require(msg.sender == timelock, "!timelock"); performanceTreasuryFee = _performanceTreasuryFee; } function setStrategist(address _strategist) external { require(msg.sender == governance, "!governance"); strategist = _strategist; } function setGovernance(address _governance) external { require(msg.sender == governance, "!governance"); governance = _governance; } function setTimelock(address _timelock) external { require(msg.sender == timelock, "!timelock"); timelock = _timelock; } function setController(address _controller) external { require(msg.sender == timelock, "!timelock"); controller = _controller; } // **** State mutations **** // function deposit() public virtual; // Controller only function for creating additional rewards from dust function withdraw(IERC20 _asset) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); require(want != address(_asset), "want"); balance = _asset.balanceOf(address(this)); _asset.safeTransfer(controller, balance); } // Withdraw partial funds, normally used with a jar withdrawal function withdraw(uint256 _amount) external { require(msg.sender == controller, "!controller"); uint256 _balance = IERC20(want).balanceOf(address(this)); if (_balance < _amount) { _amount = _withdrawSome(_amount.sub(_balance)); _amount = _amount.add(_balance); } uint256 _feeDev = _amount.mul(withdrawalDevFundFee).div( withdrawalDevFundMax ); IERC20(want).safeTransfer(IController(controller).devfund(), _feeDev); uint256 _feeTreasury = _amount.mul(withdrawalTreasuryFee).div( withdrawalTreasuryMax ); IERC20(want).safeTransfer( IController(controller).treasury(), _feeTreasury ); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, _amount.sub(_feeDev).sub(_feeTreasury)); } // Withdraw funds, used to swap between strategies function withdrawForSwap(uint256 _amount) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawSome(_amount); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); IERC20(want).safeTransfer(_jar, balance); } // Withdraw all funds, normally used when migrating strategies function withdrawAll() external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawAll(); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, balance); } function _withdrawAll() internal { _withdrawSome(balanceOfPool()); } function _withdrawSome(uint256 _amount) internal virtual returns (uint256); function harvest() public virtual; // **** Emergency functions **** function execute(address _target, bytes memory _data) public payable returns (bytes memory response) { require(msg.sender == timelock, "!timelock"); require(_target != address(0), "!target"); // call contract in current context assembly { let succeeded := delegatecall( sub(gas(), 5000), _target, add(_data, 0x20), mload(_data), 0, 0 ) let size := returndatasize() response := mload(0x40) mstore( 0x40, add(response, and(add(add(size, 0x20), 0x1f), not(0x1f))) ) mstore(response, size) returndatacopy(add(response, 0x20), 0, size) switch iszero(succeeded) case 1 { // throw if delegatecall failed revert(add(response, 0x20), size) } } } // **** Internal functions **** function _swapSushiswap( address _from, address _to, uint256 _amount ) internal { require(_to != address(0)); address[] memory path; if (_from == weth || _to == weth) { path = new address[](2); path[0] = _from; path[1] = _to; } else { path = new address[](3); path[0] = _from; path[1] = weth; path[2] = _to; } IERC20(_from).safeApprove(sushiRouter, 0); IERC20(_from).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 0, path, address(this), block.timestamp.add(60) ); } function _swapSushiswapWithPath(address[] memory path, uint256 _amount) internal { require(path[1] != address(0)); IERC20(path[0]).safeApprove(sushiRouter, 0); IERC20(path[0]).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 0, path, address(this), block.timestamp.add(60) ); } function _distributePerformanceFeesAndDeposit() internal { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { // Treasury fees IERC20(want).safeTransfer( IController(controller).treasury(), _want.mul(performanceTreasuryFee).div(performanceTreasuryMax) ); // Performance fee IERC20(want).safeTransfer( IController(controller).devfund(), _want.mul(performanceDevFee).div(performanceDevMax) ); deposit(); } } function _distributePerformanceFeesBasedAmountAndDeposit(uint256 _amount) internal { uint256 _want = IERC20(want).balanceOf(address(this)); if (_amount > _want) { _amount = _want; } if (_amount > 0) { // Treasury fees IERC20(want).safeTransfer( IController(controller).treasury(), _amount.mul(performanceTreasuryFee).div(performanceTreasuryMax) ); // Performance fee IERC20(want).safeTransfer( IController(controller).devfund(), _amount.mul(performanceDevFee).div(performanceDevMax) ); deposit(); } } } // File src/interfaces/star-chef.sol // License-Identifier: MIT pragma solidity ^0.8.6; interface IStarchef { struct UserInfo { uint256 amount; uint256 rewardDebt; } function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256); function deposit(uint256 pid, uint256 amount) external; function withdraw(uint256 pid, uint256 amount) external; function pendingStargate(uint256 _pid, address _user) external view returns (uint256); } // File src/interfaces/balancer.sol // License-Identifier: MIT pragma solidity ^0.8.6; interface IAsset {} interface IBalancerVault { enum SwapKind { GIVEN_IN, GIVEN_OUT } struct FundManagement { address sender; bool fromInternalBalance; address payable recipient; bool toInternalBalance; } struct SingleSwap { bytes32 poolId; SwapKind kind; IAsset assetIn; IAsset assetOut; uint256 amount; bytes userData; } struct BatchSwapStep { bytes32 poolId; uint256 assetInIndex; uint256 assetOutIndex; uint256 amount; bytes userData; } function swap( SingleSwap calldata singleSwap, FundManagement calldata funds, uint256 limit, uint256 deadline ) external payable returns (uint256 amountCalculated); function batchSwap( SwapKind kind, BatchSwapStep[] calldata swaps, IAsset[] calldata assets, FundManagement calldata funds, int256[] calldata limits, uint256 deadline ) external payable returns (int256[] memory assetDeltas); } // File src/strategies/arbitrum/strategy-stargate-farm-base.sol pragma solidity ^0.8.6; interface IStarRouter { function addLiquidity( uint256 _poolId, uint256 _amountLD, address _to ) external; } abstract contract StrategyStargateFarmBase is StrategyBase { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; // Token addresses address public constant stg = 0x6694340fc020c5E6B96567843da2df01b2CE1eb6; address public constant starchef = 0xeA8DfEE1898a7e0a59f7527F076106d7e44c2176; address public constant starRouter = 0x53Bf833A5d6c4ddA888F69c22C88C9f356a41614; // Balancer Vault Address address public vault = 0xBA12222222228d8Ba445958a75a0704d566BF2C8; bytes32 public balancerPool; address public underlying; // How much reward tokens to keep? uint24 public constant poolFee = 3000; mapping(address => address[]) public uniswapRoutes; uint256 public poolId; // poolId on staking contract uint256 public lpPoolId; // poolId on Stargate router constructor( bytes32 _balancerPool, address _lp, uint256 _lpPoolId, uint256 _poolId, address _underlying, address _governance, address _strategist, address _controller, address _timelock ) StrategyBase(_lp, _governance, _strategist, _controller, _timelock) { balancerPool = _balancerPool; poolId = _poolId; lpPoolId = _lpPoolId; underlying = _underlying; sushiRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; IERC20(underlying).approve(starRouter, type(uint256).max); IERC20(stg).approve(vault, type(uint256).max); IERC20(want).approve(starchef, type(uint256).max); } function balanceOfPool() public view override returns (uint256) { (uint256 amount, ) = IStarchef(starchef).userInfo( poolId, address(this) ); return amount; } function getHarvestable() external view returns (uint256) { return IStarchef(starchef).pendingStargate(poolId, address(this)); } // **** Setters **** function deposit() public override { uint128 _want = uint128(IERC20(want).balanceOf(address(this))); if (_want > 0) { IStarchef(starchef).deposit(poolId, _want); } } function _withdrawSome(uint256 _amount) internal override returns (uint256) { IStarchef(starchef).withdraw(poolId, _amount); return _amount; } // **** State Mutations **** function harvest() public override { IStarchef(starchef).deposit(poolId, 0); uint256 _stg = IERC20(stg).balanceOf(address(this)); if (_stg == 0) return; uint256 _keepReward = _stg.mul(keepReward).div(keepRewardMax); IERC20(stg).safeTransfer( IController(controller).treasury(), _keepReward ); _stg = _stg.sub(_keepReward); //Allow Balancer to sell rewards IERC20(stg).safeApprove(vault, 0); IERC20(stg).safeApprove(vault, _stg); IBalancerVault.SingleSwap memory swapParams = IBalancerVault .SingleSwap({ poolId: balancerPool, kind: IBalancerVault.SwapKind.GIVEN_IN, assetIn: IAsset(stg), assetOut: IAsset(underlying), amount: _stg, userData: "0x" }); IBalancerVault.FundManagement memory funds = IBalancerVault .FundManagement({ sender: address(this), recipient: payable(address(this)), fromInternalBalance: false, toInternalBalance: false }); IBalancerVault(vault).swap(swapParams, funds, 1, block.timestamp + 60); uint256 _underlying = IERC20(underlying).balanceOf(address(this)); // Deposit stablecoin liquidity IStarRouter(starRouter).addLiquidity( lpPoolId, _underlying, address(this) ); deposit(); } } // File src/strategies/arbitrum/stargate/strategy-stargate-usdc.sol // License-Identifier: MIT pragma solidity ^0.8.6; contract StrategyAribtrumStargateUsdc is StrategyStargateFarmBase { // Token addresses address public constant _lp = 0x892785f33CdeE22A30AEF750F285E18c18040c3e; address public constant _underlying = 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8; address public usdc = 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8; uint256 public constant _lpPoolId = 1; uint256 public constant _poolId = 0; bytes32 public _balancerPool = 0x3a4c6d2404b5eb14915041e01f63200a82f4a343000200000000000000000065; constructor( address _governance, address _strategist, address _controller, address _timelock ) StrategyStargateFarmBase( _balancerPool, _lp, _lpPoolId, _poolId, _underlying, _governance, _strategist, _controller, _timelock ) { uniswapRoutes[_underlying] = [stg, usdc]; } // **** Views **** function getName() external pure override returns (string memory) { return "StrategyAribtrumStargateUsdc"; } }
[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_timelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"_balancerPool","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lpPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfWant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balancerPool","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"response","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getHarvestable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"harvesters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepRewardMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"revokeHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceDevFee","type":"uint256"}],"name":"setPerformanceDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceTreasuryFee","type":"uint256"}],"name":"setPerformanceTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalDevFundFee","type":"uint256"}],"name":"setWithdrawalDevFundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalTreasuryFee","type":"uint256"}],"name":"setWithdrawalTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"starRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"starchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stg","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"uniswapRoutes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"whitelistHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawForSwap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalDevFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalDevFundMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000808055600181905560028190556003556101a4600455600a80546001600160a01b0319908116731b02da8cb0d097eb8d57a175b88c7d8b4799750617909155600c8054821673ba12222222228d8ba445958a75a0704d566bf2c81790556012805490911673ff970a61a04b1ca14834a43f5de4533ebddb5cc81790557f3a4c6d2404b5eb14915041e01f63200a82f4a343000200000000000000000065601355348015620000b357600080fd5b5060405162002b9938038062002b99833981016040819052620000d691620004cc565b60135473892785f33cdee22a30aef750f285e18c18040c3e6001600073ff970a61a04b1ca14834a43f5de4533ebddb5cc88888888887848484846001600160a01b0384166200012457600080fd5b6001600160a01b0383166200013857600080fd5b6001600160a01b0382166200014c57600080fd5b6001600160a01b0381166200016057600080fd5b600580546001600160a01b03199081166001600160a01b03978816179091556006805482169587169590951790945560088054851693861693909317909255600780548416918516919091179055600980548316918416919091179055600d8b905560108890556011899055600e805482169288169283179055600a805473f491e7b69e4244ad4002bc14e878a34207e38c29921691909117905560405163095ea7b360e01b81527353bf833a5d6c4dda888f69c22c88c9f356a416146004820152600019602482015263095ea7b3906044016020604051808303816000875af115801562000253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000279919062000529565b50600c5460405163095ea7b360e01b81526001600160a01b0390911660048201526000196024820152736694340fc020c5e6b96567843da2df01b2ce1eb69063095ea7b3906044016020604051808303816000875af1158015620002e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000307919062000529565b5060055460405163095ea7b360e01b815273ea8dfee1898a7e0a59f7527f076106d7e44c2176600482015260001960248201526001600160a01b039091169063095ea7b3906044016020604051808303816000875af11580156200036f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000395919062000529565b505060408051808201909152736694340fc020c5e6b96567843da2df01b2ce1eb681526012546001600160a01b031660208083019190915273ff970a61a04b1ca14834a43f5de4533ebddb5cc8600052600f90526200042398507ff3c52ce1d0fc53099708f0f6d73416900f959503d9eee3c402422d0c5fba3bd297509550600294506200042e9350505050565b505050505062000554565b82805482825590600052602060002090810192821562000486579160200282015b828111156200048657825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200044f565b506200049492915062000498565b5090565b5b8082111562000494576000815560010162000499565b80516001600160a01b0381168114620004c757600080fd5b919050565b60008060008060808587031215620004e357600080fd5b620004ee85620004af565b9350620004fe60208601620004af565b92506200050e60408601620004af565b91506200051e60608601620004af565b905092959194509250565b6000602082840312156200053c57600080fd5b815180151581146200054d57600080fd5b9392505050565b61263580620005646000396000f3fe6080604052600436106103695760003560e01c8063776da470116101c6578063c6223e26116100f7578063e956dcd711610095578063fba7ae9d1161006f578063fba7ae9d14610989578063fbfa77cf1461099f578063fe1f8f7a146105ed578063feee3da5146109bf57600080fd5b8063e956dcd714610919578063ea69d3c914610941578063f77c47911461096957600080fd5b8063d0e30db0116100d1578063d0e30db0146108cf578063d33219b4146108e4578063d810252914610904578063e80028bf1461052e57600080fd5b8063c6223e261461086f578063c65e32421461088f578063c7b9d530146108af57600080fd5b80639e57366511610164578063b1f55bd41161013e578063b1f55bd414610804578063bdacb30314610824578063c1a3d44c14610844578063c39d43341461085957600080fd5b80639e5736651461079c578063ab033ea9146107c4578063ab73e433146107e457600080fd5b806387976583116101a0578063879765831461071057806388993f22146107505780638ccdbb701461076657806392eefe9b1461077c57600080fd5b8063776da470146106c557806382378594146106db578063853828b6146106fb57600080fd5b8063358ae7d0116102a057806351cff8d91161023e5780635aa6e675116102185780635aa6e675146106505780636d13582c146106705780636f307dc314610690578063722713f7146106b057600080fd5b806351cff8d91461060457806351f3d0b81461062457806359739ec41461063a57600080fd5b80633fc8cef31161027a5780633fc8cef3146105b05780634641257d146105d8578063479119be146105ed5780634fe809cc1461052e57600080fd5b8063358ae7d0146105645780633e0dc34e1461057a5780633e413bee1461059057600080fd5b806317d7de7c1161030d5780631fe4a686116102e75780631fe4a686146104ee578063249fb9b41461050e57806326e886c61461052e5780632e1a7d4d1461054457600080fd5b806317d7de7c1461046c5780631cff79cd146104bb5780631f1fcd51146104ce57600080fd5b8063089fe6aa11610349578063089fe6aa146103f65780630e364fb6146104205780630eed07e414610442578063115880861461045757600080fd5b80625a3ff11461036e578062b70eb7146103b35780630547104d146103d3575b600080fd5b34801561037a57600080fd5b5061039673892785f33cdee22a30aef750f285e18c18040c3e81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103bf57600080fd5b506103966103ce36600461214c565b6109e7565b3480156103df57600080fd5b506103e8610a1f565b6040519081526020016103aa565b34801561040257600080fd5b5061040c610bb881565b60405162ffffff90911681526020016103aa565b34801561042c57600080fd5b5061044061043b366004612178565b610aa6565b005b34801561044e57600080fd5b506103e8600181565b34801561046357600080fd5b506103e8610b9c565b34801561047857600080fd5b5060408051808201909152601c81527f5374726174656779417269627472756d5374617267617465557364630000000060208201525b6040516103aa9190612249565b6104ae6104c9366004612272565b610c25565b3480156104da57600080fd5b50600554610396906001600160a01b031681565b3480156104fa57600080fd5b50600854610396906001600160a01b031681565b34801561051a57600080fd5b50610440610529366004612336565b610ce2565b34801561053a57600080fd5b506103e861271081565b34801561055057600080fd5b5061044061055f366004612336565b610d11565b34801561057057600080fd5b506103e860135481565b34801561058657600080fd5b506103e860105481565b34801561059c57600080fd5b50601254610396906001600160a01b031681565b3480156105bc57600080fd5b506103967382af49447d8a07e3bd95bd0d56f35241523fbab181565b3480156105e457600080fd5b50610440610fcb565b3480156105f957600080fd5b506103e8620186a081565b34801561061057600080fd5b506103e861061f36600461234f565b6113cc565b34801561063057600080fd5b506103e860035481565b34801561064657600080fd5b506103e860005481565b34801561065c57600080fd5b50600654610396906001600160a01b031681565b34801561067c57600080fd5b50600a54610396906001600160a01b031681565b34801561069c57600080fd5b50600e54610396906001600160a01b031681565b3480156106bc57600080fd5b506103e86114ca565b3480156106d157600080fd5b506103e8600d5481565b3480156106e757600080fd5b506104406106f6366004612336565b6114e5565b34801561070757600080fd5b506103e8611514565b34801561071c57600080fd5b5061074061072b36600461234f565b600b6020526000908152604090205460ff1681565b60405190151581526020016103aa565b34801561075c57600080fd5b506103e860015481565b34801561077257600080fd5b506103e860025481565b34801561078857600080fd5b5061044061079736600461234f565b61166e565b3480156107a857600080fd5b5061039673ff970a61a04b1ca14834a43f5de4533ebddb5cc881565b3480156107d057600080fd5b506104406107df36600461234f565b6116ba565b3480156107f057600080fd5b506104406107ff366004612336565b611724565b34801561081057600080fd5b5061044061081f366004612178565b611753565b34801561083057600080fd5b5061044061083f36600461234f565b611825565b34801561085057600080fd5b506103e8611871565b34801561086557600080fd5b506103e860045481565b34801561087b57600080fd5b506103e861088a366004612336565b6118a2565b34801561089b57600080fd5b506104406108aa366004612336565b611a00565b3480156108bb57600080fd5b506104406108ca36600461234f565b611a2f565b3480156108db57600080fd5b50610440611a99565b3480156108f057600080fd5b50600954610396906001600160a01b031681565b34801561091057600080fd5b506103e8600081565b34801561092557600080fd5b506103967353bf833a5d6c4dda888f69c22c88c9f356a4161481565b34801561094d57600080fd5b5061039673ea8dfee1898a7e0a59f7527f076106d7e44c217681565b34801561097557600080fd5b50600754610396906001600160a01b031681565b34801561099557600080fd5b506103e860115481565b3480156109ab57600080fd5b50600c54610396906001600160a01b031681565b3480156109cb57600080fd5b50610396736694340fc020c5e6b96567843da2df01b2ce1eb681565b600f6020528160005260406000208181548110610a0357600080fd5b6000918252602090912001546001600160a01b03169150829050565b601054604051632f607fdd60e01b8152600481019190915230602482015260009073ea8dfee1898a7e0a59f7527f076106d7e44c217690632f607fdd906044015b602060405180830381865afa158015610a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa1919061236c565b905090565b6006546001600160a01b0316331480610ac957506008546001600160a01b031633145b80610ae35750336000908152600b602052604090205460ff165b610b255760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b60448201526064015b60405180910390fd5b60005b81811015610b97576001600b6000858585818110610b4857610b48612385565b9050602002016020810190610b5d919061234f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610b8f816123b1565b915050610b28565b505050565b6010546040516393f1a40b60e01b81526004810191909152306024820152600090819073ea8dfee1898a7e0a59f7527f076106d7e44c2176906393f1a40b906044016040805180830381865afa158015610bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e91906123cc565b5092915050565b6009546060906001600160a01b03163314610c525760405162461bcd60e51b8152600401610b1c906123f0565b6001600160a01b038316610c925760405162461bcd60e51b8152602060048201526007602482015266085d185c99d95d60ca1b6044820152606401610b1c565b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114610cd257610cd9565b8160208501fd5b50505092915050565b6009546001600160a01b03163314610d0c5760405162461bcd60e51b8152600401610b1c906123f0565b600055565b6007546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610b1c90612413565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da8919061236c565b905081811015610dd357610dc4610dbf8383611b8e565b611bd9565b9150610dd08282611c57565b91505b6000610df7620186a0610df160035486611cb690919063ffffffff16565b90611d35565b9050610e86600760009054906101000a90046001600160a01b03166001600160a01b0316638d8f1e676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e739190612438565b6005546001600160a01b03169083611d77565b6000610ea4620186a0610df160025487611cb690919063ffffffff16565b9050610efc600760009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b600754600554604051636535246160e11b81526001600160a01b039182166004820152600092919091169063ca6a48c290602401602060405180830381865afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f719190612438565b90506001600160a01b038116610f995760405162461bcd60e51b8152600401610b1c90612455565b610fc481610fb184610fab8988611b8e565b90611b8e565b6005546001600160a01b03169190611d77565b5050505050565b601054604051631c57762b60e31b815260048101919091526000602482015273ea8dfee1898a7e0a59f7527f076106d7e44c21769063e2bbb15890604401600060405180830381600087803b15801561102357600080fd5b505af1158015611037573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015260009250736694340fc020c5e6b96567843da2df01b2ce1eb691506370a0823190602401602060405180830381865afa15801561108d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b1919061236c565b9050806110bb5750565b60006110d8612710610df160045485611cb690919063ffffffff16565b9050611170600760009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111549190612438565b736694340fc020c5e6b96567843da2df01b2ce1eb69083611d77565b61117a8282611b8e565b600c549092506111aa90736694340fc020c5e6b96567843da2df01b2ce1eb6906001600160a01b03166000611dda565b600c546111d690736694340fc020c5e6b96567843da2df01b2ce1eb6906001600160a01b031684611dda565b6040805160c081018252600d54815260006020808301829052736694340fc020c5e6b96567843da2df01b2ce1eb683850152600e546001600160a01b039081166060808601919091526080808601899052865180880188526002815261060f60f31b8186015260a087015286519081018752308082529381018590529586019290925290840191909152600c54919291166352bbbe298383600161127b42603c612473565b6040518563ffffffff1660e01b815260040161129a949392919061248b565b6020604051808303816000875af11580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd919061236c565b50600e546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b919061236c565b6011546040516321ec87bf60e21b81526004810191909152602481018290523060448201529091507353bf833a5d6c4dda888f69c22c88c9f356a41614906387b21efc90606401600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b50505050610fc4611a99565b6007546000906001600160a01b031633146113f95760405162461bcd60e51b8152600401610b1c90612413565b6005546001600160a01b03838116911614156114405760405162461bcd60e51b8152600401610b1c906020808252600490820152631dd85b9d60e21b604082015260600190565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a8919061236c565b6007549091506114c5906001600160a01b03848116911683611d77565b919050565b6000610aa16114d7610b9c565b6114df611871565b90611c57565b6009546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610b1c906123f0565b600255565b6007546000906001600160a01b031633146115415760405162461bcd60e51b8152600401610b1c90612413565b611549611eef565b6005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b5919061236c565b600754600554604051636535246160e11b81526001600160a01b03918216600482015292935060009291169063ca6a48c290602401602060405180830381865afa158015611607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162b9190612438565b90506001600160a01b0381166116535760405162461bcd60e51b8152600401610b1c90612455565b60055461166a906001600160a01b03168284611d77565b5090565b6009546001600160a01b031633146116985760405162461bcd60e51b8152600401610b1c906123f0565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146117025760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b1c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461174e5760405162461bcd60e51b8152600401610b1c906123f0565b600355565b6006546001600160a01b031633148061177657506008546001600160a01b031633145b6117b35760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610b1c565b60005b81811015610b97576000600b60008585858181106117d6576117d6612385565b90506020020160208101906117eb919061234f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061181d816123b1565b9150506117b6565b6009546001600160a01b0316331461184f5760405162461bcd60e51b8152600401610b1c906123f0565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401610a60565b6007546000906001600160a01b031633146118cf5760405162461bcd60e51b8152600401610b1c90612413565b6118d882611bd9565b506005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611945919061236c565b600754600554604051636535246160e11b81526001600160a01b03918216600482015292935060009291169063ca6a48c290602401602060405180830381865afa158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190612438565b90506001600160a01b0381166119e35760405162461bcd60e51b8152600401610b1c90612455565b6005546119fa906001600160a01b03168284611d77565b50919050565b6009546001600160a01b03163314611a2a5760405162461bcd60e51b8152600401610b1c906123f0565b600155565b6006546001600160a01b03163314611a775760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b1c565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b06919061236c565b90506001600160801b03811615611b8b57601054604051631c57762b60e31b815260048101919091526001600160801b038216602482015273ea8dfee1898a7e0a59f7527f076106d7e44c21769063e2bbb15890604401600060405180830381600087803b158015611b7757600080fd5b505af1158015610fc4573d6000803e3d6000fd5b50565b6000611bd083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611efa565b90505b92915050565b601054604051630441a3e760e41b815260009173ea8dfee1898a7e0a59f7527f076106d7e44c21769163441a3e7091611c1f918690600401918252602082015260400190565b600060405180830381600087803b158015611c3957600080fd5b505af1158015611c4d573d6000803e3d6000fd5b5093949350505050565b600080611c648385612473565b905083811015611bd05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b1c565b600082611cc557506000611bd3565b6000611cd18385612569565b905082611cde8583612588565b14611bd05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b1c565b6000611bd083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f34565b6040516001600160a01b038316602482015260448101829052610b9790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f62565b801580611e545750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e52919061236c565b155b611ebf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610b1c565b6040516001600160a01b038316602482015260448101829052610b9790849063095ea7b360e01b90606401611da3565b611b8b610dbf610b9c565b60008184841115611f1e5760405162461bcd60e51b8152600401610b1c9190612249565b506000611f2b84866125aa565b95945050505050565b60008183611f555760405162461bcd60e51b8152600401610b1c9190612249565b506000611f2b8486612588565b6000611fb7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120349092919063ffffffff16565b805190915015610b975780806020019051810190611fd591906125c1565b610b975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b1c565b6060612043848460008561204b565b949350505050565b6060843b61209b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b1c565b600080866001600160a01b031685876040516120b791906125e3565b60006040518083038185875af1925050503d80600081146120f4576040519150601f19603f3d011682016040523d82523d6000602084013e6120f9565b606091505b5091509150811561210d5791506120439050565b80511561211d5780518082602001fd5b8360405162461bcd60e51b8152600401610b1c9190612249565b6001600160a01b0381168114611b8b57600080fd5b6000806040838503121561215f57600080fd5b823561216a81612137565b946020939093013593505050565b6000806020838503121561218b57600080fd5b823567ffffffffffffffff808211156121a357600080fd5b818501915085601f8301126121b757600080fd5b8135818111156121c657600080fd5b8660208260051b85010111156121db57600080fd5b60209290920196919550909350505050565b60005b838110156122085781810151838201526020016121f0565b83811115612217576000848401525b50505050565b600081518084526122358160208601602086016121ed565b601f01601f19169290920160200192915050565b602081526000611bd0602083018461221d565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561228557600080fd5b823561229081612137565b9150602083013567ffffffffffffffff808211156122ad57600080fd5b818501915085601f8301126122c157600080fd5b8135818111156122d3576122d361225c565b604051601f8201601f19908116603f011681019083821181831017156122fb576122fb61225c565b8160405282815288602084870101111561231457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561234857600080fd5b5035919050565b60006020828403121561236157600080fd5b8135611bd081612137565b60006020828403121561237e57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156123c5576123c561239b565b5060010190565b600080604083850312156123df57600080fd5b505080516020909101519092909150565b6020808252600990820152682174696d656c6f636b60b81b604082015260600190565b6020808252600b908201526a10b1b7b73a3937b63632b960a91b604082015260600190565b60006020828403121561244a57600080fd5b8151611bd081612137565b60208082526004908201526310b530b960e11b604082015260600190565b600082198211156124865761248661239b565b500190565b60e08152845160e082015260006020860151600281106124bb57634e487b7160e01b600052602160045260246000fd5b61010083015260408601516001600160a01b031661012083015260608601516124f06101408401826001600160a01b03169052565b50608086015161016083015260a086015160c06101808401526125176101a084018261221d565b915050612557602083018680516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b60a082019390935260c0015292915050565b60008160001904831182151516156125835761258361239b565b500290565b6000826125a557634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156125bc576125bc61239b565b500390565b6000602082840312156125d357600080fd5b81518015158114611bd057600080fd5b600082516125f58184602087016121ed565b919091019291505056fea264697066735822122016c8d7873a01ca89f37c150a315cd69ba2a3c4d54156fdab45b1c7a9b3bfb22b64736f6c634300080b0033000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed Bytecode
0x6080604052600436106103695760003560e01c8063776da470116101c6578063c6223e26116100f7578063e956dcd711610095578063fba7ae9d1161006f578063fba7ae9d14610989578063fbfa77cf1461099f578063fe1f8f7a146105ed578063feee3da5146109bf57600080fd5b8063e956dcd714610919578063ea69d3c914610941578063f77c47911461096957600080fd5b8063d0e30db0116100d1578063d0e30db0146108cf578063d33219b4146108e4578063d810252914610904578063e80028bf1461052e57600080fd5b8063c6223e261461086f578063c65e32421461088f578063c7b9d530146108af57600080fd5b80639e57366511610164578063b1f55bd41161013e578063b1f55bd414610804578063bdacb30314610824578063c1a3d44c14610844578063c39d43341461085957600080fd5b80639e5736651461079c578063ab033ea9146107c4578063ab73e433146107e457600080fd5b806387976583116101a0578063879765831461071057806388993f22146107505780638ccdbb701461076657806392eefe9b1461077c57600080fd5b8063776da470146106c557806382378594146106db578063853828b6146106fb57600080fd5b8063358ae7d0116102a057806351cff8d91161023e5780635aa6e675116102185780635aa6e675146106505780636d13582c146106705780636f307dc314610690578063722713f7146106b057600080fd5b806351cff8d91461060457806351f3d0b81461062457806359739ec41461063a57600080fd5b80633fc8cef31161027a5780633fc8cef3146105b05780634641257d146105d8578063479119be146105ed5780634fe809cc1461052e57600080fd5b8063358ae7d0146105645780633e0dc34e1461057a5780633e413bee1461059057600080fd5b806317d7de7c1161030d5780631fe4a686116102e75780631fe4a686146104ee578063249fb9b41461050e57806326e886c61461052e5780632e1a7d4d1461054457600080fd5b806317d7de7c1461046c5780631cff79cd146104bb5780631f1fcd51146104ce57600080fd5b8063089fe6aa11610349578063089fe6aa146103f65780630e364fb6146104205780630eed07e414610442578063115880861461045757600080fd5b80625a3ff11461036e578062b70eb7146103b35780630547104d146103d3575b600080fd5b34801561037a57600080fd5b5061039673892785f33cdee22a30aef750f285e18c18040c3e81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103bf57600080fd5b506103966103ce36600461214c565b6109e7565b3480156103df57600080fd5b506103e8610a1f565b6040519081526020016103aa565b34801561040257600080fd5b5061040c610bb881565b60405162ffffff90911681526020016103aa565b34801561042c57600080fd5b5061044061043b366004612178565b610aa6565b005b34801561044e57600080fd5b506103e8600181565b34801561046357600080fd5b506103e8610b9c565b34801561047857600080fd5b5060408051808201909152601c81527f5374726174656779417269627472756d5374617267617465557364630000000060208201525b6040516103aa9190612249565b6104ae6104c9366004612272565b610c25565b3480156104da57600080fd5b50600554610396906001600160a01b031681565b3480156104fa57600080fd5b50600854610396906001600160a01b031681565b34801561051a57600080fd5b50610440610529366004612336565b610ce2565b34801561053a57600080fd5b506103e861271081565b34801561055057600080fd5b5061044061055f366004612336565b610d11565b34801561057057600080fd5b506103e860135481565b34801561058657600080fd5b506103e860105481565b34801561059c57600080fd5b50601254610396906001600160a01b031681565b3480156105bc57600080fd5b506103967382af49447d8a07e3bd95bd0d56f35241523fbab181565b3480156105e457600080fd5b50610440610fcb565b3480156105f957600080fd5b506103e8620186a081565b34801561061057600080fd5b506103e861061f36600461234f565b6113cc565b34801561063057600080fd5b506103e860035481565b34801561064657600080fd5b506103e860005481565b34801561065c57600080fd5b50600654610396906001600160a01b031681565b34801561067c57600080fd5b50600a54610396906001600160a01b031681565b34801561069c57600080fd5b50600e54610396906001600160a01b031681565b3480156106bc57600080fd5b506103e86114ca565b3480156106d157600080fd5b506103e8600d5481565b3480156106e757600080fd5b506104406106f6366004612336565b6114e5565b34801561070757600080fd5b506103e8611514565b34801561071c57600080fd5b5061074061072b36600461234f565b600b6020526000908152604090205460ff1681565b60405190151581526020016103aa565b34801561075c57600080fd5b506103e860015481565b34801561077257600080fd5b506103e860025481565b34801561078857600080fd5b5061044061079736600461234f565b61166e565b3480156107a857600080fd5b5061039673ff970a61a04b1ca14834a43f5de4533ebddb5cc881565b3480156107d057600080fd5b506104406107df36600461234f565b6116ba565b3480156107f057600080fd5b506104406107ff366004612336565b611724565b34801561081057600080fd5b5061044061081f366004612178565b611753565b34801561083057600080fd5b5061044061083f36600461234f565b611825565b34801561085057600080fd5b506103e8611871565b34801561086557600080fd5b506103e860045481565b34801561087b57600080fd5b506103e861088a366004612336565b6118a2565b34801561089b57600080fd5b506104406108aa366004612336565b611a00565b3480156108bb57600080fd5b506104406108ca36600461234f565b611a2f565b3480156108db57600080fd5b50610440611a99565b3480156108f057600080fd5b50600954610396906001600160a01b031681565b34801561091057600080fd5b506103e8600081565b34801561092557600080fd5b506103967353bf833a5d6c4dda888f69c22c88c9f356a4161481565b34801561094d57600080fd5b5061039673ea8dfee1898a7e0a59f7527f076106d7e44c217681565b34801561097557600080fd5b50600754610396906001600160a01b031681565b34801561099557600080fd5b506103e860115481565b3480156109ab57600080fd5b50600c54610396906001600160a01b031681565b3480156109cb57600080fd5b50610396736694340fc020c5e6b96567843da2df01b2ce1eb681565b600f6020528160005260406000208181548110610a0357600080fd5b6000918252602090912001546001600160a01b03169150829050565b601054604051632f607fdd60e01b8152600481019190915230602482015260009073ea8dfee1898a7e0a59f7527f076106d7e44c217690632f607fdd906044015b602060405180830381865afa158015610a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa1919061236c565b905090565b6006546001600160a01b0316331480610ac957506008546001600160a01b031633145b80610ae35750336000908152600b602052604090205460ff165b610b255760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b60448201526064015b60405180910390fd5b60005b81811015610b97576001600b6000858585818110610b4857610b48612385565b9050602002016020810190610b5d919061234f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610b8f816123b1565b915050610b28565b505050565b6010546040516393f1a40b60e01b81526004810191909152306024820152600090819073ea8dfee1898a7e0a59f7527f076106d7e44c2176906393f1a40b906044016040805180830381865afa158015610bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1e91906123cc565b5092915050565b6009546060906001600160a01b03163314610c525760405162461bcd60e51b8152600401610b1c906123f0565b6001600160a01b038316610c925760405162461bcd60e51b8152602060048201526007602482015266085d185c99d95d60ca1b6044820152606401610b1c565b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114610cd257610cd9565b8160208501fd5b50505092915050565b6009546001600160a01b03163314610d0c5760405162461bcd60e51b8152600401610b1c906123f0565b600055565b6007546001600160a01b03163314610d3b5760405162461bcd60e51b8152600401610b1c90612413565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da8919061236c565b905081811015610dd357610dc4610dbf8383611b8e565b611bd9565b9150610dd08282611c57565b91505b6000610df7620186a0610df160035486611cb690919063ffffffff16565b90611d35565b9050610e86600760009054906101000a90046001600160a01b03166001600160a01b0316638d8f1e676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e739190612438565b6005546001600160a01b03169083611d77565b6000610ea4620186a0610df160025487611cb690919063ffffffff16565b9050610efc600760009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4f573d6000803e3d6000fd5b600754600554604051636535246160e11b81526001600160a01b039182166004820152600092919091169063ca6a48c290602401602060405180830381865afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f719190612438565b90506001600160a01b038116610f995760405162461bcd60e51b8152600401610b1c90612455565b610fc481610fb184610fab8988611b8e565b90611b8e565b6005546001600160a01b03169190611d77565b5050505050565b601054604051631c57762b60e31b815260048101919091526000602482015273ea8dfee1898a7e0a59f7527f076106d7e44c21769063e2bbb15890604401600060405180830381600087803b15801561102357600080fd5b505af1158015611037573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015260009250736694340fc020c5e6b96567843da2df01b2ce1eb691506370a0823190602401602060405180830381865afa15801561108d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b1919061236c565b9050806110bb5750565b60006110d8612710610df160045485611cb690919063ffffffff16565b9050611170600760009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111549190612438565b736694340fc020c5e6b96567843da2df01b2ce1eb69083611d77565b61117a8282611b8e565b600c549092506111aa90736694340fc020c5e6b96567843da2df01b2ce1eb6906001600160a01b03166000611dda565b600c546111d690736694340fc020c5e6b96567843da2df01b2ce1eb6906001600160a01b031684611dda565b6040805160c081018252600d54815260006020808301829052736694340fc020c5e6b96567843da2df01b2ce1eb683850152600e546001600160a01b039081166060808601919091526080808601899052865180880188526002815261060f60f31b8186015260a087015286519081018752308082529381018590529586019290925290840191909152600c54919291166352bbbe298383600161127b42603c612473565b6040518563ffffffff1660e01b815260040161129a949392919061248b565b6020604051808303816000875af11580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd919061236c565b50600e546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b919061236c565b6011546040516321ec87bf60e21b81526004810191909152602481018290523060448201529091507353bf833a5d6c4dda888f69c22c88c9f356a41614906387b21efc90606401600060405180830381600087803b1580156113ac57600080fd5b505af11580156113c0573d6000803e3d6000fd5b50505050610fc4611a99565b6007546000906001600160a01b031633146113f95760405162461bcd60e51b8152600401610b1c90612413565b6005546001600160a01b03838116911614156114405760405162461bcd60e51b8152600401610b1c906020808252600490820152631dd85b9d60e21b604082015260600190565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a8919061236c565b6007549091506114c5906001600160a01b03848116911683611d77565b919050565b6000610aa16114d7610b9c565b6114df611871565b90611c57565b6009546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610b1c906123f0565b600255565b6007546000906001600160a01b031633146115415760405162461bcd60e51b8152600401610b1c90612413565b611549611eef565b6005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b5919061236c565b600754600554604051636535246160e11b81526001600160a01b03918216600482015292935060009291169063ca6a48c290602401602060405180830381865afa158015611607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162b9190612438565b90506001600160a01b0381166116535760405162461bcd60e51b8152600401610b1c90612455565b60055461166a906001600160a01b03168284611d77565b5090565b6009546001600160a01b031633146116985760405162461bcd60e51b8152600401610b1c906123f0565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146117025760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b1c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461174e5760405162461bcd60e51b8152600401610b1c906123f0565b600355565b6006546001600160a01b031633148061177657506008546001600160a01b031633145b6117b35760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610b1c565b60005b81811015610b97576000600b60008585858181106117d6576117d6612385565b90506020020160208101906117eb919061234f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061181d816123b1565b9150506117b6565b6009546001600160a01b0316331461184f5760405162461bcd60e51b8152600401610b1c906123f0565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401610a60565b6007546000906001600160a01b031633146118cf5760405162461bcd60e51b8152600401610b1c90612413565b6118d882611bd9565b506005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611945919061236c565b600754600554604051636535246160e11b81526001600160a01b03918216600482015292935060009291169063ca6a48c290602401602060405180830381865afa158015611997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bb9190612438565b90506001600160a01b0381166119e35760405162461bcd60e51b8152600401610b1c90612455565b6005546119fa906001600160a01b03168284611d77565b50919050565b6009546001600160a01b03163314611a2a5760405162461bcd60e51b8152600401610b1c906123f0565b600155565b6006546001600160a01b03163314611a775760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b1c565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b06919061236c565b90506001600160801b03811615611b8b57601054604051631c57762b60e31b815260048101919091526001600160801b038216602482015273ea8dfee1898a7e0a59f7527f076106d7e44c21769063e2bbb15890604401600060405180830381600087803b158015611b7757600080fd5b505af1158015610fc4573d6000803e3d6000fd5b50565b6000611bd083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611efa565b90505b92915050565b601054604051630441a3e760e41b815260009173ea8dfee1898a7e0a59f7527f076106d7e44c21769163441a3e7091611c1f918690600401918252602082015260400190565b600060405180830381600087803b158015611c3957600080fd5b505af1158015611c4d573d6000803e3d6000fd5b5093949350505050565b600080611c648385612473565b905083811015611bd05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b1c565b600082611cc557506000611bd3565b6000611cd18385612569565b905082611cde8583612588565b14611bd05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b1c565b6000611bd083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f34565b6040516001600160a01b038316602482015260448101829052610b9790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f62565b801580611e545750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e52919061236c565b155b611ebf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610b1c565b6040516001600160a01b038316602482015260448101829052610b9790849063095ea7b360e01b90606401611da3565b611b8b610dbf610b9c565b60008184841115611f1e5760405162461bcd60e51b8152600401610b1c9190612249565b506000611f2b84866125aa565b95945050505050565b60008183611f555760405162461bcd60e51b8152600401610b1c9190612249565b506000611f2b8486612588565b6000611fb7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120349092919063ffffffff16565b805190915015610b975780806020019051810190611fd591906125c1565b610b975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b1c565b6060612043848460008561204b565b949350505050565b6060843b61209b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b1c565b600080866001600160a01b031685876040516120b791906125e3565b60006040518083038185875af1925050503d80600081146120f4576040519150601f19603f3d011682016040523d82523d6000602084013e6120f9565b606091505b5091509150811561210d5791506120439050565b80511561211d5780518082602001fd5b8360405162461bcd60e51b8152600401610b1c9190612249565b6001600160a01b0381168114611b8b57600080fd5b6000806040838503121561215f57600080fd5b823561216a81612137565b946020939093013593505050565b6000806020838503121561218b57600080fd5b823567ffffffffffffffff808211156121a357600080fd5b818501915085601f8301126121b757600080fd5b8135818111156121c657600080fd5b8660208260051b85010111156121db57600080fd5b60209290920196919550909350505050565b60005b838110156122085781810151838201526020016121f0565b83811115612217576000848401525b50505050565b600081518084526122358160208601602086016121ed565b601f01601f19169290920160200192915050565b602081526000611bd0602083018461221d565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561228557600080fd5b823561229081612137565b9150602083013567ffffffffffffffff808211156122ad57600080fd5b818501915085601f8301126122c157600080fd5b8135818111156122d3576122d361225c565b604051601f8201601f19908116603f011681019083821181831017156122fb576122fb61225c565b8160405282815288602084870101111561231457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561234857600080fd5b5035919050565b60006020828403121561236157600080fd5b8135611bd081612137565b60006020828403121561237e57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156123c5576123c561239b565b5060010190565b600080604083850312156123df57600080fd5b505080516020909101519092909150565b6020808252600990820152682174696d656c6f636b60b81b604082015260600190565b6020808252600b908201526a10b1b7b73a3937b63632b960a91b604082015260600190565b60006020828403121561244a57600080fd5b8151611bd081612137565b60208082526004908201526310b530b960e11b604082015260600190565b600082198211156124865761248661239b565b500190565b60e08152845160e082015260006020860151600281106124bb57634e487b7160e01b600052602160045260246000fd5b61010083015260408601516001600160a01b031661012083015260608601516124f06101408401826001600160a01b03169052565b50608086015161016083015260a086015160c06101808401526125176101a084018261221d565b915050612557602083018680516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b60a082019390935260c0015292915050565b60008160001904831182151516156125835761258361239b565b500290565b6000826125a557634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156125bc576125bc61239b565b500390565b6000602082840312156125d357600080fd5b81518015158114611bd057600080fd5b600082516125f58184602087016121ed565b919091019291505056fea264697066735822122016c8d7873a01ca89f37c150a315cd69ba2a3c4d54156fdab45b1c7a9b3bfb22b64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
-----Decoded View---------------
Arg [0] : _governance (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [1] : _strategist (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [2] : _controller (address): 0x55D5BCEf2BFD4921B8790525FF87919c2E26bD03
Arg [3] : _timelock (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [1] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [2] : 00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03
Arg [3] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed ByteCode Sourcemap
56350:1175:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56447:72;;;;;;;;;;;;56477:42;56447:72;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;56447:72:0;;;;;;;;52861:50;;;;;;;;;;-1:-1:-1;52861:50:0;;;;;:::i;:::-;;:::i;54009:142::-;;;;;;;;;;;;;:::i;:::-;;;824:25:1;;;812:2;797:18;54009:142:0;678:177:1;52815:37:0;;;;;;;;;;;;52848:4;52815:37;;;;;1034:8:1;1022:21;;;1004:40;;992:2;977:18;52815:37:0;860:190:1;41365:386:0;;;;;;;;;;-1:-1:-1;41365:386:0;;;;;:::i;:::-;;:::i;:::-;;56695:37;;;;;;;;;;;;56731:1;56695:37;;53785:216;;;;;;;;;;;;;:::i;57400:122::-;;;;;;;;;;-1:-1:-1;57477:37:0;;;;;;;;;;;;;;;;;57400:122;;;;;;;:::i;46339:1037::-;;;;;;:::i;:::-;;:::i;39715:19::-;;;;;;;;;;-1:-1:-1;39715:19:0;;;;-1:-1:-1;;;;;39715:19:0;;;39909:25;;;;;;;;;;-1:-1:-1;39909:25:0;;;;-1:-1:-1;;;;;39909:25:0;;;42680:213;;;;;;;;;;-1:-1:-1;42680:213:0;;;;;:::i;:::-;;:::i;39110:54::-;;;;;;;;;;;;39159:5;39110:54;;44056:1022;;;;;;;;;;-1:-1:-1;44056:1022:0;;;;;:::i;:::-;;:::i;56785:106::-;;;;;;;;;;;;;;;;52920:21;;;;;;;;;;;;;;;;56622:64;;;;;;;;;;-1:-1:-1;56622:64:0;;;;-1:-1:-1;;;;;56622:64:0;;;39741:73;;;;;;;;;;;;39772:42;39741:73;;54646:1573;;;;;;;;;;;;;:::i;39506:53::-;;;;;;;;;;;;39553:6;39506:53;;43691:289;;;;;;;;;;-1:-1:-1;43691:289:0;;;;;:::i;:::-;;:::i;39460:39::-;;;;;;;;;;;;;;;;39062:41;;;;;;;;;;;;;;;;39845:25;;;;;;;;;;-1:-1:-1;39845:25:0;;;;-1:-1:-1;;;;;39845:25:0;;;39985:71;;;;;;;;;;-1:-1:-1;39985:71:0;;;;-1:-1:-1;;;;;39985:71:0;;;52741:25;;;;;;;;;;-1:-1:-1;52741:25:0;;;;-1:-1:-1;;;;;52741:25:0;;;41140:113;;;;;;;;;;;;;:::i;52705:27::-;;;;;;;;;;;;;;;;42290:195;;;;;;;;;;-1:-1:-1;42290:195:0;;;;;:::i;:::-;;:::i;45646:430::-;;;;;;;;;;;;;:::i;40065:42::-;;;;;;;;;;-1:-1:-1;40065:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4892:14:1;;4885:22;4867:41;;4855:2;4840:18;40065:42:0;4727:187:1;39173:36:0;;;;;;;;;;;;;;;;39350:40;;;;;;;;;;;;;;;;43378:151;;;;;;;;;;-1:-1:-1;43378:151:0;;;;;:::i;:::-;;:::i;56526:89::-;;;;;;;;;;;;56573:42;56526:89;;43064:155;;;;;;;;;;-1:-1:-1;43064:155:0;;;;;:::i;:::-;;:::i;42091:191::-;;;;;;;;;;-1:-1:-1;42091:191:0;;;;;:::i;:::-;;:::i;41759:324::-;;;;;;;;;;-1:-1:-1;41759:324:0;;;;;:::i;:::-;;:::i;43227:143::-;;;;;;;;;;-1:-1:-1;43227:143:0;;;;;:::i;:::-;;:::i;40943:118::-;;;;;;;;;;;;;:::i;39608:31::-;;;;;;;;;;;;;;;;45142:428;;;;;;;;;;-1:-1:-1;45142:428:0;;;;;:::i;:::-;;:::i;42493:179::-;;;;;;;;;;-1:-1:-1;42493:179:0;;;;;:::i;:::-;;:::i;42901:155::-;;;;;;;;;;-1:-1:-1;42901:155:0;;;;;:::i;:::-;;:::i;54187:210::-;;;;;;;;;;;;;:::i;39941:23::-;;;;;;;;;;-1:-1:-1;39941:23:0;;;;-1:-1:-1;;;;;39941:23:0;;;56741:35;;;;;;;;;;;;56775:1;56741:35;;52505:88;;;;;;;;;;;;52551:42;52505:88;;52410:86;;;;;;;;;;;;52454:42;52410:86;;39877:25;;;;;;;;;;-1:-1:-1;39877:25:0;;;;-1:-1:-1;;;;;39877:25:0;;;52978:23;;;;;;;;;;;;;;;;52633:65;;;;;;;;;;-1:-1:-1;52633:65:0;;;;-1:-1:-1;;;;;52633:65:0;;;52331:72;;;;;;;;;;;;52361:42;52331:72;;52861:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52861:50:0;;-1:-1:-1;52861:50:0;;-1:-1:-1;52861:50:0:o;54009:142::-;54121:6;;54085:58;;-1:-1:-1;;;54085:58:0;;;;;5093:25:1;;;;54137:4:0;5134:18:1;;;5127:60;54058:7:0;;52454:42;;54085:35;;5066:18:1;;54085:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54078:65;;54009:142;:::o;41365:386::-;41482:10;;-1:-1:-1;;;;;41482:10:0;41468;:24;;:69;;-1:-1:-1;41527:10:0;;-1:-1:-1;;;;;41527:10:0;41513;:24;41468:69;:112;;;-1:-1:-1;41569:10:0;41558:22;;;;:10;:22;;;;;;;;41468:112;41446:176;;;;-1:-1:-1;;;41446:176:0;;5589:2:1;41446:176:0;;;5571:21:1;5628:2;5608:18;;;5601:30;-1:-1:-1;;;5647:18:1;;;5640:44;5701:18;;41446:176:0;;;;;;;;;41640:9;41635:109;41655:22;;;41635:109;;;41728:4;41699:10;:26;41710:11;;41722:1;41710:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41699:26:0;;;;;;;;;;;;-1:-1:-1;41699:26:0;:33;;-1:-1:-1;;41699:33:0;;;;;;;;;;41679:3;;;;:::i;:::-;;;;41635:109;;;;41365:386;;:::o;53785:216::-;53924:6;;53881:88;;-1:-1:-1;;;53881:88:0;;;;;5093:25:1;;;;53953:4:0;5134:18:1;;;5127:60;53840:7:0;;;;52454:42;;53881:28;;5066:18:1;;53881:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;53860:109:0;53785:216;-1:-1:-1;;53785:216:0:o;46339:1037::-;46505:8;;46444:21;;-1:-1:-1;;;;;46505:8:0;46491:10;:22;46483:44;;;;-1:-1:-1;;;46483:44:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46546:21:0;;46538:41;;;;-1:-1:-1;;;46538:41:0;;6923:2:1;46538:41:0;;;6905:21:1;6962:1;6942:18;;;6935:29;-1:-1:-1;;;6980:18:1;;;6973:37;7027:18;;46538:41:0;6721:330:1;46538:41:0;46856:1;46836;46811:5;46805:12;46781:4;46774:5;46770:16;46744:7;46720:4;46713:5;46709:16;46678:194;46898:16;46948:4;46942:11;46930:23;;47065:4;47061:9;47054:4;47047;47041;47037:15;47033:26;47029:42;47019:8;47015:57;46992:4;46967:120;47118:4;47108:8;47101:22;47176:4;47173:1;47166:4;47156:8;47152:19;47137:44;47211:9;47204:17;47240:1;47235:123;;;;47197:161;;47235:123;47338:4;47331;47321:8;47317:19;47310:33;47197:161;;;;46339:1037;;;;:::o;42680:213::-;42804:8;;-1:-1:-1;;;;;42804:8:0;42790:10;:22;42782:44;;;;-1:-1:-1;;;42782:44:0;;;;;;;:::i;:::-;42837:22;:48;42680:213::o;44056:1022::-;44133:10;;-1:-1:-1;;;;;44133:10:0;44119;:24;44111:48;;;;-1:-1:-1;;;44111:48:0;;;;;;;:::i;:::-;44196:4;;44189:37;;-1:-1:-1;;;44189:37:0;;44220:4;44189:37;;;160:51:1;44170:16:0;;-1:-1:-1;;;;;44196:4:0;;44189:22;;133:18:1;;44189:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44170:56;;44252:7;44241:8;:18;44237:143;;;44286:36;44300:21;:7;44312:8;44300:11;:21::i;:::-;44286:13;:36::i;:::-;44276:46;-1:-1:-1;44347:21:0;44276:46;44359:8;44347:11;:21::i;:::-;44337:31;;44237:143;44392:15;44410:83;39553:6;44410:33;44422:20;;44410:7;:11;;:33;;;;:::i;:::-;:37;;:83::i;:::-;44392:101;;44504:69;44542:10;;;;;;;;;-1:-1:-1;;;;;44542:10:0;-1:-1:-1;;;;;44530:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44511:4;;-1:-1:-1;;;;;44511:4:0;;44565:7;44504:25;:69::i;:::-;44586:20;44609:85;39445:6;44609:34;44621:21;;44609:7;:11;;:34;;;;:::i;:85::-;44586:108;;44705:112;44757:10;;;;;;;;;-1:-1:-1;;;;;44757:10:0;-1:-1:-1;;;;;44745:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44705:112;44857:10;;44882:4;;44845:43;;-1:-1:-1;;;44845:43:0;;-1:-1:-1;;;;;44882:4:0;;;44845:43;;;160:51:1;44830:12:0;;44857:10;;;;;44845:28;;133:18:1;;44845:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44830:58;-1:-1:-1;;;;;;44907:18:0;;44899:35;;;;-1:-1:-1;;;44899:35:0;;;;;;;:::i;:::-;44999:71;45025:4;45031:38;45056:12;45031:20;:7;45043;45031:11;:20::i;:::-;:24;;:38::i;:::-;45006:4;;-1:-1:-1;;;;;45006:4:0;;44999:71;:25;:71::i;:::-;44100:978;;;;44056:1022;:::o;54646:1573::-;54720:6;;54692:38;;-1:-1:-1;;;54692:38:0;;;;;8166:25:1;;;;54728:1:0;8207:18:1;;;8200:34;52454:42:0;;54692:27;;8139:18:1;;54692:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54756:36:0;;-1:-1:-1;;;54756:36:0;;54786:4;54756:36;;;160:51:1;54741:12:0;;-1:-1:-1;52361:42:0;;-1:-1:-1;54756:21:0;;133:18:1;;54756:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54741:51;-1:-1:-1;54809:9:0;54805:22;;54820:7;54646:1573::o;54805:22::-;54839:19;54861:39;39686:5;54861:20;54870:10;;54861:4;:8;;:20;;;;:::i;:39::-;54839:61;;54911:110;54962:10;;;;;;;;;-1:-1:-1;;;;;54962:10:0;-1:-1:-1;;;;;54950:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52361:42;;54999:11;54911:24;:110::i;:::-;55039:21;:4;55048:11;55039:8;:21::i;:::-;55139:5;;55032:28;;-1:-1:-1;55115:33:0;;52361:42;;-1:-1:-1;;;;;55139:5:0;;55115:23;:33::i;:::-;55183:5;;55159:36;;52361:42;;-1:-1:-1;;;;;55183:5:0;55190:4;55159:23;:36::i;:::-;55254:302;;;;;;;;55321:12;;55254:302;;-1:-1:-1;55254:302:0;;;;;;;52361:42;55254:302;;;;55465:10;;-1:-1:-1;;;;;55465:10:0;;;55254:302;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;55254:302:0;;;;;;;;55612:240;;;;;;;55691:4;55612:240;;;;;;;;;;;;;;;;;;;;;;;55878:5;;55254:302;;55612:240;55878:5;55863:26;55254:302;55612:240;55465:10;55912:20;:15;55930:2;55912:20;:::i;:::-;55863:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;55975:10:0;;55968:43;;-1:-1:-1;;;55968:43:0;;56005:4;55968:43;;;160:51:1;55946:19:0;;-1:-1:-1;;;;;55975:10:0;;55968:28;;133:18:1;;55968:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56116:8;;56065:124;;-1:-1:-1;;;56065:124:0;;;;;10464:25:1;;;;10505:18;;;10498:34;;;56173:4:0;10548:18:1;;;10541:60;55946:65:0;;-1:-1:-1;52551:42:0;;56065:36;;10437:18:1;;56065:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56202:9;:7;:9::i;43691:289::-;43792:10;;43742:15;;-1:-1:-1;;;;;43792:10:0;43778;:24;43770:48;;;;-1:-1:-1;;;43770:48:0;;;;;;;:::i;:::-;43837:4;;-1:-1:-1;;;;;43837:23:0;;;:4;;:23;;43829:40;;;;-1:-1:-1;;;43829:40:0;;;;;;10814:2:1;10796:21;;;10853:1;10833:18;;;10826:29;-1:-1:-1;;;10886:2:1;10871:18;;10864:34;10930:2;10915:18;;10612:327;43829:40:0;43890:31;;-1:-1:-1;;;43890:31:0;;43915:4;43890:31;;;160:51:1;-1:-1:-1;;;;;43890:16:0;;;;;133:18:1;;43890:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43952:10;;43880:41;;-1:-1:-1;43932:40:0;;-1:-1:-1;;;;;43932:19:0;;;;43952:10;43880:41;43932:19;:40::i;:::-;43691:289;;;:::o;41140:113::-;41182:7;41209:36;41229:15;:13;:15::i;:::-;41209;:13;:15::i;:::-;:19;;:36::i;42290:195::-;42398:8;;-1:-1:-1;;;;;42398:8:0;42384:10;:22;42376:44;;;;-1:-1:-1;;;42376:44:0;;;;;;;:::i;:::-;42431:21;:46;42290:195::o;45646:430::-;45737:10;;45687:15;;-1:-1:-1;;;;;45737:10:0;45723;:24;45715:48;;;;-1:-1:-1;;;45715:48:0;;;;;;;:::i;:::-;45774:14;:12;:14::i;:::-;45818:4;;45811:37;;-1:-1:-1;;;45811:37:0;;45842:4;45811:37;;;160:51:1;-1:-1:-1;;;;;45818:4:0;;;;45811:22;;133:18:1;;45811:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45888:10;;45913:4;;45876:43;;-1:-1:-1;;;45876:43:0;;-1:-1:-1;;;;;45913:4:0;;;45876:43;;;160:51:1;45801:47:0;;-1:-1:-1;45861:12:0;;45888:10;;;45876:28;;133:18:1;;45876:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45861:58;-1:-1:-1;;;;;;45938:18:0;;45930:35;;;;-1:-1:-1;;;45930:35:0;;;;;;;:::i;:::-;46035:4;;46028:40;;-1:-1:-1;;;;;46035:4:0;46054;46060:7;46028:25;:40::i;:::-;45704:372;45646:430;:::o;43378:151::-;43464:8;;-1:-1:-1;;;;;43464:8:0;43450:10;:22;43442:44;;;;-1:-1:-1;;;43442:44:0;;;;;;;:::i;:::-;43497:10;:24;;-1:-1:-1;;;;;;43497:24:0;-1:-1:-1;;;;;43497:24:0;;;;;;;;;;43378:151::o;43064:155::-;43150:10;;-1:-1:-1;;;;;43150:10:0;43136;:24;43128:48;;;;-1:-1:-1;;;43128:48:0;;11146:2:1;43128:48:0;;;11128:21:1;11185:2;11165:18;;;11158:30;-1:-1:-1;;;11204:18:1;;;11197:41;11255:18;;43128:48:0;10944:335:1;43128:48:0;43187:10;:24;;-1:-1:-1;;;;;;43187:24:0;-1:-1:-1;;;;;43187:24:0;;;;;;;;;;43064:155::o;42091:191::-;42197:8;;-1:-1:-1;;;;;42197:8:0;42183:10;:22;42175:44;;;;-1:-1:-1;;;42175:44:0;;;;;;;:::i;:::-;42230:20;:44;42091:191::o;41759:324::-;41873:10;;-1:-1:-1;;;;;41873:10:0;41859;:24;;:52;;-1:-1:-1;41901:10:0;;-1:-1:-1;;;;;41901:10:0;41887;:24;41859:52;41837:116;;;;-1:-1:-1;;;41837:116:0;;5589:2:1;41837:116:0;;;5571:21:1;5628:2;5608:18;;;5601:30;-1:-1:-1;;;5647:18:1;;;5640:44;5701:18;;41837:116:0;5387:338:1;41837:116:0;41971:9;41966:110;41986:22;;;41966:110;;;42059:5;42030:10;:26;42041:11;;42053:1;42041:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42030:26:0;;;;;;;;;;;;-1:-1:-1;42030:26:0;:34;;-1:-1:-1;;42030:34:0;;;;;;;;;;42010:3;;;;:::i;:::-;;;;41966:110;;43227:143;43309:8;;-1:-1:-1;;;;;43309:8:0;43295:10;:22;43287:44;;;;-1:-1:-1;;;43287:44:0;;;;;;;:::i;:::-;43342:8;:20;;-1:-1:-1;;;;;;43342:20:0;-1:-1:-1;;;;;43342:20:0;;;;;;;;;;43227:143::o;40943:118::-;41023:4;;41016:37;;-1:-1:-1;;;41016:37:0;;41047:4;41016:37;;;160:51:1;40989:7:0;;-1:-1:-1;;;;;41023:4:0;;41016:22;;133:18:1;;41016:37:0;14:203:1;45142:428:0;45275:10;;45220:15;;-1:-1:-1;;;;;45275:10:0;45261;:24;45253:48;;;;-1:-1:-1;;;45253:48:0;;;;;;;:::i;:::-;45312:22;45326:7;45312:13;:22::i;:::-;-1:-1:-1;45364:4:0;;45357:37;;-1:-1:-1;;;45357:37:0;;45388:4;45357:37;;;160:51:1;-1:-1:-1;;;;;45364:4:0;;;;45357:22;;133:18:1;;45357:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45434:10;;45459:4;;45422:43;;-1:-1:-1;;;45422:43:0;;-1:-1:-1;;;;;45459:4:0;;;45422:43;;;160:51:1;45347:47:0;;-1:-1:-1;45407:12:0;;45434:10;;;45422:28;;133:18:1;;45422:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45407:58;-1:-1:-1;;;;;;45484:18:0;;45476:35;;;;-1:-1:-1;;;45476:35:0;;;;;;;:::i;:::-;45529:4;;45522:40;;-1:-1:-1;;;;;45529:4:0;45548;45554:7;45522:25;:40::i;:::-;45242:328;45142:428;;;:::o;42493:179::-;42593:8;;-1:-1:-1;;;;;42593:8:0;42579:10;:22;42571:44;;;;-1:-1:-1;;;42571:44:0;;;;;;;:::i;:::-;42626:17;:38;42493:179::o;42901:155::-;42987:10;;-1:-1:-1;;;;;42987:10:0;42973;:24;42965:48;;;;-1:-1:-1;;;42965:48:0;;11146:2:1;42965:48:0;;;11128:21:1;11185:2;11165:18;;;11158:30;-1:-1:-1;;;11204:18:1;;;11197:41;11255:18;;42965:48:0;10944:335:1;42965:48:0;43024:10;:24;;-1:-1:-1;;;;;;43024:24:0;-1:-1:-1;;;;;43024:24:0;;;;;;;;;;42901:155::o;54187:210::-;54264:4;;54257:37;;-1:-1:-1;;;54257:37:0;;54288:4;54257:37;;;160:51:1;54233:13:0;;-1:-1:-1;;;;;54264:4:0;;54257:22;;133:18:1;;54257:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54233:62;-1:-1:-1;;;;;;54310:9:0;;;54306:84;;54364:6;;54336:42;;-1:-1:-1;;;54336:42:0;;;;;11458:25:1;;;;-1:-1:-1;;;;;11519:47:1;;11499:18;;;11492:75;52454:42:0;;54336:27;;11431:18:1;;54336:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54306:84;54222:175;54187:210::o;1429:136::-;1487:7;1514:43;1518:1;1521;1514:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1507:50;;1429:136;;;;;:::o;54405:197::-;54553:6;;54524:45;;-1:-1:-1;;;54524:45:0;;54499:7;;52454:42;;54524:28;;:45;;54561:7;;54524:45;;8166:25:1;;;8222:2;8207:18;;8200:34;8154:2;8139:18;;7984:256;54524:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54587:7:0;;54405:197;-1:-1:-1;;;;54405:197:0:o;965:181::-;1023:7;;1055:5;1059:1;1055;:5;:::i;:::-;1043:17;;1084:1;1079;:6;;1071:46;;;;-1:-1:-1;;;1071:46:0;;12033:2:1;1071:46:0;;;12015:21:1;12072:2;12052:18;;;12045:30;12111:29;12091:18;;;12084:57;12158:18;;1071:46:0;11831:351:1;2319:471:0;2377:7;2622:6;2618:47;;-1:-1:-1;2652:1:0;2645:8;;2618:47;2677:9;2689:5;2693:1;2689;:5;:::i;:::-;2677:17;-1:-1:-1;2722:1:0;2713:5;2717:1;2677:17;2713:5;:::i;:::-;:10;2705:56;;;;-1:-1:-1;;;2705:56:0;;12784:2:1;2705:56:0;;;12766:21:1;12823:2;12803:18;;;12796:30;12862:34;12842:18;;;12835:62;-1:-1:-1;;;12913:18:1;;;12906:31;12954:19;;2705:56:0;12582:397:1;3266:132:0;3324:7;3351:39;3355:1;3358;3351:39;;;;;;;;;;;;;;;;;:3;:39::i;28002:248::-;28173:58;;-1:-1:-1;;;;;13176:32:1;;28173:58:0;;;13158:51:1;13225:18;;;13218:34;;;28119:123:0;;28153:5;;-1:-1:-1;;;28196:23:0;13131:18:1;;28173:58:0;;;;-1:-1:-1;;28173:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28173:58:0;-1:-1:-1;;;;;;28173:58:0;;;;;;;;;;28119:19;:123::i;28812:707::-;29230:10;;;29229:62;;-1:-1:-1;29246:39:0;;-1:-1:-1;;;29246:39:0;;29270:4;29246:39;;;13475:34:1;-1:-1:-1;;;;;13545:15:1;;;13525:18;;;13518:43;29246:15:0;;;;;13410:18:1;;29246:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;29229:62;29207:166;;;;-1:-1:-1;;;29207:166:0;;13774:2:1;29207:166:0;;;13756:21:1;13813:2;13793:18;;;13786:30;13852:34;13832:18;;;13825:62;-1:-1:-1;;;13903:18:1;;;13896:52;13965:19;;29207:166:0;13572:418:1;29207:166:0;29438:62;;-1:-1:-1;;;;;13176:32:1;;29438:62:0;;;13158:51:1;13225:18;;;13218:34;;;29384:127:0;;29418:5;;-1:-1:-1;;;29461:22:0;13131:18:1;;29438:62:0;12984:274:1;46084:82:0;46128:30;46142:15;:13;:15::i;1868:192::-;1954:7;1990:12;1982:6;;;;1974:29;;;;-1:-1:-1;;;1974:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2014:9:0;2026:5;2030:1;2026;:5;:::i;:::-;2014:17;1868:192;-1:-1:-1;;;;;1868:192:0:o;3894:278::-;3980:7;4015:12;4008:5;4000:28;;;;-1:-1:-1;;;4000:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4039:9:0;4051:5;4055:1;4051;:5;:::i;30878:860::-;31302:23;31328:106;31370:4;31328:106;;;;;;;;;;;;;;;;;31336:5;-1:-1:-1;;;;;31328:27:0;;;:106;;;;;:::i;:::-;31449:17;;31302:132;;-1:-1:-1;31449:21:0;31445:286;;31622:10;31611:30;;;;;;;;;;;;:::i;:::-;31585:134;;;;-1:-1:-1;;;31585:134:0;;14609:2:1;31585:134:0;;;14591:21:1;14648:2;14628:18;;;14621:30;14687:34;14667:18;;;14660:62;-1:-1:-1;;;14738:18:1;;;14731:40;14788:19;;31585:134:0;14407:406:1;13170:230:0;13307:12;13339:53;13362:6;13370:4;13376:1;13379:12;13339:22;:53::i;:::-;13332:60;13170:230;-1:-1:-1;;;;13170:230:0:o;14791:1044::-;14964:12;10513:20;;14989:60;;;;-1:-1:-1;;;14989:60:0;;15020:2:1;14989:60:0;;;15002:21:1;15059:2;15039:18;;;15032:30;15098:31;15078:18;;;15071:59;15147:18;;14989:60:0;14818:353:1;14989:60:0;15123:12;15137:23;15164:6;-1:-1:-1;;;;;15164:11:0;15183:8;15207:4;15164:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15122:100;;;;15237:7;15233:595;;;15268:10;-1:-1:-1;15261:17:0;;-1:-1:-1;15261:17:0;15233:595;15382:17;;:21;15378:439;;15645:10;15639:17;15706:15;15693:10;15689:2;15685:19;15678:44;15378:439;15788:12;15781:20;;-1:-1:-1;;;15781:20:0;;;;;;;;:::i;222:131:1:-;-1:-1:-1;;;;;297:31:1;;287:42;;277:70;;343:1;340;333:12;358:315;426:6;434;487:2;475:9;466:7;462:23;458:32;455:52;;;503:1;500;493:12;455:52;542:9;529:23;561:31;586:5;561:31;:::i;:::-;611:5;663:2;648:18;;;;635:32;;-1:-1:-1;;;358:315:1:o;1055:615::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1258:9;1245:23;1287:18;1328:2;1320:6;1317:14;1314:34;;;1344:1;1341;1334:12;1314:34;1382:6;1371:9;1367:22;1357:32;;1427:7;1420:4;1416:2;1412:13;1408:27;1398:55;;1449:1;1446;1439:12;1398:55;1489:2;1476:16;1515:2;1507:6;1504:14;1501:34;;;1531:1;1528;1521:12;1501:34;1584:7;1579:2;1569:6;1566:1;1562:14;1558:2;1554:23;1550:32;1547:45;1544:65;;;1605:1;1602;1595:12;1544:65;1636:2;1628:11;;;;;1658:6;;-1:-1:-1;1055:615:1;;-1:-1:-1;;;;1055:615:1:o;1675:258::-;1747:1;1757:113;1771:6;1768:1;1765:13;1757:113;;;1847:11;;;1841:18;1828:11;;;1821:39;1793:2;1786:10;1757:113;;;1888:6;1885:1;1882:13;1879:48;;;1923:1;1914:6;1909:3;1905:16;1898:27;1879:48;;1675:258;;;:::o;1938:::-;1980:3;2018:5;2012:12;2045:6;2040:3;2033:19;2061:63;2117:6;2110:4;2105:3;2101:14;2094:4;2087:5;2083:16;2061:63;:::i;:::-;2178:2;2157:15;-1:-1:-1;;2153:29:1;2144:39;;;;2185:4;2140:50;;1938:258;-1:-1:-1;;1938:258:1:o;2201:220::-;2350:2;2339:9;2332:21;2313:4;2370:45;2411:2;2400:9;2396:18;2388:6;2370:45;:::i;2426:127::-;2487:10;2482:3;2478:20;2475:1;2468:31;2518:4;2515:1;2508:15;2542:4;2539:1;2532:15;2558:1056;2635:6;2643;2696:2;2684:9;2675:7;2671:23;2667:32;2664:52;;;2712:1;2709;2702:12;2664:52;2751:9;2738:23;2770:31;2795:5;2770:31;:::i;:::-;2820:5;-1:-1:-1;2876:2:1;2861:18;;2848:32;2899:18;2929:14;;;2926:34;;;2956:1;2953;2946:12;2926:34;2994:6;2983:9;2979:22;2969:32;;3039:7;3032:4;3028:2;3024:13;3020:27;3010:55;;3061:1;3058;3051:12;3010:55;3097:2;3084:16;3119:2;3115;3112:10;3109:36;;;3125:18;;:::i;:::-;3200:2;3194:9;3168:2;3254:13;;-1:-1:-1;;3250:22:1;;;3274:2;3246:31;3242:40;3230:53;;;3298:18;;;3318:22;;;3295:46;3292:72;;;3344:18;;:::i;:::-;3384:10;3380:2;3373:22;3419:2;3411:6;3404:18;3459:7;3454:2;3449;3445;3441:11;3437:20;3434:33;3431:53;;;3480:1;3477;3470:12;3431:53;3536:2;3531;3527;3523:11;3518:2;3510:6;3506:15;3493:46;3581:1;3576:2;3571;3563:6;3559:15;3555:24;3548:35;3602:6;3592:16;;;;;;;2558:1056;;;;;:::o;3842:180::-;3901:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:52;;;3970:1;3967;3960:12;3922:52;-1:-1:-1;3993:23:1;;3842:180;-1:-1:-1;3842:180:1:o;4209:261::-;4282:6;4335:2;4323:9;4314:7;4310:23;4306:32;4303:52;;;4351:1;4348;4341:12;4303:52;4390:9;4377:23;4409:31;4434:5;4409:31;:::i;5198:184::-;5268:6;5321:2;5309:9;5300:7;5296:23;5292:32;5289:52;;;5337:1;5334;5327:12;5289:52;-1:-1:-1;5360:16:1;;5198:184;-1:-1:-1;5198:184:1:o;5730:127::-;5791:10;5786:3;5782:20;5779:1;5772:31;5822:4;5819:1;5812:15;5846:4;5843:1;5836:15;5862:127;5923:10;5918:3;5914:20;5911:1;5904:31;5954:4;5951:1;5944:15;5978:4;5975:1;5968:15;5994:135;6033:3;-1:-1:-1;;6054:17:1;;6051:43;;;6074:18;;:::i;:::-;-1:-1:-1;6121:1:1;6110:13;;5994:135::o;6134:245::-;6213:6;6221;6274:2;6262:9;6253:7;6249:23;6245:32;6242:52;;;6290:1;6287;6280:12;6242:52;-1:-1:-1;;6313:16:1;;6369:2;6354:18;;;6348:25;6313:16;;6348:25;;-1:-1:-1;6134:245:1:o;6384:332::-;6586:2;6568:21;;;6625:1;6605:18;;;6598:29;-1:-1:-1;;;6658:2:1;6643:18;;6636:39;6707:2;6692:18;;6384:332::o;7056:335::-;7258:2;7240:21;;;7297:2;7277:18;;;7270:30;-1:-1:-1;;;7331:2:1;7316:18;;7309:41;7382:2;7367:18;;7056:335::o;7396:251::-;7466:6;7519:2;7507:9;7498:7;7494:23;7490:32;7487:52;;;7535:1;7532;7525:12;7487:52;7567:9;7561:16;7586:31;7611:5;7586:31;:::i;7652:327::-;7854:2;7836:21;;;7893:1;7873:18;;;7866:29;-1:-1:-1;;;7926:2:1;7911:18;;7904:34;7970:2;7955:18;;7652:327::o;8377:128::-;8417:3;8448:1;8444:6;8441:1;8438:13;8435:39;;;8454:18;;:::i;:::-;-1:-1:-1;8490:9:1;;8377:128::o;8987:1270::-;9328:3;9317:9;9310:22;9375:6;9369:13;9363:3;9352:9;9348:19;9341:42;9291:4;9430;9422:6;9418:17;9412:24;9472:1;9458:12;9455:19;9445:150;;9517:10;9512:3;9508:20;9505:1;9498:31;9552:4;9549:1;9542:15;9580:4;9577:1;9570:15;9445:150;9626:3;9611:19;;9604:41;9704:4;9692:17;;9686:24;-1:-1:-1;;;;;9682:50:1;9676:3;9661:19;;9654:79;9782:4;9770:17;;9764:24;9797:63;9855:3;9840:19;;9764:24;-1:-1:-1;;;;;8584:31:1;8572:44;;8510:112;9797:63;;9915:4;9907:6;9903:17;9897:24;9891:3;9880:9;9876:19;9869:53;9971:4;9963:6;9959:17;9953:24;10014:4;10008:3;9997:9;9993:19;9986:33;10036:54;10085:3;10074:9;10070:19;10054:14;10036:54;:::i;:::-;10028:62;;;10099;10155:4;10144:9;10140:20;10132:6;8749:12;;-1:-1:-1;;;;;8745:21:1;;;8733:34;;8830:4;8819:16;;;8813:23;8806:31;8799:39;8783:14;;;8776:63;8892:4;8881:16;;;8875:23;8871:32;;;8855:14;;;8848:56;8967:4;8956:16;;;8950:23;8943:31;8936:39;8920:14;;8913:63;8627:355;10099:62;10192:4;10177:20;;10170:36;;;;10237:4;10222:20;10215:36;8987:1270;;-1:-1:-1;;8987:1270:1:o;12187:168::-;12227:7;12293:1;12289;12285:6;12281:14;12278:1;12275:21;12270:1;12263:9;12256:17;12252:45;12249:71;;;12300:18;;:::i;:::-;-1:-1:-1;12340:9:1;;12187:168::o;12360:217::-;12400:1;12426;12416:132;;12470:10;12465:3;12461:20;12458:1;12451:31;12505:4;12502:1;12495:15;12533:4;12530:1;12523:15;12416:132;-1:-1:-1;12562:9:1;;12360:217::o;13995:125::-;14035:4;14063:1;14060;14057:8;14054:34;;;14068:18;;:::i;:::-;-1:-1:-1;14105:9:1;;13995:125::o;14125:277::-;14192:6;14245:2;14233:9;14224:7;14220:23;14216:32;14213:52;;;14261:1;14258;14251:12;14213:52;14293:9;14287:16;14346:5;14339:13;14332:21;14325:5;14322:32;14312:60;;14368:1;14365;14358:12;15176:274;15305:3;15343:6;15337:13;15359:53;15405:6;15400:3;15393:4;15385:6;15381:17;15359:53;:::i;:::-;15428:16;;;;;15176:274;-1:-1:-1;;15176:274:1:o
Metadata Hash
16c8d7873a01ca89f37c150a315cd69ba2a3c4d54156fdab45b1c7a9b3bfb22b
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.