Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
PCV_V3
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at bobascan.com on 2022-09-09 */ // File: contracts/common/SafeMath.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity 0.6.12; /** * @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/common/IERC20.sol pragma solidity 0.6.12; /** * @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/common/Address.sol pragma solidity 0.6.12; /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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/common/SafeERC20.sol pragma solidity 0.6.12; /** * @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/IConverter.sol pragma solidity 0.6.12; interface IConverter { function swap(address _tokenIn, address _tokenOut, uint _amountIn) external returns (uint amountOut_); function addLiquidity(address _tokenA, address _tokenB, uint _amountA, uint _amountB) external returns (uint lpAmount_); function removeLiquidity(address _lpPair, uint _liquidity) external returns (address _tokenA, address _tokenB, uint amountA_, uint amountB_); } // File: contracts/interfaces/IOolongSwapPair.sol pragma solidity >=0.5.0; interface IOolongSwapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function price(address token, uint256 baseDecimal) external view returns (uint256); function initialize(address, address) external; } // File: contracts/interfaces/IOolongFarm.sol pragma solidity 0.6.12; interface IOolongFarm { function poolInfo(uint _poolId) external view returns (address _lpToken, uint _allocPoint, uint _lastRewardTimestamp, uint _accOolongPerShare, address _bonusFarm); function userInfo(uint _poolId, address _user) external view returns (uint _balance, uint _rewardDebt); function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function pendingOolong(uint256 _pid, address _user) external view returns (uint256); function claimAll() external; function distributorPercent() external view returns (uint); function oolongPerSec() external view returns (uint); function totalAllocPoint() external view returns (uint); } // File: contracts/interfaces/IOolongFarmV2.sol pragma solidity 0.6.12; interface IOolongFarmV2 { function poolInfo(uint _poolId) external view returns (address _lpToken, uint _allocPoint, uint _lastRewardTimestamp, uint _accOolongPerShare, address _bonusFarm); function userInfo(uint _poolId, address _user) external view returns (uint _balance, uint _rewardDebt); function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function pendingOolong(uint256 _pid, address _user) external view returns (uint256); function claimAll(uint256[] calldata pids) external; function distributorPercent() external view returns (uint); function oolongPerSec() external view returns (uint); function totalAllocPoint() external view returns (uint); } // File: contracts/interfaces/IOolongStaker.sol pragma solidity 0.6.12; interface IOolongStaker { function enterFor(address _recipient, uint256 _amount) external; function enter(uint256 _amount) external; function leave(uint256 _share) external; function cooldown() external; } // File: contracts/pcv/PCV_V3.sol pragma solidity 0.6.12; // A PCV treasury that takes in LP tokens and can do the following: // - convert LP to underlyings, and swap everything to OOLONG unless reserve assets // - swap any asset in PCV into another asset // - create any LP pairs // - stake LP tokens into Oolong farm V1 and V2 // - stake OLO tokens into YOLO // - convert directly from one LP to another contract PCV_V3 { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; /* ========== STATE VARIABLES ========== */ address public governance; address public converter; address public immutable oolongFarmV1; address public immutable oolongFarmV2; address public immutable olo; address public immutable yolo; mapping (address => bool) public isReserveAsset; /* ========== CONSTRUCTOR ========== */ constructor(address _converter, address _oolongFarmV1, address _oolongFarmV2, address _olo, address _yolo) public { governance = msg.sender; converter = _converter; oolongFarmV1 = _oolongFarmV1; oolongFarmV2 = _oolongFarmV2; olo = _olo; yolo = _yolo; } /* ========== MODIFIER ========== */ modifier onlyGov() { require(msg.sender == governance); _; } /* ========== VIEW FUNCTIONS ========== */ function holdings(address _token) public view returns (uint256) { return IERC20(_token).balanceOf(address(this)); } /* ========== PCV MANAGEMENT FUNCTIONS ========== */ receive() external payable {} // BASE FUNCTIONS // function takeOut( address _token, address _destination, uint256 _amount ) external onlyGov { require(_amount <= holdings(_token), "!insufficient"); IERC20(_token).safeTransfer(_destination, _amount); } function takeOutAll( address[] calldata _tokens, address _destination ) external onlyGov { for (uint i=0; i<_tokens.length; i++) { uint256 amount = IERC20(_tokens[i]).balanceOf(address(this)); IERC20(_tokens[i]).safeTransfer(_destination, amount); } } function takeOutETH( address payable _destination, uint256 _amount ) external payable onlyGov { _destination.transfer(_amount); } // swap any token to any token function swap(address _tokenIn, address _tokenOut, uint256 _amountIn) public onlyGov returns (uint) { if (IERC20(_tokenIn).allowance(address(this), converter) < _amountIn) { IERC20(_tokenIn).approve(converter, type(uint).max); } uint256 amountOut = IConverter(converter).swap(_tokenIn, _tokenOut, _amountIn); emit Swapped(_tokenIn, _tokenOut, _amountIn, amountOut); return amountOut; } // add liquidity for any token pair function addLiquidity( address _tokenA, address _tokenB, uint256 _amountA, uint256 _amountB ) public onlyGov returns (uint) { if (IERC20(_tokenA).allowance(address(this), converter) < _amountA) { IERC20(_tokenA).approve(converter, type(uint).max); } if (IERC20(_tokenB).allowance(address(this), converter) < _amountB) { IERC20(_tokenB).approve(converter, type(uint).max); } uint256 lpAmount = IConverter(converter).addLiquidity(_tokenA, _tokenB, _amountA, _amountB); emit AddedLiquidity(_tokenA, _tokenB, _amountA, _amountB, lpAmount); return lpAmount; } // remove LP and get underlyings function removeLiquidity(address _lpPair, uint _liquidity) public onlyGov returns (address, address, uint256, uint256) { if (IERC20(_lpPair).allowance(address(this), converter) < _liquidity) { IERC20(_lpPair).approve(converter, type(uint).max); } (address _tokenA, address _tokenB, uint256 amountA, uint256 amountB) = IConverter(converter).removeLiquidity(_lpPair, _liquidity); emit RemovedLiquidity(_tokenA, _tokenB, amountA, amountB, _liquidity); return (_tokenA, _tokenB, amountA, amountB); } // COMPOSITE FUNCTIONS // // remove LP and convert underlyings to token unless reserve assets. function convertLPToToken(address _lpPair, address _tokenDesired) public onlyGov { uint256 liquidity = IERC20(_lpPair).balanceOf(address(this)); (address tokenA, address tokenB, uint256 amountA, uint256 amountB) = removeLiquidity(_lpPair, liquidity); if (!isReserveAsset[tokenA]) { swap(tokenA, _tokenDesired, amountA); } if (!isReserveAsset[tokenB]) { swap(tokenB, _tokenDesired, amountB); } } // mass call convertLPToToken function massConvertLPToToken(address[] calldata _lpPairs, address _tokenDesired) external onlyGov { for (uint i=0; i<_lpPairs.length; i++) { convertLPToToken(_lpPairs[i], _tokenDesired); } } function convertTokenToLP(address _token, address _lp) public onlyGov { // Get tokens from LP address token0 = IOolongSwapPair(_lp).token0(); address token1 = IOolongSwapPair(_lp).token1(); uint256 tokenAmount = IERC20(_token).balanceOf(address(this)); uint half = tokenAmount.div(2); uint amountToken0; uint amountToken1; if (_token == token0) { // use half of _token to buy token1 amountToken0 = half; amountToken1 = swap(_token, token1, half); } else if (_token == token1) { // use half of _token to buy token0 amountToken1 = half; amountToken0 = swap(_token, token0, half); } else { // use _token to buy token0 and token1 amountToken0 = swap(_token, token0, half); amountToken1 = swap(_token, token1, half); } // Pair to LP addLiquidity(token0, token1, amountToken0, amountToken1); } // mass call convertTokenToLP function massConvertTokenToLP(address[] calldata _tokens, address _lpDesired) external onlyGov { for (uint i=0; i<_tokens.length; i++) { convertTokenToLP(_tokens[i], _lpDesired); } } // FARM V1 FUNCTIONS // function stakeLPV1(uint _pid) public onlyGov { (address _lp, , , , ) = IOolongFarm(oolongFarmV1).poolInfo(_pid); uint256 amount = IERC20(_lp).balanceOf(address(this)); if (IERC20(_lp).allowance(address(this), oolongFarmV1) < amount) { IERC20(_lp).approve(oolongFarmV1, type(uint).max); } IOolongFarm(oolongFarmV1).deposit(_pid, amount); } function massStakeLPV1(uint[] calldata _pids) external onlyGov { for (uint i=0; i<_pids.length; i++) { stakeLPV1(_pids[i]); } } function unstakeLPV1(uint _pid) public onlyGov { (uint _balance, ) = IOolongFarm(oolongFarmV1).userInfo(_pid, address(this)); IOolongFarm(oolongFarmV1).withdraw(_pid, _balance); } function massUnstakeLPV1(uint[] calldata _pids) external onlyGov { for (uint i=0; i<_pids.length; i++) { unstakeLPV1(_pids[i]); } } function claimV1(uint _pid) external onlyGov { IOolongFarm(oolongFarmV1).deposit(_pid, 0); } function claimAllV1() external onlyGov { IOolongFarm(oolongFarmV1).claimAll(); } // FARM V2 FUNCTIONS // function stakeLPV2(uint _pid) public onlyGov { (address _lp, , , , ) = IOolongFarm(oolongFarmV2).poolInfo(_pid); uint256 amount = IERC20(_lp).balanceOf(address(this)); if (IERC20(_lp).allowance(address(this), oolongFarmV2) < amount) { IERC20(_lp).approve(oolongFarmV2, type(uint).max); } IOolongFarmV2(oolongFarmV2).deposit(_pid, amount); } function massStakeLPV2(uint[] calldata _pids) external onlyGov { for (uint i=0; i<_pids.length; i++) { stakeLPV2(_pids[i]); } } function unstakeLPV2(uint _pid) public onlyGov { (uint _balance, ) = IOolongFarmV2(oolongFarmV2).userInfo(_pid, address(this)); IOolongFarmV2(oolongFarmV2).withdraw(_pid, _balance); } function massUnstakeLPV2(uint[] calldata _pids) external onlyGov { for (uint i=0; i<_pids.length; i++) { unstakeLPV2(_pids[i]); } } function claimV2(uint _pid) external onlyGov { IOolongFarmV2(oolongFarmV2).deposit(_pid, 0); } function claimAllV2(uint[] calldata _pids) external onlyGov { IOolongFarmV2(oolongFarmV2).claimAll(_pids); } // YOLO FUNCTIONS // function stakeOLO() external onlyGov { uint256 amount = IERC20(olo).balanceOf(address(this)); if (IERC20(olo).allowance(address(this), yolo) < amount) { IERC20(olo).approve(yolo, type(uint).max); } IOolongStaker(yolo).enter(amount); } function activateCooldown() external onlyGov { IOolongStaker(yolo).cooldown(); } function unstakeOLO() external onlyGov { uint256 amount = IERC20(yolo).balanceOf(address(this)); if (IERC20(yolo).allowance(address(this), yolo) < amount) { IERC20(yolo).approve(yolo, type(uint).max); } IOolongStaker(yolo).leave(amount); } /* ========== ADMIN FUNCTIONS ========== */ function setGov(address _governance) public onlyGov { governance = _governance; } function setConverter(address _converter) public onlyGov { converter = _converter; } function addReserveAsset(address _token) external onlyGov { isReserveAsset[_token] = true; } function removeReserveAsset(address _token) external onlyGov { isReserveAsset[_token] = false; } /* ========== EVENTS ========== */ event Swapped(address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOut); event AddedLiquidity(address indexed tokenA, address indexed tokenB, uint256 amountA, uint256 amountB, uint256 lpAmount); event RemovedLiquidity(address indexed tokenA, address indexed tokenB, uint256 amountA, uint256 amountB, uint256 lpAmount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_converter","type":"address"},{"internalType":"address","name":"_oolongFarmV1","type":"address"},{"internalType":"address","name":"_oolongFarmV2","type":"address"},{"internalType":"address","name":"_olo","type":"address"},{"internalType":"address","name":"_yolo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"AddedLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"RemovedLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"activateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint256","name":"_amountA","type":"uint256"},{"internalType":"uint256","name":"_amountB","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"addReserveAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAllV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"claimAllV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claimV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claimV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpPair","type":"address"},{"internalType":"address","name":"_tokenDesired","type":"address"}],"name":"convertLPToToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_lp","type":"address"}],"name":"convertTokenToLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"converter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"holdings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_lpPairs","type":"address[]"},{"internalType":"address","name":"_tokenDesired","type":"address"}],"name":"massConvertLPToToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address","name":"_lpDesired","type":"address"}],"name":"massConvertTokenToLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"massStakeLPV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"massStakeLPV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"massUnstakeLPV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"massUnstakeLPV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"olo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oolongFarmV1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oolongFarmV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lpPair","type":"address"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"removeReserveAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_converter","type":"address"}],"name":"setConverter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"stakeLPV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"stakeLPV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeOLO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"takeOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address","name":"_destination","type":"address"}],"name":"takeOutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_destination","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"takeOutETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"unstakeLPV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"unstakeLPV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeOLO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yolo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
61010060405234801561001157600080fd5b506040516130ca3803806130ca833981810160405260a081101561003457600080fd5b50805160208201516040830151606080850151608095860151600080546001600160a01b03199081163317909155600180546001600160a01b0390981697909116969096179095556001600160601b031993821b841690955290811b821660a05292831b811660c052911b1660e05260805160601c60a05160601c60c05160601c60e05160601c612f5f61016b60003980610be05280610f80528061105b52806110f2528061116f5280611a385280611aed5280611b8b5280611c13525080610ecb5280610faf528061102c528061124e525080610ccf5280610d68528061120952806113a8528061274f52806128a052806129c45280612a5e5280612af5525080610bbc5280610c1b5280610e0d52806115a152806116c5528061175f52806117f6528061193c52806119d55250612f5f6000f3fe60806040526004361061021e5760003560e01c806388e8dc7511610123578063dd04e584116100ab578063e457d6d41161006f578063e457d6d414610966578063efc52449146109e1578063f04ec54714610a65578063f267b3e314610a98578063f8ef4a0214610b1357610225565b8063dd04e58414610819578063dd3ced6314610860578063df22a7e114610893578063df791e501461090e578063e449398e1461095157610225565b8063b19337a4116100f2578063b19337a414610708578063bd38837b1461073b578063cf6c62ea14610750578063cfad57a2146107ab578063d4abaafc146107de57610225565b806388e8dc751461062b5780638dfbbef51461065e5780639334a2e014610688578063a201ccf61461069d57610225565b80634d269f4e116101a6578063674a4ffd11610175578063674a4ffd1461045257806378a820ea146104cd5780637a8235ea146105515780637c62db19146105d55780637d5fd9f6146105ff57610225565b80634d269f4e146103c35780635a9f5de7146103ed5780635aa6e675146104025780635f777af91461041757610225565b806328098202116101ed57806328098202146102ca5780632bd0541a146102f45780632ca89d711461031e57806343bf2c9f146103995780634853b3b2146103ae57610225565b80630b239b141461022a5780630cac7a941461026f57806314f55c61146102a057806323c64ae4146102b557610225565b3661022557005b600080fd5b34801561023657600080fd5b5061026d6004803603606081101561024d57600080fd5b506001600160a01b03813581169160208101359091169060400135610b3d565b005b34801561027b57600080fd5b50610284610bba565b604080516001600160a01b039092168252519081900360200190f35b3480156102ac57600080fd5b50610284610bde565b3480156102c157600080fd5b5061026d610c02565b3480156102d657600080fd5b5061026d600480360360208110156102ed57600080fd5b5035610c8e565b34801561030057600080fd5b5061026d6004803603602081101561031757600080fd5b5035610dcc565b34801561032a57600080fd5b5061026d6004803603602081101561034157600080fd5b810190602081018135600160201b81111561035b57600080fd5b82018360208201111561036d57600080fd5b803590602001918460208302840111600160201b8311171561038e57600080fd5b509092509050610e6b565b3480156103a557600080fd5b5061026d610eb0565b3480156103ba57600080fd5b5061026d611156565b3480156103cf57600080fd5b5061026d600480360360208110156103e657600080fd5b50356111c8565b3480156103f957600080fd5b5061028461124c565b34801561040e57600080fd5b50610284611270565b34801561042357600080fd5b5061026d6004803603604081101561043a57600080fd5b506001600160a01b038135811691602001351661127f565b34801561045e57600080fd5b5061026d6004803603602081101561047557600080fd5b810190602081018135600160201b81111561048f57600080fd5b8201836020820111156104a157600080fd5b803590602001918460208302840111600160201b831117156104c257600080fd5b50909250905061138f565b3480156104d957600080fd5b5061026d600480360360408110156104f057600080fd5b810190602081018135600160201b81111561050a57600080fd5b82018360208201111561051c57600080fd5b803590602001918460208302840111600160201b8311171561053d57600080fd5b9193509150356001600160a01b031661143b565b34801561055d57600080fd5b5061026d6004803603604081101561057457600080fd5b810190602081018135600160201b81111561058e57600080fd5b8201836020820111156105a057600080fd5b803590602001918460208302840111600160201b831117156105c157600080fd5b9193509150356001600160a01b031661148a565b3480156105e157600080fd5b5061026d600480360360208110156105f857600080fd5b5035611586565b61026d6004803603604081101561061557600080fd5b506001600160a01b038135169060200135611876565b34801561063757600080fd5b5061026d6004803603602081101561064e57600080fd5b50356001600160a01b03166118c3565b34801561066a57600080fd5b5061026d6004803603602081101561068157600080fd5b50356118fb565b34801561069457600080fd5b5061026d611a1d565b3480156106a957600080fd5b506106d6600480360360408110156106c057600080fd5b506001600160a01b038135169060200135611c77565b604080516001600160a01b03958616815293909416602084015282840191909152606082015290519081900360800190f35b34801561071457600080fd5b5061026d6004803603602081101561072b57600080fd5b50356001600160a01b0316611ec8565b34801561074757600080fd5b50610284611f01565b34801561075c57600080fd5b506107996004803603608081101561077357600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611f10565b60408051918252519081900360200190f35b3480156107b757600080fd5b5061026d600480360360208110156107ce57600080fd5b50356001600160a01b031661222d565b3480156107ea57600080fd5b5061026d6004803603604081101561080157600080fd5b506001600160a01b0381358116916020013516612266565b34801561082557600080fd5b5061084c6004803603602081101561083c57600080fd5b50356001600160a01b0316612471565b604080519115158252519081900360200190f35b34801561086c57600080fd5b506107996004803603602081101561088357600080fd5b50356001600160a01b0316612486565b34801561089f57600080fd5b5061026d600480360360208110156108b657600080fd5b810190602081018135600160201b8111156108d057600080fd5b8201836020820111156108e257600080fd5b803590602001918460208302840111600160201b8311171561090357600080fd5b509092509050612507565b34801561091a57600080fd5b506107996004803603606081101561093157600080fd5b506001600160a01b0381358116916020810135909116906040013561254c565b34801561095d57600080fd5b5061028461274d565b34801561097257600080fd5b5061026d6004803603602081101561098957600080fd5b810190602081018135600160201b8111156109a357600080fd5b8201836020820111156109b557600080fd5b803590602001918460208302840111600160201b831117156109d657600080fd5b509092509050612771565b3480156109ed57600080fd5b5061026d60048036036040811015610a0457600080fd5b810190602081018135600160201b811115610a1e57600080fd5b820183602082011115610a3057600080fd5b803590602001918460208302840111600160201b83111715610a5157600080fd5b9193509150356001600160a01b03166127b6565b348015610a7157600080fd5b5061026d60048036036020811015610a8857600080fd5b50356001600160a01b0316612805565b348015610aa457600080fd5b5061026d60048036036020811015610abb57600080fd5b810190602081018135600160201b811115610ad557600080fd5b820183602082011115610ae757600080fd5b803590602001918460208302840111600160201b83111715610b0857600080fd5b509092509050612840565b348015610b1f57600080fd5b5061026d60048036036020811015610b3657600080fd5b5035612885565b6000546001600160a01b03163314610b5457600080fd5b610b5d83612486565b811115610ba1576040805162461bcd60e51b815260206004820152600d60248201526c085a5b9cdd59999a58da595b9d609a1b604482015290519081900360640190fd5b610bb56001600160a01b0384168383612b61565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610c1957600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d1058e596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c7457600080fd5b505af1158015610c88573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610ca557600080fd5b604080516393f1a40b60e01b81526004810183905230602482015281516000926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926393f1a40b9260448083019392829003018186803b158015610d1157600080fd5b505afa158015610d25573d6000803e3d6000fd5b505050506040513d6040811015610d3b57600080fd5b505160408051630441a3e760e41b8152600481018590526024810183905290519192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163441a3e709160448082019260009290919082900301818387803b158015610db057600080fd5b505af1158015610dc4573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610de357600080fd5b60408051631c57762b60e31b81526004810183905260006024820181905291516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e2bbb158926044808201939182900301818387803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314610e8257600080fd5b60005b81811015610bb557610ea8838383818110610e9c57fe5b905060200201356118fb565b600101610e85565b6000546001600160a01b03163314610ec757600080fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610f3657600080fd5b505afa158015610f4a573d6000803e3d6000fd5b505050506040513d6020811015610f6057600080fd5b505160408051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152915192935083927f00000000000000000000000000000000000000000000000000000000000000009092169163dd62ed3e91604480820192602092909190829003018186803b158015610ff857600080fd5b505afa15801561100c573d6000803e3d6000fd5b505050506040513d602081101561102257600080fd5b505110156110f0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d60208110156110ed57600080fd5b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a59f3e0c826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e5057600080fd5b6000546001600160a01b0316331461116d57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663787a08a66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c7457600080fd5b6000546001600160a01b031633146111df57600080fd5b60408051631c57762b60e31b81526004810183905260006024820181905291516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e2bbb158926044808201939182900301818387803b158015610e5057600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031681565b6000546001600160a01b0316331461129657600080fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156112e557600080fd5b505afa1580156112f9573d6000803e3d6000fd5b505050506040513d602081101561130f57600080fd5b5051905060008080806113228786611c77565b6001600160a01b0384166000908152600260205260409020549397509195509350915060ff166113595761135784878461254c565b505b6001600160a01b03831660009081526002602052604090205460ff166113865761138483878361254c565b505b50505050505050565b6000546001600160a01b031633146113a657600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166328c7782083836040518363ffffffff1660e01b815260040180806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015610db057600080fd5b6000546001600160a01b0316331461145257600080fd5b60005b82811015610c885761148284848381811061146c57fe5b905060200201356001600160a01b031683612266565b600101611455565b6000546001600160a01b031633146114a157600080fd5b60005b82811015610c885760008484838181106114ba57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561151657600080fd5b505afa15801561152a573d6000803e3d6000fd5b505050506040513d602081101561154057600080fd5b5051905061157d838287878681811061155557fe5b905060200201356001600160a01b03166001600160a01b0316612b619092919063ffffffff16565b506001016114a4565b6000546001600160a01b0316331461159d57600080fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631526fe27836040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b15801561160357600080fd5b505afa158015611617573d6000803e3d6000fd5b505050506040513d60a081101561162d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561167b57600080fd5b505afa15801561168f573d6000803e3d6000fd5b505050506040513d60208110156116a557600080fd5b505160408051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152915192935083929185169163dd62ed3e91604480820192602092909190829003018186803b15801561171c57600080fd5b505afa158015611730573d6000803e3d6000fd5b505050506040513d602081101561174657600080fd5b505110156117f457816001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156117c757600080fd5b505af11580156117db573d6000803e3d6000fd5b505050506040513d60208110156117f157600080fd5b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e2bbb15884836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561186257600080fd5b505af1158015611386573d6000803e3d6000fd5b6000546001600160a01b0316331461188d57600080fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610bb5573d6000803e3d6000fd5b6000546001600160a01b031633146118da57600080fd5b6001600160a01b03166000908152600260205260409020805460ff19169055565b6000546001600160a01b0316331461191257600080fd5b604080516393f1a40b60e01b81526004810183905230602482015281516000926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926393f1a40b9260448083019392829003018186803b15801561197e57600080fd5b505afa158015611992573d6000803e3d6000fd5b505050506040513d60408110156119a857600080fd5b505160408051630441a3e760e41b8152600481018590526024810183905290519192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163441a3e709160448082019260009290919082900301818387803b158015610db057600080fd5b6000546001600160a01b03163314611a3457600080fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611aa357600080fd5b505afa158015611ab7573d6000803e3d6000fd5b505050506040513d6020811015611acd57600080fd5b505160408051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482018190529151929350839263dd62ed3e91604480820192602092909190829003018186803b158015611b4157600080fd5b505afa158015611b55573d6000803e3d6000fd5b505050506040513d6020811015611b6b57600080fd5b50511015611c11576040805163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482018190526000196024830152915163095ea7b3916044808201926020929091908290030181600087803b158015611be457600080fd5b505af1158015611bf8573d6000803e3d6000fd5b505050506040513d6020811015611c0e57600080fd5b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166367dfd4c9826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e5057600080fd5b600080548190819081906001600160a01b03163314611c9557600080fd5b60015460408051636eb1769f60e11b81523060048201526001600160a01b0392831660248201529051879289169163dd62ed3e916044808301926020929190829003018186803b158015611ce857600080fd5b505afa158015611cfc573d6000803e3d6000fd5b505050506040513d6020811015611d1257600080fd5b50511015611d9e576001546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290519188169163095ea7b3916044808201926020929091908290030181600087803b158015611d7157600080fd5b505af1158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50505b60015460408051635100e67b60e11b81526001600160a01b038981166004830152602482018990529151600093849384938493919092169163a201ccf691604480830192608092919082900301818787803b158015611dfc57600080fd5b505af1158015611e10573d6000803e3d6000fd5b505050506040513d6080811015611e2657600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509350935093509350826001600160a01b0316846001600160a01b03167f81406426274126e00dbd089534eb1e56d26bf6d7516b175e1f033f187ba4489d84848d60405180848152602001838152602001828152602001935050505060405180910390a39299919850965090945092505050565b6000546001600160a01b03163314611edf57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b600080546001600160a01b03163314611f2857600080fd5b60015460408051636eb1769f60e11b81523060048201526001600160a01b0392831660248201529051859288169163dd62ed3e916044808301926020929190829003018186803b158015611f7b57600080fd5b505afa158015611f8f573d6000803e3d6000fd5b505050506040513d6020811015611fa557600080fd5b50511015612031576001546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290519187169163095ea7b3916044808201926020929091908290030181600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506040513d602081101561202e57600080fd5b50505b60015460408051636eb1769f60e11b81523060048201526001600160a01b0392831660248201529051849287169163dd62ed3e916044808301926020929190829003018186803b15801561208457600080fd5b505afa158015612098573d6000803e3d6000fd5b505050506040513d60208110156120ae57600080fd5b5051101561213a576001546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290519186169163095ea7b3916044808201926020929091908290030181600087803b15801561210d57600080fd5b505af1158015612121573d6000803e3d6000fd5b505050506040513d602081101561213757600080fd5b50505b600154604080516367b6317560e11b81526001600160a01b038881166004830152878116602483015260448201879052606482018690529151600093929092169163cf6c62ea9160848082019260209290919082900301818787803b1580156121a257600080fd5b505af11580156121b6573d6000803e3d6000fd5b505050506040513d60208110156121cc57600080fd5b5051604080518681526020810186905280820183905290519192506001600160a01b0380881692908916917f403dbccffca94fbd2ff623c3315060167dc9b0e1ed1d4c53d16632e192c1331f919081900360600190a390505b949350505050565b6000546001600160a01b0316331461224457600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461227d57600080fd5b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156122b857600080fd5b505afa1580156122cc573d6000803e3d6000fd5b505050506040513d60208110156122e257600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b15801561232a57600080fd5b505afa15801561233e573d6000803e3d6000fd5b505050506040513d602081101561235457600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038716916370a08231916024808301926020929190829003018186803b1580156123a257600080fd5b505afa1580156123b6573d6000803e3d6000fd5b505050506040513d60208110156123cc57600080fd5b5051905060006123dd826002612bb3565b9050600080856001600160a01b0316886001600160a01b031614156124115782915061240a88868561254c565b905061245a565b846001600160a01b0316886001600160a01b0316141561243f57508161243888878361254c565b915061245a565b61244a88878561254c565b915061245788868561254c565b90505b61246686868484611f10565b505050505050505050565b60026020526000908152604090205460ff1681565b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156124d557600080fd5b505afa1580156124e9573d6000803e3d6000fd5b505050506040513d60208110156124ff57600080fd5b505192915050565b6000546001600160a01b0316331461251e57600080fd5b60005b81811015610bb55761254483838381811061253857fe5b90506020020135611586565b600101612521565b600080546001600160a01b0316331461256457600080fd5b60015460408051636eb1769f60e11b81523060048201526001600160a01b0392831660248201529051849287169163dd62ed3e916044808301926020929190829003018186803b1580156125b757600080fd5b505afa1580156125cb573d6000803e3d6000fd5b505050506040513d60208110156125e157600080fd5b5051101561266d576001546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290519186169163095ea7b3916044808201926020929091908290030181600087803b15801561264057600080fd5b505af1158015612654573d6000803e3d6000fd5b505050506040513d602081101561266a57600080fd5b50505b60015460408051630df791e560e41b81526001600160a01b0387811660048301528681166024830152604482018690529151600093929092169163df791e509160648082019260209290919082900301818787803b1580156126ce57600080fd5b505af11580156126e2573d6000803e3d6000fd5b505050506040513d60208110156126f857600080fd5b5051604080518581526020810183905281519293506001600160a01b0380881693908916927fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb928290030190a3949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b0316331461278857600080fd5b60005b81811015610bb5576127ae8383838181106127a257fe5b90506020020135612885565b60010161278b565b6000546001600160a01b031633146127cd57600080fd5b60005b82811015610c88576127fd8484838181106127e757fe5b905060200201356001600160a01b03168361127f565b6001016127d0565b6000546001600160a01b0316331461281c57600080fd5b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000546001600160a01b0316331461285757600080fd5b60005b81811015610bb55761287d83838381811061287157fe5b90506020020135610c8e565b60010161285a565b6000546001600160a01b0316331461289c57600080fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631526fe27836040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b15801561290257600080fd5b505afa158015612916573d6000803e3d6000fd5b505050506040513d60a081101561292c57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561297a57600080fd5b505afa15801561298e573d6000803e3d6000fd5b505050506040513d60208110156129a457600080fd5b505160408051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152915192935083929185169163dd62ed3e91604480820192602092909190829003018186803b158015612a1b57600080fd5b505afa158015612a2f573d6000803e3d6000fd5b505050506040513d6020811015612a4557600080fd5b50511015612af357816001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ac657600080fd5b505af1158015612ada573d6000803e3d6000fd5b505050506040513d6020811015612af057600080fd5b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e2bbb15884836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561186257600080fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610bb5908490612bfc565b6000612bf583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612cad565b9392505050565b6060612c51826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d4f9092919063ffffffff16565b805190915015610bb557808060200190516020811015612c7057600080fd5b5051610bb55760405162461bcd60e51b815260040180806020018281038252602a815260200180612f00602a913960400191505060405180910390fd5b60008183612d395760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cfe578181015183820152602001612ce6565b50505050905090810190601f168015612d2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612d4557fe5b0495945050505050565b606061222584846000856060612d6485612ec6565b612db5576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612df45780518252601f199092019160209182019101612dd5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612e56576040519150601f19603f3d011682016040523d82523d6000602084013e612e5b565b606091505b50915091508115612e6f5791506122259050565b805115612e7f5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315612cfe578181015183820152602001612ce6565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061222557505015159291505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220b1a05ea7fc32b8583c8ffbe63743bf8eb8e7533cd51355b58bf50c094998f6cf64736f6c634300060c003300000000000000000000000074a50500cbadbc813a9cf67c1298f5d0caf3712200000000000000000000000031b9fbd965397d697d2daa434ebd219ab878e49b000000000000000000000000d0e6dfa5e5511e138bfcddaddf70fdba2ab8396c0000000000000000000000005008f837883ea9a07271a1b5eb0658404f5a9610000000000000000000000000b828dfc55b4883c6c587c1404f91af3cdbe94c14
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000074a50500cbadbc813a9cf67c1298f5d0caf3712200000000000000000000000031b9fbd965397d697d2daa434ebd219ab878e49b000000000000000000000000d0e6dfa5e5511e138bfcddaddf70fdba2ab8396c0000000000000000000000005008f837883ea9a07271a1b5eb0658404f5a9610000000000000000000000000b828dfc55b4883c6c587c1404f91af3cdbe94c14
-----Decoded View---------------
Arg [0] : _converter (address): 0x74a50500cbadbc813a9cf67c1298f5d0caf37122
Arg [1] : _oolongFarmV1 (address): 0x31b9fbd965397d697d2daa434ebd219ab878e49b
Arg [2] : _oolongFarmV2 (address): 0xd0e6dfa5e5511e138bfcddaddf70fdba2ab8396c
Arg [3] : _olo (address): 0x5008f837883ea9a07271a1b5eb0658404f5a9610
Arg [4] : _yolo (address): 0xb828dfc55b4883c6c587c1404f91af3cdbe94c14
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000074a50500cbadbc813a9cf67c1298f5d0caf37122
Arg [1] : 00000000000000000000000031b9fbd965397d697d2daa434ebd219ab878e49b
Arg [2] : 000000000000000000000000d0e6dfa5e5511e138bfcddaddf70fdba2ab8396c
Arg [3] : 0000000000000000000000005008f837883ea9a07271a1b5eb0658404f5a9610
Arg [4] : 000000000000000000000000b828dfc55b4883c6c587c1404f91af3cdbe94c14
Deployed ByteCode Sourcemap
23603:10307:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24900:279;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24900:279:0;;;;;;;;;;;;;;;;;:::i;:::-;;23840:37;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;23840:37:0;;;;;;;;;;;;;;23963:29;;;;;;;;;;;;;:::i;30892:94::-;;;;;;;;;;;;;:::i;31607:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31607:206:0;;:::i;30778:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30778:106:0;;:::i;30603:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30603:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30603:167:0;;;;;;;;;;-1:-1:-1;30603:167:0;;-1:-1:-1;30603:167:0;-1:-1:-1;30603:167:0;:::i;32270:288::-;;;;;;;;;;;;;:::i;32566:94::-;;;;;;;;;;;;;:::i;31996:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31996:108:0;;:::i;23928:28::-;;;;;;;;;;;;;:::i;23777:25::-;;;;;;;;;;;;;:::i;27724:481::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27724:481:0;;;;;;;;;;:::i;32112:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32112:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32112:122:0;;;;;;;;;;-1:-1:-1;32112:122:0;;-1:-1:-1;32112:122:0;-1:-1:-1;32112:122:0;:::i;29556:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29556:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29556:218:0;;;;;;;;;;;;-1:-1:-1;29556:218:0;-1:-1:-1;29556:218:0;-1:-1:-1;;;;;29556:218:0;;:::i;25187:346::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25187:346:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25187:346:0;;;;;;;;;;;;-1:-1:-1;25187:346:0;-1:-1:-1;25187:346:0;-1:-1:-1;;;;;25187:346:0;;:::i;29813:401::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29813:401:0;;:::i;25541:198::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25541:198:0;;;;;;;;:::i;33389:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33389:110:0;-1:-1:-1;;;;;33389:110:0;;:::i;30393:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30393:202:0;;:::i;32668:293::-;;;;;;;;;;;;;:::i;27051:558::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27051:558:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27051:558:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33146:121;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33146:121:0;-1:-1:-1;;;;;33146:121:0;;:::i;23809:24::-;;;;;;;;;;;;;:::i;26282:723::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26282:723:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33020:118;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33020:118:0;-1:-1:-1;;;;;33020:118:0;;:::i;28483:1030::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28483:1030:0;;;;;;;;;;:::i;23999:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23999:47:0;-1:-1:-1;;;;;23999:47:0;;:::i;:::-;;;;;;;;;;;;;;;;;;24606:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24606:161:0;-1:-1:-1;;;;;24606:161:0;;:::i;30222:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30222:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30222:163:0;;;;;;;;;;-1:-1:-1;30222:163:0;;-1:-1:-1;30222:163:0;-1:-1:-1;30222:163:0;:::i;25783:450::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25783:450:0;;;;;;;;;;;;;;;;;:::i;23884:37::-;;;;;;;;;;;;;:::i;31436:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31436:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31436:163:0;;;;;;;;;;-1:-1:-1;31436:163:0;;-1:-1:-1;31436:163:0;-1:-1:-1;31436:163:0;:::i;28248:227::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28248:227:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28248:227:0;;;;;;;;;;;;-1:-1:-1;28248:227:0;-1:-1:-1;28248:227:0;-1:-1:-1;;;;;28248:227:0;;:::i;33275:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33275:106:0;-1:-1:-1;;;;;33275:106:0;;:::i;31821:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31821:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31821:167:0;;;;;;;;;;-1:-1:-1;31821:167:0;;-1:-1:-1;31821:167:0;-1:-1:-1;31821:167:0;:::i;31025:403::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31025:403:0;;:::i;24900:279::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;25076:16:::1;25085:6;25076:8;:16::i;:::-;25065:7;:27;;25057:53;;;::::0;;-1:-1:-1;;;25057:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25057:53:0;;;;;;;;;;;;;::::1;;25121:50;-1:-1:-1::0;;;;;25121:27:0;::::1;25149:12:::0;25163:7;25121:27:::1;:50::i;:::-;24900:279:::0;;;:::o;23840:37::-;;;:::o;23963:29::-;;;:::o;30892:94::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;30954:12:::1;-1:-1:-1::0;;;;;30942:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30892:94::o:0;31607:206::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;31685:57:::1;::::0;;-1:-1:-1;;;31685:57:0;;::::1;::::0;::::1;::::0;;;31736:4:::1;31685:57:::0;;;;;;31666:13:::1;::::0;-1:-1:-1;;;;;31699:12:0::1;31685:36;::::0;::::1;::::0;:57;;;;;;;;;;;:36;:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31685:57:0;;31753:52;;-1:-1:-1;;;31753:52:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;31685:57;;-1:-1:-1;;;;;;31767:12:0::1;31753:36;::::0;::::1;::::0;:52;;;;;-1:-1:-1;;31753:52:0;;;;;;;;-1:-1:-1;31753:36:0;:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24539:1;31607:206:::0;:::o;30778:106::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;30834:42:::1;::::0;;-1:-1:-1;;;30834:42:0;;::::1;::::0;::::1;::::0;;;30874:1:::1;30834:42:::0;;;;;;;;-1:-1:-1;;;;;30846:12:0::1;30834:33;::::0;::::1;::::0;:42;;;;;;;;;;;30874:1;30834:33;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30778:106:::0;:::o;30603:167::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;30684:6:::1;30679:84;30694:14:::0;;::::1;30679:84;;;30730:21;30742:5;;30748:1;30742:8;;;;;;;;;;;;;30730:11;:21::i;:::-;30710:3;;30679:84;;32270:288:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;32318:14:::1;32342:3;-1:-1:-1::0;;;;;32335:21:0::1;;32365:4;32335:36;;;;;;;;;;;;;-1:-1:-1::0;;;;;32335:36:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32335:36:0;32386:42:::1;::::0;;-1:-1:-1;;;32386:42:0;;32416:4:::1;32386:42;::::0;::::1;::::0;-1:-1:-1;;;;;32423:4:0::1;32386:42:::0;::::1;::::0;;;;;;32335:36;;-1:-1:-1;32335:36:0;;32393:3:::1;32386:21:::0;;::::1;::::0;::::1;::::0;:42;;;;;32335:36:::1;::::0;32386:42;;;;;;;;:21;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32386:42:0;:51:::1;32382:125;;;32461:3;-1:-1:-1::0;;;;;32454:19:0::1;;32474:4;-1:-1:-1::0;;32454:41:0::1;;;;;;;;;;;;;-1:-1:-1::0;;;;;32454:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;32382:125:0::1;32531:4;-1:-1:-1::0;;;;;32517:25:0::1;;32543:6;32517:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;32566:94:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;32636:4:::1;-1:-1:-1::0;;;;;32622:28:0::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;31996:108:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;32052:44:::1;::::0;;-1:-1:-1;;;32052:44:0;;::::1;::::0;::::1;::::0;;;32094:1:::1;32052:44:::0;;;;;;;;-1:-1:-1;;;;;32066:12:0::1;32052:35;::::0;::::1;::::0;:44;;;;;;;;;;;32094:1;32052:35;:44;::::1;;::::0;::::1;;;;::::0;::::1;23928:28:::0;;;:::o;23777:25::-;;;-1:-1:-1;;;;;23777:25:0;;:::o;27724:481::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;27816:17:::1;27843:7;-1:-1:-1::0;;;;;27836:25:0::1;;27870:4;27836:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;27836:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27836:40:0;;-1:-1:-1;27888:14:0::1;::::0;;;27956:35:::1;27972:7:::0;27836:40;27956:15:::1;:35::i;:::-;-1:-1:-1::0;;;;;28007:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;27887:104;;-1:-1:-1;27887:104:0;;-1:-1:-1;27887:104:0;-1:-1:-1;27887:104:0;-1:-1:-1;28007:22:0::1;;28002:92;;28046:36;28051:6;28059:13;28074:7;28046:4;:36::i;:::-;;28002:92;-1:-1:-1::0;;;;;28111:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;28106:92;;28150:36;28155:6;28163:13;28178:7;28150:4;:36::i;:::-;;28106:92;24539:1;;;;;27724:481:::0;;:::o;32112:122::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;32197:12:::1;-1:-1:-1::0;;;;;32183:36:0::1;;32220:5;;32183:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;29556:218:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;29667:6:::1;29662:105;29677:16:::0;;::::1;29662:105;;;29715:40;29732:7;;29740:1;29732:10;;;;;;;;;;;;;-1:-1:-1::0;;;;;29732:10:0::1;29744;29715:16;:40::i;:::-;29695:3;;29662:105;;25187:346:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;25338:6:::1;25333:193;25348:16:::0;;::::1;25333:193;;;25386:14;25410:7;;25418:1;25410:10;;;;;;;;;;;;;-1:-1:-1::0;;;;;25410:10:0::1;-1:-1:-1::0;;;;;25403:28:0::1;;25440:4;25403:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;25403:43:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25403:43:0;;-1:-1:-1;25461:53:0::1;25493:12:::0;25403:43;25468:7;;25476:1;25468:10;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25468:10:0::1;-1:-1:-1::0;;;;;25461:31:0::1;;;:53;;;;;:::i;:::-;-1:-1:-1::0;25366:3:0::1;;25333:193;;29813:401:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;29870:11:::1;29905:12;-1:-1:-1::0;;;;;29893:34:0::1;;29928:4;29893:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29893:40:0;;29961:36;;-1:-1:-1;;;29961:36:0;;29991:4:::1;29961:36;::::0;::::1;::::0;;;29893:40;;-1:-1:-1;29944:14:0::1;::::0;-1:-1:-1;;;;;29961:21:0;::::1;::::0;::::1;::::0;:36;;;;;29893:40:::1;::::0;29961:36;;;;;;;:21;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29961:36:0;30012:50:::1;::::0;;-1:-1:-1;;;30012:50:0;;30042:4:::1;30012:50;::::0;::::1;::::0;-1:-1:-1;;;;;30049:12:0::1;30012:50:::0;::::1;::::0;;;;;;29961:36;;-1:-1:-1;29961:36:0;;30012:21;;::::1;::::0;::::1;::::0;:50;;;;;29961:36:::1;::::0;30012:50;;;;;;;;:21;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30012:50:0;:59:::1;30008:141;;;30095:3;-1:-1:-1::0;;;;;30088:19:0::1;;30108:12;-1:-1:-1::0;;30088:49:0::1;;;;;;;;;;;;;-1:-1:-1::0;;;;;30088:49:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;30008:141:0::1;30171:12;-1:-1:-1::0;;;;;30159:33:0::1;;30193:4;30199:6;30159:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;25541:198:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;25701:30:::1;::::0;-1:-1:-1;;;;;25701:21:0;::::1;::::0;:30;::::1;;;::::0;25723:7;;25701:30:::1;::::0;;;25723:7;25701:21;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;33389:110:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;-1:-1:-1;;;;;33461:22:0::1;33486:5;33461:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;33461:30:0::1;::::0;;33389:110::o;30393:202::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;30471:55:::1;::::0;;-1:-1:-1;;;30471:55:0;;::::1;::::0;::::1;::::0;;;30520:4:::1;30471:55:::0;;;;;;30452:13:::1;::::0;-1:-1:-1;;;;;30483:12:0::1;30471:34;::::0;::::1;::::0;:55;;;;;;;;;;;:34;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30471:55:0;;30537:50;;-1:-1:-1;;;30537:50:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;30471:55;;-1:-1:-1;;;;;;30549:12:0::1;30537:34;::::0;::::1;::::0;:50;;;;;-1:-1:-1;;30537:50:0;;;;;;;;-1:-1:-1;30537:34:0;:50;::::1;;::::0;::::1;;;;::::0;::::1;32668:293:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;32718:14:::1;32742:4;-1:-1:-1::0;;;;;32735:22:0::1;;32766:4;32735:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;32735:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32735:37:0;32787:43:::1;::::0;;-1:-1:-1;;;32787:43:0;;32818:4:::1;32787:43;::::0;::::1;::::0;-1:-1:-1;;;;;32794:4:0::1;32787:22;:43:::0;;;;;;;;32735:37;;-1:-1:-1;32735:37:0;;32787:22:::1;::::0;:43;;;;;32735:37:::1;::::0;32787:43;;;;;;;;:22;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32787:43:0;:52:::1;32783:127;;;32856:42;::::0;;-1:-1:-1;;;32856:42:0;;-1:-1:-1;;;;;32863:4:0::1;32856:20;:42;::::0;::::1;::::0;;;-1:-1:-1;;32856:42:0;;;;;;:20:::1;::::0;:42;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;32856:20:0;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;32783:127:0::1;32934:4;-1:-1:-1::0;;;;;32920:25:0::1;;32946:6;32920:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;27051:558:::0;27134:7;24517:10;;27134:7;;;;;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;27226:9:::1;::::0;27185:51:::1;::::0;;-1:-1:-1;;;27185:51:0;;27219:4:::1;27185:51;::::0;::::1;::::0;-1:-1:-1;;;;;27226:9:0;;::::1;27185:51:::0;;;;;;27239:10;;27185:25;::::1;::::0;::::1;::::0;:51;;;;;::::1;::::0;;;;;;;;:25;:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27185:51:0;:64:::1;27181:147;;;27290:9;::::0;27266:50:::1;::::0;;-1:-1:-1;;;27266:50:0;;-1:-1:-1;;;;;27290:9:0;;::::1;27266:50;::::0;::::1;::::0;-1:-1:-1;;27266:50:0;;;;;;:23;;::::1;::::0;::::1;::::0;:50;;;;;::::1;::::0;;;;;;;;;27290:9:::1;27266:23:::0;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;27181:147:0::1;27420:9;::::0;27409:58:::1;::::0;;-1:-1:-1;;;27409:58:0;;-1:-1:-1;;;;;27409:58:0;;::::1;;::::0;::::1;::::0;;;;;;;;;27339:15:::1;::::0;;;;;;;27420:9;;;::::1;::::0;27409:37:::1;::::0;:58;;;;;::::1;::::0;;;;;;;;27339:15;27420:9;27409:58;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27338:129;;;;;;;;27509:7;-1:-1:-1::0;;;;;27483:64:0::1;27500:7;-1:-1:-1::0;;;;;27483:64:0::1;;27518:7;27527;27536:10;27483:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27566:7:::0;;27575;;-1:-1:-1;27575:7:0;-1:-1:-1;27566:7:0;;-1:-1:-1;27051:558:0;-1:-1:-1;;;27051:558:0:o;33146:121::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;33237:9:::1;:22:::0;;-1:-1:-1;;;;;;33237:22:0::1;-1:-1:-1::0;;;;;33237:22:0;;;::::1;::::0;;;::::1;::::0;;33146:121::o;23809:24::-;;;-1:-1:-1;;;;;23809:24:0;;:::o;26282:723::-;26468:4;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;26535:9:::1;::::0;26494:51:::1;::::0;;-1:-1:-1;;;26494:51:0;;26528:4:::1;26494:51;::::0;::::1;::::0;-1:-1:-1;;;;;26535:9:0;;::::1;26494:51:::0;;;;;;26548:8;;26494:25;::::1;::::0;::::1;::::0;:51;;;;;::::1;::::0;;;;;;;;:25;:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26494:51:0;:62:::1;26490:145;;;26597:9;::::0;26573:50:::1;::::0;;-1:-1:-1;;;26573:50:0;;-1:-1:-1;;;;;26597:9:0;;::::1;26573:50;::::0;::::1;::::0;-1:-1:-1;;26573:50:0;;;;;;:23;;::::1;::::0;::::1;::::0;:50;;;;;::::1;::::0;;;;;;;;;26597:9:::1;26573:23:::0;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;26490:145:0::1;26690:9;::::0;26649:51:::1;::::0;;-1:-1:-1;;;26649:51:0;;26683:4:::1;26649:51;::::0;::::1;::::0;-1:-1:-1;;;;;26690:9:0;;::::1;26649:51:::0;;;;;;26703:8;;26649:25;::::1;::::0;::::1;::::0;:51;;;;;::::1;::::0;;;;;;;;:25;:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26649:51:0;:62:::1;26645:145;;;26752:9;::::0;26728:50:::1;::::0;;-1:-1:-1;;;26728:50:0;;-1:-1:-1;;;;;26752:9:0;;::::1;26728:50;::::0;::::1;::::0;-1:-1:-1;;26728:50:0;;;;;;:23;;::::1;::::0;::::1;::::0;:50;;;;;::::1;::::0;;;;;;;;;26752:9:::1;26728:23:::0;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;26645:145:0::1;26830:9;::::0;26819:72:::1;::::0;;-1:-1:-1;;;26819:72:0;;-1:-1:-1;;;;;26819:72:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;26800:16:::1;::::0;26830:9;;;::::1;::::0;26819:34:::1;::::0;:72;;;;;::::1;::::0;;;;;;;;;26800:16;26830:9;26819:72;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26819:72:0;26907:62:::1;::::0;;;;;26819:72:::1;26907:62:::0;::::1;::::0;;;;;;;;;;;26819:72;;-1:-1:-1;;;;;;26907:62:0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;26989:8:::0;-1:-1:-1;24539:1:0::1;26282:723:::0;;;;;;:::o;33020:118::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;33106:10:::1;:24:::0;;-1:-1:-1;;;;;;33106:24:0::1;-1:-1:-1::0;;;;;33106:24:0;;;::::1;::::0;;;::::1;::::0;;33020:118::o;28483:1030::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;28595:14:::1;28628:3;-1:-1:-1::0;;;;;28612:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28612:29:0;28669::::1;::::0;;-1:-1:-1;;;28669:29:0;;;;28612;;-1:-1:-1;28652:14:0::1;::::0;-1:-1:-1;;;;;28669:27:0;::::1;::::0;::::1;::::0;:29:::1;::::0;;::::1;::::0;28612::::1;::::0;28669;;;;;;;:27;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28669:29:0;28733:39:::1;::::0;;-1:-1:-1;;;28733:39:0;;28766:4:::1;28733:39;::::0;::::1;::::0;;;28669:29;;-1:-1:-1;28711:19:0::1;::::0;-1:-1:-1;;;;;28733:24:0;::::1;::::0;::::1;::::0;:39;;;;;28669:29:::1;::::0;28733:39;;;;;;;:24;:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28733:39:0;;-1:-1:-1;28783:9:0::1;28795:18;28733:39:::0;28811:1:::1;28795:15;:18::i;:::-;28783:30;;28824:17;28852::::0;28894:6:::1;-1:-1:-1::0;;;;;28884:16:0::1;:6;-1:-1:-1::0;;;;;28884:16:0::1;;28880:534;;;28981:4;28966:19;;29015:26;29020:6;29028;29036:4;29015;:26::i;:::-;29000:41;;28880:534;;;29073:6;-1:-1:-1::0;;;;;29063:16:0::1;:6;-1:-1:-1::0;;;;;29063:16:0::1;;29059:355;;;-1:-1:-1::0;29160:4:0;29194:26:::1;29199:6:::0;29207;29160:4;29194::::1;:26::i;:::-;29179:41;;29059:355;;;29320:26;29325:6;29333;29341:4;29320;:26::i;:::-;29305:41;;29376:26;29381:6;29389;29397:4;29376;:26::i;:::-;29361:41;;29059:355;29449:56;29462:6;29470;29478:12;29492;29449;:56::i;:::-;;24539:1;;;;;;28483:1030:::0;;:::o;23999:47::-;;;;;;;;;;;;;;;:::o;24606:161::-;24688:7;24727:6;-1:-1:-1;;;;;24720:24:0;;24753:4;24720:39;;;;;;;;;;;;;-1:-1:-1;;;;;24720:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24720:39:0;;24606:161;-1:-1:-1;;24606:161:0:o;30222:163::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;30301:6:::1;30296:82;30311:14:::0;;::::1;30296:82;;;30347:19;30357:5;;30363:1;30357:8;;;;;;;;;;;;;30347:9;:19::i;:::-;30327:3;;30296:82;;25783:450:::0;25877:4;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;25940:9:::1;::::0;25898:52:::1;::::0;;-1:-1:-1;;;25898:52:0;;25933:4:::1;25898:52;::::0;::::1;::::0;-1:-1:-1;;;;;25940:9:0;;::::1;25898:52:::0;;;;;;25953:9;;25898:26;::::1;::::0;::::1;::::0;:52;;;;;::::1;::::0;;;;;;;;:26;:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25898:52:0;:64:::1;25894:148;;;26004:9;::::0;25979:51:::1;::::0;;-1:-1:-1;;;25979:51:0;;-1:-1:-1;;;;;26004:9:0;;::::1;25979:51;::::0;::::1;::::0;-1:-1:-1;;25979:51:0;;;;;;:24;;::::1;::::0;::::1;::::0;:51;;;;;::::1;::::0;;;;;;;;;26004:9:::1;25979:24:::0;:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;25894:148:0::1;26083:9;::::0;26072:58:::1;::::0;;-1:-1:-1;;;26072:58:0;;-1:-1:-1;;;;;26072:58:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;26052:17:::1;::::0;26083:9;;;::::1;::::0;26072:26:::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;26052:17;26083:9;26072:58;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26072:58:0;26146:50:::1;::::0;;;;;26072:58:::1;26146:50:::0;::::1;::::0;;;;;26072:58;;-1:-1:-1;;;;;;26146:50:0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;26216:9:::0;25783:450;-1:-1:-1;;;;25783:450:0:o;23884:37::-;;;:::o;31436:163::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;31515:6:::1;31510:82;31525:14:::0;;::::1;31510:82;;;31561:19;31571:5;;31577:1;31571:8;;;;;;;;;;;;;31561:9;:19::i;:::-;31541:3;;31510:82;;28248:227:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;28363:6:::1;28358:110;28373:17:::0;;::::1;28358:110;;;28412:44;28429:8;;28438:1;28429:11;;;;;;;;;;;;;-1:-1:-1::0;;;;;28429:11:0::1;28442:13;28412:16;:44::i;:::-;28392:3;;28358:110;;33275:106:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;-1:-1:-1;;;;;33344:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;33344:29:0::1;33369:4;33344:29;::::0;;33275:106::o;31821:167::-;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;31902:6:::1;31897:84;31912:14:::0;;::::1;31897:84;;;31948:21;31960:5;;31966:1;31960:8;;;;;;;;;;;;;31948:11;:21::i;:::-;31928:3;;31897:84;;31025:403:::0;24517:10;;-1:-1:-1;;;;;24517:10:0;24503;:24;24495:33;;;;;;31082:11:::1;31117:12;-1:-1:-1::0;;;;;31105:34:0::1;;31140:4;31105:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31105:40:0;;31173:36;;-1:-1:-1;;;31173:36:0;;31203:4:::1;31173:36;::::0;::::1;::::0;;;31105:40;;-1:-1:-1;31156:14:0::1;::::0;-1:-1:-1;;;;;31173:21:0;::::1;::::0;::::1;::::0;:36;;;;;31105:40:::1;::::0;31173:36;;;;;;;:21;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31173:36:0;31224:50:::1;::::0;;-1:-1:-1;;;31224:50:0;;31254:4:::1;31224:50;::::0;::::1;::::0;-1:-1:-1;;;;;31261:12:0::1;31224:50:::0;::::1;::::0;;;;;;31173:36;;-1:-1:-1;31173:36:0;;31224:21;;::::1;::::0;::::1;::::0;:50;;;;;31173:36:::1;::::0;31224:50;;;;;;;;:21;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31224:50:0;:59:::1;31220:141;;;31307:3;-1:-1:-1::0;;;;;31300:19:0::1;;31320:12;-1:-1:-1::0;;31300:49:0::1;;;;;;;;;;;;;-1:-1:-1::0;;;;;31300:49:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31220:141:0::1;31385:12;-1:-1:-1::0;;;;;31371:35:0::1;;31407:4;31413:6;31371:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;15050:177:::0;15160:58;;;-1:-1:-1;;;;;15160:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15160:58:0;-1:-1:-1;;;15160:58:0;;;15133:86;;15153:5;;15133:19;:86::i;3249:132::-;3307:7;3334:39;3338:1;3341;3334:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3327:46;3249:132;-1:-1:-1;;;3249:132:0:o;17355:761::-;17779:23;17805:69;17833:4;17805:69;;;;;;;;;;;;;;;;;17813:5;-1:-1:-1;;;;;17805:27:0;;;:69;;;;;:::i;:::-;17889:17;;17779:95;;-1:-1:-1;17889:21:0;17885:224;;18031:10;18020:30;;;;;;;;;;;;;;;-1:-1:-1;18020:30:0;18012:85;;;;-1:-1:-1;;;18012:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3877:278;3963:7;3998:12;3991:5;3983:28;;;;-1:-1:-1;;;3983:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4022:9;4038:1;4034;:5;;;;;;;3877:278;-1:-1:-1;;;;;3877:278:0:o;12052:196::-;12155:12;12187:53;12210:6;12218:4;12224:1;12227:12;13559;13592:18;13603:6;13592:10;:18::i;:::-;13584:60;;;;;-1:-1:-1;;;13584:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13718:12;13732:23;13759:6;-1:-1:-1;;;;;13759:11:0;13779:8;13790:4;13759:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13759:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13717:78;;;;13810:7;13806:595;;;13841:10;-1:-1:-1;13834:17:0;;-1:-1:-1;13834:17:0;13806:595;13955:17;;:21;13951:439;;14218:10;14212:17;14279:15;14266:10;14262:2;14258:19;14251:44;14166:148;14354:20;;-1:-1:-1;;;14354:20:0;;;;;;;;;;;;;;;;;14361:12;;14354:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8937:619;8997:4;9465:20;;9308:66;9505:23;;;;;;:42;;-1:-1:-1;;9532:15:0;;;9497:51;-1:-1:-1;;8937:619:0:o
Swarm Source
ipfs://b1a05ea7fc32b8583c8ffbe63743bf8eb8e7533cd51355b58bf50c094998f6cf
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.