// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity ^0.6.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 virtual view returns (address payable) {
return msg.sender;
}
function _msgData() internal virtual view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: contracts/INerdBaseToken.sol
pragma solidity 0.6.12;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface INerdBaseToken {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount)
external
returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Log(string log);
}
interface INerdBaseTokenLGE is INerdBaseToken {
function getAllocatedLP(address _user) external view returns (uint256);
function getLpReleaseStart() external view returns (uint256);
function getTokenUniswapPair() external view returns (address);
function getTotalLPTokensMinted() external view returns (uint256);
function getReleasableLPTokensMinted() external view returns (uint256);
function isLPGenerationCompleted() external view returns (bool);
function tokenUniswapPair() external view returns (address);
function getUniswapRouterV2() external view returns (address);
function getUniswapFactory() external view returns (address);
function devFundAddress() external view returns (address);
function transferCheckerAddress() external view returns (address);
function feeDistributor() external view returns (address);
}
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.6.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, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.6.2;
/**
* @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 in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(
address target,
bytes memory data,
uint256 weiValue,
string memory errorMessage
) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{value: weiValue}(
data
);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: contracts/IFeeApprover.sol
pragma solidity 0.6.12;
interface IFeeApprover {
function check(
address sender,
address recipient,
uint256 amount
) external returns (bool);
function setFeeMultiplier(uint256 _feeMultiplier) external;
function feePercentX100() external view returns (uint256);
function setTokenUniswapPair(address _tokenUniswapPair) external;
function setNerdTokenAddress(address _nerdTokenAddress) external;
function updateTxState() external;
function calculateAmountsAfterFee(
address sender,
address recipient,
uint256 amount
)
external
returns (uint256 transferToAmount, uint256 transferToFeeBearerAmount);
function setPaused() external;
}
// File: contracts/INerdVault.sol
pragma solidity 0.6.12;
interface INerdVault {
function updatePendingRewards() external;
function depositFor(
address _depositFor,
uint256 _pid,
uint256 _amount
) external;
function poolInfo(uint256 _pid)
external
view
returns (
address,
uint256,
uint256,
uint256,
bool,
uint256,
uint256,
uint256,
uint256
);
}
// File: @nomiclabs/buidler/console.sol
pragma solidity >=0.4.22 <0.8.0;
library console {
address constant CONSOLE_ADDRESS = address(
0x000000000000000000636F6e736F6c652e6c6f67
);
function _sendLogPayload(bytes memory payload) private view {
uint256 payloadLength = payload.length;
address consoleAddress = CONSOLE_ADDRESS;
assembly {
let payloadStart := add(payload, 32)
let r := staticcall(
gas(),
consoleAddress,
payloadStart,
payloadLength,
0,
0
)
}
}
function log() internal view {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int256 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
}
function logUint(uint256 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
}
function logString(string memory p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function logBool(bool p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function logAddress(address p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function logBytes(bytes memory p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
}
function logByte(bytes1 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(byte)", p0));
}
function logBytes1(bytes1 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
}
function logBytes2(bytes2 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
}
function logBytes3(bytes3 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
}
function logBytes4(bytes4 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
}
function logBytes5(bytes5 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
}
function logBytes6(bytes6 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
}
function logBytes7(bytes7 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
}
function logBytes8(bytes8 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
}
function logBytes9(bytes9 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
}
function logBytes10(bytes10 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
}
function logBytes11(bytes11 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
}
function logBytes12(bytes12 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
}
function logBytes13(bytes13 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
}
function logBytes14(bytes14 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
}
function logBytes15(bytes15 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
}
function logBytes16(bytes16 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
}
function logBytes17(bytes17 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
}
function logBytes18(bytes18 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
}
function logBytes19(bytes19 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
}
function logBytes20(bytes20 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
}
function logBytes21(bytes21 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
}
function logBytes22(bytes22 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
}
function logBytes23(bytes23 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
}
function logBytes24(bytes24 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
}
function logBytes25(bytes25 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
}
function logBytes26(bytes26 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
}
function logBytes27(bytes27 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
}
function logBytes28(bytes28 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
}
function logBytes29(bytes29 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
}
function logBytes30(bytes30 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
}
function logBytes31(bytes31 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
}
function logBytes32(bytes32 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
}
function log(uint256 p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
}
function log(string memory p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function log(bool p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function log(address p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function log(uint256 p0, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
}
function log(uint256 p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
}
function log(uint256 p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
}
function log(uint256 p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
}
function log(string memory p0, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
}
function log(string memory p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
}
function log(string memory p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
}
function log(string memory p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
}
function log(bool p0, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
}
function log(bool p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
}
function log(bool p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
}
function log(bool p0, address p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
}
function log(address p0, uint256 p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
}
function log(address p0, string memory p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
}
function log(address p0, bool p1) internal view {
_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
}
function log(address p0, address p1) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,address)", p0, p1)
);
}
function log(
uint256 p0,
uint256 p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)
);
}
function log(
uint256 p0,
uint256 p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)
);
}
function log(
uint256 p0,
uint256 p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)
);
}
function log(
uint256 p0,
uint256 p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)
);
}
function log(
uint256 p0,
string memory p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)
);
}
function log(
uint256 p0,
string memory p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)
);
}
function log(
uint256 p0,
string memory p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)
);
}
function log(
uint256 p0,
string memory p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)
);
}
function log(
uint256 p0,
bool p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)
);
}
function log(
uint256 p0,
bool p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)
);
}
function log(
uint256 p0,
bool p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)
);
}
function log(
uint256 p0,
bool p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)
);
}
function log(
uint256 p0,
address p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)
);
}
function log(
uint256 p0,
address p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)
);
}
function log(
uint256 p0,
address p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)
);
}
function log(
uint256 p0,
address p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)
);
}
function log(
string memory p0,
uint256 p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)
);
}
function log(
string memory p0,
uint256 p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)
);
}
function log(
string memory p0,
uint256 p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)
);
}
function log(
string memory p0,
uint256 p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)
);
}
function log(
string memory p0,
string memory p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)
);
}
function log(
string memory p0,
string memory p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)
);
}
function log(
string memory p0,
string memory p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)
);
}
function log(
string memory p0,
string memory p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)
);
}
function log(
string memory p0,
bool p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)
);
}
function log(
string memory p0,
bool p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)
);
}
function log(
string memory p0,
bool p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)
);
}
function log(
string memory p0,
bool p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)
);
}
function log(
string memory p0,
address p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)
);
}
function log(
string memory p0,
address p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)
);
}
function log(
string memory p0,
address p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)
);
}
function log(
string memory p0,
address p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)
);
}
function log(
bool p0,
uint256 p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)
);
}
function log(
bool p0,
uint256 p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)
);
}
function log(
bool p0,
uint256 p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)
);
}
function log(
bool p0,
uint256 p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)
);
}
function log(
bool p0,
string memory p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)
);
}
function log(
bool p0,
string memory p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)
);
}
function log(
bool p0,
string memory p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)
);
}
function log(
bool p0,
string memory p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)
);
}
function log(
bool p0,
bool p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)
);
}
function log(
bool p0,
bool p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)
);
}
function log(
bool p0,
bool p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)
);
}
function log(
bool p0,
bool p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)
);
}
function log(
bool p0,
address p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)
);
}
function log(
bool p0,
address p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)
);
}
function log(
bool p0,
address p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)
);
}
function log(
bool p0,
address p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)
);
}
function log(
address p0,
uint256 p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)
);
}
function log(
address p0,
uint256 p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)
);
}
function log(
address p0,
uint256 p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)
);
}
function log(
address p0,
uint256 p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)
);
}
function log(
address p0,
string memory p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)
);
}
function log(
address p0,
string memory p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)
);
}
function log(
address p0,
string memory p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)
);
}
function log(
address p0,
string memory p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)
);
}
function log(
address p0,
bool p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)
);
}
function log(
address p0,
bool p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)
);
}
function log(
address p0,
bool p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)
);
}
function log(
address p0,
bool p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)
);
}
function log(
address p0,
address p1,
uint256 p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)
);
}
function log(
address p0,
address p1,
string memory p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)
);
}
function log(
address p0,
address p1,
bool p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)
);
}
function log(
address p0,
address p1,
address p2
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)
);
}
function log(
uint256 p0,
uint256 p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
uint256 p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
uint256 p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
uint256 p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
uint256 p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
uint256 p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,uint,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
string memory p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,string,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
bool p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
bool p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
bool p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)
);
}
function log(
uint256 p0,
bool p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
bool p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,bool,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
uint256 p0,
address p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(uint,address,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
uint256 p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,uint,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
string memory p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,string,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
bool p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,bool,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
string memory p0,
address p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(string,address,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)
);
}
function log(
bool p0,
uint256 p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)
);
}
function log(
bool p0,
uint256 p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)
);
}
function log(
bool p0,
uint256 p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)
);
}
function log(
bool p0,
uint256 p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
uint256 p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,uint,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
string memory p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,string,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)
);
}
function log(
bool p0,
bool p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)
);
}
function log(
bool p0,
bool p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)
);
}
function log(
bool p0,
bool p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)
);
}
function log(
bool p0,
bool p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
bool p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,bool,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
bool p0,
address p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(bool,address,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
uint256 p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,uint,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
string memory p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,string,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
bool p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,bool,address,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
uint256 p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,uint,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
uint256 p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,uint,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
uint256 p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,uint,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
uint256 p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,uint,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
string memory p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,string,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
string memory p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,string,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
string memory p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,string,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
string memory p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,string,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
bool p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,bool,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
bool p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,bool,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
bool p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,bool,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
bool p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,bool,address)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
address p2,
uint256 p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,address,uint)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
address p2,
string memory p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,address,string)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
address p2,
bool p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,address,bool)",
p0,
p1,
p2,
p3
)
);
}
function log(
address p0,
address p1,
address p2,
address p3
) internal view {
_sendLogPayload(
abi.encodeWithSignature(
"log(address,address,address,address)",
p0,
p1,
p2,
p3
)
);
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.6.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount)
external
returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// File: contracts/uniswapv2/interfaces/IUniswapV2Factory.sol
pragma solidity 0.6.12;
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function migrator() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
function setMigrator(address) external;
}
// File: contracts/uniswapv2/interfaces/IUniswapV2Router01.sol
pragma solidity 0.6.12;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
// File: contracts/uniswapv2/interfaces/IUniswapV2Router02.sol
pragma solidity 0.6.12;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
// File: contracts/uniswapv2/interfaces/IUniswapV2Pair.sol
pragma solidity 0.6.12;
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// File: contracts/uniswapv2/interfaces/IWETH.sol
pragma solidity 0.6.12;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint256 value) external returns (bool);
function withdraw(uint256) external;
function approve(address guy, uint256 wad) external returns (bool);
function balanceOf(address addr) external view returns (uint256);
}
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.6.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.
*/
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 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: contracts/NerdBaseToken.sol
pragma solidity 0.6.12;
// import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract NerdBaseToken is Context, INerdBaseTokenLGE, Ownable {
using SafeMath for uint256;
using Address for address;
uint256 public constant DEV_FUND_LOCKED_MONTHS = 6;
uint256 public constant ONE_MONTH = 30 days;
uint256 public constant HARD_CAP_LIQUIDITY_EVENT = 800 ether;
uint256 public constant DEV_FUND_RESERVE_PERCENT = 9; //9%
uint256 public constant LP_LOCK_FOREVER_PERCENT = 40; //40%
uint256 public constant LP_INITIAL_LOCKED_PERIOD = 28 days;
uint256 public LGE_DURATION = 7 days;
address public override tokenUniswapPair;
uint256 public totalLPTokensMinted;
uint256 public totalETHContributed;
uint256 public LPperETHUnit;
mapping(address => uint256) public ethContributed;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
event LiquidityAddition(address indexed dst, uint256 value);
event LPTokenClaimed(address dst, uint256 value);
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
uint256 public constant initialSupply = 21000e18;
uint256 public contractStartTimestamp;
uint256 public tokenActiveStartTimestamp;
address public override devFundAddress;
address public tentativeDevAddress;
uint256 public devFundTotal;
uint256 public releasedDevFund;
uint256 public lpReleaseStart;
address public lgeApprover;
mapping(address => bool) public alreadyPlayGameUsers;
function name() public view returns (string memory) {
return _name;
}
function initialSetup(
address router,
address factory,
address _devFund,
uint256 _lgePeriod,
address _lgeApprover
) internal {
_name = "N3RD.FINANCE";
_symbol = "N3RDz";
_decimals = 18;
LGE_DURATION = (_lgePeriod > 0) ? _lgePeriod : LGE_DURATION;
uint256 initialMint = initialSupply.div(100).mul(
100 - DEV_FUND_RESERVE_PERCENT
);
_mint(address(this), initialMint);
contractStartTimestamp = block.timestamp;
uniswapRouterV2 = IUniswapV2Router02(
router != address(0)
? router
: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
uniswapFactory = IUniswapV2Factory(
factory != address(0)
? factory
: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
);
createUniswapPairMainnet();
releasedDevFund = 0;
devFundAddress = _devFund;
devFundTotal = initialSupply.sub(initialMint);
lpReleaseStart = block.timestamp.add(LGE_DURATION).add(
LP_INITIAL_LOCKED_PERIOD
); //7 days for LGE + 28 days locked
lgeApprover = _lgeApprover;
}
function isApprovedBySignature(
address _joiner,
bytes32 r,
bytes32 s,
uint8 v
) public view returns (bool) {
//compute keccak hash of address
bytes32 h = keccak256(abi.encodePacked(_joiner));
bytes32 messageHash = keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", h)
);
return ecrecover(messageHash, v, r, s) == lgeApprover;
}
function isJoinedLGE(address _joiner) public view returns (bool) {
return ethContributed[_joiner] > 0 || alreadyPlayGameUsers[_joiner];
}
function registerLGE(
bytes32 r,
bytes32 s,
uint8 v
) public {
require(isApprovedBySignature(msg.sender, r, s, v), "!signature");
alreadyPlayGameUsers[msg.sender] = true;
}
function getAllocatedLP(address _user)
public
override
view
returns (uint256)
{
return
ethContributed[_user]
.mul(LPperETHUnit)
.mul(uint256(100).sub(LP_LOCK_FOREVER_PERCENT))
.div(100)
.div(1e18);
}
function getLpReleaseStart() public override view returns (uint256) {
return lpReleaseStart;
}
function getTokenUniswapPair() public override view returns (address) {
return tokenUniswapPair;
}
function getTotalLPTokensMinted() public override view returns (uint256) {
return totalLPTokensMinted;
}
function getReleasableLPTokensMinted()
public
override
view
returns (uint256)
{
return
totalETHContributed
.mul(LPperETHUnit)
.mul(uint256(100).sub(LP_LOCK_FOREVER_PERCENT))
.div(100)
.div(1e18);
}
function pendingReleasableDevFund() public view returns (uint256) {
if (tokenActiveStartTimestamp == 0 || !LPGenerationCompleted) return 0;
uint256 monthsTilNow = (block.timestamp.sub(tokenActiveStartTimestamp))
.div(ONE_MONTH);
monthsTilNow = monthsTilNow.add(1);
uint256 totalReleasableTilNow = monthsTilNow.mul(devFundTotal).div(
DEV_FUND_LOCKED_MONTHS
);
if (totalReleasableTilNow > devFundTotal) {
totalReleasableTilNow = devFundTotal;
}
if (totalReleasableTilNow > releasedDevFund) {
return totalReleasableTilNow.sub(releasedDevFund);
}
return 0;
}
function unlockDevFund() public {
uint256 tobeReleasedAmount = pendingReleasableDevFund();
if (tobeReleasedAmount > 0) {
releasedDevFund = releasedDevFund.add(tobeReleasedAmount);
_mint(devFundAddress, tobeReleasedAmount);
}
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public override view returns (uint256) {
return _totalSupply;
}
function balanceOf(address _owner) public override view returns (uint256) {
return _balances[_owner];
}
IUniswapV2Router02 public uniswapRouterV2;
IUniswapV2Factory public uniswapFactory;
function getUniswapRouterV2() public override view returns (address) {
return address(uniswapRouterV2);
}
function getUniswapFactory() public override view returns (address) {
return address(uniswapFactory);
}
function createUniswapPairMainnet() public returns (address) {
require(tokenUniswapPair == address(0), "Token: pool already created");
tokenUniswapPair = uniswapFactory.createPair(
address(uniswapRouterV2.WETH()),
address(this)
);
return tokenUniswapPair;
}
string
public liquidityGenerationParticipationAgreement = "I'm not a resident of the United States \n I understand that this contract is provided with no warranty of any kind. \n I agree to not hold the contract creators, NERD team members or anyone associated with this event liable for any damage monetary and otherwise I might onccur. \n I understand that any smart contract interaction carries an inherent risk.";
function getSecondsLeftInLiquidityGenerationEvent()
public
view
returns (uint256)
{
if (!liquidityGenerationOngoing()) return 0;
console.log(
"LGE_DURATION since start is",
contractStartTimestamp.add(LGE_DURATION),
"Time now is",
block.timestamp
);
return contractStartTimestamp.add(LGE_DURATION).sub(block.timestamp);
}
function liquidityGenerationOngoing() public view returns (bool) {
console.log(
"LGE_DURATION since start is",
contractStartTimestamp.add(LGE_DURATION),
"Time now is",
block.timestamp
);
console.log(
"liquidity generation ongoing",
contractStartTimestamp.add(LGE_DURATION) < block.timestamp
);
return contractStartTimestamp.add(LGE_DURATION) > block.timestamp;
}
function emergencyDrain24hAfterLiquidityGenerationEventIsDone()
public
onlyOwner
{
require(
contractStartTimestamp.add(8 days) < block.timestamp,
"Liquidity generation grace period still ongoing"
);
(bool success, ) = msg.sender.call{value: address(this).balance}("");
require(success, "Transfer failed.");
_balances[msg.sender] = _balances[address(this)];
_balances[address(this)] = 0;
}
bool public LPGenerationCompleted;
function isLPGenerationCompleted() public override view returns (bool) {
return LPGenerationCompleted;
}
function addLiquidityToUniswapNERDxWETHPair() public {
require(
liquidityGenerationOngoing() == false,
"Liquidity generation onging"
);
require(
LPGenerationCompleted == false,
"Liquidity generation already finished"
);
totalETHContributed = address(this).balance;
IUniswapV2Pair pair = IUniswapV2Pair(tokenUniswapPair);
console.log("Balance of this", totalETHContributed / 1e18);
address WETH = uniswapRouterV2.WETH();
IWETH(WETH).deposit{value: totalETHContributed}();
require(address(this).balance == 0, "Transfer Failed");
IWETH(WETH).transfer(address(pair), totalETHContributed);
_balances[address(pair)] = _balances[address(this)];
_balances[address(this)] = 0;
pair.mint(address(this));
totalLPTokensMinted = pair.balanceOf(address(this));
console.log("Total tokens minted", totalLPTokensMinted);
require(totalLPTokensMinted != 0, "LP creation failed");
LPperETHUnit = totalLPTokensMinted.mul(1e18).div(totalETHContributed);
console.log("Total per LP token", LPperETHUnit);
require(LPperETHUnit != 0, "LP creation failed");
LPGenerationCompleted = true;
tokenActiveStartTimestamp = block.timestamp;
//approve WETH for uniswapRouterV2
IWETH(WETH).approve(address(uniswapRouterV2), uint256(-1));
}
modifier checkPreconditionsLGE(
bool agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement
) {
require(
liquidityGenerationOngoing(),
"Liquidity Generation Event over"
);
require(
agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement,
"No agreement provided"
);
require(
totalETHContributed < HARD_CAP_LIQUIDITY_EVENT,
"Liquidity generation even hard cap already reached!"
);
_;
}
function addLiquidity(
bool agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement,
bytes32 r,
bytes32 s,
uint8 v
)
public
payable
checkPreconditionsLGE(
agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement
)
{
require(
isJoinedLGE(msg.sender) ||
(isApprovedBySignature(msg.sender, r, s, v)),
"You havent played the game"
);
addLiquidityInternal();
}
function setDevFundReciever(address _devaddr) public {
require(devFundAddress == msg.sender, "only dev can change");
tentativeDevAddress = _devaddr;
}
function confirmDevAddress() public {
require(tentativeDevAddress == msg.sender, "not tentativeDevAddress!");
devFundAddress = tentativeDevAddress;
tentativeDevAddress = address(0);
}
function getHardCap() public view returns (uint256) {
return HARD_CAP_LIQUIDITY_EVENT;
}
function addLiquidityWithoutSignature(
bool agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement
)
public
payable
checkPreconditionsLGE(
agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement
)
{
require(isJoinedLGE(msg.sender), "You havent played the game");
addLiquidityInternal();
}
function addLiquidityInternal() private {
totalETHContributed = totalETHContributed.add(msg.value);
uint256 refund = 0;
if (totalETHContributed > HARD_CAP_LIQUIDITY_EVENT) {
refund = totalETHContributed.sub(HARD_CAP_LIQUIDITY_EVENT);
totalETHContributed = HARD_CAP_LIQUIDITY_EVENT;
}
ethContributed[msg.sender] = ethContributed[msg.sender].add(
msg.value.sub(refund)
);
if (refund > 0) {
msg.sender.transfer(refund);
}
emit LiquidityAddition(msg.sender, msg.value);
}
function transfer(address recipient, uint256 amount)
public
virtual
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender)
public
virtual
override
view
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender,
_msgSender(),
_allowances[sender][_msgSender()].sub(
amount,
"ERC20: transfer amount exceeds allowance"
)
);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].add(addedValue)
);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
return true;
}
function setShouldTransferChecker(address _transferCheckerAddress)
public
onlyOwner
{
transferCheckerAddress = _transferCheckerAddress;
}
address public override transferCheckerAddress;
function setFeeDistributor(address _feeDistributor) public onlyOwner {
feeDistributor = _feeDistributor;
_approve(
address(this),
_feeDistributor,
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
);
IUniswapV2Pair pair = IUniswapV2Pair(tokenUniswapPair);
pair.approve(
_feeDistributor,
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
);
}
address public override feeDistributor;
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(
amount,
"ERC20: transfer amount exceeds balance"
);
(
uint256 transferToAmount,
uint256 transferToFeeDistributorAmount
) = IFeeApprover(transferCheckerAddress).calculateAmountsAfterFee(
sender,
recipient,
amount
);
console.log("Sender is :", sender, "Recipent is :", recipient);
console.log("amount is ", amount);
require(
transferToAmount.add(transferToFeeDistributorAmount) == amount,
"Math broke, does gravity still work?"
);
_balances[recipient] = _balances[recipient].add(transferToAmount);
emit Transfer(sender, recipient, transferToAmount);
//transferToFeeDistributorAmount is total rewards fees received for genesis pool (this contract) and farming pool
if (
transferToFeeDistributorAmount > 0 && feeDistributor != address(0)
) {
_balances[feeDistributor] = _balances[feeDistributor].add(
transferToFeeDistributorAmount
);
emit Transfer(
sender,
feeDistributor,
transferToFeeDistributorAmount
);
INerdVault(feeDistributor).updatePendingRewards();
}
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(
amount,
"ERC20: burn amount exceeds balance"
);
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// File: contracts/Nerd.sol
pragma solidity 0.6.12;
// NerdToken with Governance.
contract Nerd is NerdBaseToken {
/**
* @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(
address router,
address factory,
address _devFund,
uint256 _lgePeriod,
address _lgeApprover
) public {
initialSetup(router, factory, _devFund, _lgePeriod, _lgeApprover);
// _name = name;
// _symbol = symbol;
// _decimals = 18;
// _totalSupply = initialSupply;
// _balances[address(this)] = initialSupply;
// contractStartTimestamp = block.timestamp;
// // UNISWAP
// IUniswapV2Router02(router != address(0) ? router : 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); // For testing
// IUniswapV2Factory(factory != address(0) ? factory : 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); // For testing
}
// Copied and modified from YAM code:
// https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol
// https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol
// Which is copied and modified from COMPOUND:
// https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol
/// @notice A record of each accounts delegate
mapping(address => address) internal _delegates;
/// @notice A checkpoint for marking number of votes from a given block
struct Checkpoint {
uint32 fromBlock;
uint256 votes;
}
/// @notice A record of votes checkpoints for each account, by index
mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;
/// @notice The number of checkpoints for each account
mapping(address => uint32) public numCheckpoints;
/// @notice The EIP-712 typehash for the contract's domain
bytes32 public constant DOMAIN_TYPEHASH = keccak256(
"EIP712Domain(string name,uint256 chainId,address verifyingContract)"
);
/// @notice The EIP-712 typehash for the delegation struct used by the contract
bytes32 public constant DELEGATION_TYPEHASH = keccak256(
"Delegation(address delegatee,uint256 nonce,uint256 expiry)"
);
/// @notice A record of states for signing / validating signatures
mapping(address => uint256) public nonces;
/// @notice An event thats emitted when an account changes its delegate
event DelegateChanged(
address indexed delegator,
address indexed fromDelegate,
address indexed toDelegate
);
/// @notice An event thats emitted when a delegate account's vote balance changes
event DelegateVotesChanged(
address indexed delegate,
uint256 previousBalance,
uint256 newBalance
);
/**
* @notice Delegate votes from `msg.sender` to `delegatee`
* @param delegator The address to get delegatee for
*/
function delegates(address delegator) external view returns (address) {
return _delegates[delegator];
}
/**
* @notice Delegate votes from `msg.sender` to `delegatee`
* @param delegatee The address to delegate votes to
*/
function delegate(address delegatee) external {
return _delegate(msg.sender, delegatee);
}
/**
* @notice Delegates votes from signatory to `delegatee`
* @param delegatee The address to delegate votes to
* @param nonce The contract state required to match the signature
* @param expiry The time at which to expire the signature
* @param v The recovery byte of the signature
* @param r Half of the ECDSA signature pair
* @param s Half of the ECDSA signature pair
*/
function delegateBySig(
address delegatee,
uint256 nonce,
uint256 expiry,
uint8 v,
bytes32 r,
bytes32 s
) external {
bytes32 domainSeparator = keccak256(
abi.encode(
DOMAIN_TYPEHASH,
keccak256(bytes(name())),
getChainId(),
address(this)
)
);
bytes32 structHash = keccak256(
abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)
);
bytes32 digest = keccak256(
abi.encodePacked("\x19\x01", domainSeparator, structHash)
);
address signatory = ecrecover(digest, v, r, s);
require(
signatory != address(0),
"NERD::delegateBySig: invalid signature"
);
require(
nonce == nonces[signatory]++,
"NERD::delegateBySig: invalid nonce"
);
require(now <= expiry, "NERD::delegateBySig: signature expired");
return _delegate(signatory, delegatee);
}
/**
* @notice Gets the current votes balance for `account`
* @param account The address to get votes balance
* @return The number of current votes for `account`
*/
function getCurrentVotes(address account) external view returns (uint256) {
uint32 nCheckpoints = numCheckpoints[account];
return
nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
}
/**
* @notice Determine the prior number of votes for an account as of a block number
* @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
* @param account The address of the account to check
* @param blockNumber The block number to get the vote balance at
* @return The number of votes the account had as of the given block
*/
function getPriorVotes(address account, uint256 blockNumber)
external
view
returns (uint256)
{
require(
blockNumber < block.number,
"NERD::getPriorVotes: not yet determined"
);
uint32 nCheckpoints = numCheckpoints[account];
if (nCheckpoints == 0) {
return 0;
}
// First check most recent balance
if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
return checkpoints[account][nCheckpoints - 1].votes;
}
// Next check implicit zero balance
if (checkpoints[account][0].fromBlock > blockNumber) {
return 0;
}
uint32 lower = 0;
uint32 upper = nCheckpoints - 1;
while (upper > lower) {
uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
Checkpoint memory cp = checkpoints[account][center];
if (cp.fromBlock == blockNumber) {
return cp.votes;
} else if (cp.fromBlock < blockNumber) {
lower = center;
} else {
upper = center - 1;
}
}
return checkpoints[account][lower].votes;
}
function _delegate(address delegator, address delegatee) internal {
address currentDelegate = _delegates[delegator];
uint256 delegatorBalance = balanceOf(delegator); // balance of underlying NERD tokens (not scaled);
_delegates[delegator] = delegatee;
emit DelegateChanged(delegator, currentDelegate, delegatee);
_moveDelegates(currentDelegate, delegatee, delegatorBalance);
}
function _moveDelegates(
address srcRep,
address dstRep,
uint256 amount
) internal {
if (srcRep != dstRep && amount > 0) {
if (srcRep != address(0)) {
// decrease old representative
uint32 srcRepNum = numCheckpoints[srcRep];
uint256 srcRepOld = srcRepNum > 0
? checkpoints[srcRep][srcRepNum - 1].votes
: 0;
uint256 srcRepNew = srcRepOld.sub(amount);
_writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
}
if (dstRep != address(0)) {
// increase new representative
uint32 dstRepNum = numCheckpoints[dstRep];
uint256 dstRepOld = dstRepNum > 0
? checkpoints[dstRep][dstRepNum - 1].votes
: 0;
uint256 dstRepNew = dstRepOld.add(amount);
_writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
}
}
}
function _writeCheckpoint(
address delegatee,
uint32 nCheckpoints,
uint256 oldVotes,
uint256 newVotes
) internal {
uint32 blockNumber = safe32(
block.number,
"NERD::_writeCheckpoint: block number exceeds 32 bits"
);
if (
nCheckpoints > 0 &&
checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber
) {
checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
} else {
checkpoints[delegatee][nCheckpoints] = Checkpoint(
blockNumber,
newVotes
);
numCheckpoints[delegatee] = nCheckpoints + 1;
}
emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
}
function safe32(uint256 n, string memory errorMessage)
internal
pure
returns (uint32)
{
require(n < 2**32, errorMessage);
return uint32(n);
}
function getChainId() internal pure returns (uint256) {
uint256 chainId;
assembly {
chainId := chainid()
}
return chainId;
}
}
{
"compilationTarget": {
"Nerd.sol": "Nerd"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"_devFund","type":"address"},{"internalType":"uint256","name":"_lgePeriod","type":"uint256"},{"internalType":"address","name":"_lgeApprover","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LPTokenClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LiquidityAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"log","type":"string"}],"name":"Log","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_FUND_LOCKED_MONTHS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_FUND_RESERVE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HARD_CAP_LIQUIDITY_EVENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LGE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPGenerationCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP_INITIAL_LOCKED_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP_LOCK_FOREVER_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPperETHUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_MONTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement","type":"bool"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"addLiquidityToUniswapNERDxWETHPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement","type":"bool"}],"name":"addLiquidityWithoutSignature","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"alreadyPlayGameUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"confirmDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createUniswapPairMainnet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyDrain24hAfterLiquidityGenerationEventIsDone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getAllocatedLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLpReleaseStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReleasableLPTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSecondsLeftInLiquidityGenerationEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLPTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapRouterV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_joiner","type":"address"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"name":"isApprovedBySignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_joiner","type":"address"}],"name":"isJoinedLGE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLPGenerationCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lgeApprover","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityGenerationOngoing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityGenerationParticipationAgreement","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpReleaseStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingReleasableDevFund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"name":"registerLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releasedDevFund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"setDevFundReciever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeDistributor","type":"address"}],"name":"setFeeDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_transferCheckerAddress","type":"address"}],"name":"setShouldTransferChecker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tentativeDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenActiveStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferCheckerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockDevFund","outputs":[],"stateMutability":"nonpayable","type":"function"}]