Contract
0x757490104fd4C80195D3C56bee4dc7B1279cCC51
4
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
YetiMaster
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2021-11-10 */ // SPDX-License-Identifier: MIT // file "./IBEP20.sol"; pragma solidity >=0.4.0; interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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); } pragma solidity >=0.6.2 <0.8.0; /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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 "./SafeBEP20.sol"; pragma solidity ^0.6.0; /** * @title SafeBEP20 * @dev Wrappers around BEP20 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 SafeBEP20 for IBEP20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeBEP20 { using SafeMath for uint256; using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IBEP20 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 * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 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), "SafeBEP20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IBEP20 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( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeBEP20: 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(IBEP20 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, "SafeBEP20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeBEP20: BEP20 operation did not succeed"); } } } // file "./openzeppelin_utils_ReentrancyGuard.sol"; pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // file "./openzeppelin_access_Context.sol"; pragma solidity >=0.6.0 <0.8.0; /* * @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 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 "./openzeppelin_access_Ownable.sol"; pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // file "./openzeppelin_math_SafeMath.sol"; pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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/IStrategy.sol interface IStrategy { // Total want tokens managed by stratfegy function wantLockedTotal() external view returns (uint256); // Main want token compounding function function earn() external; // Transfer want tokens yetiFarm -> strategy function deposit(uint256 _wantAmt) external returns (uint256); // Transfer want tokens strategy -> yetiFarm function withdraw(uint256 _wantAmt) external returns (uint256); function inCaseTokensGetStuck( address _token, uint256 _amount, address _to ) external; } // file "./IEarningsReferral.sol"; interface IEarningsReferral { function recordReferral(address _user, address _referrer) external; function recordReferralCommission(address _referrer, uint256 _commission) external; function getReferrer(address _user) external view returns (address); function updateOperator(address _operator, bool _status) external; function drainBEP20Token(IBEP20 _token, uint256 _amount, address _to) external; } /** * @dev Implementation of the {IBEP20} 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 {BEP20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-BEP20-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 BEP20 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 {IBEP20-approve}. */ contract BEP20 is Context, IBEP20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor(string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the bep token owner. */ function getOwner() external override view returns (address) { return owner(); } /** * @dev Returns the token name. */ function name() public override view returns (string memory) { return _name; } /** * @dev Returns the token decimals. */ function decimals() public override view returns (uint8) { return _decimals; } /** * @dev Returns the token symbol. */ function symbol() public override view returns (string memory) { return _symbol; } /** * @dev See {BEP20-totalSupply}. */ function totalSupply() public override view returns (uint256) { return _totalSupply; } /** * @dev See {BEP20-balanceOf}. */ function balanceOf(address account) public override view returns (uint256) { return _balances[account]; } /** * @dev See {BEP20-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 override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {BEP20-allowance}. */ function allowance(address owner, address spender) public override view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {BEP20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {BEP20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {BEP20}; * * 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 override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: 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 {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public 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 {BEP20-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 returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero") ); return true; } /** * @dev Creates `amount` tokens and assigns them to `msg.sender`, increasing * the total supply. * * Requirements * * - `msg.sender` must be the token owner */ function mint(uint256 amount) public onlyOwner returns (bool) { _mint(_msgSender(), amount); 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), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "BEP20: 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 { require(account != address(0), "BEP20: mint to the zero address"); _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 { require(account != address(0), "BEP20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "BEP20: 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 is 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 { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve( account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance") ); } } // File: contracts/HoneyToken.sol pragma solidity 0.6.12; contract HoneyToken is BEP20 { // Transfer tax rate in basis points. (default 3%) uint16 public transferTaxRate = 300; // Max transfer tax rate: 10%. uint16 public constant MAXIMUM_TRANSFER_TAX_RATE = 1000; // Burn address address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; // The operator can only update the transfer tax rate address private _operator; // Events event OperatorTransferred(address indexed previousOperator, address indexed newOperator); event TransferTaxRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate); modifier onlyOperator() { require(_operator == msg.sender, "operator: caller is not the operator"); _; } /** * @notice Constructs the HoneyToken contract. */ constructor() public BEP20("Honey token", "HONEY") { _operator = _msgSender(); emit OperatorTransferred(address(0), _operator); } /// @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef). function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } /// @dev overrides transfer function to meet tokenomics of HONEY function _transfer(address sender, address recipient, uint256 amount) internal virtual override { if (recipient == BURN_ADDRESS || transferTaxRate == 0) { super._transfer(sender, recipient, amount); } else { // default tax is 3% of every transfer uint256 taxAmount = amount.mul(transferTaxRate).div(10000); // default 97% of transfer sent to recipient uint256 sendAmount = amount.sub(taxAmount); require(amount == sendAmount + taxAmount, "HONEY::transfer: Tax value invalid"); super._transfer(sender, BURN_ADDRESS, taxAmount); super._transfer(sender, recipient, sendAmount); amount = sendAmount; } } /** * @dev Update the transfer tax rate. * Can only be called by the current operator. */ function updateTransferTaxRate(uint16 _transferTaxRate) public onlyOperator { require(_transferTaxRate <= MAXIMUM_TRANSFER_TAX_RATE, "HONEY::updateTransferTaxRate: Transfer tax rate must not exceed the maximum rate."); emit TransferTaxRateUpdated(msg.sender, transferTaxRate, _transferTaxRate); transferTaxRate = _transferTaxRate; } /** * @dev Returns the address of the current operator. */ function operator() public view returns (address) { return _operator; } /** * @dev Transfers operator of the contract to a new account (`newOperator`). * Can only be called by the current operator. */ function transferOperator(address newOperator) public onlyOperator { require(newOperator != address(0), "HONEY::transferOperator: new operator is the zero address"); emit OperatorTransferred(_operator, newOperator); _operator = newOperator; } } // File: contracts/YetiMaster.sol pragma solidity 0.6.12; contract YetiMaster is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeBEP20 for IBEP20; // Info of each user. struct UserInfo { uint256 amount; // How many amount tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. uint256 lastDepositTimestamp; // Timestamp of the last deposit. // We do some fancy math here. Basically, any point in time, the amount of earnings // entitled to a user but is pending to be distributed is: // // pending reward = (amount * pool.acccPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws want tokens to a pool. Here's what happens: // 1. The pool's `accEarningsPerShare` (and `lastRewardTimestamp`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } struct PoolInfo { IBEP20 want; // Address of the want token. uint256 allocPoint; // How many allocation points assigned to this pool. Earnings to distribute per second. uint256 lastRewardTimestamp; // Last timestamp that earnings distribution occurs. uint256 accEarningsPerShare; // Accumulated earnings per share, times 1e12. See below. address strat; // Strategy address that will earnings compound want tokens uint16 depositFeeBP; // Deposit fee in basis points bool isWithdrawFee; // if the pool has withdraw fee } // @TODO: Add HoneyToken address to here address public earningToken; // Dev address. address public devaddr; address public constant burnAddress = 0x000000000000000000000000000000000000dEaD; address public feeAddr; uint256 public earningsPerSecond = 0.02 ether; uint256 public earningsDevPerSecond = 0.002 ether; uint256 public startTimestamp; uint256 public endTimestamp; // Earnings referral contract address. IEarningsReferral public earningReferral; // Referral commission rate in basis points. uint16 public referralCommissionRate = 300; // Max referral commission rate: 20%. uint16 public constant MAXIMUM_REFERRAL_COMMISSION_RATE = 2000; PoolInfo[] public poolInfo; // Info of each pool. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Info of each user that stakes LP tokens. uint256 public totalAllocPoint = 0; // Total allocation points. Must be the sum of all allocation points in all pools. uint256[] public withdrawalFeeIntervals = [1]; uint16[] public withdrawalFeeBP = [0, 0]; uint16 public constant MAX_WITHDRAWAL_FEE_BP = 300; uint16 public constant MAX_DEPOSIT_FEE_BP = 400; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw( address indexed user, uint256 indexed pid, uint256 amount ); event MigrateToV2(address indexed user, uint256 amount); event SetFeeAddress(address indexed user, address indexed newAddress); event SetDevAddress(address indexed user, address indexed newAddress); event ReferralCommissionPaid(address indexed user, address indexed referrer, uint256 commissionAmount); event NewEarningsEmission(uint256 earningsPerSecond); function poolLength() external view returns (uint256) { return poolInfo.length; } constructor( address _devaddr, address _feeAddr, uint256 _startTimestamp, uint256 _endTimestamp, address _earningToken ) public { devaddr = _devaddr; feeAddr = _feeAddr; startTimestamp = _startTimestamp; endTimestamp = _endTimestamp; earningToken = _earningToken; } modifier poolExists(uint256 pid) { require(pid < poolInfo.length, "pool inexistent"); _; } // Add a new lp to the pool. Can only be called by the owner. // XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do. (Only if want tokens are stored here.) function add( uint256 _allocPoint, IBEP20 _want, bool _withUpdate, address _strat, uint16 _depositFeeBP, bool _isWithdrawFee ) public onlyOwner { require(_depositFeeBP <= MAX_DEPOSIT_FEE_BP, "add: invalid deposit fee basis points"); if (_withUpdate) { massUpdatePools(); } uint256 lastRewardTimestamp = block.timestamp > startTimestamp ? block.timestamp : startTimestamp; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push( PoolInfo({ want: _want, allocPoint: _allocPoint, lastRewardTimestamp: lastRewardTimestamp, accEarningsPerShare: 0, strat: _strat, depositFeeBP : _depositFeeBP, isWithdrawFee: _isWithdrawFee }) ); } // Update the given pool's Earnings allocation point. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, bool _withUpdate, uint16 _depositFeeBP, bool _isWithdrawFee ) public onlyOwner poolExists(_pid) { require(_depositFeeBP <= MAX_DEPOSIT_FEE_BP, "set: invalid deposit fee basis points"); if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add( _allocPoint ); poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; poolInfo[_pid].isWithdrawFee = _isWithdrawFee; } // Return reward multiplier over the given _from to _to timestamp. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { if (_from > _to) return 0; return _to.sub(_from); } // View function to see pending Earnings on frontend. function pendingEarnings(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accEarningsPerShare = pool.accEarningsPerShare; uint256 wantLockedTotal = IStrategy(pool.strat).wantLockedTotal(); uint256 lastTimestamp = endTimestamp < block.timestamp ? endTimestamp : block.timestamp; if (lastTimestamp > pool.lastRewardTimestamp && wantLockedTotal != 0) { uint256 multiplier = getMultiplier(pool.lastRewardTimestamp, lastTimestamp); uint256 earningsReward = multiplier.mul(earningsPerSecond).mul(pool.allocPoint).div( totalAllocPoint ); accEarningsPerShare = accEarningsPerShare.add( earningsReward.mul(1e12).div(wantLockedTotal) ); } return user.amount.mul(accEarningsPerShare).div(1e12).sub(user.rewardDebt); } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTimestamp) { return; } uint256 lastTimestamp = endTimestamp < block.timestamp ? endTimestamp : block.timestamp; uint256 wantLockedTotal = IStrategy(pool.strat).wantLockedTotal(); if (wantLockedTotal == 0) { pool.lastRewardTimestamp = lastTimestamp; return; } uint256 multiplier = getMultiplier(pool.lastRewardTimestamp, lastTimestamp); if (multiplier <= 0) { return; } uint256 earningsReward = multiplier.mul(earningsPerSecond).mul(pool.allocPoint).div(totalAllocPoint); HoneyToken(earningToken).mint( devaddr, multiplier.mul(earningsDevPerSecond).mul(pool.allocPoint).div( totalAllocPoint ) ); HoneyToken(earningToken).mint( address(this), earningsReward ); pool.accEarningsPerShare = pool.accEarningsPerShare.add( earningsReward.mul(1e12).div(wantLockedTotal) ); pool.lastRewardTimestamp = lastTimestamp; } function deposit(uint256 _pid,uint256 _wantAmt, address _referrer) public nonReentrant poolExists(_pid){ updatePool(_pid); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; if (_wantAmt > 0 && address(earningReferral) != address(0) && _referrer != address(0) && _referrer != msg.sender) { earningReferral.recordReferral(msg.sender, _referrer); } if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accEarningsPerShare).div(1e12).sub( user.rewardDebt ); if (pending > 0) { safeEarningsTransfer(msg.sender, pending); payReferralCommission(msg.sender, pending); } } if (_wantAmt > 0) { uint256 wantBalBefore = IBEP20(pool.want).balanceOf(address(this)); pool.want.safeTransferFrom(address(msg.sender), address(this), _wantAmt); uint256 wantBalAfter = IBEP20(pool.want).balanceOf(address(this)); _wantAmt = wantBalAfter.sub(wantBalBefore); uint256 amount = _wantAmt; if (pool.depositFeeBP > 0) { uint256 depositFee = _wantAmt.mul(pool.depositFeeBP).div(10000); pool.want.safeTransfer(feeAddr, depositFee); amount = (_wantAmt).sub(depositFee); } pool.want.safeIncreaseAllowance(pool.strat, amount); uint256 amountDeposit = IStrategy(poolInfo[_pid].strat).deposit(amount); user.amount = user.amount.add(amountDeposit); user.lastDepositTimestamp = block.timestamp; } user.rewardDebt = user.amount.mul(pool.accEarningsPerShare).div(1e12); emit Deposit(msg.sender, _pid, _wantAmt); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _wantAmt) public nonReentrant poolExists(_pid){ updatePool(_pid); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 total = IStrategy(pool.strat).wantLockedTotal(); require(user.amount > 0, "user.amount is 0"); require(total > 0, "Total is 0"); // Withdraw pending Earnings uint256 pending = user.amount.mul(pool.accEarningsPerShare).div(1e12).sub( user.rewardDebt ); if (pending > 0) { safeEarningsTransfer(msg.sender, pending); payReferralCommission(msg.sender, pending); } // Withdraw want tokens uint256 amount = user.amount; if (_wantAmt > amount) { _wantAmt = amount; } if (_wantAmt > 0) { uint256 amountRemove = IStrategy(pool.strat).withdraw(_wantAmt); if (amountRemove > user.amount) { user.amount = 0; } else { user.amount = user.amount.sub(amountRemove); } uint256 wantBal = IBEP20(pool.want).balanceOf(address(this)); if (wantBal < _wantAmt) { _wantAmt = wantBal; } if (pool.isWithdrawFee) { uint16 withdrawFeeBP = getWithdrawFee(_pid, msg.sender); if (withdrawFeeBP > 0) { uint256 withdrawFee = _wantAmt.mul(withdrawFeeBP).div(10000); pool.want.safeTransfer(feeAddr, withdrawFee); _wantAmt = (_wantAmt).sub(withdrawFee); } } pool.want.safeTransfer(address(msg.sender), _wantAmt); } user.rewardDebt = user.amount.mul(pool.accEarningsPerShare).div(1e12); emit Withdraw(msg.sender, _pid, _wantAmt); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public nonReentrant poolExists(_pid){ PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; amount = IStrategy(pool.strat).withdraw(amount); if (pool.isWithdrawFee) { uint16 withdrawFeeBP = getWithdrawFee(_pid, msg.sender); if (withdrawFeeBP > 0) { uint256 withdrawFee = amount.mul(withdrawFeeBP).div(10000); pool.want.safeTransfer(feeAddr, withdrawFee); amount = (amount).sub(withdrawFee); } } user.amount = 0; user.rewardDebt = 0; pool.want.safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Safe Earnings transfer function, just in case if rounding error causes pool to not have enough function safeEarningsTransfer(address _to, uint256 _EarningsAmt) internal { uint256 EarningsBal = IBEP20(earningToken).balanceOf(address(this)); if (_EarningsAmt > EarningsBal) { IBEP20(earningToken).transfer(_to, EarningsBal); } else { IBEP20(earningToken).transfer(_to, _EarningsAmt); } } function inCaseTokensGetStuck(address _token, uint256 _amount) public onlyOwner { require(_token != earningToken, "!safe"); IBEP20(_token).safeTransfer(msg.sender, _amount); } function setDevAddress(address _devaddr) public onlyOwner { devaddr = _devaddr; emit SetDevAddress(msg.sender, _devaddr); } function setFeeAddress(address _feeAddress) public onlyOwner { feeAddr = _feeAddress; emit SetFeeAddress(msg.sender, _feeAddress); } // Update the earning referral contract address by the owner function setEarningsReferral(IEarningsReferral _earningReferral) public onlyOwner { earningReferral = _earningReferral; } // Update referral commission rate by the owner function setReferralCommissionRate(uint16 _referralCommissionRate) public onlyOwner { require(_referralCommissionRate <= MAXIMUM_REFERRAL_COMMISSION_RATE, "setReferralCommissionRate: invalid referral commission rate basis points"); referralCommissionRate = _referralCommissionRate; } // Pay referral commission to the referrer who referred this user. function payReferralCommission(address _user, uint256 _pending) internal { if (address(earningReferral) != address(0) && referralCommissionRate > 0) { address referrer = earningReferral.getReferrer(_user); uint256 commissionAmount = _pending.mul(referralCommissionRate).div(10000); if (referrer != address(0) && commissionAmount > 0) { HoneyToken(earningToken).mint(referrer, commissionAmount); earningReferral.recordReferralCommission(referrer, commissionAmount); emit ReferralCommissionPaid(_user, referrer, commissionAmount); } } } function transferEarningTokenOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); Ownable(earningToken).transferOwnership(newOwner); } function getWithdrawFee(uint256 _pid, address _user) public view returns (uint16) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; if (!pool.isWithdrawFee) return 0; uint256 TimeElapsed = block.timestamp - user.lastDepositTimestamp; uint i = 0; for (; i < withdrawalFeeIntervals.length; i++) { if (TimeElapsed < withdrawalFeeIntervals[i]) break; } return withdrawalFeeBP[i]; } function setWithdrawFee(uint256[] memory _withdrawalFeeIntervals, uint16[] memory _withdrawalFeeBP) public onlyOwner { require (_withdrawalFeeIntervals.length + 1 == _withdrawalFeeBP.length, 'setWithdrawFee: _withdrawalFeeBP length is one more than _withdrawalFeeIntervals length'); require (_withdrawalFeeBP.length > 0, 'setWithdrawFee: _withdrawalFeeBP length is one more than 0'); for (uint i = 0; i < _withdrawalFeeIntervals.length - 1; i++) { require (_withdrawalFeeIntervals[i] < _withdrawalFeeIntervals[i + 1], 'setWithdrawFee: The interval must be ascending'); } for (uint i = 0; i < _withdrawalFeeBP.length; i++) { require (_withdrawalFeeBP[i] <= MAX_WITHDRAWAL_FEE_BP, 'setWithdrawFee: invalid withdrawal fee basis points'); } withdrawalFeeIntervals = _withdrawalFeeIntervals; withdrawalFeeBP = _withdrawalFeeBP; } function setEarningsPerSecond(uint256 _earningsPerSecond) external onlyOwner { earningsPerSecond = _earningsPerSecond; earningsDevPerSecond = _earningsPerSecond.div(10); emit NewEarningsEmission(_earningsPerSecond); } function setStartTimestamp(uint256 _startTimestamp) external onlyOwner { require(block.timestamp < startTimestamp, 'setStartTimestamp: The farming has already started'); require(block.timestamp < _startTimestamp, 'setStartTimestamp: _startTimestamp must be larger than now'); require(_startTimestamp < endTimestamp, 'setStartTimestamp: _startTimestamp must be smaller than endTimestamp'); startTimestamp = _startTimestamp; } function setEndTimestamp(uint256 _endTimestamp) external onlyOwner { require(startTimestamp < _endTimestamp, 'setEndTimestamp: _endTimestamp must be larger than startTimestamp'); require(block.timestamp < _endTimestamp, 'setEndTimestamp: _endTimestamp must be larger than now'); endTimestamp = _endTimestamp; } }
[{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"},{"internalType":"address","name":"_feeAddr","type":"address"},{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_endTimestamp","type":"uint256"},{"internalType":"address","name":"_earningToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MigrateToV2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"earningsPerSecond","type":"uint256"}],"name":"NewEarningsEmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"commissionAmount","type":"uint256"}],"name":"ReferralCommissionPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAXIMUM_REFERRAL_COMMISSION_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_DEPOSIT_FEE_BP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WITHDRAWAL_FEE_BP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IBEP20","name":"_want","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"address","name":"_strat","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_isWithdrawFee","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earningReferral","outputs":[{"internalType":"contract IEarningsReferral","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earningToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earningsDevPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earningsPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getWithdrawFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"want","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accEarningsPerShare","type":"uint256"},{"internalType":"address","name":"strat","type":"address"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"bool","name":"isWithdrawFee","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralCommissionRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_isWithdrawFee","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_earningsPerSecond","type":"uint256"}],"name":"setEarningsPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IEarningsReferral","name":"_earningReferral","type":"address"}],"name":"setEarningsReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endTimestamp","type":"uint256"}],"name":"setEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_referralCommissionRate","type":"uint16"}],"name":"setReferralCommissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTimestamp","type":"uint256"}],"name":"setStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_withdrawalFeeIntervals","type":"uint256[]"},{"internalType":"uint16[]","name":"_withdrawalFeeBP","type":"uint16[]"}],"name":"setWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferEarningTokenOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"lastDepositTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawalFeeBP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawalFeeIntervals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
66470de4df82000060055566071afd498d00006006556009805461ffff60a01b1916604b60a21b1790556000600c5560a0604052600160808181526200004991600d91906200016b565b5060408051808201909152600080825260208201526200006e90600e906002620001c0565b503480156200007c57600080fd5b50604051620039e7380380620039e7833981810160405260a0811015620000a257600080fd5b508051602082015160408301516060840151608090940151929391929091906000620000cd62000167565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600380546001600160a01b039687166001600160a01b0319918216179091556004805495871695821695909517909455600792909255600855600280549190931691161790556200029e565b3390565b828054828255906000526020600020908101928215620001ae579160200282015b82811115620001ae578251829060ff169055916020019190600101906200018c565b50620001bc9291506200026b565b5090565b82805482825590600052602060002090600f016010900481019282156200025d5791602002820160005b838211156200022b57835183826101000a81548161ffff021916908360ff1602179055509260200192600201602081600101049283019260010302620001ea565b80156200025b5782816101000a81549061ffff02191690556002016020816001010492830192600103026200022b565b505b50620001bc92915062000282565b5b80821115620001bc57600081556001016200026c565b5b80821115620001bc57805461ffff1916815560010162000283565b61373980620002ae6000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80637960d63b11610146578063a05e16f0116100c3578063d30ef61b11610087578063d30ef61b1461079e578063d49e77cd146107a6578063e4bf6705146107ae578063e6fd48bc146107cb578063f2fde38b146107d3578063fcda4628146107f95761025e565b8063a05e16f014610600578063a85adeab14610727578063c44bef751461072f578063c6d758cb1461074c578063d0d41fe1146107785761025e565b80638da5cb5b1161010a5780638da5cb5b146105515780638dbb1e3a146105595780638dbdbe6d1461057c57806393f1a40b146105ae5780639cf8cf0f146105f85761025e565b80637960d63b146104d25780637df6a6c8146104da5780637fe205c7146104f75780638705fcd4146104ff5780638b025a0d146105255761025e565b806337caa6e7116101df57806351eb05a6116101a357806351eb05a61461045f5780635312ea8e1461047c57806355dbc82614610499578063630b5ba1146104ba57806370d5ae05146104c2578063715018a6146104ca5761025e565b806337caa6e7146103e757806339e7fddc146103ef578063441a3e70146103f757806347b99d401461041a57806348b22bfb146104575761025e565b80631526fe27116102265780631526fe271461032957806317caf6f1146103945780631c7169341461039c57806320f400c7146103a457806333e24e67146103ca5761025e565b8063081e3eda1461026357806308ae8faa1461027d5780630acc63d9146102a957806310b37c23146102dd578063143d257514610305575b600080fd5b61026b610847565b60408051918252519081900360200190f35b61026b6004803603604081101561029357600080fd5b50803590602001356001600160a01b031661084d565b6102c6600480360360208110156102bf57600080fd5b50356109d7565b6040805161ffff9092168252519081900360200190f35b610303600480360360208110156102f357600080fd5b50356001600160a01b0316610a0c565b005b61030d610a90565b604080516001600160a01b039092168252519081900360200190f35b6103466004803603602081101561033f57600080fd5b5035610a9f565b604080516001600160a01b03988916815260208101979097528681019590955260608601939093529416608084015261ffff90931660a083015291151560c082015290519081900360e00190f35b61026b610b03565b6102c6610b09565b610303600480360360208110156103ba57600080fd5b50356001600160a01b0316610b0f565b61026b600480360360208110156103e057600080fd5b5035610c1f565b6102c6610c3d565b61030d610c43565b6103036004803603604081101561040d57600080fd5b5080359060200135610c52565b610303600480360360a081101561043057600080fd5b50803590602081013590604081013515159061ffff606082013516906080013515156110a5565b6102c6611281565b6103036004803603602081101561047557600080fd5b5035611287565b6103036004803603602081101561049257600080fd5b50356114ea565b610303600480360360208110156104af57600080fd5b503561ffff1661171c565b6103036117e5565b61030d611808565b61030361180e565b61026b6118ba565b610303600480360360208110156104f057600080fd5b50356118c0565b61030d6119a5565b6103036004803603602081101561051557600080fd5b50356001600160a01b03166119b4565b6102c66004803603604081101561053b57600080fd5b50803590602001356001600160a01b0316611a62565b61030d611b40565b61026b6004803603604081101561056f57600080fd5b5080359060200135611b4f565b6103036004803603606081101561059257600080fd5b50803590602081013590604001356001600160a01b0316611b72565b6105da600480360360408110156105c457600080fd5b50803590602001356001600160a01b0316612018565b60408051938452602084019290925282820152519081900360600190f35b61026b612044565b6103036004803603604081101561061657600080fd5b81019060208101813564010000000081111561063157600080fd5b82018360208201111561064357600080fd5b8035906020019184602083028401116401000000008311171561066557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106b557600080fd5b8201836020820111156106c757600080fd5b803590602001918460208302840111640100000000831117156106e957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061204a945050505050565b61026b61224b565b6103036004803603602081101561074557600080fd5b5035612251565b6103036004803603604081101561076257600080fd5b506001600160a01b038135169060200135612376565b6103036004803603602081101561078e57600080fd5b50356001600160a01b0316612437565b6102c66124e5565b61030d6124f6565b610303600480360360208110156107c457600080fd5b5035612505565b61026b6125b0565b610303600480360360208110156107e957600080fd5b50356001600160a01b03166125b6565b610303600480360360c081101561080f57600080fd5b508035906001600160a01b03602082013581169160408101351515916060820135169061ffff6080820135169060a0013515156126b8565b600a5490565b600080600a848154811061085d57fe5b60009182526020808320878452600b825260408085206001600160a01b038981168752908452818620600595909502909201600381015460048083015484516342da4eb360e01b8152945193995096979196919591909416936342da4eb393808201939190829003018186803b1580156108d657600080fd5b505afa1580156108ea573d6000803e3d6000fd5b505050506040513d602081101561090057600080fd5b50516008549091506000904211610917574261091b565b6008545b905084600201548111801561092f57508115155b1561099b576000610944866002015483611b4f565b90506000610977600c54610971896001015461096b6005548761290c90919063ffffffff16565b9061290c565b90612965565b905061099661098f856109718464e8d4a5100061290c565b86906129cc565b945050505b6109c984600101546109c364e8d4a5100061097187896000015461290c90919063ffffffff16565b90612a26565b955050505050505b92915050565b600e81815481106109e457fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b610a14612a83565b6001600160a01b0316610a25611b40565b6001600160a01b031614610a6e576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b600a8181548110610aac57fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092909190811690600160a01b810461ffff1690600160b01b900460ff1687565b600c5481565b61012c81565b610b17612a83565b6001600160a01b0316610b28611b40565b6001600160a01b031614610b71576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b6001600160a01b038116610bb65760405162461bcd60e51b81526004018080602001828103825260268152602001806134e76026913960400191505060405180910390fd5b6002546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015610c0457600080fd5b505af1158015610c18573d6000803e3d6000fd5b5050505050565b600d8181548110610c2c57fe5b600091825260209091200154905081565b61019081565b6004546001600160a01b031681565b60026001541415610caa576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155600a5482908110610cf9576040805162461bcd60e51b815260206004820152600f60248201526e1c1bdbdb081a5b995e1a5cdd195b9d608a1b604482015290519081900360640190fd5b610d0283611287565b6000600a8481548110610d1157fe5b60009182526020808320878452600b82526040808520338652835280852060059490940290910160048181015483516342da4eb360e01b815293519297509495946001600160a01b0316936342da4eb39380830193919290829003018186803b158015610d7d57600080fd5b505afa158015610d91573d6000803e3d6000fd5b505050506040513d6020811015610da757600080fd5b50518254909150610df2576040805162461bcd60e51b815260206004820152601060248201526f0757365722e616d6f756e7420697320360841b604482015290519081900360640190fd5b60008111610e34576040805162461bcd60e51b815260206004820152600a6024820152690546f74616c20697320360b41b604482015290519081900360640190fd5b6000610e6283600101546109c364e8d4a510006109718860030154886000015461290c90919063ffffffff16565b90508015610e7e57610e743382612a87565b610e7e3382612c10565b825480871115610e8c578096505b86156110405760048086015460408051632e1a7d4d60e01b81529283018a9052516000926001600160a01b0390921691632e1a7d4d91602480830192602092919082900301818787803b158015610ee257600080fd5b505af1158015610ef6573d6000803e3d6000fd5b505050506040513d6020811015610f0c57600080fd5b50518554909150811115610f235760008555610f32565b8454610f2f9082612a26565b85555b8554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610f7c57600080fd5b505afa158015610f90573d6000803e3d6000fd5b505050506040513d6020811015610fa657600080fd5b5051905088811015610fb6578098505b6004870154600160b01b900460ff1615611027576000610fd68b33611a62565b905061ffff811615611025576000610ff86127106109718d61ffff861661290c565b6004548a54919250611017916001600160a01b03908116911683612e21565b6110218b82612a26565b9a50505b505b865461103d906001600160a01b0316338b612e21565b50505b6003850154845461105b9164e8d4a51000916109719161290c565b6001850155604080518881529051899133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505060018055505050505050565b6110ad612a83565b6001600160a01b03166110be611b40565b6001600160a01b031614611107576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b600a5485908110611151576040805162461bcd60e51b815260206004820152600f60248201526e1c1bdbdb081a5b995e1a5cdd195b9d608a1b604482015290519081900360640190fd5b61019061ffff841611156111965760405162461bcd60e51b81526004018080602001828103825260258152602001806136916025913960400191505060405180910390fd5b83156111a4576111a46117e5565b6111e1856111db600a89815481106111b857fe5b906000526020600020906005020160010154600c54612a2690919063ffffffff16565b906129cc565b600c8190555084600a87815481106111f557fe5b90600052602060002090600502016001018190555082600a878154811061121857fe5b906000526020600020906005020160040160146101000a81548161ffff021916908361ffff16021790555081600a878154811061125157fe5b906000526020600020906005020160040160166101000a81548160ff021916908315150217905550505050505050565b6107d081565b6000600a828154811061129657fe5b90600052602060002090600502019050806002015442116112b757506114e7565b600042600854106112c857426112cc565b6008545b905060008260040160009054906101000a90046001600160a01b03166001600160a01b03166342da4eb36040518163ffffffff1660e01b815260040160206040518083038186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b505190508061135f57506002909101556114e7565b600061136f846002015484611b4f565b90506000811161138257505050506114e7565b60006113a7600c54610971876001015461096b6005548761290c90919063ffffffff16565b600254600354600c5460018901546006549495506001600160a01b03938416946340c10f1994909316926113e592916109719161096b908a9061290c565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b5050600254604080516340c10f1960e01b81523060048201526024810186905290516001600160a01b0390921693506340c10f19925060448082019260009290919082900301818387803b15801561149657600080fd5b505af11580156114aa573d6000803e3d6000fd5b505050506114d86114cd8461097164e8d4a510008561290c90919063ffffffff16565b6003870154906129cc565b60038601555050506002909101555b50565b60026001541415611542576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155600a5481908110611591576040805162461bcd60e51b815260206004820152600f60248201526e1c1bdbdb081a5b995e1a5cdd195b9d608a1b604482015290519081900360640190fd5b6000600a83815481106115a057fe5b60009182526020808320868452600b82526040808520338652835280852080546005959095029092016004818101548351632e1a7d4d60e01b8152918201879052925191975092956001600160a01b0390921693632e1a7d4d93602480820194929392918390030190829087803b15801561161a57600080fd5b505af115801561162e573d6000803e3d6000fd5b505050506040513d602081101561164457600080fd5b50516004840154909150600160b01b900460ff16156116ba5760006116698633611a62565b905061ffff8116156116b857600061168b6127106109718561ffff861661290c565b60045486549192506116aa916001600160a01b03908116911683612e21565b6116b48382612a26565b9250505b505b6000808355600183015582546116da906001600160a01b03163383612e21565b604080518281529051869133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a3505060018055505050565b611724612a83565b6001600160a01b0316611735611b40565b6001600160a01b03161461177e576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b6107d061ffff821611156117c35760405162461bcd60e51b81526004018080602001828103825260488152602001806133c76048913960600191505060405180910390fd5b6009805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b600a5460005b81811015611804576117fc81611287565b6001016117eb565b5050565b61dead81565b611816612a83565b6001600160a01b0316611827611b40565b6001600160a01b031614611870576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b6118c8612a83565b6001600160a01b03166118d9611b40565b6001600160a01b031614611922576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b80600754106119625760405162461bcd60e51b81526004018080602001828103825260418152602001806134426041913960600191505060405180910390fd5b8042106119a05760405162461bcd60e51b815260040180806020018281038252603681526020018061350d6036913960400191505060405180910390fd5b600855565b6002546001600160a01b031681565b6119bc612a83565b6001600160a01b03166119cd611b40565b6001600160a01b031614611a16576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03831690811790915560405133907fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f790600090a350565b600080600a8481548110611a7257fe5b60009182526020808320878452600b825260408085206001600160a01b038916865290925292206005919091029091016004810154909250600160b01b900460ff16611ac3576000925050506109d1565b6002810154420360005b600d54811015611b0357600d8181548110611ae457fe5b9060005260206000200154821015611afb57611b03565b600101611acd565b600e8181548110611b1057fe5b90600052602060002090601091828204019190066002029054906101000a900461ffff1694505050505092915050565b6000546001600160a01b031690565b600081831115611b61575060006109d1565b611b6b8284612a26565b9392505050565b60026001541415611bca576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155600a5483908110611c19576040805162461bcd60e51b815260206004820152600f60248201526e1c1bdbdb081a5b995e1a5cdd195b9d608a1b604482015290519081900360640190fd5b611c2284611287565b6000600a8581548110611c3157fe5b60009182526020808320888452600b825260408085203386529092529220600590910290910191508415801590611c7257506009546001600160a01b031615155b8015611c8657506001600160a01b03841615155b8015611c9b57506001600160a01b0384163314155b15611d0d5760095460408051630c7f7b6b60e01b81523360048201526001600160a01b03878116602483015291519190921691630c7f7b6b91604480830192600092919082900301818387803b158015611cf457600080fd5b505af1158015611d08573d6000803e3d6000fd5b505050505b805415611d60576000611d4282600101546109c364e8d4a510006109718760030154876000015461290c90919063ffffffff16565b90508015611d5e57611d543382612a87565b611d5e3382612c10565b505b8415611fb5578154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611db057600080fd5b505afa158015611dc4573d6000803e3d6000fd5b505050506040513d6020811015611dda57600080fd5b50518354909150611df6906001600160a01b0316333089612e73565b8254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611e4057600080fd5b505afa158015611e54573d6000803e3d6000fd5b505050506040513d6020811015611e6a57600080fd5b50519050611e788183612a26565b60048501549097508790600160a01b900461ffff1615611ee5576004850154600090611eb89061271090610971908c90600160a01b900461ffff1661290c565b6004548754919250611ed7916001600160a01b03908116911683612e21565b611ee18982612a26565b9150505b60048501548554611f03916001600160a01b03918216911683612ecd565b6000600a8a81548110611f1257fe5b6000918252602080832060046005909302018201546040805163b6b55f2560e01b8152938401879052516001600160a01b039091169363b6b55f25936024808201949392918390030190829087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b505050506040513d6020811015611f9757600080fd5b50518554909150611fa890826129cc565b8555505042600284015550505b60038201548154611fd09164e8d4a51000916109719161290c565b6001820155604080518681529051879133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350506001805550505050565b600b60209081526000928352604080842090915290825290208054600182015460029092015490919083565b60065481565b612052612a83565b6001600160a01b0316612063611b40565b6001600160a01b0316146120ac576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b80518251600101146120ef5760405162461bcd60e51b81526004018080602001828103825260578152602001806135436057913960600191505060405180910390fd5b600081511161212f5760405162461bcd60e51b815260040180806020018281038252603a8152602001806135f2603a913960400191505060405180910390fd5b60005b60018351038110156121ad5782816001018151811061214d57fe5b602002602001015183828151811061216157fe5b6020026020010151106121a55760405162461bcd60e51b815260040180806020018281038252602e8152602001806136d6602e913960400191505060405180910390fd5b600101612132565b5060005b815181101561221e5761012c61ffff168282815181106121cd57fe5b602002602001015161ffff1611156122165760405162461bcd60e51b815260040180806020018281038252603381526020018061340f6033913960400191505060405180910390fd5b6001016121b1565b50815161223290600d906020850190613282565b50805161224690600e9060208401906132cd565b505050565b60085481565b612259612a83565b6001600160a01b031661226a611b40565b6001600160a01b0316146122b3576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b60075442106122f35760405162461bcd60e51b81526004018080602001828103825260328152602001806135c06032913960400191505060405180910390fd5b8042106123315760405162461bcd60e51b815260040180806020018281038252603a815260200180613483603a913960400191505060405180910390fd5b60085481106123715760405162461bcd60e51b815260040180806020018281038252604481526020018061362c6044913960600191505060405180910390fd5b600755565b61237e612a83565b6001600160a01b031661238f611b40565b6001600160a01b0316146123d8576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b6002546001600160a01b0383811691161415612423576040805162461bcd60e51b8152602060048201526005602482015264217361666560d81b604482015290519081900360640190fd5b6118046001600160a01b0383163383612e21565b61243f612a83565b6001600160a01b0316612450611b40565b6001600160a01b031614612499576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b03831690811790915560405133907f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e790600090a350565b600954600160a01b900461ffff1681565b6003546001600160a01b031681565b61250d612a83565b6001600160a01b031661251e611b40565b6001600160a01b031614612567576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b600581905561257781600a612965565b6006556040805182815290517fe2fd309d7a6e42ec8d621191bb5c80d3f75890635dba0531aa49c69c1a82b4fc9181900360200190a150565b60075481565b6125be612a83565b6001600160a01b03166125cf611b40565b6001600160a01b031614612618576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b6001600160a01b03811661265d5760405162461bcd60e51b81526004018080602001828103825260268152602001806134e76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6126c0612a83565b6001600160a01b03166126d1611b40565b6001600160a01b03161461271a576040805162461bcd60e51b815260206004820181905260248201526000805160206136b6833981519152604482015290519081900360640190fd5b61019061ffff8316111561275f5760405162461bcd60e51b81526004018080602001828103825260258152602001806133a26025913960400191505060405180910390fd5b831561276d5761276d6117e5565b6000600754421161278057600754612782565b425b600c5490915061279290886129cc565b600c556040805160e0810182526001600160a01b039788168152602081019889529081019182526000606082018181529588166080830190815261ffff95861660a0840190815294151560c08401908152600a80546001810182559352925160059092027fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a881018054938b166001600160a01b031994851617905599517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a98b015592517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2aa8a015594517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2ab89015590517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2ac9097018054925191511515600160b01b0260ff60b01b1992909416600160a01b0261ffff60a01b199890971692909416919091179590951693909317939093169190911790915550565b60008261291b575060006109d1565b8282028284828161292857fe5b0414611b6b5760405162461bcd60e51b81526004018080602001828103825260218152602001806136706021913960400191505060405180910390fd5b60008082116129bb576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816129c457fe5b049392505050565b600082820183811015611b6b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082821115612a7d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3390565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6020811015612afc57600080fd5b5051905080821115612b90576002546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b505050506040513d6020811015612b8857600080fd5b506122469050565b6002546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612be657600080fd5b505af1158015612bfa573d6000803e3d6000fd5b505050506040513d6020811015610c1857600080fd5b6009546001600160a01b031615801590612c365750600954600160a01b900461ffff1615155b156118045760095460408051634a9fefc760e01b81526001600160a01b03858116600483015291516000939290921691634a9fefc791602480820192602092909190829003018186803b158015612c8c57600080fd5b505afa158015612ca0573d6000803e3d6000fd5b505050506040513d6020811015612cb657600080fd5b5051600954909150600090612cdf9061271090610971908690600160a01b900461ffff1661290c565b90506001600160a01b03821615801590612cf95750600081115b15612e1b57600254604080516340c10f1960e01b81526001600160a01b03858116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b158015612d5357600080fd5b505af1158015612d67573d6000803e3d6000fd5b505060095460408051631b82d29760e31b81526001600160a01b03878116600483015260248201879052915191909216935063dc1694b89250604480830192600092919082900301818387803b158015612dc057600080fd5b505af1158015612dd4573d6000803e3d6000fd5b50506040805184815290516001600160a01b038087169450881692507f86ddab457291316e0f5496737e5ca67c4037234c32c3be04c48ae96186893a7b9181900360200190a35b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612246908490612fb4565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612e1b908590612fb4565b6000612f6382856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612f3157600080fd5b505afa158015612f45573d6000803e3d6000fd5b505050506040513d6020811015612f5b57600080fd5b5051906129cc565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150612e1b9085905b6060613009826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130659092919063ffffffff16565b8051909150156122465780806020019051602081101561302857600080fd5b50516122465760405162461bcd60e51b815260040180806020018281038252602a8152602001806134bd602a913960400191505060405180910390fd5b6060613074848460008561307c565b949350505050565b6060824710156130bd5760405162461bcd60e51b815260040180806020018281038252602681526020018061359a6026913960400191505060405180910390fd5b6130c6856131d8565b613117576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106131565780518252601f199092019160209182019101613137565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131b8576040519150601f19603f3d011682016040523d82523d6000602084013e6131bd565b606091505b50915091506131cd8282866131de565b979650505050505050565b3b151590565b606083156131ed575081611b6b565b8251156131fd5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561324757818101518382015260200161322f565b50505050905090810190601f1680156132745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b8280548282559060005260206000209081019282156132bd579160200282015b828111156132bd5782518255916020019190600101906132a2565b506132c9929150613372565b5090565b82805482825590600052602060002090600f016010900481019282156133665791602002820160005b8382111561333657835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026132f6565b80156133645782816101000a81549061ffff0219169055600201602081600101049283019260010302613336565b505b506132c9929150613387565b5b808211156132c95760008155600101613373565b5b808211156132c957805461ffff1916815560010161338856fe6164643a20696e76616c6964206465706f7369742066656520626173697320706f696e7473736574526566657272616c436f6d6d697373696f6e526174653a20696e76616c696420726566657272616c20636f6d6d697373696f6e207261746520626173697320706f696e747373657457697468647261774665653a20696e76616c6964207769746864726177616c2066656520626173697320706f696e7473736574456e6454696d657374616d703a205f656e6454696d657374616d70206d757374206265206c6172676572207468616e20737461727454696d657374616d70736574537461727454696d657374616d703a205f737461727454696d657374616d70206d757374206265206c6172676572207468616e206e6f775361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373736574456e6454696d657374616d703a205f656e6454696d657374616d70206d757374206265206c6172676572207468616e206e6f7773657457697468647261774665653a205f7769746864726177616c4665654250206c656e677468206973206f6e65206d6f7265207468616e205f7769746864726177616c466565496e74657276616c73206c656e677468416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c736574537461727454696d657374616d703a20546865206661726d696e672068617320616c7265616479207374617274656473657457697468647261774665653a205f7769746864726177616c4665654250206c656e677468206973206f6e65206d6f7265207468616e2030736574537461727454696d657374616d703a205f737461727454696d657374616d70206d75737420626520736d616c6c6572207468616e20656e6454696d657374616d70536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777365743a20696e76616c6964206465706f7369742066656520626173697320706f696e74734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657273657457697468647261774665653a2054686520696e74657276616c206d75737420626520617363656e64696e67a26469706673582212208e76620620e799caea2f1b8c1e730109ae363a599266b5bebc6f10e45967351164736f6c634300060c003300000000000000000000000031b8cf8244a964e80ac13d31476051194f12bd54000000000000000000000000b289b9f1aa81ea597c45c6eda8dfbba97deae93c00000000000000000000000000000000000000000000000000000000618e6550000000000000000000000000000000000000000000000000000000006252d4d0000000000000000000000000b669c71431bc4372140bc35aa1962c4b980ba507
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000031b8cf8244a964e80ac13d31476051194f12bd54000000000000000000000000b289b9f1aa81ea597c45c6eda8dfbba97deae93c00000000000000000000000000000000000000000000000000000000618e6550000000000000000000000000000000000000000000000000000000006252d4d0000000000000000000000000b669c71431bc4372140bc35aa1962c4b980ba507
-----Decoded View---------------
Arg [0] : _devaddr (address): 0x31b8cf8244a964e80ac13d31476051194f12bd54
Arg [1] : _feeAddr (address): 0xb289b9f1aa81ea597c45c6eda8dfbba97deae93c
Arg [2] : _startTimestamp (uint256): 1636722000
Arg [3] : _endTimestamp (uint256): 1649595600
Arg [4] : _earningToken (address): 0xb669c71431bc4372140bc35aa1962c4b980ba507
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000031b8cf8244a964e80ac13d31476051194f12bd54
Arg [1] : 000000000000000000000000b289b9f1aa81ea597c45c6eda8dfbba97deae93c
Arg [2] : 00000000000000000000000000000000000000000000000000000000618e6550
Arg [3] : 000000000000000000000000000000000000000000000000000000006252d4d0
Arg [4] : 000000000000000000000000b669c71431bc4372140bc35aa1962c4b980ba507
Deployed ByteCode Sourcemap
43091:19058:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46638:95;;;:::i;:::-;;;;;;;;;;;;;;;;49464:1065;;;;;;;;;;;;;;;;-1:-1:-1;49464:1065:0;;;;;;-1:-1:-1;;;;;49464:1065:0;;:::i;45812:40::-;;;;;;;;;;;;;;;;-1:-1:-1;45812:40:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;58083:135;;;;;;;;;;;;;;;;-1:-1:-1;58083:135:0;-1:-1:-1;;;;;58083:135:0;;:::i;:::-;;45200:40;;;:::i;:::-;;;;-1:-1:-1;;;;;45200:40:0;;;;;;;;;;;;;;45460:26;;;;;;;;;;;;;;;;-1:-1:-1;45460:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;45460:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45630:34;;;:::i;45859:50::-;;;:::i;59339:226::-;;;;;;;;;;;;;;;;-1:-1:-1;59339:226:0;-1:-1:-1;;;;;59339:226:0;;:::i;45760:45::-;;;;;;;;;;;;;;;;-1:-1:-1;45760:45:0;;:::i;45916:47::-;;;:::i;44940:22::-;;;:::i;54082:1993::-;;;;;;;;;;;;;;;;-1:-1:-1;54082:1993:0;;;;;;;:::i;48469:646::-;;;;;;;;;;;;;;;;-1:-1:-1;48469:646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45389:62::-;;;:::i;50868:1260::-;;;;;;;;;;;;;;;;-1:-1:-1;50868:1260:0;;:::i;56146:845::-;;;;;;;;;;;;;;;;-1:-1:-1;56146:845:0;;:::i;58279:306::-;;;;;;;;;;;;;;;;-1:-1:-1;58279:306:0;;;;:::i;50612:180::-;;;:::i;44851:80::-;;;:::i;20585:148::-;;;:::i;44971:45::-;;;:::i;61804:342::-;;;;;;;;;;;;;;;;-1:-1:-1;61804:342:0;;:::i;44762:27::-;;;:::i;57850:155::-;;;;;;;;;;;;;;;;-1:-1:-1;57850:155:0;-1:-1:-1;;;;;57850:155:0;;:::i;59577:536::-;;;;;;;;;;;;;;;;-1:-1:-1;59577:536:0;;;;;;-1:-1:-1;;;;;59577:536:0;;:::i;19934:87::-;;;:::i;49195:202::-;;;;;;;;;;;;;;;;-1:-1:-1;49195:202:0;;;;;;;:::i;52136:1894::-;;;;;;;;;;;;;;;;-1:-1:-1;52136:1894:0;;;;;;;;;;;-1:-1:-1;;;;;52136:1894:0;;:::i;45515:64::-;;;;;;;;;;;;;;;;-1:-1:-1;45515:64:0;;;;;;-1:-1:-1;;;;;45515:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;45023:50;;;:::i;60125:927::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60125:927:0;;;;;;;;-1:-1:-1;60125:927:0;;-1:-1:-1;;60125:927:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60125:927:0;;-1:-1:-1;60125:927:0;;-1:-1:-1;;;;;60125:927:0:i;45116:27::-;;;:::i;61327:465::-;;;;;;;;;;;;;;;;-1:-1:-1;61327:465:0;;:::i;57467:221::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;57467:221:0;;;;;;;;:::i;57696:146::-;;;;;;;;;;;;;;;;-1:-1:-1;57696:146:0;-1:-1:-1;;;;;57696:146:0;;:::i;45297:42::-;;;:::i;44820:22::-;;;:::i;61064:251::-;;;;;;;;;;;;;;;;-1:-1:-1;61064:251:0;;:::i;45080:29::-;;;:::i;20888:244::-;;;;;;;;;;;;;;;;-1:-1:-1;20888:244:0;-1:-1:-1;;;;;20888:244:0;;:::i;47435:934::-;;;;;;;;;;;;;;;;-1:-1:-1;47435:934:0;;;-1:-1:-1;;;;;47435:934:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46638:95::-;46710:8;:15;46638:95;:::o;49464:1065::-;49568:7;49593:21;49617:8;49626:4;49617:14;;;;;;;;;;;;;;;;49666;;;:8;:14;;;;;;-1:-1:-1;;;;;49666:21:0;;;;;;;;;;;49617:14;;;;;;;;49728:24;;;;49799:10;;;;;49789:39;;-1:-1:-1;;;49789:39:0;;;;49617:14;;-1:-1:-1;49666:21:0;;49728:24;;49617:14;;49799:10;;;;;49789:37;;:39;;;;;;;;;;;49799:10;49789:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49789:39:0;49863:12;;49789:39;;-1:-1:-1;49839:21:0;;49878:15;-1:-1:-1;49863:63:0;;49911:15;49863:63;;;49896:12;;49863:63;49839:87;;49957:4;:24;;;49941:13;:40;:64;;;;-1:-1:-1;49985:20:0;;;49941:64;49937:500;;;50022:18;50060:54;50074:4;:24;;;50100:13;50060;:54::i;:::-;50022:92;;50129:22;50171:115;50252:15;;50171:54;50209:4;:15;;;50171:33;50186:17;;50171:10;:14;;:33;;;;:::i;:::-;:37;;:54::i;:::-;:58;;:115::i;:::-;50129:157;-1:-1:-1;50323:102:0;50365:45;50394:15;50365:24;50129:157;50384:4;50365:18;:24::i;:45::-;50323:19;;:23;:102::i;:::-;50301:124;;49937:500;;;50454:67;50505:4;:15;;;50454:46;50495:4;50454:36;50470:19;50454:4;:11;;;:15;;:36;;;;:::i;:46::-;:50;;:67::i;:::-;50447:74;;;;;;;49464:1065;;;;;:::o;45812:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;58083:135::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;58176:15:::1;:34:::0;;-1:-1:-1;;;;;;58176:34:0::1;-1:-1:-1::0;;;;;58176:34:0;;;::::1;::::0;;;::::1;::::0;;58083:135::o;45200:40::-;;;-1:-1:-1;;;;;45200:40:0;;:::o;45460:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45460:26:0;;;;-1:-1:-1;45460:26:0;;;;;;;;;;-1:-1:-1;;;45460:26:0;;;;;-1:-1:-1;;;45460:26:0;;;;;:::o;45630:34::-;;;;:::o;45859:50::-;45906:3;45859:50;:::o;59339:226::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;59432:22:0;::::1;59424:73;;;;-1:-1:-1::0;;;59424:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59516:12;::::0;59508:49:::1;::::0;;-1:-1:-1;;;59508:49:0;;-1:-1:-1;;;;;59508:49:0;;::::1;;::::0;::::1;::::0;;;59516:12;;;::::1;::::0;59508:39:::1;::::0;:49;;;;;59516:12:::1;::::0;59508:49;;;;;;;59516:12;;59508:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;59339:226:::0;:::o;45760:45::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45760:45:0;:::o;45916:47::-;45960:3;45916:47;:::o;44940:22::-;;;-1:-1:-1;;;;;44940:22:0;;:::o;54082:1993::-;16895:1;17501:7;;:19;;17493:63;;;;;-1:-1:-1;;;17493:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16895:1;17634:7;:18;47172:8:::1;:15:::0;54163:4;;47166:21;::::1;47158:49;;;::::0;;-1:-1:-1;;;47158:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47158:49:0;;;;;;;;;;;;;::::1;;54179:16:::2;54190:4;54179:10;:16::i;:::-;54208:21;54232:8;54241:4;54232:14;;;;;;;;;::::0;;;::::2;::::0;;;54281;;;:8:::2;:14:::0;;;;;;54296:10:::2;54281:26:::0;;;;;;;54232:14:::2;::::0;;;::::2;::::0;;::::2;54346:10;::::0;;::::2;::::0;54336:39;;-1:-1:-1;;;54336:39:0;;;;54232:14;;-1:-1:-1;54281:26:0;;54232:14;-1:-1:-1;;;;;54346:10:0::2;::::0;54336:37:::2;::::0;:39;;::::2;::::0;54232:14;;54336:39;;;;;;54346:10;54336:39;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;54336:39:0;54396:11;;54336:39;;-1:-1:-1;54388:44:0::2;;;::::0;;-1:-1:-1;;;54388:44:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;54388:44:0;;;;;;;;;;;;;::::2;;54459:1;54451:5;:9;54443:32;;;::::0;;-1:-1:-1;;;54443:32:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;54443:32:0;;;;;;;;;;;;;::::2;;54526:15;54557:104;54631:4;:15;;;54557:51;54603:4;54557:41;54573:4;:24;;;54557:4;:11;;;:15;;:41;;;;:::i;:104::-;54526:135:::0;-1:-1:-1;54678:11:0;;54674:142:::2;;54706:41;54727:10;54739:7;54706:20;:41::i;:::-;54762:42;54784:10;54796:7;54762:21;:42::i;:::-;54878:11:::0;;54904:17;;::::2;54900:67;;;54949:6;54938:17;;54900:67;54981:12:::0;;54977:959:::2;;55060:10;::::0;;::::2;::::0;55050:40:::2;::::0;;-1:-1:-1;;;55050:40:0;;;;::::2;::::0;;;;55010:20:::2;::::0;-1:-1:-1;;;;;55060:10:0;;::::2;::::0;55050:30:::2;::::0;:40;;;;;::::2;::::0;;;;;;;;55010:20;55060:10;55050:40;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;55050:40:0;55126:11;;55050:40;;-1:-1:-1;55111:26:0;::::2;55107:166;;;55172:1;55158:15:::0;;55107:166:::2;;;55228:11:::0;;:29:::2;::::0;55244:12;55228:15:::2;:29::i;:::-;55214:43:::0;;55107:166:::2;55314:9:::0;;55307:42:::2;::::0;;-1:-1:-1;;;55307:42:0;;55343:4:::2;55307:42;::::0;::::2;::::0;;;55289:15:::2;::::0;-1:-1:-1;;;;;55314:9:0::2;::::0;55307:27:::2;::::0;:42;;;;;::::2;::::0;;;;;;;;55314:9;55307:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;55307:42:0;;-1:-1:-1;55368:18:0;;::::2;55364:77;;;55418:7;55407:18;;55364:77;55461:18;::::0;::::2;::::0;-1:-1:-1;;;55461:18:0;::::2;;;55457:386;;;55500:20;55523:32;55538:4;55544:10;55523:14;:32::i;:::-;55500:55:::0;-1:-1:-1;55578:17:0::2;::::0;::::2;::::0;55574:254:::2;;55620:19;55642:38;55674:5;55642:27;:8:::0;:27:::2;::::0;::::2;:12;:27::i;:38::-;55726:7;::::0;55703:9;;55620:60;;-1:-1:-1;55703:44:0::2;::::0;-1:-1:-1;;;;;55703:9:0;;::::2;::::0;55726:7:::2;55620:60:::0;55703:22:::2;:44::i;:::-;55781:27;55782:8:::0;55796:11;55781:14:::2;:27::i;:::-;55770:38;;55574:254;;55457:386;;55871:9:::0;;:53:::2;::::0;-1:-1:-1;;;;;55871:9:0::2;55902:10;55915:8:::0;55871:22:::2;:53::i;:::-;54977:959;;;55980:24;::::0;::::2;::::0;55964:11;;:51:::2;::::0;56010:4:::2;::::0;55964:41:::2;::::0;:15:::2;:41::i;:51::-;55946:15;::::0;::::2;:69:::0;56031:36:::2;::::0;;;;;;;56052:4;;56040:10:::2;::::0;56031:36:::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;;16851:1:0;17813:22;;-1:-1:-1;;;;;;54082:1993:0:o;48469:646::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;47172:8:::1;:15:::0;48658:4;;47166:21;::::1;47158:49;;;::::0;;-1:-1:-1;;;47158:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47158:49:0;;;;;;;;;;;;;::::1;;45960:3:::2;48683:35;::::0;::::2;;;48675:85;;;;-1:-1:-1::0;;;48675:85:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48775:11;48771:61;;;48803:17;:15;:17::i;:::-;48860:87;48925:11;48860:46;48880:8;48889:4;48880:14;;;;;;;;;;;;;;;;;;:25;;;48860:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::2;:87::i;:::-;48842:15;:105;;;;48986:11;48958:8;48967:4;48958:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;49038:13;49008:8;49017:4;49008:14;;;;;;;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;49093:14;49062:8;49071:4;49062:14;;;;;;;;;;;;;;;;;;:28;;;:45;;;;;;;;;;;;;;;;;;20225:1:::1;48469:646:::0;;;;;:::o;45389:62::-;45447:4;45389:62;:::o;50868:1260::-;50920:21;50944:8;50953:4;50944:14;;;;;;;;;;;;;;;;;;50920:38;;50992:4;:24;;;50973:15;:43;50969:82;;51033:7;;;50969:82;51061:21;51100:15;51085:12;;:30;:63;;51133:15;51085:63;;;51118:12;;51085:63;51061:87;;51159:23;51195:4;:10;;;;;;;;;;-1:-1:-1;;;;;51195:10:0;-1:-1:-1;;;;;51185:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51185:39:0;;-1:-1:-1;51239:20:0;51235:114;;-1:-1:-1;51276:24:0;;;;:40;51331:7;;51235:114;51369:18;51390:54;51404:4;:24;;;51430:13;51390;:54::i;:::-;51369:75;;51473:1;51459:10;:15;51455:54;;51491:7;;;;;;51455:54;51519:22;51545:75;51604:15;;51545:54;51583:4;:15;;;51545:33;51560:17;;51545:10;:14;;:33;;;;:::i;:75::-;51644:12;;51677:7;;51779:15;;51644:12;51740:15;;;51714:20;;51519:101;;-1:-1:-1;;;;;;51644:12:0;;;;51633:29;;51677:7;;;;51699:110;;51779:15;51699:57;;:36;;:10;;:14;:36::i;:110::-;51633:187;;;;;;;;;;;;;-1:-1:-1;;;;;51633:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51844:12:0;;51833:97;;;-1:-1:-1;;;51833:97:0;;51885:4;51833:97;;;;;;;;;;;;-1:-1:-1;;;;;51844:12:0;;;;-1:-1:-1;51833:29:0;;-1:-1:-1;51833:97:0;;;;;51844:12;;51833:97;;;;;;;;51844:12;;51833:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51970:99;52013:45;52042:15;52013:24;52032:4;52013:14;:18;;:24;;;;:::i;:45::-;51970:24;;;;;:28;:99::i;:::-;51943:24;;;:126;-1:-1:-1;;;52080:24:0;;;;:40;50868:1260;;:::o;56146:845::-;16895:1;17501:7;;:19;;17493:63;;;;;-1:-1:-1;;;17493:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16895:1;17634:7;:18;47172:8:::1;:15:::0;56218:4;;47166:21;::::1;47158:49;;;::::0;;-1:-1:-1;;;47158:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47158:49:0;;;;;;;;;;;;;::::1;;56234:21:::2;56258:8;56267:4;56258:14;;;;;;;;;::::0;;;::::2;::::0;;;56307;;;:8:::2;:14:::0;;;;;;56322:10:::2;56307:26:::0;;;;;;;56363:11;;56258:14:::2;::::0;;;::::2;::::0;;::::2;56404:10;::::0;;::::2;::::0;56394:38;;-1:-1:-1;;;56394:38:0;;;;::::2;::::0;;;;;56258:14;;-1:-1:-1;56307:26:0;;-1:-1:-1;;;;;56404:10:0;;::::2;::::0;56394:30:::2;::::0;:38;;;;;56258:14;;56394:38;;;;;;;;;56404:10;56394:38;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;56394:38:0;56457:18:::2;::::0;::::2;::::0;56394:38;;-1:-1:-1;;;;56457:18:0;::::2;;;56453:352;;;56492:20;56515:32;56530:4;56536:10;56515:14;:32::i;:::-;56492:55:::0;-1:-1:-1;56566:17:0::2;::::0;::::2;::::0;56562:232:::2;;56604:19;56626:36;56656:5;56626:25;:6:::0;:25:::2;::::0;::::2;:10;:25::i;:36::-;56704:7;::::0;56681:9;;56604:58;;-1:-1:-1;56681:44:0::2;::::0;-1:-1:-1;;;;;56681:9:0;;::::2;::::0;56704:7:::2;56604:58:::0;56681:22:::2;:44::i;:::-;56753:25;56754:6:::0;56766:11;56753:12:::2;:25::i;:::-;56744:34;;56562:232;;56453:352;;56831:1;56817:15:::0;;;56843::::2;::::0;::::2;:19:::0;56873:9;;:51:::2;::::0;-1:-1:-1;;;;;56873:9:0::2;56904:10;56917:6:::0;56873:22:::2;:51::i;:::-;56940:43;::::0;;;;;;;56970:4;;56958:10:::2;::::0;56940:43:::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;;16851:1:0;17813:22;;-1:-1:-1;;;56146:845:0:o;58279:306::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;45447:4:::1;58382:59;::::0;::::1;;;58374:144;;;;-1:-1:-1::0;;;58374:144:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58529:22;:48:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;58529:48:0::1;-1:-1:-1::0;;;;58529:48:0;;::::1;::::0;;;::::1;::::0;;58279:306::o;50612:180::-;50674:8;:15;50657:14;50700:85;50728:6;50722:3;:12;50700:85;;;50758:15;50769:3;50758:10;:15::i;:::-;50736:5;;50700:85;;;;50612:180;:::o;44851:80::-;44889:42;44851:80;:::o;20585:148::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;20692:1:::1;20676:6:::0;;20655:40:::1;::::0;-1:-1:-1;;;;;20676:6:0;;::::1;::::0;20655:40:::1;::::0;20692:1;;20655:40:::1;20723:1;20706:19:::0;;-1:-1:-1;;;;;;20706:19:0::1;::::0;;20585:148::o;44971:45::-;;;;:::o;61804:342::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;61907:13:::1;61890:14;;:30;61882:108;;;;-1:-1:-1::0;;;61882:108:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62027:13;62009:15;:31;62001:98;;;;-1:-1:-1::0;;;62001:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62110:12;:28:::0;61804:342::o;44762:27::-;;;-1:-1:-1;;;;;44762:27:0;;:::o;57850:155::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;57922:7:::1;:21:::0;;-1:-1:-1;;;;;;57922:21:0::1;-1:-1:-1::0;;;;;57922:21:0;::::1;::::0;;::::1;::::0;;;57959:38:::1;::::0;57973:10:::1;::::0;57959:38:::1;::::0;-1:-1:-1;;57959:38:0::1;57850:155:::0;:::o;59577:536::-;59651:6;59670:21;59694:8;59703:4;59694:14;;;;;;;;;;;;;;;;59743;;;:8;:14;;;;;;-1:-1:-1;;;;;59743:21:0;;;;;;;;;59694:14;;;;;;;;59780:18;;;;59694:14;;-1:-1:-1;;;;59780:18:0;;;;59775:46;;59820:1;59813:8;;;;;;59775:46;59872:25;;;;59854:15;:43;59832:19;59929:141;59940:22;:29;59936:33;;59929:141;;;60009:22;60032:1;60009:25;;;;;;;;;;;;;;;;59995:11;:39;59991:67;;;60053:5;;59991:67;59971:3;;59929:141;;;60087:15;60103:1;60087:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60080:25;;;;;;59577:536;;;;:::o;19934:87::-;19980:7;20007:6;-1:-1:-1;;;;;20007:6:0;19934:87;:::o;49195:202::-;49294:7;49331:3;49323:5;:11;49319:38;;;-1:-1:-1;49356:1:0;49349:8;;49319:38;49375:14;:3;49383:5;49375:7;:14::i;:::-;49368:21;49195:202;-1:-1:-1;;;49195:202:0:o;52136:1894::-;16895:1;17501:7;;:19;;17493:63;;;;;-1:-1:-1;;;17493:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16895:1;17634:7;:18;47172:8:::1;:15:::0;52234:4;;47166:21;::::1;47158:49;;;::::0;;-1:-1:-1;;;47158:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47158:49:0;;;;;;;;;;;;;::::1;;52250:16:::2;52261:4;52250:10;:16::i;:::-;52277:21;52301:8;52310:4;52301:14;;;;;;;;;::::0;;;::::2;::::0;;;52350;;;:8:::2;:14:::0;;;;;;52365:10:::2;52350:26:::0;;;;;;;52301:14:::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;52393:12:0;;;;;:54:::2;;-1:-1:-1::0;52417:15:0::2;::::0;-1:-1:-1;;;;;52417:15:0::2;52409:38:::0;::::2;52393:54;:81;;;;-1:-1:-1::0;;;;;;52451:23:0;::::2;::::0;::::2;52393:81;:108;;;;-1:-1:-1::0;;;;;;52478:23:0;::::2;52491:10;52478:23;;52393:108;52389:194;;;52518:15;::::0;:53:::2;::::0;;-1:-1:-1;;;52518:53:0;;52549:10:::2;52518:53;::::0;::::2;::::0;-1:-1:-1;;;;;52518:53:0;;::::2;::::0;;;;;;:15;;;::::2;::::0;:30:::2;::::0;:53;;;;;:15:::2;::::0;:53;;;;;;;:15;;:53;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;52389:194;52597:11:::0;;:15;52593:363:::2;;52629:15;52664:112;52742:4;:15;;;52664:51;52710:4;52664:41;52680:4;:24;;;52664:4;:11;;;:15;;:41;;;;:::i;:112::-;52629:147:::0;-1:-1:-1;52795:11:0;;52791:154:::2;;52827:41;52848:10;52860:7;52827:20;:41::i;:::-;52887:42;52909:10;52921:7;52887:21;:42::i;:::-;52593:363;;52970:12:::0;;52966:926:::2;;53030:9:::0;;53023:42:::2;::::0;;-1:-1:-1;;;53023:42:0;;53059:4:::2;53023:42;::::0;::::2;::::0;;;52999:21:::2;::::0;-1:-1:-1;;;;;53030:9:0::2;::::0;53023:27:::2;::::0;:42;;;;;::::2;::::0;;;;;;;;53030:9;53023:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;53023:42:0;53080:9;;53023:42;;-1:-1:-1;53080:72:0::2;::::0;-1:-1:-1;;;;;53080:9:0::2;53115:10;53136:4;53143:8:::0;53080:26:::2;:72::i;:::-;53197:9:::0;;53190:42:::2;::::0;;-1:-1:-1;;;53190:42:0;;53226:4:::2;53190:42;::::0;::::2;::::0;;;53167:20:::2;::::0;-1:-1:-1;;;;;53197:9:0::2;::::0;53190:27:::2;::::0;:42;;;;;::::2;::::0;;;;;;;;53197:9;53190:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;53190:42:0;;-1:-1:-1;53258:31:0::2;53190:42:::0;53275:13;53258:16:::2;:31::i;:::-;53358:17;::::0;::::2;::::0;53247:42;;-1:-1:-1;53247:42:0;;-1:-1:-1;;;53358:17:0;::::2;;;:21:::0;53354:241:::2;;53434:17;::::0;::::2;::::0;53400:18:::2;::::0;53421:42:::2;::::0;53457:5:::2;::::0;53421:31:::2;::::0;:8;;-1:-1:-1;;;53434:17:0;::::2;;;53421:12;:31::i;:42::-;53505:7;::::0;53482:9;;53400:63;;-1:-1:-1;53482:43:0::2;::::0;-1:-1:-1;;;;;53482:9:0;;::::2;::::0;53505:7:::2;53400:63:::0;53482:22:::2;:43::i;:::-;53553:26;53554:8:::0;53568:10;53553:14:::2;:26::i;:::-;53544:35;;53354:241;;53641:10;::::0;::::2;::::0;53609:9;;:51:::2;::::0;-1:-1:-1;;;;;53609:9:0;;::::2;::::0;53641:10:::2;53653:6:::0;53609:31:::2;:51::i;:::-;53675:21;53726:8;53735:4;53726:14;;;;;;;;;::::0;;;::::2;::::0;;;:20:::2;:14;::::0;;::::2;;:20:::0;::::2;::::0;53716:47:::2;::::0;;-1:-1:-1;;;53716:47:0;;;;::::2;::::0;;;;-1:-1:-1;;;;;53726:20:0;;::::2;::::0;53716:39:::2;::::0;:47;;;;;53726:14;53716:47;;;;;;;;;53726:20;53716:47;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;53716:47:0;53792:11;;53716:47;;-1:-1:-1;53792:30:0::2;::::0;53716:47;53792:15:::2;:30::i;:::-;53778:44:::0;;-1:-1:-1;;53865:15:0::2;53837:25;::::0;::::2;:43:::0;-1:-1:-1;;52966:926:0::2;53936:24;::::0;::::2;::::0;53920:11;;:51:::2;::::0;53966:4:::2;::::0;53920:41:::2;::::0;:15:::2;:41::i;:51::-;53902:15;::::0;::::2;:69:::0;53987:35:::2;::::0;;;;;;;54007:4;;53995:10:::2;::::0;53987:35:::2;::::0;;;;::::2;::::0;;::::2;-1:-1:-1::0;;16851:1:0;17813:22;;-1:-1:-1;;;;52136:1894:0:o;45515:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45023:50::-;;;;:::o;60125:927::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;60300:16:::1;:23;60262;:30;60295:1;60262:34;:61;60253:162;;;;-1:-1:-1::0;;;60253:162:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60461:1;60435:16;:23;:27;60426:99;;;;-1:-1:-1::0;;;60426:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60541:6;60536:208;60590:1;60557:23;:30;:34;60553:1;:38;60536:208;;;60651:23;60675:1;60679;60675:5;60651:30;;;;;;;;;;;;;;60622:23;60646:1;60622:26;;;;;;;;;;;;;;:59;60613:119;;;;-1:-1:-1::0;;;60613:119:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60593:3;;60536:208;;;;60759:6;60754:187;60775:16;:23;60771:1;:27;60754:187;;;45906:3;60829:44;;:16;60846:1;60829:19;;;;;;;;;;;;;;:44;;;;60820:109;;;;-1:-1:-1::0;;;60820:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60800:3;;60754:187;;;-1:-1:-1::0;60951:48:0;;::::1;::::0;:22:::1;::::0;:48:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;61010:34:0;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;::::1;::::0;::::1;:::i;:::-;;60125:927:::0;;:::o;45116:27::-;;;;:::o;61327:465::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;61435:14:::1;;61417:15;:32;61409:95;;;;-1:-1:-1::0;;;61409:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61541:15;61523;:33;61515:104;;;;-1:-1:-1::0;;;61515:104:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61656:12;;61638:15;:30;61630:111;;;;-1:-1:-1::0;;;61630:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61752:14;:32:::0;61327:465::o;57467:221::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;57599:12:::1;::::0;-1:-1:-1;;;;;57589:22:0;;::::1;57599:12:::0;::::1;57589:22;;57581:40;;;::::0;;-1:-1:-1;;;57581:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;57581:40:0;;;;;;;;;;;;;::::1;;57632:48;-1:-1:-1::0;;;;;57632:27:0;::::1;57660:10;57672:7:::0;57632:27:::1;:48::i;57696:146::-:0;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;57765:7:::1;:18:::0;;-1:-1:-1;;;;;;57765:18:0::1;-1:-1:-1::0;;;;;57765:18:0;::::1;::::0;;::::1;::::0;;;57799:35:::1;::::0;57813:10:::1;::::0;57799:35:::1;::::0;-1:-1:-1;;57799:35:0::1;57696:146:::0;:::o;45297:42::-;;;-1:-1:-1;;;45297:42:0;;;;;:::o;44820:22::-;;;-1:-1:-1;;;;;44820:22:0;;:::o;61064:251::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;61150:17:::1;:38:::0;;;61220:26:::1;61170:18:::0;61243:2:::1;61220:22;:26::i;:::-;61197:20;:49:::0;61268:39:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;61064:251:::0;:::o;45080:29::-;;;;:::o;20888:244::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20977:22:0;::::1;20969:73;;;;-1:-1:-1::0;;;20969:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21079:6;::::0;;21058:38:::1;::::0;-1:-1:-1;;;;;21058:38:0;;::::1;::::0;21079:6;::::1;::::0;21058:38:::1;::::0;::::1;21107:6;:17:::0;;-1:-1:-1;;;;;;21107:17:0::1;-1:-1:-1::0;;;;;21107:17:0;;;::::1;::::0;;;::::1;::::0;;20888:244::o;47435:934::-;20165:12;:10;:12::i;:::-;-1:-1:-1;;;;;20154:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20154:23:0;;20146:68;;;;;-1:-1:-1;;;20146:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20146:68:0;;;;;;;;;;;;;;;45960:3:::1;47657:35;::::0;::::1;;;47649:85;;;;-1:-1:-1::0;;;47649:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47749:11;47745:61;;;47777:17;:15;:17::i;:::-;47816:27;47877:14;;47859:15;:32;:67;;47912:14;;47859:67;;;47894:15;47859:67;47955:15;::::0;47816:110;;-1:-1:-1;47955:32:0::1;::::0;47975:11;47955:19:::1;:32::i;:::-;47937:15;:50:::0;48026:324:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;48026:324:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;48026:324:0;;;;;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;;::::1;;::::0;;;;;;47998:8:::1;:363:::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;47998:363:0;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;47998:363:0::1;-1:-1:-1::0;;;;47998:363:0;;;::::1;-1:-1:-1::0;;;47998:363:0::1;-1:-1:-1::0;;;;47998:363:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;47435:934:0:o;24806:220::-;24864:7;24888:6;24884:20;;-1:-1:-1;24903:1:0;24896:8;;24884:20;24927:5;;;24931:1;24927;:5;:1;24951:5;;;;;:10;24943:56;;;;-1:-1:-1;;;24943:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25504:153;25562:7;25594:1;25590;:5;25582:44;;;;;-1:-1:-1;;;25582:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25648:1;25644;:5;;;;;;;25504:153;-1:-1:-1;;;25504:153:0:o;23927:179::-;23985:7;24017:5;;;24041:6;;;;24033:46;;;;;-1:-1:-1;;;24033:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24389:158;24447:7;24480:1;24475;:6;;24467:49;;;;;-1:-1:-1;;;24467:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24534:5:0;;;24389:158::o;18478:106::-;18566:10;18478:106;:::o;57102:357::-;57216:12;;57209:45;;;-1:-1:-1;;;57209:45:0;;57248:4;57209:45;;;;;;57187:19;;-1:-1:-1;;;;;57216:12:0;;57209:30;;:45;;;;;;;;;;;;;;57216:12;57209:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57209:45:0;;-1:-1:-1;57269:26:0;;;57265:187;;;57319:12;;57312:47;;;-1:-1:-1;;;57312:47:0;;-1:-1:-1;;;;;57312:47:0;;;;;;;;;;;;;;;57319:12;;;;;57312:29;;:47;;;;;;;;;;;;;;57319:12;;57312:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57265:187:0;;-1:-1:-1;57265:187:0;;57399:12;;57392:48;;;-1:-1:-1;;;57392:48:0;;-1:-1:-1;;;;;57392:48:0;;;;;;;;;;;;;;;57399:12;;;;;57392:29;;:48;;;;;;;;;;;;;;57399:12;;57392:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58665:662;58761:15;;-1:-1:-1;;;;;58761:15:0;58753:38;;;;:68;;-1:-1:-1;58795:22:0;;-1:-1:-1;;;58795:22:0;;;;:26;;58753:68;58749:571;;;58857:15;;:34;;;-1:-1:-1;;;58857:34:0;;-1:-1:-1;;;;;58857:34:0;;;;;;;;;58838:16;;58857:15;;;;;:27;;:34;;;;;;;;;;;;;;;:15;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58857:34:0;58946:22;;58857:34;;-1:-1:-1;58906:24:0;;58933:47;;58974:5;;58933:36;;:8;;-1:-1:-1;;;58946:22:0;;;;58933:12;:36::i;:47::-;58906:74;-1:-1:-1;;;;;;59001:22:0;;;;;;:46;;;59046:1;59027:16;:20;59001:46;58997:312;;;59079:12;;59068:57;;;-1:-1:-1;;;59068:57:0;;-1:-1:-1;;;;;59068:57:0;;;;;;;;;;;;;;;59079:12;;;;;59068:29;;:57;;;;;59079:12;;59068:57;;;;;;;59079:12;;59068:57;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;59144:15:0;;:68;;;-1:-1:-1;;;59144:68:0;;-1:-1:-1;;;;;59144:68:0;;;;;;;;;;;;;;;:15;;;;;-1:-1:-1;59144:40:0;;-1:-1:-1;59144:68:0;;;;;:15;;:68;;;;;;;:15;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;59236:57:0;;;;;;;;-1:-1:-1;;;;;59236:57:0;;;;-1:-1:-1;59236:57:0;;;-1:-1:-1;59236:57:0;;;;;;;;;58997:312;58749:571;;58665:662;;:::o;11836:211::-;11980:58;;;-1:-1:-1;;;;;11980:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11980:58:0;-1:-1:-1;;;11980:58:0;;;11953:86;;11973:5;;11953:19;:86::i;12055:248::-;12226:68;;;-1:-1:-1;;;;;12226:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12226:68:0;-1:-1:-1;;;12226:68:0;;;12199:96;;12219:5;;12199:19;:96::i;13250:320::-;13381:20;13404:50;13448:5;13404;-1:-1:-1;;;;;13404:15:0;;13428:4;13435:7;13404:39;;;;;;;;;;;;;-1:-1:-1;;;;;13404:39:0;;;;;;-1:-1:-1;;;;;13404:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13404:39:0;;:43;:50::i;:::-;13492:69;;;-1:-1:-1;;;;;13492:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13492:69:0;-1:-1:-1;;;13492:69:0;;;13381:73;;-1:-1:-1;13465:97:0;;13485:5;;14371:774;14795:23;14821:69;14849:4;14821:69;;;;;;;;;;;;;;;;;14829:5;-1:-1:-1;;;;;14821:27:0;;;:69;;;;;:::i;:::-;14905:17;;14795:95;;-1:-1:-1;14905:21:0;14901:237;;15060:10;15049:30;;;;;;;;;;;;;;;-1:-1:-1;15049:30:0;15041:85;;;;-1:-1:-1;;;15041:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6877:195;6980:12;7012:52;7034:6;7042:4;7048:1;7051:12;7012:21;:52::i;:::-;7005:59;6877:195;-1:-1:-1;;;;6877:195:0:o;7929:530::-;8056:12;8114:5;8089:21;:30;;8081:81;;;;-1:-1:-1;;;8081:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8181:18;8192:6;8181:10;:18::i;:::-;8173:60;;;;;-1:-1:-1;;;8173:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8307:12;8321:23;8348:6;-1:-1:-1;;;;;8348:11:0;8368:5;8376:4;8348:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8348:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8306:75;;;;8399:52;8417:7;8426:10;8438:12;8399:17;:52::i;:::-;8392:59;7929:530;-1:-1:-1;;;;;;;7929:530:0:o;3959:422::-;4326:20;4365:8;;;3959:422::o;10469:742::-;10584:12;10613:7;10609:595;;;-1:-1:-1;10644:10:0;10637:17;;10609:595;10758:17;;:21;10754:439;;11021:10;11015:17;11082:15;11069:10;11065:2;11061:19;11054:44;10969:148;11164:12;11157:20;;-1:-1:-1;;;11157:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://8e76620620e799caea2f1b8c1e730109ae363a599266b5bebc6f10e459673511
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.