Contract 0xc8f7fa58ec97792e7b41e1d541fc0e72489b8765 7
Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x6bfd2f3cd6751cd797a0ab2e0dc4b92e8bba04bbb2e8ae1e6ae1a22a9953de48 | 0x60806040 | 69871041 | 380 days 15 hrs ago | 0xfcb2fe31657c2a44711b4b72ec7f2674956ad933 | IN | Create: StrategySushiWethDpx | 0 ETH | 0.00257979 |
[ Download CSV Export ]
Latest 2 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x483ad6276f1e94f540b2ae524b2a9ca275d3c30d9ce971e2440a3fff827a3690 | 70804222 | 377 days 20 hrs ago | 0xcb410a689a03e06de0a6247b13c13d14237decc8 | 0xc8f7fa58ec97792e7b41e1d541fc0e72489b8765 | 0 ETH | ||
0x483ad6276f1e94f540b2ae524b2a9ca275d3c30d9ce971e2440a3fff827a3690 | 70804222 | 377 days 20 hrs ago | 0xcb410a689a03e06de0a6247b13c13d14237decc8 | 0xc8f7fa58ec97792e7b41e1d541fc0e72489b8765 | 0 ETH |
[ 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:
StrategySushiWethDpx
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-03-14 */ // Sources flattened with hardhat v2.10.1-gzeon-c8fe47dd4 https://hardhat.org // File contracts/lib/safe-math.sol // SPDX-License-Identifier: MIT pragma solidity 0.8.4; /** * @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 contracts/lib/context.sol pragma solidity 0.8.4; /* * @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 contracts/lib/erc20.sol // File: contracts/GSN/Context.sol pragma solidity 0.8.4; // 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_) { _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 contracts/interfaces/uniswapv2.sol pragma solidity 0.8.4; 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, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function 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( uint amountOutMin, address[] calldata path, address to, uint 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 contracts/interfaces/staking-rewards.sol pragma solidity 0.8.4; interface IStakingRewards { function balanceOf(address account) external view returns (uint256); function balances(address account) external view returns (uint256); function earned(address account) external view returns (uint256); function exit() external; function getReward() external; function getRewardForDuration() external view returns (uint256); function lastTimeRewardApplicable() external view returns (uint256); function lastUpdateTime() external view returns (uint256); function notifyRewardAmount(uint256 reward) external; function periodFinish() external view returns (uint256); function rewardPerToken() external view returns (uint256); function rewardPerTokenStored() external view returns (uint256); function rewardRate() external view returns (uint256); function rewards(address) external view returns (uint256); function rewardsDistribution() external view returns (address); function rewardsDuration() external view returns (uint256); function rewardsToken() external view returns (address); function stake(uint256 amount) external; function deposit(uint256 amount) external; function stakeWithPermit( uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function stakingToken() external view returns (address); function totalSupply() external view returns (uint256); function userRewardPerTokenPaid(address) external view returns (uint256); function withdraw(uint256 amount) external; } interface IStakingRewardsFactory { function deploy(address stakingToken, uint256 rewardAmount) external; function isOwner() external view returns (bool); function notifyRewardAmount(address stakingToken) external; function notifyRewardAmounts() external; function owner() external view returns (address); function renounceOwnership() external; function rewardsToken() external view returns (address); function stakingRewardsGenesis() external view returns (uint256); function stakingRewardsInfoByStakingToken(address) external view returns (address stakingRewards, uint256 rewardAmount); function stakingTokens(uint256) external view returns (address); function transferOwnership(address newOwner) external; } // File contracts/interfaces/vault.sol pragma solidity 0.8.4; interface IVault 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 contracts/interfaces/controller.sol pragma solidity 0.8.4; interface IController { function vaults(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 earn(address, uint256) external; // For Big Green Button: function setVault(address _token, address _vault) external; function approveStrategy(address _token, address _strategy) external; function revokeStrategy(address _token, address _strategy) external; function setStrategy(address _token, address _strategy) external; function setStrategist(address _strategist) external; function setGovernance(address _governance) external; function setTimelock(address _timelock) external; } // File contracts/strategies/strategy-base.sol pragma solidity 0.8.4; /** * The is the Strategy Base that most LPs will inherit */ abstract contract StrategyBase { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; // Tokens address public want; address public constant weth = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; address public constant uni = 0xd4d42F0b6DEF4CE0383636770eF773390d85c61A; // Dex address public univ2Router2 = 0xE54Ca86531e17Ef3616d22Ca28b0D458b6C89106; address public feeDistributor = 0xAd86ef5fD2eBc25bb9Db41A1FE8d0f2a322c7839; // Perfomance fees - start with 10% uint256 public performanceTreasuryFee = 1000; 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; // 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 virtual view returns (uint256); function balanceOf() public view returns (uint256) { return balanceOfWant().add(balanceOfPool()); } function getName() external virtual pure returns (string memory); // **** Setters **** // function whitelistHarvester(address _harvester) external { require(msg.sender == governance || msg.sender == strategist || harvesters[msg.sender], "not authorized"); harvesters[_harvester] = true; } function revokeHarvester(address _harvester) external { require(msg.sender == governance || msg.sender == strategist, "not authorized"); harvesters[_harvester] = false; } function setFeeDistributor(address _feeDistributor) external { require(msg.sender == governance, "not authorized"); feeDistributor = _feeDistributor; } 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 vault 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 _vault = IController(controller).vaults(address(want)); require(_vault != address(0), "!vault"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_vault, _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 _vault = IController(controller).vaults(address(want)); require(_vault != address(0), "!vault"); IERC20(want).safeTransfer(_vault, 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 _vault = IController(controller).vaults(address(want)); require(_vault != address(0), "!vault"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_vault, 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 contracts/lib/BoringERC20.sol pragma solidity 0.8.4; library BoringERC20 { function safeSymbol(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer(IERC20 token, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed"); } function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed"); } } // File contracts/interfaces/IRewarder.sol pragma solidity 0.8.4; interface IRewarder { function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external; function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external view returns (IERC20[] memory, uint256[] memory); } // File contracts/interfaces/minichefv2.sol pragma solidity 0.8.4; pragma experimental ABIEncoderV2; interface IMiniChefV2{ struct UserInfo { uint256 amount; uint256 rewardDebt; } struct PoolInfo { uint128 accSushiPerShare; uint64 lastRewardTime; uint64 allocPoint; } function rewarder(uint256 _pid) external view returns (IRewarder); function poolLength() external view returns (uint256); function updatePool(uint256 pid) external returns (IMiniChefV2.PoolInfo memory); function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256); function deposit(uint256 pid, uint256 amount, address to) external; function withdraw(uint256 pid, uint256 amount, address to) external; function harvest(uint256 pid, address to) external; function withdrawAndHarvest(uint256 pid, uint256 amount, address to) external; function emergencyWithdraw(uint256 pid, address to) external; function pendingSushi(uint256 _pid, address _user) external view returns (uint256 pending); } // File contracts/strategies/sushi-farm-bases/strategy-sushi-farm-base.sol pragma solidity 0.8.4; abstract contract StrategySushiFarmBase is StrategyBase { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; // Token addresses address public constant sushi = 0xd4d42F0b6DEF4CE0383636770eF773390d85c61A; address public constant miniChef = 0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3; // WETH/<token1> pair address public token0; address public token1; address rewardToken; // How much tokens to keep? uint256 public keep = 1000; uint256 public keepReward = 1000; uint256 public constant keepMax = 10000; uint256 public poolId; constructor( address _token0, address _token1, uint256 _poolId, address _lp, address _governance, address _strategist, address _controller, address _timelock ) StrategyBase(_lp, _governance, _strategist, _controller, _timelock) { poolId = _poolId; token0 = _token0; token1 = _token1; } function balanceOfPool() public view override returns (uint256) { (uint256 amount, ) = IMiniChefV2(miniChef).userInfo( poolId, address(this) ); return amount; } function getHarvestable() external view returns (uint256) { uint256 _pendingSushi = IMiniChefV2(miniChef).pendingSushi( poolId, address(this) ); return (_pendingSushi); } // **** Setters **** function deposit() public override { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { IERC20(want).safeApprove(miniChef, 0); IERC20(want).safeApprove(miniChef, _want); IMiniChefV2(miniChef).deposit(poolId, _want, address(this)); } } function _withdrawSome(uint256 _amount) internal override returns (uint256) { IMiniChefV2(miniChef).withdraw(poolId, _amount, address(this)); return _amount; } // **** Setters **** function setKeep(uint256 _keep) external { require(msg.sender == timelock, "!timelock"); keep = _keep; } function setKeepReward(uint256 _keepReward) external { require(msg.sender == timelock, "!timelock"); keepReward = _keepReward; } function setRewardToken(address _rewardToken) external { require( msg.sender == timelock || msg.sender == strategist, "!timelock" ); rewardToken = _rewardToken; } // **** State Mutations **** // Declare a Harvest Event event Harvest(uint _timestamp, uint _value); function harvest() public override onlyBenevolent { // Collects SUSHI tokens IMiniChefV2(miniChef).harvest(poolId, address(this)); uint256 _sushi = IERC20(sushi).balanceOf(address(this)); if (_sushi > 0) { // 10% is locked up for future gov uint256 _keepSUSHI = _sushi.mul(keep).div(keepMax); IERC20(sushi).safeTransfer( IController(controller).treasury(), _keepSUSHI ); _sushi = IERC20(sushi).balanceOf(address(this)); _swapSushiswap(sushi, weth, _sushi); } // Collect reward tokens if (rewardToken != address(0)) { uint256 _reward = IERC20(rewardToken).balanceOf(address(this)); if (_reward > 0) { uint256 _keepReward = _reward.mul(keepReward).div(keepMax); IERC20(rewardToken).safeTransfer( IController(controller).treasury(), _keepReward ); _reward = IERC20(rewardToken).balanceOf(address(this)); _swapSushiswap(rewardToken, weth, _reward); } } // Swap half WETH for token0 uint256 _weth = IERC20(weth).balanceOf(address(this)); if (_weth > 0 && token0 != weth) { _swapSushiswap(weth, token0, _weth.div(2)); } // Swap half WETH for token1 if (_weth > 0 && token1 != weth) { _swapSushiswap(weth, token1, _weth.div(2)); } // Adds in liquidity for token0/token1 uint256 _token0 = IERC20(token0).balanceOf(address(this)); uint256 _token1 = IERC20(token1).balanceOf(address(this)); if (_token0 > 0 && _token1 > 0) { IERC20(token0).safeApprove(sushiRouter, 0); IERC20(token0).safeApprove(sushiRouter, _token0); IERC20(token1).safeApprove(sushiRouter, 0); IERC20(token1).safeApprove(sushiRouter, _token1); UniswapRouterV2(sushiRouter).addLiquidity( token0, token1, _token0, _token1, 0, 0, address(this), block.timestamp.add(60) ); // Donates DUST IERC20(token0).transfer( IController(controller).treasury(), IERC20(token0).balanceOf(address(this)) ); IERC20(token1).safeTransfer( IController(controller).treasury(), IERC20(token1).balanceOf(address(this)) ); } uint256 _want = IERC20(want).balanceOf(address(this)); emit Harvest(block.timestamp, _want); // We want to get back SUSHI LP tokens _distributePerformanceFeesAndDeposit(); } } // File contracts/strategies/sushi/strategy-sushi-weth-dpx.sol pragma solidity 0.8.4; contract StrategySushiWethDpx is StrategySushiFarmBase { // Token/ETH pool id in MasterChef contract uint256 public sushi_weth_dpx_poolId = 17; // Token addresses address public sushi_weth_dpx_lp = 0x0C1Cf6883efA1B496B01f654E247B9b419873054; address public dpx = 0x6C2C06790b3E3E3c38e12Ee22F8183b37a13EE55; constructor( address _governance, address _strategist, address _controller, address _timelock ) StrategySushiFarmBase( weth, dpx, sushi_weth_dpx_poolId, sushi_weth_dpx_lp, _governance, _strategist, _controller, _timelock ) {} // **** Views **** function getName() external override pure returns (string memory) { return "StrategySushiWethDpx"; } }
[{"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Harvest","type":"event"},{"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":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dpx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"feeDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"keep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miniChef","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_harvester","type":"address"}],"name":"revokeHarvester","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeDistributor","type":"address"}],"name":"setFeeDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keep","type":"uint256"}],"name":"setKeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keepReward","type":"uint256"}],"name":"setKeepReward","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":"_rewardToken","type":"address"}],"name":"setRewardToken","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":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushi","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":"sushi_weth_dpx_lp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushi_weth_dpx_poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uni","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"univ2Router2","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":"_harvester","type":"address"}],"name":"whitelistHarvester","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
6080604052600180546001600160a01b031990811673e54ca86531e17ef3616d22ca28b0d458b6c891061790915560028054821673ad86ef5fd2ebc25bb9db41a1fe8d0f2a322c78391790556103e86003819055600060048190556005819055600655600b80548316731b02da8cb0d097eb8d57a175b88c7d8b4799750617905560108190556011908155601355601480548216730c1cf6883efa1b496b01f654e247b9b41987305417905560158054909116736c2c06790b3e3e3c38e12ee22f8183b37a13ee55179055348015620000d757600080fd5b506040516200361938038062003619833981016040819052620000fa916200023d565b6015546013546014547382af49447d8a07e3bd95bd0d56f35241523fbab1926001600160a01b03908116929116878787878484848484846200013b57600080fd5b6001600160a01b0384166200014f57600080fd5b6001600160a01b0383166200016357600080fd5b6001600160a01b0382166200017757600080fd5b6001600160a01b0381166200018b57600080fd5b600080546001600160a01b03199081166001600160a01b03978816179091556007805482169587169590951790945560098054851693861693909317909255600880548416918516919091179055600a80548316918416919091179055601297909755600d80548816998216999099179098555050600e80549094169490951693909317909155506200029995505050505050565b80516001600160a01b03811681146200023857600080fd5b919050565b6000806000806080858703121562000253578384fd5b6200025e8562000220565b93506200026e6020860162000220565b92506200027e6040860162000220565b91506200028e6060860162000220565b905092959194509250565b61337080620002a96000396000f3fe60806040526004361061036b5760003560e01c80635aa6e675116101c6578063bdacb303116100f7578063d0e30db011610095578063e4d06d821161006f578063e4d06d8214610988578063edc9af95146103ae578063f77c47911461099e578063fe1f8f7a1461060f57600080fd5b8063d0e30db014610933578063d21220a714610948578063d33219b41461096857600080fd5b8063c6223e26116100d1578063c6223e26146108b3578063c65e3242146108d3578063c7b9d530146108f3578063ccfc2e8d1461091357600080fd5b8063bdacb30314610868578063c1a3d44c14610888578063c39d43341461089d57600080fd5b80638aee812711610164578063ab033ea91161013e578063ab033ea9146107e8578063ab73e43314610808578063b9e3748914610828578063ba40273d1461084857600080fd5b80638aee8127146107925780638ccdbb70146107b257806392eefe9b146107c857600080fd5b806382378594116101a05780638237859414610707578063853828b614610727578063879765831461073c57806388993f221461077c57600080fd5b80635aa6e675146106b25780636d13582c146106d2578063722713f7146106f257600080fd5b80632e1a7d4d116102a0578063479119be1161023e57806351cff8d91161021857806351cff8d91461064657806351f3d0b81461066657806354df7b631461067c57806359739ec41461069c57600080fd5b8063479119be1461060f5780634c2798ad146106265780634fe809cc1461039857600080fd5b80633fc8cef31161027a5780633fc8cef31461058a5780634005760a146105b257806343365f8c146105da5780634641257d146105fa57600080fd5b80632e1a7d4d146105345780632f907aa8146105545780633e0dc34e1461057457600080fd5b806318eb0e0b1161030d5780631fe4a686116102e75780631fe4a686146104de578063249fb9b4146104fe57806326616c1f1461051e57806326e886c61461039857600080fd5b806318eb0e0b146104895780631cff79cd146104ab5780631f1fcd51146104be57600080fd5b80630d43e8ad116103495780630d43e8ad146103ee5780630dfe16811461040e578063115880861461042e57806317d7de7c1461044357600080fd5b80630547104d146103705780630975d8d8146103985780630a087903146103ae575b600080fd5b34801561037c57600080fd5b506103856109be565b6040519081526020015b60405180910390f35b3480156103a457600080fd5b5061038561271081565b3480156103ba57600080fd5b506103d673d4d42f0b6def4ce0383636770ef773390d85c61a81565b6040516001600160a01b03909116815260200161038f565b3480156103fa57600080fd5b506002546103d6906001600160a01b031681565b34801561041a57600080fd5b50600d546103d6906001600160a01b031681565b34801561043a57600080fd5b50610385610a56565b34801561044f57600080fd5b506040805180820190915260148152730a6e8e4c2e8cacef2a6eae6d0d2aecae8d088e0f60631b60208201525b60405161038f9190613117565b34801561049557600080fd5b506104a96104a4366004612ead565b610aee565b005b61047c6104b9366004612ee5565b610b57565b3480156104ca57600080fd5b506000546103d6906001600160a01b031681565b3480156104ea57600080fd5b506009546103d6906001600160a01b031681565b34801561050a57600080fd5b506104a961051936600461304f565b610c14565b34801561052a57600080fd5b5061038560135481565b34801561054057600080fd5b506104a961054f36600461304f565b610c43565b34801561056057600080fd5b506014546103d6906001600160a01b031681565b34801561058057600080fd5b5061038560125481565b34801561059657600080fd5b506103d67382af49447d8a07e3bd95bd0d56f35241523fbab181565b3480156105be57600080fd5b506103d673f4d73326c13a4fc5fd7a064217e12780e9bd62c381565b3480156105e657600080fd5b506015546103d6906001600160a01b031681565b34801561060657600080fd5b506104a9610f22565b34801561061b57600080fd5b50610385620186a081565b34801561063257600080fd5b506104a961064136600461304f565b611af0565b34801561065257600080fd5b50610385610661366004612ead565b611b1f565b34801561067257600080fd5b5061038560065481565b34801561068857600080fd5b506104a9610697366004612ead565b611c2c565b3480156106a857600080fd5b5061038560035481565b3480156106be57600080fd5b506007546103d6906001600160a01b031681565b3480156106de57600080fd5b50600b546103d6906001600160a01b031681565b3480156106fe57600080fd5b50610385611ca9565b34801561071357600080fd5b506104a961072236600461304f565b611cc9565b34801561073357600080fd5b50610385611cf8565b34801561074857600080fd5b5061076c610757366004612ead565b600c6020526000908152604090205460ff1681565b604051901515815260200161038f565b34801561078857600080fd5b5061038560045481565b34801561079e57600080fd5b506104a96107ad366004612ead565b611e70565b3480156107be57600080fd5b5061038560055481565b3480156107d457600080fd5b506104a96107e3366004612ead565b611ed1565b3480156107f457600080fd5b506104a9610803366004612ead565b611f1d565b34801561081457600080fd5b506104a961082336600461304f565b611f87565b34801561083457600080fd5b506001546103d6906001600160a01b031681565b34801561085457600080fd5b506104a961086336600461304f565b611fb6565b34801561087457600080fd5b506104a9610883366004612ead565b611fe5565b34801561089457600080fd5b50610385612031565b3480156108a957600080fd5b5061038560115481565b3480156108bf57600080fd5b506103856108ce36600461304f565b6120ad565b3480156108df57600080fd5b506104a96108ee36600461304f565b612229565b3480156108ff57600080fd5b506104a961090e366004612ead565b612258565b34801561091f57600080fd5b506104a961092e366004612ead565b6122c2565b34801561093f57600080fd5b506104a961230e565b34801561095457600080fd5b50600e546103d6906001600160a01b031681565b34801561097457600080fd5b50600a546103d6906001600160a01b031681565b34801561099457600080fd5b5061038560105481565b3480156109aa57600080fd5b506008546103d6906001600160a01b031681565b60125460405163065509bb60e21b81526004810191909152306024820152600090819073f4d73326c13a4fc5fd7a064217e12780e9bd62c39063195426ec9060440160206040518083038186803b158015610a1857600080fd5b505afa158015610a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a509190613067565b92915050565b6012546040516393f1a40b60e01b81526004810191909152306024820152600090819073f4d73326c13a4fc5fd7a064217e12780e9bd62c3906393f1a40b90604401604080518083038186803b158015610aaf57600080fd5b505afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae7919061307f565b5092915050565b6007546001600160a01b0316331480610b1157506009546001600160a01b031633145b610b365760405162461bcd60e51b8152600401610b2d9061314f565b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b600a546060906001600160a01b03163314610b845760405162461bcd60e51b8152600401610b2d90613197565b6001600160a01b038316610bc45760405162461bcd60e51b8152602060048201526007602482015266085d185c99d95d60ca1b6044820152606401610b2d565b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114610c0457610c0b565b8160208501fd5b50505092915050565b600a546001600160a01b03163314610c3e5760405162461bcd60e51b8152600401610b2d90613197565b600355565b6008546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610b2d9061312a565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610cb157600080fd5b505afa158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190613067565b905081811015610d1457610d05610d008383612461565b6124aa565b9150610d118282612529565b91505b6000610d38620186a0610d326006548661258890919063ffffffff16565b90612607565b9050610dd6600860009054906101000a90046001600160a01b03166001600160a01b0316638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8b57600080fd5b505afa158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190612ec9565b6000546001600160a01b03169083612649565b6000610df4620186a0610d326005548761258890919063ffffffff16565b9050610e47600860009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8b57600080fd5b60085460008054604051632988bb9f60e21b81526001600160a01b0391821660048201529192169063a622ee7c9060240160206040518083038186803b158015610e9057600080fd5b505afa158015610ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec89190612ec9565b90506001600160a01b038116610ef05760405162461bcd60e51b8152600401610b2d90613177565b610f1b81610f0884610f028988612461565b90612461565b6000546001600160a01b03169190612649565b5050505050565b336000908152600c602052604090205460ff1680610f4a57506007546001600160a01b031633145b80610f5f57506009546001600160a01b031633145b610f6857600080fd5b601254604051630c7e663b60e11b8152600481019190915230602482015273f4d73326c13a4fc5fd7a064217e12780e9bd62c3906318fccc7690604401600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526000925073d4d42f0b6def4ce0383636770ef773390d85c61a91506370a082319060240160206040518083038186803b15801561102457600080fd5b505afa158015611038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c9190613067565b905080156111e1576000611081612710610d326010548561258890919063ffffffff16565b9050611128600860009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d457600080fd5b505afa1580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612ec9565b73d4d42f0b6def4ce0383636770ef773390d85c61a9083612649565b6040516370a0823160e01b815230600482015273d4d42f0b6def4ce0383636770ef773390d85c61a906370a082319060240160206040518083038186803b15801561117257600080fd5b505afa158015611186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111aa9190613067565b91506111df73d4d42f0b6def4ce0383636770ef773390d85c61a7382af49447d8a07e3bd95bd0d56f35241523fbab1846126b1565b505b600f546001600160a01b0316156113de57600f546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561123657600080fd5b505afa15801561124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126e9190613067565b905080156113dc576000611293612710610d326011548561258890919063ffffffff16565b9050611331600860009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e657600080fd5b505afa1580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e9190612ec9565b600f546001600160a01b03169083612649565b600f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561137457600080fd5b505afa158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac9190613067565b600f549092506113da906001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab1846126b1565b505b505b6040516370a0823160e01b81523060048201526000907382af49447d8a07e3bd95bd0d56f35241523fbab1906370a082319060240160206040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114639190613067565b90506000811180156114945750600d546001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab114155b156114cf57600d546114cf907382af49447d8a07e3bd95bd0d56f35241523fbab1906001600160a01b03166114ca846002612607565b6126b1565b6000811180156114fe5750600e546001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab114155b1561153457600e54611534907382af49447d8a07e3bd95bd0d56f35241523fbab1906001600160a01b03166114ca846002612607565b600d546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561157857600080fd5b505afa15801561158c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b09190613067565b600e546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b1580156115f957600080fd5b505afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116319190613067565b90506000821180156116435750600081115b15611a3057600b54600d54611666916001600160a01b0391821691166000612983565b600b54600d54611683916001600160a01b03918216911684612983565b600b54600e546116a1916001600160a01b0391821691166000612983565b600b54600e546116be916001600160a01b03918216911683612983565b600b54600d54600e546001600160a01b039283169263e8e3370092811691168585600080306116ee42603c612529565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e481019190915261010401606060405180830381600087803b15801561176557600080fd5b505af1158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d91906130a2565b5050600d54600854604080516361d027b360e01b815290516001600160a01b03938416945063a9059cbb93909216916361d027b391600480820192602092909190829003018186803b1580156117f257600080fd5b505afa158015611806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182a9190612ec9565b600d546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561186d57600080fd5b505afa158015611881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a59190613067565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156118eb57600080fd5b505af11580156118ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611923919061302f565b50600854604080516361d027b360e01b81529051611a30926001600160a01b0316916361d027b3916004808301926020929190829003018186803b15801561196a57600080fd5b505afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190612ec9565b600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156119e557600080fd5b505afa1580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190613067565b600e546001600160a01b03169190612649565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015611a7457600080fd5b505afa158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aac9190613067565b60408051428152602081018390529192507f6c8433a8e155f0af04dba058d4e4695f7da554578963d876bdf4a6d8d6399d9c910160405180910390a1610f1b612aa7565b600a546001600160a01b03163314611b1a5760405162461bcd60e51b8152600401610b2d90613197565b601155565b6008546000906001600160a01b03163314611b4c5760405162461bcd60e51b8152600401610b2d9061312a565b6000546001600160a01b0383811691161415611b935760405162461bcd60e51b8152600401610b2d906020808252600490820152631dd85b9d60e21b604082015260600190565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b158015611bd257600080fd5b505afa158015611be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0a9190613067565b600854909150611c27906001600160a01b03848116911683612649565b919050565b6007546001600160a01b0316331480611c4f57506009546001600160a01b031633145b80611c695750336000908152600c602052604090205460ff165b611c855760405162461bcd60e51b8152600401610b2d9061314f565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000611cc4611cb6610a56565b611cbe612031565b90612529565b905090565b600a546001600160a01b03163314611cf35760405162461bcd60e51b8152600401610b2d90613197565b600555565b6008546000906001600160a01b03163314611d255760405162461bcd60e51b8152600401610b2d9061312a565b611d2d612c65565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015611d7057600080fd5b505afa158015611d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da89190613067565b60085460008054604051632988bb9f60e21b81526001600160a01b039182166004820152939450909291169063a622ee7c9060240160206040518083038186803b158015611df557600080fd5b505afa158015611e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2d9190612ec9565b90506001600160a01b038116611e555760405162461bcd60e51b8152600401610b2d90613177565b600054611e6c906001600160a01b03168284612649565b5090565b600a546001600160a01b0316331480611e9357506009546001600160a01b031633145b611eaf5760405162461bcd60e51b8152600401610b2d90613197565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314611efb5760405162461bcd60e51b8152600401610b2d90613197565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b03163314611f655760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b2d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314611fb15760405162461bcd60e51b8152600401610b2d90613197565b600655565b600a546001600160a01b03163314611fe05760405162461bcd60e51b8152600401610b2d90613197565b601055565b600a546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610b2d90613197565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561207557600080fd5b505afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613067565b6008546000906001600160a01b031633146120da5760405162461bcd60e51b8152600401610b2d9061312a565b6120e3826124aa565b506000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561212757600080fd5b505afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190613067565b60085460008054604051632988bb9f60e21b81526001600160a01b039182166004820152939450909291169063a622ee7c9060240160206040518083038186803b1580156121ac57600080fd5b505afa1580156121c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e49190612ec9565b90506001600160a01b03811661220c5760405162461bcd60e51b8152600401610b2d90613177565b600054612223906001600160a01b03168284612649565b50919050565b600a546001600160a01b031633146122535760405162461bcd60e51b8152600401610b2d90613197565b600455565b6007546001600160a01b031633146122a05760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b2d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031633146122ec5760405162461bcd60e51b8152600401610b2d9061314f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561235257600080fd5b505afa158015612366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238a9190613067565b9050801561245e57600080546123c1916001600160a01b039091169073f4d73326c13a4fc5fd7a064217e12780e9bd62c390612983565b6000546123ec906001600160a01b031673f4d73326c13a4fc5fd7a064217e12780e9bd62c383612983565b601254604051638dbdbe6d60e01b815260048101919091526024810182905230604482015273f4d73326c13a4fc5fd7a064217e12780e9bd62c390638dbdbe6d90606401600060405180830381600087803b15801561244a57600080fd5b505af1158015610f1b573d6000803e3d6000fd5b50565b60006124a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c70565b9392505050565b601254604051630ad58d2f60e01b815260048101919091526024810182905230604482015260009073f4d73326c13a4fc5fd7a064217e12780e9bd62c390630ad58d2f90606401600060405180830381600087803b15801561250b57600080fd5b505af115801561251f573d6000803e3d6000fd5b5093949350505050565b600080612536838561325b565b9050838110156124a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2d565b60008261259757506000610a50565b60006125a38385613293565b9050826125b08583613273565b146124a35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2d565b60006124a383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612caa565b6040516001600160a01b0383166024820152604481018290526126ac90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612cd8565b505050565b6001600160a01b0382166126c457600080fd5b60606001600160a01b0384167382af49447d8a07e3bd95bd0d56f35241523fbab1148061270d57506001600160a01b0383167382af49447d8a07e3bd95bd0d56f35241523fbab1145b156127bb576040805160028082526060820183529091602083019080368337019050509050838160008151811061275457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061279657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506128b7565b60408051600380825260808201909252906020820160608036833701905050905083816000815181106127fe57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507382af49447d8a07e3bd95bd0d56f35241523fbab18160018151811061285457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050828160028151811061289657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505b600b546128d2906001600160a01b0386811691166000612983565b600b546128ec906001600160a01b03868116911684612983565b600b546001600160a01b03166338ed1739836000843061290d42603c612529565b6040518663ffffffff1660e01b815260040161292d9594939291906131ba565b600060405180830381600087803b15801561294757600080fd5b505af115801561295b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f1b9190810190612f87565b801580612a0c5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156129d257600080fd5b505afa1580156129e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0a9190613067565b155b612a775760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610b2d565b6040516001600160a01b0383166024820152604481018290526126ac90849063095ea7b360e01b90606401612675565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015612aeb57600080fd5b505afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b239190613067565b9050801561245e57600854604080516361d027b360e01b81529051612bc4926001600160a01b0316916361d027b3916004808301926020929190829003018186803b158015612b7157600080fd5b505afa158015612b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba99190612ec9565b610f08612710610d326003548661258890919063ffffffff16565b60085460408051638d8f1e6760e01b81529051612c5d926001600160a01b031691638d8f1e67916004808301926020929190829003018186803b158015612c0a57600080fd5b505afa158015612c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c429190612ec9565b610f08612710610d326004548661258890919063ffffffff16565b61245e61230e565b61245e610d00610a56565b60008184841115612c945760405162461bcd60e51b8152600401610b2d9190613117565b506000612ca184866132b2565b95945050505050565b60008183612ccb5760405162461bcd60e51b8152600401610b2d9190613117565b506000612ca18486613273565b6000612d2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612daa9092919063ffffffff16565b8051909150156126ac5780806020019051810190612d4b919061302f565b6126ac5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b2d565b6060612db98484600085612dc1565b949350505050565b6060843b612e115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b2d565b600080866001600160a01b03168587604051612e2d91906130fb565b60006040518083038185875af1925050503d8060008114612e6a576040519150601f19603f3d011682016040523d82523d6000602084013e612e6f565b606091505b50915091508115612e83579150612db99050565b805115612e935780518082602001fd5b8360405162461bcd60e51b8152600401610b2d9190613117565b600060208284031215612ebe578081fd5b81356124a381613325565b600060208284031215612eda578081fd5b81516124a381613325565b60008060408385031215612ef7578081fd5b8235612f0281613325565b915060208381013567ffffffffffffffff80821115612f1f578384fd5b818601915086601f830112612f32578384fd5b813581811115612f4457612f4461330f565b612f56601f8201601f1916850161322a565b91508082528784828501011115612f6b578485fd5b8084840185840137810190920192909252919491935090915050565b60006020808385031215612f99578182fd5b825167ffffffffffffffff80821115612fb0578384fd5b818501915085601f830112612fc3578384fd5b815181811115612fd557612fd561330f565b8060051b9150612fe684830161322a565b8181528481019084860184860187018a1015613000578788fd5b8795505b83861015613022578051835260019590950194918601918601613004565b5098975050505050505050565b600060208284031215613040578081fd5b815180151581146124a3578182fd5b600060208284031215613060578081fd5b5035919050565b600060208284031215613078578081fd5b5051919050565b60008060408385031215613091578182fd5b505080516020909101519092909150565b6000806000606084860312156130b6578081fd5b8351925060208401519150604084015190509250925092565b600081518084526130e78160208601602086016132c9565b601f01601f19169290920160200192915050565b6000825161310d8184602087016132c9565b9190910192915050565b6020815260006124a360208301846130cf565b6020808252600b908201526a10b1b7b73a3937b63632b960a91b604082015260600190565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260069082015265085d985d5b1d60d21b604082015260600190565b6020808252600990820152682174696d656c6f636b60b81b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132095784516001600160a01b0316835293830193918301916001016131e4565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156132535761325361330f565b604052919050565b6000821982111561326e5761326e6132f9565b500190565b60008261328e57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156132ad576132ad6132f9565b500290565b6000828210156132c4576132c46132f9565b500390565b60005b838110156132e45781810151838201526020016132cc565b838111156132f3576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461245e57600080fdfea264697066735822122024012271de8a8875740f094c693890416f314044a8b1b15e7868fc937b18445664736f6c63430008040033000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc80000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Deployed Bytecode
0x60806040526004361061036b5760003560e01c80635aa6e675116101c6578063bdacb303116100f7578063d0e30db011610095578063e4d06d821161006f578063e4d06d8214610988578063edc9af95146103ae578063f77c47911461099e578063fe1f8f7a1461060f57600080fd5b8063d0e30db014610933578063d21220a714610948578063d33219b41461096857600080fd5b8063c6223e26116100d1578063c6223e26146108b3578063c65e3242146108d3578063c7b9d530146108f3578063ccfc2e8d1461091357600080fd5b8063bdacb30314610868578063c1a3d44c14610888578063c39d43341461089d57600080fd5b80638aee812711610164578063ab033ea91161013e578063ab033ea9146107e8578063ab73e43314610808578063b9e3748914610828578063ba40273d1461084857600080fd5b80638aee8127146107925780638ccdbb70146107b257806392eefe9b146107c857600080fd5b806382378594116101a05780638237859414610707578063853828b614610727578063879765831461073c57806388993f221461077c57600080fd5b80635aa6e675146106b25780636d13582c146106d2578063722713f7146106f257600080fd5b80632e1a7d4d116102a0578063479119be1161023e57806351cff8d91161021857806351cff8d91461064657806351f3d0b81461066657806354df7b631461067c57806359739ec41461069c57600080fd5b8063479119be1461060f5780634c2798ad146106265780634fe809cc1461039857600080fd5b80633fc8cef31161027a5780633fc8cef31461058a5780634005760a146105b257806343365f8c146105da5780634641257d146105fa57600080fd5b80632e1a7d4d146105345780632f907aa8146105545780633e0dc34e1461057457600080fd5b806318eb0e0b1161030d5780631fe4a686116102e75780631fe4a686146104de578063249fb9b4146104fe57806326616c1f1461051e57806326e886c61461039857600080fd5b806318eb0e0b146104895780631cff79cd146104ab5780631f1fcd51146104be57600080fd5b80630d43e8ad116103495780630d43e8ad146103ee5780630dfe16811461040e578063115880861461042e57806317d7de7c1461044357600080fd5b80630547104d146103705780630975d8d8146103985780630a087903146103ae575b600080fd5b34801561037c57600080fd5b506103856109be565b6040519081526020015b60405180910390f35b3480156103a457600080fd5b5061038561271081565b3480156103ba57600080fd5b506103d673d4d42f0b6def4ce0383636770ef773390d85c61a81565b6040516001600160a01b03909116815260200161038f565b3480156103fa57600080fd5b506002546103d6906001600160a01b031681565b34801561041a57600080fd5b50600d546103d6906001600160a01b031681565b34801561043a57600080fd5b50610385610a56565b34801561044f57600080fd5b506040805180820190915260148152730a6e8e4c2e8cacef2a6eae6d0d2aecae8d088e0f60631b60208201525b60405161038f9190613117565b34801561049557600080fd5b506104a96104a4366004612ead565b610aee565b005b61047c6104b9366004612ee5565b610b57565b3480156104ca57600080fd5b506000546103d6906001600160a01b031681565b3480156104ea57600080fd5b506009546103d6906001600160a01b031681565b34801561050a57600080fd5b506104a961051936600461304f565b610c14565b34801561052a57600080fd5b5061038560135481565b34801561054057600080fd5b506104a961054f36600461304f565b610c43565b34801561056057600080fd5b506014546103d6906001600160a01b031681565b34801561058057600080fd5b5061038560125481565b34801561059657600080fd5b506103d67382af49447d8a07e3bd95bd0d56f35241523fbab181565b3480156105be57600080fd5b506103d673f4d73326c13a4fc5fd7a064217e12780e9bd62c381565b3480156105e657600080fd5b506015546103d6906001600160a01b031681565b34801561060657600080fd5b506104a9610f22565b34801561061b57600080fd5b50610385620186a081565b34801561063257600080fd5b506104a961064136600461304f565b611af0565b34801561065257600080fd5b50610385610661366004612ead565b611b1f565b34801561067257600080fd5b5061038560065481565b34801561068857600080fd5b506104a9610697366004612ead565b611c2c565b3480156106a857600080fd5b5061038560035481565b3480156106be57600080fd5b506007546103d6906001600160a01b031681565b3480156106de57600080fd5b50600b546103d6906001600160a01b031681565b3480156106fe57600080fd5b50610385611ca9565b34801561071357600080fd5b506104a961072236600461304f565b611cc9565b34801561073357600080fd5b50610385611cf8565b34801561074857600080fd5b5061076c610757366004612ead565b600c6020526000908152604090205460ff1681565b604051901515815260200161038f565b34801561078857600080fd5b5061038560045481565b34801561079e57600080fd5b506104a96107ad366004612ead565b611e70565b3480156107be57600080fd5b5061038560055481565b3480156107d457600080fd5b506104a96107e3366004612ead565b611ed1565b3480156107f457600080fd5b506104a9610803366004612ead565b611f1d565b34801561081457600080fd5b506104a961082336600461304f565b611f87565b34801561083457600080fd5b506001546103d6906001600160a01b031681565b34801561085457600080fd5b506104a961086336600461304f565b611fb6565b34801561087457600080fd5b506104a9610883366004612ead565b611fe5565b34801561089457600080fd5b50610385612031565b3480156108a957600080fd5b5061038560115481565b3480156108bf57600080fd5b506103856108ce36600461304f565b6120ad565b3480156108df57600080fd5b506104a96108ee36600461304f565b612229565b3480156108ff57600080fd5b506104a961090e366004612ead565b612258565b34801561091f57600080fd5b506104a961092e366004612ead565b6122c2565b34801561093f57600080fd5b506104a961230e565b34801561095457600080fd5b50600e546103d6906001600160a01b031681565b34801561097457600080fd5b50600a546103d6906001600160a01b031681565b34801561099457600080fd5b5061038560105481565b3480156109aa57600080fd5b506008546103d6906001600160a01b031681565b60125460405163065509bb60e21b81526004810191909152306024820152600090819073f4d73326c13a4fc5fd7a064217e12780e9bd62c39063195426ec9060440160206040518083038186803b158015610a1857600080fd5b505afa158015610a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a509190613067565b92915050565b6012546040516393f1a40b60e01b81526004810191909152306024820152600090819073f4d73326c13a4fc5fd7a064217e12780e9bd62c3906393f1a40b90604401604080518083038186803b158015610aaf57600080fd5b505afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae7919061307f565b5092915050565b6007546001600160a01b0316331480610b1157506009546001600160a01b031633145b610b365760405162461bcd60e51b8152600401610b2d9061314f565b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b600a546060906001600160a01b03163314610b845760405162461bcd60e51b8152600401610b2d90613197565b6001600160a01b038316610bc45760405162461bcd60e51b8152602060048201526007602482015266085d185c99d95d60ca1b6044820152606401610b2d565b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114610c0457610c0b565b8160208501fd5b50505092915050565b600a546001600160a01b03163314610c3e5760405162461bcd60e51b8152600401610b2d90613197565b600355565b6008546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610b2d9061312a565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610cb157600080fd5b505afa158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190613067565b905081811015610d1457610d05610d008383612461565b6124aa565b9150610d118282612529565b91505b6000610d38620186a0610d326006548661258890919063ffffffff16565b90612607565b9050610dd6600860009054906101000a90046001600160a01b03166001600160a01b0316638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8b57600080fd5b505afa158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190612ec9565b6000546001600160a01b03169083612649565b6000610df4620186a0610d326005548761258890919063ffffffff16565b9050610e47600860009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8b57600080fd5b60085460008054604051632988bb9f60e21b81526001600160a01b0391821660048201529192169063a622ee7c9060240160206040518083038186803b158015610e9057600080fd5b505afa158015610ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec89190612ec9565b90506001600160a01b038116610ef05760405162461bcd60e51b8152600401610b2d90613177565b610f1b81610f0884610f028988612461565b90612461565b6000546001600160a01b03169190612649565b5050505050565b336000908152600c602052604090205460ff1680610f4a57506007546001600160a01b031633145b80610f5f57506009546001600160a01b031633145b610f6857600080fd5b601254604051630c7e663b60e11b8152600481019190915230602482015273f4d73326c13a4fc5fd7a064217e12780e9bd62c3906318fccc7690604401600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526000925073d4d42f0b6def4ce0383636770ef773390d85c61a91506370a082319060240160206040518083038186803b15801561102457600080fd5b505afa158015611038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c9190613067565b905080156111e1576000611081612710610d326010548561258890919063ffffffff16565b9050611128600860009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d457600080fd5b505afa1580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612ec9565b73d4d42f0b6def4ce0383636770ef773390d85c61a9083612649565b6040516370a0823160e01b815230600482015273d4d42f0b6def4ce0383636770ef773390d85c61a906370a082319060240160206040518083038186803b15801561117257600080fd5b505afa158015611186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111aa9190613067565b91506111df73d4d42f0b6def4ce0383636770ef773390d85c61a7382af49447d8a07e3bd95bd0d56f35241523fbab1846126b1565b505b600f546001600160a01b0316156113de57600f546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561123657600080fd5b505afa15801561124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126e9190613067565b905080156113dc576000611293612710610d326011548561258890919063ffffffff16565b9050611331600860009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e657600080fd5b505afa1580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e9190612ec9565b600f546001600160a01b03169083612649565b600f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561137457600080fd5b505afa158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac9190613067565b600f549092506113da906001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab1846126b1565b505b505b6040516370a0823160e01b81523060048201526000907382af49447d8a07e3bd95bd0d56f35241523fbab1906370a082319060240160206040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114639190613067565b90506000811180156114945750600d546001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab114155b156114cf57600d546114cf907382af49447d8a07e3bd95bd0d56f35241523fbab1906001600160a01b03166114ca846002612607565b6126b1565b6000811180156114fe5750600e546001600160a01b03167382af49447d8a07e3bd95bd0d56f35241523fbab114155b1561153457600e54611534907382af49447d8a07e3bd95bd0d56f35241523fbab1906001600160a01b03166114ca846002612607565b600d546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561157857600080fd5b505afa15801561158c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b09190613067565b600e546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b1580156115f957600080fd5b505afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116319190613067565b90506000821180156116435750600081115b15611a3057600b54600d54611666916001600160a01b0391821691166000612983565b600b54600d54611683916001600160a01b03918216911684612983565b600b54600e546116a1916001600160a01b0391821691166000612983565b600b54600e546116be916001600160a01b03918216911683612983565b600b54600d54600e546001600160a01b039283169263e8e3370092811691168585600080306116ee42603c612529565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e481019190915261010401606060405180830381600087803b15801561176557600080fd5b505af1158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d91906130a2565b5050600d54600854604080516361d027b360e01b815290516001600160a01b03938416945063a9059cbb93909216916361d027b391600480820192602092909190829003018186803b1580156117f257600080fd5b505afa158015611806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182a9190612ec9565b600d546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561186d57600080fd5b505afa158015611881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a59190613067565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156118eb57600080fd5b505af11580156118ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611923919061302f565b50600854604080516361d027b360e01b81529051611a30926001600160a01b0316916361d027b3916004808301926020929190829003018186803b15801561196a57600080fd5b505afa15801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190612ec9565b600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156119e557600080fd5b505afa1580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190613067565b600e546001600160a01b03169190612649565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015611a7457600080fd5b505afa158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aac9190613067565b60408051428152602081018390529192507f6c8433a8e155f0af04dba058d4e4695f7da554578963d876bdf4a6d8d6399d9c910160405180910390a1610f1b612aa7565b600a546001600160a01b03163314611b1a5760405162461bcd60e51b8152600401610b2d90613197565b601155565b6008546000906001600160a01b03163314611b4c5760405162461bcd60e51b8152600401610b2d9061312a565b6000546001600160a01b0383811691161415611b935760405162461bcd60e51b8152600401610b2d906020808252600490820152631dd85b9d60e21b604082015260600190565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b158015611bd257600080fd5b505afa158015611be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0a9190613067565b600854909150611c27906001600160a01b03848116911683612649565b919050565b6007546001600160a01b0316331480611c4f57506009546001600160a01b031633145b80611c695750336000908152600c602052604090205460ff165b611c855760405162461bcd60e51b8152600401610b2d9061314f565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000611cc4611cb6610a56565b611cbe612031565b90612529565b905090565b600a546001600160a01b03163314611cf35760405162461bcd60e51b8152600401610b2d90613197565b600555565b6008546000906001600160a01b03163314611d255760405162461bcd60e51b8152600401610b2d9061312a565b611d2d612c65565b6000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015611d7057600080fd5b505afa158015611d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da89190613067565b60085460008054604051632988bb9f60e21b81526001600160a01b039182166004820152939450909291169063a622ee7c9060240160206040518083038186803b158015611df557600080fd5b505afa158015611e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2d9190612ec9565b90506001600160a01b038116611e555760405162461bcd60e51b8152600401610b2d90613177565b600054611e6c906001600160a01b03168284612649565b5090565b600a546001600160a01b0316331480611e9357506009546001600160a01b031633145b611eaf5760405162461bcd60e51b8152600401610b2d90613197565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314611efb5760405162461bcd60e51b8152600401610b2d90613197565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b03163314611f655760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b2d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314611fb15760405162461bcd60e51b8152600401610b2d90613197565b600655565b600a546001600160a01b03163314611fe05760405162461bcd60e51b8152600401610b2d90613197565b601055565b600a546001600160a01b0316331461200f5760405162461bcd60e51b8152600401610b2d90613197565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561207557600080fd5b505afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613067565b6008546000906001600160a01b031633146120da5760405162461bcd60e51b8152600401610b2d9061312a565b6120e3826124aa565b506000546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561212757600080fd5b505afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190613067565b60085460008054604051632988bb9f60e21b81526001600160a01b039182166004820152939450909291169063a622ee7c9060240160206040518083038186803b1580156121ac57600080fd5b505afa1580156121c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e49190612ec9565b90506001600160a01b03811661220c5760405162461bcd60e51b8152600401610b2d90613177565b600054612223906001600160a01b03168284612649565b50919050565b600a546001600160a01b031633146122535760405162461bcd60e51b8152600401610b2d90613197565b600455565b6007546001600160a01b031633146122a05760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b6044820152606401610b2d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031633146122ec5760405162461bcd60e51b8152600401610b2d9061314f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561235257600080fd5b505afa158015612366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238a9190613067565b9050801561245e57600080546123c1916001600160a01b039091169073f4d73326c13a4fc5fd7a064217e12780e9bd62c390612983565b6000546123ec906001600160a01b031673f4d73326c13a4fc5fd7a064217e12780e9bd62c383612983565b601254604051638dbdbe6d60e01b815260048101919091526024810182905230604482015273f4d73326c13a4fc5fd7a064217e12780e9bd62c390638dbdbe6d90606401600060405180830381600087803b15801561244a57600080fd5b505af1158015610f1b573d6000803e3d6000fd5b50565b60006124a383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c70565b9392505050565b601254604051630ad58d2f60e01b815260048101919091526024810182905230604482015260009073f4d73326c13a4fc5fd7a064217e12780e9bd62c390630ad58d2f90606401600060405180830381600087803b15801561250b57600080fd5b505af115801561251f573d6000803e3d6000fd5b5093949350505050565b600080612536838561325b565b9050838110156124a35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2d565b60008261259757506000610a50565b60006125a38385613293565b9050826125b08583613273565b146124a35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2d565b60006124a383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612caa565b6040516001600160a01b0383166024820152604481018290526126ac90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612cd8565b505050565b6001600160a01b0382166126c457600080fd5b60606001600160a01b0384167382af49447d8a07e3bd95bd0d56f35241523fbab1148061270d57506001600160a01b0383167382af49447d8a07e3bd95bd0d56f35241523fbab1145b156127bb576040805160028082526060820183529091602083019080368337019050509050838160008151811061275457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061279657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506128b7565b60408051600380825260808201909252906020820160608036833701905050905083816000815181106127fe57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507382af49447d8a07e3bd95bd0d56f35241523fbab18160018151811061285457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050828160028151811061289657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505b600b546128d2906001600160a01b0386811691166000612983565b600b546128ec906001600160a01b03868116911684612983565b600b546001600160a01b03166338ed1739836000843061290d42603c612529565b6040518663ffffffff1660e01b815260040161292d9594939291906131ba565b600060405180830381600087803b15801561294757600080fd5b505af115801561295b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f1b9190810190612f87565b801580612a0c5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156129d257600080fd5b505afa1580156129e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0a9190613067565b155b612a775760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610b2d565b6040516001600160a01b0383166024820152604481018290526126ac90849063095ea7b360e01b90606401612675565b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015612aeb57600080fd5b505afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b239190613067565b9050801561245e57600854604080516361d027b360e01b81529051612bc4926001600160a01b0316916361d027b3916004808301926020929190829003018186803b158015612b7157600080fd5b505afa158015612b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba99190612ec9565b610f08612710610d326003548661258890919063ffffffff16565b60085460408051638d8f1e6760e01b81529051612c5d926001600160a01b031691638d8f1e67916004808301926020929190829003018186803b158015612c0a57600080fd5b505afa158015612c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c429190612ec9565b610f08612710610d326004548661258890919063ffffffff16565b61245e61230e565b61245e610d00610a56565b60008184841115612c945760405162461bcd60e51b8152600401610b2d9190613117565b506000612ca184866132b2565b95945050505050565b60008183612ccb5760405162461bcd60e51b8152600401610b2d9190613117565b506000612ca18486613273565b6000612d2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612daa9092919063ffffffff16565b8051909150156126ac5780806020019051810190612d4b919061302f565b6126ac5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b2d565b6060612db98484600085612dc1565b949350505050565b6060843b612e115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b2d565b600080866001600160a01b03168587604051612e2d91906130fb565b60006040518083038185875af1925050503d8060008114612e6a576040519150601f19603f3d011682016040523d82523d6000602084013e612e6f565b606091505b50915091508115612e83579150612db99050565b805115612e935780518082602001fd5b8360405162461bcd60e51b8152600401610b2d9190613117565b600060208284031215612ebe578081fd5b81356124a381613325565b600060208284031215612eda578081fd5b81516124a381613325565b60008060408385031215612ef7578081fd5b8235612f0281613325565b915060208381013567ffffffffffffffff80821115612f1f578384fd5b818601915086601f830112612f32578384fd5b813581811115612f4457612f4461330f565b612f56601f8201601f1916850161322a565b91508082528784828501011115612f6b578485fd5b8084840185840137810190920192909252919491935090915050565b60006020808385031215612f99578182fd5b825167ffffffffffffffff80821115612fb0578384fd5b818501915085601f830112612fc3578384fd5b815181811115612fd557612fd561330f565b8060051b9150612fe684830161322a565b8181528481019084860184860187018a1015613000578788fd5b8795505b83861015613022578051835260019590950194918601918601613004565b5098975050505050505050565b600060208284031215613040578081fd5b815180151581146124a3578182fd5b600060208284031215613060578081fd5b5035919050565b600060208284031215613078578081fd5b5051919050565b60008060408385031215613091578182fd5b505080516020909101519092909150565b6000806000606084860312156130b6578081fd5b8351925060208401519150604084015190509250925092565b600081518084526130e78160208601602086016132c9565b601f01601f19169290920160200192915050565b6000825161310d8184602087016132c9565b9190910192915050565b6020815260006124a360208301846130cf565b6020808252600b908201526a10b1b7b73a3937b63632b960a91b604082015260600190565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260069082015265085d985d5b1d60d21b604082015260600190565b6020808252600990820152682174696d656c6f636b60b81b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132095784516001600160a01b0316835293830193918301916001016131e4565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156132535761325361330f565b604052919050565b6000821982111561326e5761326e6132f9565b500190565b60008261328e57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156132ad576132ad6132f9565b500290565b6000828210156132c4576132c46132f9565b500390565b60005b838110156132e45781810151838201526020016132cc565b838111156132f3576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461245e57600080fdfea264697066735822122024012271de8a8875740f094c693890416f314044a8b1b15e7868fc937b18445664736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc80000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
-----Decoded View---------------
Arg [0] : _governance (address): 0xCb410A689A03E06de0a6247b13C13D14237DecC8
Arg [1] : _strategist (address): 0xCb410A689A03E06de0a6247b13C13D14237DecC8
Arg [2] : _controller (address): 0x1C233a46eAE1F928c0467a3C75228E26Ea9888d4
Arg [3] : _timelock (address): 0xCb410A689A03E06de0a6247b13C13D14237DecC8
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Arg [1] : 000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Arg [2] : 0000000000000000000000001c233a46eae1f928c0467a3c75228e26ea9888d4
Arg [3] : 000000000000000000000000cb410a689a03e06de0a6247b13c13d14237decc8
Deployed ByteCode Sourcemap
60756:883:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56240:228;;;;;;;;;;;;;:::i;:::-;;;11237:25:1;;;11225:2;11210:18;56240:228:0;;;;;;;;55520:39;;;;;;;;;;;;55554:5;55520:39;;55137:74;;;;;;;;;;;;55169:42;55137:74;;;;;-1:-1:-1;;;;;4745:32:1;;;4727:51;;4715:2;4700:18;55137:74:0;4682:102:1;40934:74:0;;;;;;;;;;-1:-1:-1;40934:74:0;;;;-1:-1:-1;;;;;40934:74:0;;;55331:21;;;;;;;;;;-1:-1:-1;55331:21:0;;;;-1:-1:-1;;;;;55331:21:0;;;56014:218;;;;;;;;;;;;;:::i;61522:114::-;;;;;;;;;;-1:-1:-1;61599:29:0;;;;;;;;;;;;-1:-1:-1;;;61599:29:0;;;;61522:114;;;;;;;:::i;43351:207::-;;;;;;;;;;-1:-1:-1;43351:207:0;;;;;:::i;:::-;;:::i;:::-;;48028:1053;;;;;;:::i;:::-;;:::i;40656:19::-;;;;;;;;;;-1:-1:-1;40656:19:0;;;;-1:-1:-1;;;;;40656:19:0;;;41653:25;;;;;;;;;;-1:-1:-1;41653:25:0;;;;-1:-1:-1;;;;;41653:25:0;;;44337:213;;;;;;;;;;-1:-1:-1;44337:213:0;;;;;:::i;:::-;;:::i;60867:41::-;;;;;;;;;;;;;;;;45715:1032;;;;;;;;;;-1:-1:-1;45715:1032:0;;;;;:::i;:::-;;:::i;60939:77::-;;;;;;;;;;-1:-1:-1;60939:77:0;;;;-1:-1:-1;;;;;60939:77:0;;;55568:21;;;;;;;;;;;;;;;;40682:73;;;;;;;;;;;;40713:42;40682:73;;55218:77;;;;;;;;;;;;55253:42;55218:77;;61023:63;;;;;;;;;;-1:-1:-1;61023:63:0;;;;-1:-1:-1;;;;;61023:63:0;;;57729:2924;;;;;;;;;;;;;:::i;41505:53::-;;;;;;;;;;;;41552:6;41505:53;;57221:151;;;;;;;;;;-1:-1:-1;57221:151:0;;;;;:::i;:::-;;:::i;45348:289::-;;;;;;;;;;-1:-1:-1;45348:289:0;;;;;:::i;:::-;;:::i;41459:39::-;;;;;;;;;;;;;;;;43108:235;;;;;;;;;;-1:-1:-1;43108:235:0;;;;;:::i;:::-;;:::i;41058:44::-;;;;;;;;;;;;;;;;41589:25;;;;;;;;;;-1:-1:-1;41589:25:0;;;;-1:-1:-1;;;;;41589:25:0;;;41730:71;;;;;;;;;;-1:-1:-1;41730:71:0;;;;-1:-1:-1;;;;;41730:71:0;;;42883:113;;;;;;;;;;;;;:::i;43947:195::-;;;;;;;;;;-1:-1:-1;43947:195:0;;;;;:::i;:::-;;:::i;47325:440::-;;;;;;;;;;;;;:::i;41810:42::-;;;;;;;;;;-1:-1:-1;41810:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6307:14:1;;6300:22;6282:41;;6270:2;6255:18;41810:42:0;6237:92:1;41172:36:0;;;;;;;;;;;;;;;;57380:220;;;;;;;;;;-1:-1:-1;57380:220:0;;;;;:::i;:::-;;:::i;41349:40::-;;;;;;;;;;;;;;;;45035:151;;;;;;;;;;-1:-1:-1;45035:151:0;;;;;:::i;:::-;;:::i;44721:155::-;;;;;;;;;;-1:-1:-1;44721:155:0;;;;;:::i;:::-;;:::i;43748:191::-;;;;;;;;;;-1:-1:-1;43748:191:0;;;;;:::i;:::-;;:::i;40855:72::-;;;;;;;;;;-1:-1:-1;40855:72:0;;;;-1:-1:-1;;;;;40855:72:0;;;57086:127;;;;;;;;;;-1:-1:-1;57086:127:0;;;;;:::i;:::-;;:::i;44884:143::-;;;;;;;;;;-1:-1:-1;44884:143:0;;;;;:::i;:::-;;:::i;42686:118::-;;;;;;;;;;;;;:::i;55481:32::-;;;;;;;;;;;;;;;;46811:438;;;;;;;;;;-1:-1:-1;46811:438:0;;;;;:::i;:::-;;:::i;44150:179::-;;;;;;;;;;-1:-1:-1;44150:179:0;;;;;:::i;:::-;;:::i;44558:155::-;;;;;;;;;;-1:-1:-1;44558:155:0;;;;;:::i;:::-;;:::i;43566:174::-;;;;;;;;;;-1:-1:-1;43566:174:0;;;;;:::i;:::-;;:::i;56502:326::-;;;;;;;;;;;;;:::i;55359:21::-;;;;;;;;;;-1:-1:-1;55359:21:0;;;;-1:-1:-1;;;;;55359:21:0;;;41685:23;;;;;;;;;;-1:-1:-1;41685:23:0;;;;-1:-1:-1;;;;;41685:23:0;;;55448:26;;;;;;;;;;;;;;;;41621:25;;;;;;;;;;-1:-1:-1;41621:25:0;;;;-1:-1:-1;;;;;41621:25:0;;;56240:228;56382:6;;56333:94;;-1:-1:-1;;;56333:94:0;;;;;11447:25:1;;;;56411:4:0;11488:18:1;;;11481:60;56289:7:0;;;;55253:42;;56333:34;;11420:18:1;;56333:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56309:118;56240:228;-1:-1:-1;;56240:228:0:o;56014:218::-;56155:6;;56110:90;;-1:-1:-1;;;56110:90:0;;;;;11447:25:1;;;;56184:4:0;11488:18:1;;;11481:60;56069:7:0;;;;55253:42;;56110:30;;11420:18:1;;56110:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;56089:111:0;56014:218;-1:-1:-1;;56014:218:0:o;43351:207::-;43438:10;;-1:-1:-1;;;;;43438:10:0;43424;:24;;:66;;-1:-1:-1;43480:10:0;;-1:-1:-1;;;;;43480:10:0;43466;:24;43424:66;43416:93;;;;-1:-1:-1;;;43416:93:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;43520:22:0;43545:5;43520:22;;;:10;:22;;;;;:30;;-1:-1:-1;;43520:30:0;;;43351:207::o;48028:1053::-;48194:8;;48133:21;;-1:-1:-1;;;;;48194:8:0;48180:10;:22;48172:44;;;;-1:-1:-1;;;48172:44:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48235:21:0;;48227:41;;;;-1:-1:-1;;;48227:41:0;;7322:2:1;48227:41:0;;;7304:21:1;7361:1;7341:18;;;7334:29;-1:-1:-1;;;7379:18:1;;;7372:37;7426:18;;48227:41:0;7294:156:1;48227:41:0;48545:1;48525;48500:5;48494:12;48470:4;48463:5;48459:16;48433:7;48409:4;48402:5;48398:16;48367:194;48587:16;48637:4;48631:11;48619:23;;48754:4;48750:9;48743:4;48736;48730;48726:15;48722:26;48718:42;48708:8;48704:57;48681:4;48656:120;48807:4;48797:8;48790:22;48865:4;48862:1;48855:4;48845:8;48841:19;48826:44;48900:9;48893:17;48933:1;48928:135;;;;48886:177;;48928:135;49039:4;49032;49022:8;49018:19;49011:33;48886:177;;;;48335:739;;;;:::o;44337:213::-;44461:8;;-1:-1:-1;;;;;44461:8:0;44447:10;:22;44439:44;;;;-1:-1:-1;;;44439:44:0;;;;;;;:::i;:::-;44494:22;:48;44337:213::o;45715:1032::-;45792:10;;-1:-1:-1;;;;;45792:10:0;45778;:24;45770:48;;;;-1:-1:-1;;;45770:48:0;;;;;;;:::i;:::-;45829:16;45855:4;;45848:37;;-1:-1:-1;;;45848:37:0;;45879:4;45848:37;;;4727:51:1;-1:-1:-1;;;;;45855:4:0;;;;45848:22;;4700:18:1;;45848:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45829:56;;45911:7;45900:8;:18;45896:143;;;45945:36;45959:21;:7;45971:8;45959:11;:21::i;:::-;45945:13;:36::i;:::-;45935:46;-1:-1:-1;46006:21:0;45935:46;46018:8;46006:11;:21::i;:::-;45996:31;;45896:143;46051:15;46069:83;41552:6;46069:33;46081:20;;46069:7;:11;;:33;;;;:::i;:::-;:37;;:83::i;:::-;46051:101;;46163:69;46201:10;;;;;;;;;-1:-1:-1;;;;;46201:10:0;-1:-1:-1;;;;;46189:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46170:4;;-1:-1:-1;;;;;46170:4:0;;46224:7;46163:25;:69::i;:::-;46245:20;46268:85;41444:6;46268:34;46280:21;;46268:7;:11;;:34;;;;:::i;:85::-;46245:108;;46364:112;46416:10;;;;;;;;;-1:-1:-1;;;;;46416:10:0;-1:-1:-1;;;;;46404:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46364:112;46518:10;;46489:14;46545:4;;46506:45;;-1:-1:-1;;;46506:45:0;;-1:-1:-1;;;;;46545:4:0;;;46506:45;;;4727:51:1;46489:14:0;;46518:10;;46506:30;;4700:18:1;;46506:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46489:62;-1:-1:-1;;;;;;46570:20:0;;46562:39;;;;-1:-1:-1;;;46562:39:0;;;;;;;:::i;:::-;46666:73;46692:6;46700:38;46725:12;46700:20;:7;46712;46700:11;:20::i;:::-;:24;;:38::i;:::-;46673:4;;-1:-1:-1;;;;;46673:4:0;;46666:73;:25;:73::i;:::-;45715:1032;;;;;:::o;57729:2924::-;42517:10;42506:22;;;;:10;:22;;;;;;;;;:67;;-1:-1:-1;42563:10:0;;-1:-1:-1;;;;;42563:10:0;42549;:24;42506:67;:112;;;-1:-1:-1;42608:10:0;;-1:-1:-1;;;;;42608:10:0;42594;:24;42506:112;42484:145;;;;;;57854:6:::1;::::0;57824:52:::1;::::0;-1:-1:-1;;;57824:52:0;;::::1;::::0;::::1;11447:25:1::0;;;;57870:4:0::1;11488:18:1::0;;;11481:60;55253:42:0::1;::::0;57824:29:::1;::::0;11420:18:1;;57824:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;57904:38:0::1;::::0;-1:-1:-1;;;57904:38:0;;57936:4:::1;57904:38;::::0;::::1;4727:51:1::0;57887:14:0::1;::::0;-1:-1:-1;55169:42:0::1;::::0;-1:-1:-1;57904:23:0::1;::::0;4700:18:1;;57904:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57887:55:::0;-1:-1:-1;57957:10:0;;57953:393:::1;;58032:18;58053:29;55554:5;58053:16;58064:4;;58053:6;:10;;:16;;;;:::i;:29::-;58032:50;;58097:123;58154:10;;;;;;;;;-1:-1:-1::0;;;;;58154:10:0::1;-1:-1:-1::0;;;;;58142:32:0::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55169:42;::::0;58195:10;58097:26:::1;:123::i;:::-;58246:38;::::0;-1:-1:-1;;;58246:38:0;;58278:4:::1;58246:38;::::0;::::1;4727:51:1::0;55169:42:0::1;::::0;58246:23:::1;::::0;4700:18:1;;58246:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58237:47;;58299:35;55169:42;40713;58327:6;58299:14;:35::i;:::-;57953:393;;58396:11;::::0;-1:-1:-1;;;;;58396:11:0::1;:25:::0;58392:542:::1;;58463:11;::::0;58456:44:::1;::::0;-1:-1:-1;;;58456:44:0;;58494:4:::1;58456:44;::::0;::::1;4727:51:1::0;58438:15:0::1;::::0;-1:-1:-1;;;;;58463:11:0::1;::::0;58456:29:::1;::::0;4700:18:1;;58456:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58438:62:::0;-1:-1:-1;58519:11:0;;58515:408:::1;;58551:19;58573:36;55554:5;58573:23;58585:10;;58573:7;:11;;:23;;;;:::i;:36::-;58551:58;;58628:142;58695:10;;;;;;;;;-1:-1:-1::0;;;;;58695:10:0::1;-1:-1:-1::0;;;;;58683:32:0::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58635:11;::::0;-1:-1:-1;;;;;58635:11:0::1;::::0;58740;58628:32:::1;:142::i;:::-;58809:11;::::0;58802:44:::1;::::0;-1:-1:-1;;;58802:44:0;;58840:4:::1;58802:44;::::0;::::1;4727:51:1::0;-1:-1:-1;;;;;58809:11:0;;::::1;::::0;58802:29:::1;::::0;4700:18:1;;58802:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58880:11;::::0;58792:54;;-1:-1:-1;58865:42:0::1;::::0;-1:-1:-1;;;;;58880:11:0::1;40713:42;58792:54:::0;58865:14:::1;:42::i;:::-;58515:408;;58392:542;;59000:37;::::0;-1:-1:-1;;;59000:37:0;;59031:4:::1;59000:37;::::0;::::1;4727:51:1::0;58984:13:0::1;::::0;40713:42:::1;::::0;59000:22:::1;::::0;4700:18:1;;59000:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58984:53;;59060:1;59052:5;:9;:27;;;;-1:-1:-1::0;59065:6:0::1;::::0;-1:-1:-1;;;;;59065:6:0::1;40713:42;59065:14;;59052:27;59048:102;;;59117:6;::::0;59096:42:::1;::::0;40713::::1;::::0;-1:-1:-1;;;;;59117:6:0::1;59125:12;:5:::0;59135:1:::1;59125:9;:12::i;:::-;59096:14;:42::i;:::-;59212:1;59204:5;:9;:27;;;;-1:-1:-1::0;59217:6:0::1;::::0;-1:-1:-1;;;;;59217:6:0::1;40713:42;59217:14;;59204:27;59200:102;;;59269:6;::::0;59248:42:::1;::::0;40713::::1;::::0;-1:-1:-1;;;;;59269:6:0::1;59277:12;:5:::0;59287:1:::1;59277:9;:12::i;59248:42::-;59387:6;::::0;59380:39:::1;::::0;-1:-1:-1;;;59380:39:0;;59413:4:::1;59380:39;::::0;::::1;4727:51:1::0;59362:15:0::1;::::0;-1:-1:-1;;;;;59387:6:0::1;::::0;59380:24:::1;::::0;4700:18:1;;59380:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59455:6;::::0;59448:39:::1;::::0;-1:-1:-1;;;59448:39:0;;59481:4:::1;59448:39;::::0;::::1;4727:51:1::0;59362:57:0;;-1:-1:-1;59430:15:0::1;::::0;-1:-1:-1;;;;;59455:6:0;;::::1;::::0;59448:24:::1;::::0;4700:18:1;;59448:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59430:57;;59512:1;59502:7;:11;:26;;;;;59527:1;59517:7;:11;59502:26;59498:936;;;59572:11;::::0;59552:6:::1;::::0;59545:42:::1;::::0;-1:-1:-1;;;;;59552:6:0;;::::1;::::0;59572:11:::1;;59545:26;:42::i;:::-;59629:11;::::0;59609:6:::1;::::0;59602:48:::1;::::0;-1:-1:-1;;;;;59609:6:0;;::::1;::::0;59629:11:::1;59642:7:::0;59602:26:::1;:48::i;:::-;59692:11;::::0;59672:6:::1;::::0;59665:42:::1;::::0;-1:-1:-1;;;;;59672:6:0;;::::1;::::0;59692:11:::1;;59665:26;:42::i;:::-;59749:11;::::0;59729:6:::1;::::0;59722:48:::1;::::0;-1:-1:-1;;;;;59729:6:0;;::::1;::::0;59749:11:::1;59762:7:::0;59722:26:::1;:48::i;:::-;59803:11;::::0;59847:6:::1;::::0;59872::::1;::::0;-1:-1:-1;;;;;59803:11:0;;::::1;::::0;59787:41:::1;::::0;59847:6;::::1;::::0;59872::::1;59897:7:::0;59923;59803:11:::1;::::0;59997:4:::1;60021:23;:15;60041:2;60021:19;:23::i;:::-;59787:272;::::0;::::1;::::0;;;-1:-1:-1;;;;;;59787:272:0;;;-1:-1:-1;;;;;5513:15:1;;;59787:272:0::1;::::0;::::1;5495:34:1::0;5565:15;;;5545:18;;;5538:43;5597:18;;;5590:34;;;;5640:18;;;5633:34;;;;5683:19;;;5676:35;;;;5727:19;;;5720:35;5792:15;;;5771:19;;;5764:44;5824:19;;;5817:35;;;;5429:19;;59787:272:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;60112:6:0::1;::::0;60159:10:::1;::::0;60147:34:::1;::::0;;-1:-1:-1;;;60147:34:0;;;;-1:-1:-1;;;;;60112:6:0;;::::1;::::0;-1:-1:-1;60105:23:0::1;::::0;60159:10;;::::1;::::0;60147:32:::1;::::0;:34:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;60159:10;60147:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60207:6;::::0;60200:39:::1;::::0;-1:-1:-1;;;60200:39:0;;60233:4:::1;60200:39;::::0;::::1;4727:51:1::0;-1:-1:-1;;;;;60207:6:0;;::::1;::::0;60200:24:::1;::::0;4700:18:1;;60200:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60105:149;::::0;-1:-1:-1;;;;;;60105:149:0::1;::::0;;;;;;-1:-1:-1;;;;;6055:32:1;;;60105:149:0::1;::::0;::::1;6037:51:1::0;6104:18;;;6097:34;6010:18;;60105:149:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;60327:10:0::1;::::0;60315:34:::1;::::0;;-1:-1:-1;;;60315:34:0;;;;60269:153:::1;::::0;-1:-1:-1;;;;;60327:10:0::1;::::0;60315:32:::1;::::0;:34:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;60327:10;60315:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60375:6;::::0;60368:39:::1;::::0;-1:-1:-1;;;60368:39:0;;60401:4:::1;60368:39;::::0;::::1;4727:51:1::0;-1:-1:-1;;;;;60375:6:0;;::::1;::::0;60368:24:::1;::::0;4700:18:1;;60368:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60276:6;::::0;-1:-1:-1;;;;;60276:6:0::1;::::0;60269:153;:27:::1;:153::i;:::-;60446:13;60469:4:::0;;60462:37:::1;::::0;-1:-1:-1;;;60462:37:0;;60493:4:::1;60462:37;::::0;::::1;4727:51:1::0;-1:-1:-1;;;;;60469:4:0;;::::1;::::0;60462:22:::1;::::0;4700:18:1;;60462:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60515:31;::::0;;60523:15:::1;12714:25:1::0;;12770:2;12755:18;;12748:34;;;60446:53:0;;-1:-1:-1;60515:31:0::1;::::0;12687:18:1;60515:31:0::1;;;;;;;60607:38;:36;:38::i;57221:151::-:0;57307:8;;-1:-1:-1;;;;;57307:8:0;57293:10;:22;57285:44;;;;-1:-1:-1;;;57285:44:0;;;;;;;:::i;:::-;57340:10;:24;57221:151::o;45348:289::-;45449:10;;45399:15;;-1:-1:-1;;;;;45449:10:0;45435;:24;45427:48;;;;-1:-1:-1;;;45427:48:0;;;;;;;:::i;:::-;45494:4;;-1:-1:-1;;;;;45494:23:0;;;:4;;:23;;45486:40;;;;-1:-1:-1;;;45486:40:0;;;;;;8353:2:1;8335:21;;;8392:1;8372:18;;;8365:29;-1:-1:-1;;;8425:2:1;8410:18;;8403:34;8469:2;8454:18;;8325:153;45486:40:0;45547:31;;-1:-1:-1;;;45547:31:0;;45572:4;45547:31;;;4727:51:1;-1:-1:-1;;;;;45547:16:0;;;;;4700:18:1;;45547:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45609:10;;45537:41;;-1:-1:-1;45589:40:0;;-1:-1:-1;;;;;45589:19:0;;;;45609:10;45537:41;45589:19;:40::i;:::-;45348:289;;;:::o;43108:235::-;43198:10;;-1:-1:-1;;;;;43198:10:0;43184;:24;;:66;;-1:-1:-1;43240:10:0;;-1:-1:-1;;;;;43240:10:0;43226;:24;43184:66;:92;;;-1:-1:-1;43265:10:0;43254:22;;;;:10;:22;;;;;;;;43184:92;43176:119;;;;-1:-1:-1;;;43176:119:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43306:22:0;;;;;:10;:22;;;;;:29;;-1:-1:-1;;43306:29:0;43331:4;43306:29;;;43108:235::o;42883:113::-;42925:7;42952:36;42972:15;:13;:15::i;:::-;42952;:13;:15::i;:::-;:19;;:36::i;:::-;42945:43;;42883:113;:::o;43947:195::-;44055:8;;-1:-1:-1;;;;;44055:8:0;44041:10;:22;44033:44;;;;-1:-1:-1;;;44033:44:0;;;;;;;:::i;:::-;44088:21;:46;43947:195::o;47325:440::-;47416:10;;47366:15;;-1:-1:-1;;;;;47416:10:0;47402;:24;47394:48;;;;-1:-1:-1;;;47394:48:0;;;;;;;:::i;:::-;47453:14;:12;:14::i;:::-;47497:4;;47490:37;;-1:-1:-1;;;47490:37:0;;47521:4;47490:37;;;4727:51:1;-1:-1:-1;;;;;47497:4:0;;;;47490:22;;4700:18:1;;47490:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47569:10;;47540:14;47596:4;;47557:45;;-1:-1:-1;;;47557:45:0;;-1:-1:-1;;;;;47596:4:0;;;47557:45;;;4727:51:1;47480:47:0;;-1:-1:-1;47540:14:0;;47569:10;;;47557:30;;4700:18:1;;47557:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47540:62;-1:-1:-1;;;;;;47621:20:0;;47613:39;;;;-1:-1:-1;;;47613:39:0;;;;;;;:::i;:::-;47722:4;;47715:42;;-1:-1:-1;;;;;47722:4:0;47741:6;47749:7;47715:25;:42::i;:::-;47325:440;;:::o;57380:220::-;57482:8;;-1:-1:-1;;;;;57482:8:0;57468:10;:22;;:50;;-1:-1:-1;57508:10:0;;-1:-1:-1;;;;;57508:10:0;57494;:24;57468:50;57446:109;;;;-1:-1:-1;;;57446:109:0;;;;;;;:::i;:::-;57566:11;:26;;-1:-1:-1;;;;;;57566:26:0;-1:-1:-1;;;;;57566:26:0;;;;;;;;;;57380:220::o;45035:151::-;45121:8;;-1:-1:-1;;;;;45121:8:0;45107:10;:22;45099:44;;;;-1:-1:-1;;;45099:44:0;;;;;;;:::i;:::-;45154:10;:24;;-1:-1:-1;;;;;;45154:24:0;-1:-1:-1;;;;;45154:24:0;;;;;;;;;;45035:151::o;44721:155::-;44807:10;;-1:-1:-1;;;;;44807:10:0;44793;:24;44785:48;;;;-1:-1:-1;;;44785:48:0;;6982:2:1;44785:48:0;;;6964:21:1;7021:2;7001:18;;;6994:30;-1:-1:-1;;;7040:18:1;;;7033:41;7091:18;;44785:48:0;6954:161:1;44785:48:0;44844:10;:24;;-1:-1:-1;;;;;;44844:24:0;-1:-1:-1;;;;;44844:24:0;;;;;;;;;;44721:155::o;43748:191::-;43854:8;;-1:-1:-1;;;;;43854:8:0;43840:10;:22;43832:44;;;;-1:-1:-1;;;43832:44:0;;;;;;;:::i;:::-;43887:20;:44;43748:191::o;57086:127::-;57160:8;;-1:-1:-1;;;;;57160:8:0;57146:10;:22;57138:44;;;;-1:-1:-1;;;57138:44:0;;;;;;;:::i;:::-;57193:4;:12;57086:127::o;44884:143::-;44966:8;;-1:-1:-1;;;;;44966:8:0;44952:10;:22;44944:44;;;;-1:-1:-1;;;44944:44:0;;;;;;;:::i;:::-;44999:8;:20;;-1:-1:-1;;;;;;44999:20:0;-1:-1:-1;;;;;44999:20:0;;;;;;;;;;44884:143::o;42686:118::-;42732:7;42766:4;;42759:37;;-1:-1:-1;;;42759:37:0;;42790:4;42759:37;;;4727:51:1;-1:-1:-1;;;;;42766:4:0;;;;42759:22;;4700:18:1;;42759:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46811:438::-;46944:10;;46889:15;;-1:-1:-1;;;;;46944:10:0;46930;:24;46922:48;;;;-1:-1:-1;;;46922:48:0;;;;;;;:::i;:::-;46981:22;46995:7;46981:13;:22::i;:::-;-1:-1:-1;47033:4:0;;47026:37;;-1:-1:-1;;;47026:37:0;;47057:4;47026:37;;;4727:51:1;-1:-1:-1;;;;;47033:4:0;;;;47026:22;;4700:18:1;;47026:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47105:10;;47076:14;47132:4;;47093:45;;-1:-1:-1;;;47093:45:0;;-1:-1:-1;;;;;47132:4:0;;;47093:45;;;4727:51:1;47016:47:0;;-1:-1:-1;47076:14:0;;47105:10;;;47093:30;;4700:18:1;;47093:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47076:62;-1:-1:-1;;;;;;47157:20:0;;47149:39;;;;-1:-1:-1;;;47149:39:0;;;;;;;:::i;:::-;47206:4;;47199:42;;-1:-1:-1;;;;;47206:4:0;47225:6;47233:7;47199:25;:42::i;:::-;46811:438;;;;:::o;44150:179::-;44250:8;;-1:-1:-1;;;;;44250:8:0;44236:10;:22;44228:44;;;;-1:-1:-1;;;44228:44:0;;;;;;;:::i;:::-;44283:17;:38;44150:179::o;44558:155::-;44644:10;;-1:-1:-1;;;;;44644:10:0;44630;:24;44622:48;;;;-1:-1:-1;;;44622:48:0;;6982:2:1;44622:48:0;;;6964:21:1;7021:2;7001:18;;;6994:30;-1:-1:-1;;;7040:18:1;;;7033:41;7091:18;;44622:48:0;6954:161:1;44622:48:0;44681:10;:24;;-1:-1:-1;;;;;;44681:24:0;-1:-1:-1;;;;;44681:24:0;;;;;;;;;;44558:155::o;43566:174::-;43660:10;;-1:-1:-1;;;;;43660:10:0;43646;:24;43638:51;;;;-1:-1:-1;;;43638:51:0;;;;;;;:::i;:::-;43700:14;:32;;-1:-1:-1;;;;;;43700:32:0;-1:-1:-1;;;;;43700:32:0;;;;;;;;;;43566:174::o;56502:326::-;56548:13;56571:4;;56564:37;;-1:-1:-1;;;56564:37:0;;56595:4;56564:37;;;4727:51:1;-1:-1:-1;;;;;56571:4:0;;;;56564:22;;4700:18:1;;56564:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56548:53;-1:-1:-1;56616:9:0;;56612:209;;56677:1;56649:4;;56642:37;;-1:-1:-1;;;;;56649:4:0;;;;55253:42;;56642:24;:37::i;:::-;56701:4;;56694:41;;-1:-1:-1;;;;;56701:4:0;55253:42;56729:5;56694:24;:41::i;:::-;56780:6;;56750:59;;-1:-1:-1;;;56750:59:0;;;;;12995:25:1;;;;13036:18;;;13029:34;;;56803:4:0;13079:18:1;;;13072:60;55253:42:0;;56750:29;;12968:18:1;;56750:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56612:209;56502:326;:::o;1485:136::-;1543:7;1570:43;1574:1;1577;1570:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1563:50;1485:136;-1:-1:-1;;;1485:136:0:o;56836:214::-;56986:6;;56955:62;;-1:-1:-1;;;56955:62:0;;;;;12995:25:1;;;;13036:18;;;13029:34;;;57011:4:0;13079:18:1;;;13072:60;56930:7:0;;55253:42;;56955:30;;12968:18:1;;56955:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57035:7:0;;56836:214;-1:-1:-1;;;;56836:214:0:o;1021:181::-;1079:7;;1111:5;1115:1;1111;:5;:::i;:::-;1099:17;;1140:1;1135;:6;;1127:46;;;;-1:-1:-1;;;1127:46:0;;7997:2:1;1127:46:0;;;7979:21:1;8036:2;8016:18;;;8009:30;8075:29;8055:18;;;8048:57;8122:18;;1127:46:0;7969:177:1;2375:471:0;2433:7;2678:6;2674:47;;-1:-1:-1;2708:1:0;2701:8;;2674:47;2733:9;2745:5;2749:1;2745;:5;:::i;:::-;2733:17;-1:-1:-1;2778:1:0;2769:5;2773:1;2733:17;2769:5;:::i;:::-;:10;2761:56;;;;-1:-1:-1;;;2761:56:0;;9028:2:1;2761:56:0;;;9010:21:1;9067:2;9047:18;;;9040:30;9106:34;9086:18;;;9079:62;-1:-1:-1;;;9157:18:1;;;9150:31;9198:19;;2761:56:0;9000:223:1;3322:132:0;3380:7;3407:39;3411:1;3414;3407:39;;;;;;;;;;;;;;;;;:3;:39::i;26835:177::-;26945:58;;-1:-1:-1;;;;;6055:32:1;;26945:58:0;;;6037:51:1;6104:18;;;6097:34;;;26918:86:0;;26938:5;;-1:-1:-1;;;26968:23:0;6010:18:1;;26945:58:0;;;;-1:-1:-1;;26945:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26945:58:0;-1:-1:-1;;;;;;26945:58:0;;;;;;;;;;26918:19;:86::i;:::-;26835:177;;;:::o;49126:806::-;-1:-1:-1;;;;;49257:17:0;;49249:26;;;;;;49288:21;-1:-1:-1;;;;;49326:13:0;;40713:42;49326:13;;:28;;-1:-1:-1;;;;;;49343:11:0;;40713:42;49343:11;49326:28;49322:285;;;49378:16;;;49392:1;49378:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49378:16:0;49371:23;;49419:5;49409:4;49414:1;49409:7;;;;;;-1:-1:-1;;;49409:7:0;;;;;;;;;;;;;;:15;-1:-1:-1;;;;;49409:15:0;;;-1:-1:-1;;;;;49409:15:0;;;;;49449:3;49439:4;49444:1;49439:7;;;;;;-1:-1:-1;;;49439:7:0;;;;;;;;;;;;;;:13;-1:-1:-1;;;;;49439:13:0;;;-1:-1:-1;;;;;49439:13:0;;;;;49322:285;;;49492:16;;;49506:1;49492:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49492:16:0;49485:23;;49533:5;49523:4;49528:1;49523:7;;;;;;-1:-1:-1;;;49523:7:0;;;;;;;;;;;;;;:15;-1:-1:-1;;;;;49523:15:0;;;-1:-1:-1;;;;;49523:15:0;;;;;40713:42;49553:4;49558:1;49553:7;;;;;;-1:-1:-1;;;49553:7:0;;;;;;;;;;;;;;:14;-1:-1:-1;;;;;49553:14:0;;;-1:-1:-1;;;;;49553:14:0;;;;;49592:3;49582:4;49587:1;49582:7;;;;;;-1:-1:-1;;;49582:7:0;;;;;;;;;;;;;;:13;-1:-1:-1;;;;;49582:13:0;;;-1:-1:-1;;;;;49582:13:0;;;;;49322:285;49653:11;;49627:41;;-1:-1:-1;;;;;49627:25:0;;;;49653:11;;49627:25;:41::i;:::-;49705:11;;49679:47;;-1:-1:-1;;;;;49679:25:0;;;;49705:11;49718:7;49679:25;:47::i;:::-;49753:11;;-1:-1:-1;;;;;49753:11:0;49737:53;49805:7;49753:11;49843:4;49870;49890:23;:15;49910:2;49890:19;:23::i;:::-;49737:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49737:187:0;;;;;;;;;;;;:::i;27494:622::-;27864:10;;;27863:62;;-1:-1:-1;27880:39:0;;-1:-1:-1;;;27880:39:0;;27904:4;27880:39;;;5001:34:1;-1:-1:-1;;;;;5071:15:1;;;5051:18;;;5044:43;27880:15:0;;;;;4936:18:1;;27880:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;27863:62;27855:152;;;;-1:-1:-1;;;27855:152:0;;10870:2:1;27855:152:0;;;10852:21:1;10909:2;10889:18;;;10882:30;10948:34;10928:18;;;10921:62;-1:-1:-1;;;10999:18:1;;;10992:52;11061:19;;27855:152:0;10842:244:1;27855:152:0;28045:62;;-1:-1:-1;;;;;6055:32:1;;28045:62:0;;;6037:51:1;6104:18;;;6097:34;;;28018:90:0;;28038:5;;-1:-1:-1;;;28068:22:0;6010:18:1;;28045:62:0;5992:145:1;50417:623:0;50485:13;50508:4;;50501:37;;-1:-1:-1;;;50501:37:0;;50532:4;50501:37;;;4727:51:1;-1:-1:-1;;;;;50508:4:0;;;;50501:22;;4700:18:1;;50501:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50485:53;-1:-1:-1;50555:9:0;;50551:482;;50667:10;;50655:34;;;-1:-1:-1;;;50655:34:0;;;;50611:173;;-1:-1:-1;;;;;50667:10:0;;50655:32;;:34;;;;;;;;;;;;;;50667:10;50655:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50708:61;41158:5;50708:33;50718:22;;50708:5;:9;;:33;;;;:::i;50611:173::-;50889:10;;50877:33;;;-1:-1:-1;;;50877:33:0;;;;50833:162;;-1:-1:-1;;;;;50889:10:0;;50877:31;;:33;;;;;;;;;;;;;;50889:10;50877:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50929:51;41259:5;50929:28;50939:17;;50929:5;:9;;:28;;;;:::i;50833:162::-;51012:9;:7;:9::i;47773:82::-;47817:30;47831:15;:13;:15::i;1924:192::-;2010:7;2046:12;2038:6;;;;2030:29;;;;-1:-1:-1;;;2030:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2070:9:0;2082:5;2086:1;2082;:5;:::i;:::-;2070:17;1924:192;-1:-1:-1;;;;;1924:192:0:o;3950:278::-;4036:7;4071:12;4064:5;4056:28;;;;-1:-1:-1;;;4056:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4095:9:0;4107:5;4111:1;4107;:5;:::i;29140:761::-;29564:23;29590:69;29618:4;29590:69;;;;;;;;;;;;;;;;;29598:5;-1:-1:-1;;;;;29590:27:0;;;:69;;;;;:::i;:::-;29674:17;;29564:95;;-1:-1:-1;29674:21:0;29670:224;;29816:10;29805:30;;;;;;;;;;;;:::i;:::-;29797:85;;;;-1:-1:-1;;;29797:85:0;;10122:2:1;29797:85:0;;;10104:21:1;10161:2;10141:18;;;10134:30;10200:34;10180:18;;;10173:62;-1:-1:-1;;;10251:18:1;;;10244:40;10301:19;;29797:85:0;10094:232:1;12964:196:0;13067:12;13099:53;13122:6;13130:4;13136:1;13139:12;13099:22;:53::i;:::-;13092:60;12964:196;-1:-1:-1;;;;12964:196:0:o;14341:979::-;14471:12;10413:20;;14496:60;;;;-1:-1:-1;;;14496:60:0;;9764:2:1;14496:60:0;;;9746:21:1;9803:2;9783:18;;;9776:30;9842:31;9822:18;;;9815:59;9891:18;;14496:60:0;9736:179:1;14496:60:0;14630:12;14644:23;14671:6;-1:-1:-1;;;;;14671:11:0;14691:8;14702:4;14671:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14629:78;;;;14722:7;14718:595;;;14753:10;-1:-1:-1;14746:17:0;;-1:-1:-1;14746:17:0;14718:595;14867:17;;:21;14863:439;;15130:10;15124:17;15191:15;15178:10;15174:2;15170:19;15163:44;15078:148;15273:12;15266:20;;-1:-1:-1;;;15266:20:0;;;;;;;;:::i;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:943::-;619:6;627;680:2;668:9;659:7;655:23;651:32;648:2;;;701:6;693;686:22;648:2;745:9;732:23;764:31;789:5;764:31;:::i;:::-;814:5;-1:-1:-1;838:2:1;876:18;;;863:32;914:18;944:14;;;941:2;;;976:6;968;961:22;941:2;1019:6;1008:9;1004:22;994:32;;1064:7;1057:4;1053:2;1049:13;1045:27;1035:2;;1091:6;1083;1076:22;1035:2;1132;1119:16;1154:2;1150;1147:10;1144:2;;;1160:18;;:::i;:::-;1202:53;1245:2;1226:13;;-1:-1:-1;;1222:27:1;1218:36;;1202:53;:::i;:::-;1189:66;;1278:2;1271:5;1264:17;1318:7;1313:2;1308;1304;1300:11;1296:20;1293:33;1290:2;;;1344:6;1336;1329:22;1290:2;1404;1399;1395;1391:11;1386:2;1379:5;1375:14;1362:45;1427:14;;1423:23;;;1416:39;;;;638:847;;1431:5;;-1:-1:-1;638:847:1;;-1:-1:-1;;638:847:1:o;1490:992::-;1585:6;1616:2;1659;1647:9;1638:7;1634:23;1630:32;1627:2;;;1680:6;1672;1665:22;1627:2;1718:9;1712:16;1747:18;1788:2;1780:6;1777:14;1774:2;;;1809:6;1801;1794:22;1774:2;1852:6;1841:9;1837:22;1827:32;;1897:7;1890:4;1886:2;1882:13;1878:27;1868:2;;1924:6;1916;1909:22;1868:2;1958;1952:9;1980:2;1976;1973:10;1970:2;;;1986:18;;:::i;:::-;2032:2;2029:1;2025:10;2015:20;;2055:28;2079:2;2075;2071:11;2055:28;:::i;:::-;2117:15;;;2148:12;;;;2180:11;;;2210;;;2206:20;;2203:33;-1:-1:-1;2200:2:1;;;2254:6;2246;2239:22;2200:2;2281:6;2272:15;;2296:156;2310:2;2307:1;2304:9;2296:156;;;2367:10;;2355:23;;2328:1;2321:9;;;;;2398:12;;;;2430;;2296:156;;;-1:-1:-1;2471:5:1;1596:886;-1:-1:-1;;;;;;;;1596:886:1:o;2487:297::-;2554:6;2607:2;2595:9;2586:7;2582:23;2578:32;2575:2;;;2628:6;2620;2613:22;2575:2;2665:9;2659:16;2718:5;2711:13;2704:21;2697:5;2694:32;2684:2;;2745:6;2737;2730:22;3065:190;3124:6;3177:2;3165:9;3156:7;3152:23;3148:32;3145:2;;;3198:6;3190;3183:22;3145:2;-1:-1:-1;3226:23:1;;3135:120;-1:-1:-1;3135:120:1:o;3260:194::-;3330:6;3383:2;3371:9;3362:7;3358:23;3354:32;3351:2;;;3404:6;3396;3389:22;3351:2;-1:-1:-1;3432:16:1;;3341:113;-1:-1:-1;3341:113:1:o;3459:255::-;3538:6;3546;3599:2;3587:9;3578:7;3574:23;3570:32;3567:2;;;3620:6;3612;3605:22;3567:2;-1:-1:-1;;3648:16:1;;3704:2;3689:18;;;3683:25;3648:16;;3683:25;;-1:-1:-1;3557:157:1:o;3719:316::-;3807:6;3815;3823;3876:2;3864:9;3855:7;3851:23;3847:32;3844:2;;;3897:6;3889;3882:22;3844:2;3931:9;3925:16;3915:26;;3981:2;3970:9;3966:18;3960:25;3950:35;;4025:2;4014:9;4010:18;4004:25;3994:35;;3834:201;;;;;:::o;4040:257::-;4081:3;4119:5;4113:12;4146:6;4141:3;4134:19;4162:63;4218:6;4211:4;4206:3;4202:14;4195:4;4188:5;4184:16;4162:63;:::i;:::-;4279:2;4258:15;-1:-1:-1;;4254:29:1;4245:39;;;;4286:4;4241:50;;4089:208;-1:-1:-1;;4089:208:1:o;4302:274::-;4431:3;4469:6;4463:13;4485:53;4531:6;4526:3;4519:4;4511:6;4507:17;4485:53;:::i;:::-;4554:16;;;;;4439:137;-1:-1:-1;;4439:137:1:o;6334:217::-;6481:2;6470:9;6463:21;6444:4;6501:44;6541:2;6530:9;6526:18;6518:6;6501:44;:::i;7455:335::-;7657:2;7639:21;;;7696:2;7676:18;;;7669:30;-1:-1:-1;;;7730:2:1;7715:18;;7708:41;7781:2;7766:18;;7629:161::o;8483:338::-;8685:2;8667:21;;;8724:2;8704:18;;;8697:30;-1:-1:-1;;;8758:2:1;8743:18;;8736:44;8812:2;8797:18;;8657:164::o;9228:329::-;9430:2;9412:21;;;9469:1;9449:18;;;9442:29;-1:-1:-1;;;9502:2:1;9487:18;;9480:36;9548:2;9533:18;;9402:155::o;10331:332::-;10533:2;10515:21;;;10572:1;10552:18;;;10545:29;-1:-1:-1;;;10605:2:1;10590:18;;10583:39;10654:2;10639:18;;10505:158::o;11552:983::-;11814:4;11862:3;11851:9;11847:19;11893:6;11882:9;11875:25;11919:2;11957:6;11952:2;11941:9;11937:18;11930:34;12000:3;11995:2;11984:9;11980:18;11973:31;12024:6;12059;12053:13;12090:6;12082;12075:22;12128:3;12117:9;12113:19;12106:26;;12167:2;12159:6;12155:15;12141:29;;12188:4;12201:195;12215:6;12212:1;12209:13;12201:195;;;12280:13;;-1:-1:-1;;;;;12276:39:1;12264:52;;12371:15;;;;12336:12;;;;12312:1;12230:9;12201:195;;;-1:-1:-1;;;;;;;12452:32:1;;;;12447:2;12432:18;;12425:60;-1:-1:-1;;;12516:3:1;12501:19;12494:35;12413:3;11823:712;-1:-1:-1;;;11823:712:1:o;13143:275::-;13214:2;13208:9;13279:2;13260:13;;-1:-1:-1;;13256:27:1;13244:40;;13314:18;13299:34;;13335:22;;;13296:62;13293:2;;;13361:18;;:::i;:::-;13397:2;13390:22;13188:230;;-1:-1:-1;13188:230:1:o;13423:128::-;13463:3;13494:1;13490:6;13487:1;13484:13;13481:2;;;13500:18;;:::i;:::-;-1:-1:-1;13536:9:1;;13471:80::o;13556:217::-;13596:1;13622;13612:2;;-1:-1:-1;;;13647:31:1;;13701:4;13698:1;13691:15;13729:4;13654:1;13719:15;13612:2;-1:-1:-1;13758:9:1;;13602:171::o;13778:168::-;13818:7;13884:1;13880;13876:6;13872:14;13869:1;13866:21;13861:1;13854:9;13847:17;13843:45;13840:2;;;13891:18;;:::i;:::-;-1:-1:-1;13931:9:1;;13830:116::o;13951:125::-;13991:4;14019:1;14016;14013:8;14010:2;;;14024:18;;:::i;:::-;-1:-1:-1;14061:9:1;;14000:76::o;14081:258::-;14153:1;14163:113;14177:6;14174:1;14171:13;14163:113;;;14253:11;;;14247:18;14234:11;;;14227:39;14199:2;14192:10;14163:113;;;14294:6;14291:1;14288:13;14285:2;;;14329:1;14320:6;14315:3;14311:16;14304:27;14285:2;;14134:205;;;:::o;14344:127::-;14405:10;14400:3;14396:20;14393:1;14386:31;14436:4;14433:1;14426:15;14460:4;14457:1;14450:15;14476:127;14537:10;14532:3;14528:20;14525:1;14518:31;14568:4;14565:1;14558:15;14592:4;14589:1;14582:15;14608:131;-1:-1:-1;;;;;14683:31:1;;14673:42;;14663:2;;14729:1;14726;14719:12
Metadata Hash
24012271de8a8875740f094c693890416f314044a8b1b15e7868fc937b184456
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.