Transactions
Token Transfers
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- HelperToken
- Optimization enabled
- true
- Compiler version
- v0.8.20+commit.a1b79de6
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2025-06-24T10:07:45.562975Z
Contract source code
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @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);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface for the optional metadata functions from the ERC-20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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 meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC-20
* applications.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* Both values are immutable: they can only be set once during construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Skips emitting an {Approval} event indicating an allowance update. This is not
* required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
*
* ```solidity
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner`'s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
// File: DEGEN-main (9)/DEGEN-main/contracts/interface/IDTX.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;
interface IDTX {
error ERC20InsufficientAllowance(
address spender,
uint256 allowance,
uint256 needed
);
error ERC20InsufficientBalance(
address sender,
uint256 balance,
uint256 needed
);
error ERC20InvalidApprover(address approver);
error ERC20InvalidReceiver(address receiver);
error ERC20InvalidSender(address sender);
error ERC20InvalidSpender(address spender);
error OwnableInvalidOwner(address owner);
error OwnableUnauthorizedAccount(address account);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
event Transfer(address indexed from, address indexed to, uint256 value);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function balanceOf(address account) external view returns (uint256);
function burn(uint256 value) external;
function burnFrom(address account, uint256 value) external;
function burnToken(address account, uint256 amount) external returns (bool);
function decimals() external view returns (uint8);
function governor() external view returns (address);
function masterchefAddress() external view returns (address);
function mint(address to, uint256 amount) external;
function name() external view returns (string memory);
function owner() external view returns (address);
function rebrandName(string memory _newName) external;
function rebrandSymbol(string memory _newSymbol) external;
function receiveTax() external view returns (address);
function renounceOwnership() external;
function symbol() external view returns (string memory);
function tax() external view returns (uint256);
function totalSupply() external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function transferOwnership(address newOwner) external;
function updateTax(address _taxAddress) external;
function updateTax(uint256 _tax) external;
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"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":[{"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":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchefAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_newName","type":"string"}],"name":"rebrandName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newSymbol","type":"string"}],"name":"rebrandSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receiveTax","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":[{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
// File: DEGEN-main (9)/DEGEN-main/contracts/interface/IVault.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;
// Notice: For token vault (not native)
interface IVault {
error AddressEmptyCode(address target);
error AddressInsufficientBalance(address account);
error FailedInnerCall();
error SafeERC20FailedOperation(address token);
event CollectedFee(uint256 amount);
event Deposit(
address indexed sender,
uint256 amount,
uint256 debt,
uint256 depositFee,
address referral
);
event Harvest(
address indexed harvester,
address indexed benficiary,
uint256 stakeID,
address harvestInto,
uint256 harvestAmount,
uint256 penalty,
uint256 callFee
);
event SelfHarvest(
address indexed user,
address harvestInto,
uint256 harvestAmount,
uint256 penalty
);
event UserSettingUpdate(
address indexed user,
address poolAddress,
uint256 threshold,
uint256 feeToPay
);
event Withdraw(
address indexed sender,
uint256 stakeID,
uint256 harvestAmount,
uint256 penalty
);
function accDtxPerShare() external view returns (uint256);
function calculateTotalPendingDTXRewards() external view returns (uint256);
function collectCommission(
address[] memory _beneficiary,
uint256[][] memory _stakeID
) external;
function collectCommissionAuto(address[] memory _beneficiary) external;
function defaultDirectPayout() external view returns (uint256);
function deposit(uint256 _amount, address referral) external;
function depositFee() external view returns (uint256);
function emergencyWithdraw(uint256 _stakeID) external;
function emergencyWithdrawAll() external;
function fundingRate() external view returns (uint256);
function getNrOfStakes(address _user) external view returns (uint256);
function harvest() external;
function lastFundingChangeTimestamp() external view returns (uint256);
function masterchef() external view returns (address);
function maxFee() external view returns (uint256);
function maxFundingFee() external view returns (uint256);
function multiCall(address _user, uint256 _stakeID)
external
view
returns (
uint256,
uint256,
uint256,
uint256
);
function poolID() external view returns (uint256);
function poolPayout(address)
external
view
returns (uint256 amount, uint256 minServe);
function publicBalanceOf() external view returns (uint256);
function referralPoints(address) external view returns (uint256);
function referredBy(address) external view returns (address);
function selfHarvest(uint256[] memory _stakeID, address _harvestInto)
external;
function setDepositFee(uint256 _depositFee) external;
function setFundingRate(uint256 _fundingRate) external;
function setMasterChefAddress(address _masterchef, uint256 _newPoolID)
external;
function setPoolPayout(
address _poolAddress,
uint256 _amount,
uint256 _minServe
) external;
function setTreasury(address _newTreasury) external;
function stakeToken() external view returns (address);
function token() external view returns (address);
function treasury() external view returns (address);
function updateSettings(uint256 _defaultDirectHarvest) external;
function userInfo(address, uint256)
external
view
returns (
uint256 amount,
uint256 debt,
uint256 feesPaid,
uint256 lastAction
);
function viewPoolMinServe(address _contract)
external
view
returns (uint256);
function viewPoolPayout(address _contract) external view returns (uint256);
function viewStakeEarnings(address _user, uint256 _stakeID)
external
view
returns (uint256);
function viewUserTotalEarnings(address _user)
external
view
returns (uint256);
function virtualAccDtxPerShare() external view returns (uint256);
function withdraw(uint256 _stakeID, address _harvestInto) external;
function withdrawStuckTokens(address _tokenAddress) external;
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IERC20","name":"_stakeToken","type":"address"},{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CollectedFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"debt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"referral","type":"address"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"harvester","type":"address"},{"indexed":true,"internalType":"address","name":"benficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"address","name":"harvestInto","type":"address"},{"indexed":false,"internalType":"uint256","name":"harvestAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"callFee","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"harvestInto","type":"address"},{"indexed":false,"internalType":"uint256","name":"harvestAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"SelfHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"poolAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeToPay","type":"uint256"}],"name":"UserSettingUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"harvestAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"accDtxPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateTotalPendingDTXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_beneficiary","type":"address[]"},{"internalType":"uint256[][]","name":"_stakeID","type":"uint256[][]"}],"name":"collectCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_beneficiary","type":"address[]"}],"name":"collectCommissionAuto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultDirectPayout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getNrOfStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastFundingChangeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFundingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"multiCall","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolPayout","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minServe","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referredBy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakeID","type":"uint256[]"},{"internalType":"address","name":"_harvestInto","type":"address"}],"name":"selfHarvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositFee","type":"uint256"}],"name":"setDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fundingRate","type":"uint256"}],"name":"setFundingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"uint256","name":"_newPoolID","type":"uint256"}],"name":"setMasterChefAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minServe","type":"uint256"}],"name":"setPoolPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultDirectHarvest","type":"uint256"}],"name":"updateSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"debt","type":"uint256"},{"internalType":"uint256","name":"feesPaid","type":"uint256"},{"internalType":"uint256","name":"lastAction","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"viewPoolMinServe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"viewPoolPayout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"viewStakeEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"viewUserTotalEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"virtualAccDtxPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"address","name":"_harvestInto","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
// File: DEGEN-main (9)/DEGEN-main/contracts/interface/IacPool.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;
interface IacPool {
event AddAndExtendStake(
address indexed sender,
address indexed recipient,
uint256 amount,
uint256 stakeID,
uint256 shares,
uint256 lastDepositedTime
);
event AddVotes(address indexed voter, uint256 proposalID, uint256 change);
event Deposit(
address indexed sender,
uint256 amount,
uint256 shares,
uint256 lastDepositedTime
);
event GiftDeposit(
address indexed sender,
address indexed recipient,
uint256 amount,
uint256 shares,
uint256 lastDepositedTime
);
event HopDeposit(
address indexed recipient,
uint256 amount,
uint256 shares,
uint256 previousLastDepositedTime,
uint256 mandatoryTime
);
event HopPool(
address indexed sender,
uint256 DTXamount,
uint256 shares,
address indexed newPool
);
event MigrateStake(
address indexed goodSamaritan,
uint256 DTXamount,
uint256 shares,
address indexed recipient
);
event RemoveVotes(
address indexed voter,
uint256 proposalID,
uint256 change
);
event SetDelegate(address userDelegating, address delegatee);
event StakeAllowanceRevoke(
address owner,
address spender,
uint256 allowanceID
);
event StakeApproval(
address owner,
address spender,
uint256 allowanceID,
uint256 shareAllowance,
uint256 lastDeposit,
uint256 mandatoryTime
);
event TransferStake(
address indexed sender,
address indexed recipient,
uint256 shares,
uint256 stakeID
);
event TransferStakeFrom(
address _from,
address _to,
uint256 _stakeID,
uint256 _allowanceID
);
event TrustedPool(address contractAddress, bool setting);
event TrustedSender(address contractAddress, bool setting);
event Withdraw(
address indexed sender,
uint256 amount,
uint256 penalty,
uint256 shares
);
function addAndExtendStake(
address _recipientAddr,
uint256 _amount,
uint256 _stakeID,
uint256 _lockUpTokensInSeconds
) external;
function admin() external view returns (address);
function allowOrigin() external view returns (bool);
function allowStakeTransfer() external view returns (bool);
function allowStakeTransferFrom() external view returns (bool);
function allowTxOrigin(bool _setting) external;
function balanceOf() external view returns (uint256);
function calculateHarvestDTXRewards() external view returns (uint256);
function calculateTotalPendingDTXRewards() external view returns (uint256);
function callFee() external view returns (uint256);
function delegateeVote(address[] memory votingAddress, uint256 proposalID)
external;
function deposit(uint256 _amount) external;
function enableDisableStakeTransfer(bool _setting) external;
function enableDisableStakeTransferFrom(bool _setting) external;
function getNrOfStakes(address _user) external view returns (uint256);
function getPricePerFullShare() external view returns (uint256);
function getUserShares(address _wallet, uint256 _stakeID)
external
view
returns (uint256);
function getUserTotalShares(address _user) external view returns (uint256);
function giftDeposit(
uint256 _amount,
address _toAddress,
uint256 _minToServeInSecs
) external;
function giveStakeAllowance(address spender, uint256 _stakeID) external;
function gracePeriod() external view returns (uint256);
function hopDeposit(
uint256 _amount,
address _recipientAddress,
uint256 previousLastDepositedTime,
uint256 _mandatoryTime
) external;
function hopStakeToAnotherPool(
uint256 _shares,
uint256 _stakeID,
address _poolAddress
) external;
function masterchef() external view returns (address);
function migrateAllStakes(address _staker) external;
function migrateStake(address _staker, uint256 _stakeID) external;
function migrationPool() external view returns (address);
function minimumGift() external view returns (uint256);
function modifyPartialTransfers(bool _decision) external;
function modifyPartialWithdrawals(bool _decision) external;
function nrOfstakeAllowances(address owner, address spender)
external
view
returns (uint256);
function partialTransfers() external view returns (bool);
function partialWithdrawals() external view returns (bool);
function poolID() external view returns (uint256);
function revokeStakeAllowance(address spender, uint256 allowanceID)
external;
function setAdmin() external;
function setCallFee(uint256 _callFee) external;
function setDelegate(address _delegate, bool asProxy) external;
function setMasterChefAddress(address _masterchef, uint256 _newPoolID)
external;
function setMigrationPool(address _newPool) external;
function setMinimumGiftDeposit(uint256 _amount, bool _setting) external;
function setTrustedPool(address[] memory _pool, bool _setting) external;
function setTrustedSender(address[] memory _sender, bool _setting) external;
function stakeAllowances(
address owner,
address spender,
uint256 allowanceID
)
external
view
returns (
uint256,
uint256,
uint256
);
function stakeRollover(address _poolInto, uint256 _stakeID) external;
function token() external view returns (address);
function totalShares() external view returns (uint256);
function totalVotesForID(uint256) external view returns (uint256);
function transferStakeFrom(
address _from,
uint256 _stakeID,
uint256 allowanceID,
address _to
) external returns (bool);
function transferStakeToAnotherWallet(
uint256 _shares,
uint256 _stakeID,
address _recipientAddress
) external;
function treasury() external view returns (address);
function trustedPool(address) external view returns (bool);
function trustedPoolCount() external view returns (uint256);
function trustedSender(address) external view returns (bool);
function trustedSenderCount() external view returns (uint256);
function updateMinGiftGovernor() external view returns (bool);
function updateMinimumGift() external;
function userDelegate(address) external view returns (address);
function userInfo(address, uint256)
external
view
returns (
uint256 shares,
uint256 lastDepositedTime,
uint256 dtxAtLastUserAction,
uint256 lastUserActionTime,
uint256 mandatoryTimeToServe
);
function userVote(address) external view returns (uint256);
function voteForProposal(uint256 proposalID, bool asProxy) external;
function votingCredit(uint256 _shares, uint256 _stakeID) external;
function votingCreditAddress() external view returns (address);
function withdraw(uint256 _shares, uint256 _stakeID) external;
function withdrawAll(uint256 _stakeID) external;
function withdrawFeePeriod() external view returns (uint256);
function withdrawStuckTokens(address _tokenAddress) external;
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IDTX","name":"_token","type":"address"},{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"AddAndExtendStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"GiftDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mandatoryTime","type":"uint256"}],"name":"HopDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"DTXamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":true,"internalType":"address","name":"newPool","type":"address"}],"name":"HopPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"goodSamaritan","type":"address"},{"indexed":false,"internalType":"uint256","name":"DTXamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"MigrateStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"RemoveVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userDelegating","type":"address"},{"indexed":false,"internalType":"address","name":"delegatee","type":"address"}],"name":"SetDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"StakeAllowanceRevoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowanceID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareAllowance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDeposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mandatoryTime","type":"uint256"}],"name":"StakeApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"}],"name":"TransferStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_allowanceID","type":"uint256"}],"name":"TransferStakeFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedSender","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_recipientAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"uint256","name":"_lockUpTokensInSeconds","type":"uint256"}],"name":"addAndExtendStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowOrigin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowStakeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowStakeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"allowTxOrigin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateHarvestDTXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateTotalPendingDTXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"votingAddress","type":"address[]"},{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"delegateeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"enableDisableStakeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"enableDisableStakeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getNrOfStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"getUserShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_minToServeInSecs","type":"uint256"}],"name":"giftDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"giveStakeAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"_mandatoryTime","type":"uint256"}],"name":"hopDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"address","name":"_poolAddress","type":"address"}],"name":"hopStakeToAnotherPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"migrateAllStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"migrateStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumGift","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_decision","type":"bool"}],"name":"modifyPartialTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_decision","type":"bool"}],"name":"modifyPartialWithdrawals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"nrOfstakeAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partialTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partialWithdrawals","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"revokeStakeAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_callFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"bool","name":"asProxy","type":"bool"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"uint256","name":"_newPoolID","type":"uint256"}],"name":"setMasterChefAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPool","type":"address"}],"name":"setMigrationPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setMinimumGiftDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pool","type":"address[]"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_sender","type":"address[]"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"stakeAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_poolInto","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRollover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IDTX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalVotesForID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"uint256","name":"allowanceID","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferStakeFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"}],"name":"transferStakeToAnotherWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedSenderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateMinGiftGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateMinimumGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDelegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"dtxAtLastUserAction","type":"uint256"},{"internalType":"uint256","name":"lastUserActionTime","type":"uint256"},{"internalType":"uint256","name":"mandatoryTimeToServe","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"bool","name":"asProxy","type":"bool"}],"name":"voteForProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"votingCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"votingCreditAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
// File: DEGEN-main (9)/DEGEN-main/contracts/interface/IMasterChef.sol
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;
interface IMasterChef {
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
event TransferCredit(address from, address to, uint256 amount);
event TrustedContract(address contractAddress, bool setting);
event UpdateEmissions(address indexed user, uint256 newEmissions);
function DTXPerBlock() external view returns (uint256);
function add(
uint256 _allocPoint,
address _participant,
bool _withUpdate
) external;
function burn(address _from, uint256 _amount) external returns (bool);
function credit(address) external view returns (uint256);
function dev(address _devaddr) external;
function devaddr() external view returns (address);
function dtx() external view returns (address);
function existingParticipant(address) external view returns (bool);
function fairMintSenate() external;
function fairTokensPublishedToSenate() external view returns (uint256);
function feeAddress() external view returns (address);
function governorFee() external view returns (uint256);
function massAdd(
uint256[] memory _allocPoint,
address[] memory _participant,
bool[] memory _withUpdate
) external;
function massUpdatePools() external;
function owner() external view returns (address);
function pendingDtx(uint256 _pid) external view returns (uint256);
function poolInfo(uint256)
external
view
returns (
uint256 allocPoint,
uint256 lastRewardBlock,
address participant
);
function poolLength() external view returns (uint256);
function publishTokens(address _to, uint256 _amount) external;
function renounceOwnership() external;
function renounceRewards() external;
function rewardSenators(bool _e) external;
function senatorRewards() external view returns (bool);
function set(
uint256 _pid,
uint256 _allocPoint,
bool _withUpdate
) external;
function setFeeAddress(address _feeAddress) external;
function setGovernorFee(uint256 _amount) external;
function setTrustedContract(address _contractAddress, bool _setting)
external;
function startBlock() external view returns (uint256);
function startPublishing(
uint256 _pid,
address _participant,
uint256 _alloc
) external;
function stopPublishing(uint256 _pid) external;
function tokenChangeOwnership(address _newOwner) external;
function totalAllocPoint() external view returns (uint256);
function totalCreditRewards() external view returns (uint256);
function totalCreditRewardsAtLastFairMint() external view returns (uint256);
function totalPrincipalBurned() external view returns (uint256);
function totalPublished() external view returns (uint256);
function transferCredit(address _to, uint256 _amount) external;
function transferOwnership(address newOwner) external;
function trustedContract(address) external view returns (bool);
function trustedContractCount() external view returns (uint256);
function updateEmissionRate(uint256 _DTXPerBlock) external;
function updatePool(uint256 _pid) external;
function updateStartBlock(uint256 _startBlock) external;
function virtualTotalSupply() external view returns (uint256);
}
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IDTX","name":"_DTX","type":"address"},{"internalType":"address","name":"_airdropFull","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"newEmissions","type":"uint256"}],"name":"UpdateEmissions","type":"event"},{"inputs":[],"name":"DTXPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"credit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dtx","outputs":[{"internalType":"contract IDTX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"existingParticipant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fairMintSenate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fairTokensPublishedToSenate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_allocPoint","type":"uint256[]"},{"internalType":"address[]","name":"_participant","type":"address[]"},{"internalType":"bool[]","name":"_withUpdate","type":"bool[]"}],"name":"massAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"pendingDtx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"address","name":"participant","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"publishTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_e","type":"bool"}],"name":"rewardSenators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"senatorRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"uint256","name":"_alloc","type":"uint256"}],"name":"startPublishing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"stopPublishing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"tokenChangeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCreditRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCreditRewardsAtLastFairMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPrincipalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPublished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedContractCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_DTXPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"updateStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"virtualTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
*/
// File: DEGEN-main (9)/DEGEN-main/contracts/helperToken.sol
pragma solidity ^0.8.20;
interface IHarvestContract {
function selfHarvest(address _userAddress, uint256[] calldata _stakeID) external;
}
contract HelperToken is ERC20 {
struct PoolPayout {
uint256 amount;
uint256 minServe;
}
bool public transfersEnabled = false;
mapping(address => bool) public whitelist;
address public immutable TOKEN_X = 0x3E79130ab714E97ee73f86a56a2427bb1A519896;
address public masterchef;
address public feeAddress;
mapping(address => uint256) public tokensClaimed;
mapping(address => PoolPayout) public poolPayout; //determines the percentage received depending on withdrawal option
uint256 public defaultDirectPayout = 50; //0.5% if withdrawn into wallet
event TransfersToggled(bool enabled);
event WhitelistUpdated(address indexed account, bool isWhitelisted);
event ClaimReward(address indexed account, uint withdrawAmount, uint payoutAmount, address into);
// Constructor sets TOKEN_X and whitelists the deployer
constructor() ERC20("Claimable Rewards", "CLAIMR") {
poolPayout[0xD9B491ac0f5487673500B67224b67b4171a08aCa].amount = 100;
poolPayout[0xD9B491ac0f5487673500B67224b67b4171a08aCa].minServe = 864000;
poolPayout[0x7ED33f65A0398cb26eaB2B03877825c96D9B6077].amount = 250;
poolPayout[0x7ED33f65A0398cb26eaB2B03877825c96D9B6077].minServe = 2592000;
poolPayout[0x3d175C8359169b0e830d36EA9CD3FE209f46f7BD].amount = 500;
poolPayout[0x3d175C8359169b0e830d36EA9CD3FE209f46f7BD].minServe = 8640000;
poolPayout[0xdE672FccA32365bD704c39bd1164a0D34a3a73e6].amount = 10000;
poolPayout[0xdE672FccA32365bD704c39bd1164a0D34a3a73e6].minServe = 31536000;
}
// Returns the governor address from the TOKEN_X contract
function governor() public view returns (address) {
return IDTX(TOKEN_X).governor();
}
// Modifier to restrict functions to the governor
modifier onlyGovernor() {
require(msg.sender == governor(), "ControlledToken: Caller is not governor");
_;
}
// Modifier to check if transfers are enabled
modifier whenTransfersEnabled() {
require(transfersEnabled, "ControlledToken: Transfers are disabled");
_;
}
// Modifier to check if caller is whitelisted
modifier onlyWhitelisted() {
require(whitelist[msg.sender], "ControlledToken: Caller is not whitelisted");
_;
}
// Governor function to toggle transfers on/off
function toggleTransfers(bool _enabled) external onlyGovernor {
transfersEnabled = _enabled;
emit TransfersToggled(_enabled);
}
function whitelistVaults() external {
uint _poolLength = IMasterChef(masterchef).poolLength();
for(uint i=4; i < _poolLength; i++) {
( , , address _vault) = IMasterChef(masterchef).poolInfo(i);
if(!whitelist[_vault]) {
whitelist[_vault] = true;
}
}
}
function claimWithHarvest(
address[] calldata _contractAddresses,
address _userAddress,
uint256[][] calldata _stakeIDs,
uint256 _amount,
address _into
) external {
require(
_contractAddresses.length == _stakeIDs.length,
"Mismatched contracts and stake IDs length"
);
require(_contractAddresses.length > 0, "No contracts provided");
for (uint256 i = 0; i < _contractAddresses.length; i++) {
IHarvestContract(_contractAddresses[i]).selfHarvest(_userAddress, _stakeIDs[i]);
}
claimRewards(_amount, _into);
}
function claimRewards(uint256 _amount, address _harvestInto) public {
require(balanceOf(msg.sender) >= _amount, "Insufficient balance!");
_burn(msg.sender, _amount);
uint256 _payout = 0;
if(_harvestInto == msg.sender) {
_payout = _amount * defaultDirectPayout / 10000;
IMasterChef(masterchef).publishTokens(msg.sender, _payout);
} else {
require(poolPayout[_harvestInto].amount != 0, "incorrect pool!");
_payout = _amount * poolPayout[_harvestInto].amount / 10000;
IMasterChef(masterchef).publishTokens(address(this), _payout);
IacPool(_harvestInto).giftDeposit(_payout, msg.sender, poolPayout[_harvestInto].minServe);
}
uint256 _penalty = _amount - _payout;
if(_penalty > 0) {
IMasterChef(masterchef).publishTokens(feeAddress, _penalty); //penalty to treasury
}
tokensClaimed[msg.sender]+= _payout;
emit ClaimReward(msg.sender, _amount, _payout, _harvestInto);
}
function updateAddresses() external {
masterchef = IDTX(TOKEN_X).masterchefAddress();
feeAddress = IMasterChef(masterchef).feeAddress();
}
// Governor function to add/remove address from whitelist
function updateWhitelist(address account, bool isWhitelisted) external onlyGovernor {
require(account != address(0), "ControlledToken: Invalid address");
whitelist[account] = isWhitelisted;
emit WhitelistUpdated(account, isWhitelisted);
}
// Whitelisted addresses can mint tokens
function mint(address to, uint256 amount) external onlyWhitelisted {
require(to != address(0), "ControlledToken: Invalid recipient");
_mint(to, amount);
}
// Whitelisted addresses can burn tokens
function burn(address from, uint256 amount) external onlyWhitelisted {
_burn(from, amount);
}
// Override transfer to enforce transfer toggle
function transfer(address to, uint256 value) public override whenTransfersEnabled returns (bool) {
return super.transfer(to, value);
}
// Override transferFrom to enforce transfer toggle
function transferFrom(address from, address to, uint256 value) public override whenTransfersEnabled returns (bool) {
return super.transferFrom(from, to, value);
}
function updateSettings(uint256 _defaultDirectHarvest) external onlyGovernor {
require(_defaultDirectHarvest <= 10_000, "maximum 100%");
defaultDirectPayout = _defaultDirectHarvest;
}
function setPoolPayout(address _poolAddress, uint256 _amount, uint256 _minServe) external onlyGovernor {
require(_amount <= 10000, "out of range");
poolPayout[_poolAddress].amount = _amount;
poolPayout[_poolAddress].minServe = _minServe; //mandatory lockup(else stake for 5yr, withdraw with 82% penalty and receive 18%)
}
function viewPoolPayout(address _contract) external view returns (uint256) {
return poolPayout[_contract].amount;
}
function viewPoolMinServe(address _contract) external view returns (uint256) {
return poolPayout[_contract].minServe;
}
}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"allowance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"uint256","name":"balance","internalType":"uint256"},{"type":"uint256","name":"needed","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"type":"address","name":"approver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"type":"address","name":"receiver","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"type":"address","name":"sender","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"ClaimReward","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"uint256","name":"withdrawAmount","internalType":"uint256","indexed":false},{"type":"uint256","name":"payoutAmount","internalType":"uint256","indexed":false},{"type":"address","name":"into","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TransfersToggled","inputs":[{"type":"bool","name":"enabled","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"WhitelistUpdated","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"bool","name":"isWhitelisted","internalType":"bool","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"TOKEN_X","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimRewards","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"},{"type":"address","name":"_harvestInto","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimWithHarvest","inputs":[{"type":"address[]","name":"_contractAddresses","internalType":"address[]"},{"type":"address","name":"_userAddress","internalType":"address"},{"type":"uint256[][]","name":"_stakeIDs","internalType":"uint256[][]"},{"type":"uint256","name":"_amount","internalType":"uint256"},{"type":"address","name":"_into","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"defaultDirectPayout","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"feeAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"masterchef","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"minServe","internalType":"uint256"}],"name":"poolPayout","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPoolPayout","inputs":[{"type":"address","name":"_poolAddress","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"},{"type":"uint256","name":"_minServe","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"toggleTransfers","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokensClaimed","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfersEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateAddresses","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSettings","inputs":[{"type":"uint256","name":"_defaultDirectHarvest","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateWhitelist","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"isWhitelisted","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"viewPoolMinServe","inputs":[{"type":"address","name":"_contract","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"viewPoolPayout","inputs":[{"type":"address","name":"_contract","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"whitelist","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelistVaults","inputs":[]}]
Contract Creation Code
0x60a06040526005805460ff19169055733e79130ab714e97ee73f86a56a2427bb1a5198966080526032600b5534801562000037575f80fd5b5060405180604001604052806011815260200170436c61696d61626c65205265776172647360781b8152506040518060400160405280600681526020016521a620a4a6a960d11b815250816003908162000092919062000291565b506004620000a1828262000291565b5050600a6020525060647f06d296333231c039533a3f21ef1b6baee5d7353f86011f64dd309160abb6890a55620d2f007f06d296333231c039533a3f21ef1b6baee5d7353f86011f64dd309160abb6890b5560fa7fa0893105202dc6ee19abd93e3f6aa0c85cc30f7fff50567807b62ab402054aa95562278d007fa0893105202dc6ee19abd93e3f6aa0c85cc30f7fff50567807b62ab402054aaa556101f47fa91d3c8a4fc32cbeedea197a1e655ac7c98cc5d1b26de98e34e416c80226fa4d556283d6007fa91d3c8a4fc32cbeedea197a1e655ac7c98cc5d1b26de98e34e416c80226fa4e5573de672fcca32365bd704c39bd1164a0d34a3a73e65f526127107fecd87aa22c0a71c01701e646f0566d9921abbb899136fa4887f5ef2b4a1971e6556301e133807fecd87aa22c0a71c01701e646f0566d9921abbb899136fa4887f5ef2b4a1971e75562000359565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200021a57607f821691505b6020821081036200023957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200028c575f81815260208120601f850160051c81016020861015620002675750805b601f850160051c820191505b81811015620002885782815560010162000273565b5050505b505050565b81516001600160401b03811115620002ad57620002ad620001f1565b620002c581620002be845462000205565b846200023f565b602080601f831160018114620002fb575f8415620002e35750858301515b5f19600386901b1c1916600185901b17855562000288565b5f85815260208120601f198616915b828110156200032b578886015182559484019460019091019084016200030a565b50858210156200034957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6080516119f3620003805f395f818161028b0152818161056d0152610f4401526119f35ff3fe608060405234801561000f575f80fd5b50600436106101d1575f3560e01c806370a08231116100fe578063d084d69c1161009e578063e49c2b661161006e578063e49c2b6614610448578063ef05cf7614610470578063f0ea569a14610483578063fb1db278146104ae575f80fd5b8063d084d69c146103f7578063d4442e1f146103ff578063dd62ed3e14610408578063e26db6fc14610440575f80fd5b80639b19251a116100d95780639b19251a146103a25780639dc29fac146103c4578063a9059cbb146103d7578063bef97c87146103ea575f80fd5b806370a082311461035f57806374b876131461038757806395d89b411461039a575f80fd5b806323b872dd11610174578063624601b611610144578063624601b614610307578063646c41761461032657806368504158146103395780636c7b69cb1461034c575f80fd5b806323b872dd146102bf578063313ce567146102d257806340c10f19146102e157806341275358146102f4575f80fd5b80630d392cd9116101af5780630d392cd914610236578063102d89901461024b57806313e492d71461028657806318160ddd146102ad575f80fd5b806306fdde03146101d5578063095ea7b3146101f35780630c340a2414610216575b5f80fd5b6101dd6104c1565b6040516101ea9190611450565b60405180910390f35b6102066102013660046114b2565b610551565b60405190151581526020016101ea565b61021e61056a565b6040516001600160a01b0390911681526020016101ea565b6102496102443660046114f0565b6105f0565b005b610271610259366004611523565b600a6020525f90815260409020805460019091015482565b604080519283526020830191909152016101ea565b61021e7f000000000000000000000000000000000000000000000000000000000000000081565b6002545b6040519081526020016101ea565b6102066102cd36600461153e565b6106e5565b604051601281526020016101ea565b6102496102ef3660046114b2565b61071c565b60085461021e906001600160a01b031681565b6102b1610315366004611523565b60096020525f908152604090205481565b61024961033436600461157c565b6107b9565b6102496103473660046115ae565b610853565b61024961035a3660046115c7565b6108d2565b6102b161036d366004611523565b6001600160a01b03165f9081526020819052604090205490565b61024961039536600461163d565b610c0b565b6101dd610d87565b6102066103b0366004611523565b60066020525f908152604090205460ff1681565b6102496103d23660046114b2565b610d96565b6102066103e53660046114b2565b610dce565b6005546102069060ff1681565b610249610e03565b6102b1600b5481565b6102b16104163660046116d8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610249610f42565b6102b1610456366004611523565b6001600160a01b03165f908152600a602052604090205490565b61024961047e366004611704565b611060565b6102b1610491366004611523565b6001600160a01b03165f908152600a602052604090206001015490565b60075461021e906001600160a01b031681565b6060600380546104d09061171b565b80601f01602080910402602001604051908101604052809291908181526020018280546104fc9061171b565b80156105475780601f1061051e57610100808354040283529160200191610547565b820191905f5260205f20905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b5f3361055e8185856110de565b60019150505b92915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105eb9190611753565b905090565b6105f861056a565b6001600160a01b0316336001600160a01b0316146106315760405162461bcd60e51b81526004016106289061176e565b60405180910390fd5b6001600160a01b0382166106875760405162461bcd60e51b815260206004820181905260248201527f436f6e74726f6c6c6564546f6b656e3a20496e76616c696420616464726573736044820152606401610628565b6001600160a01b0382165f81815260066020908152604091829020805460ff191685151590811790915591519182527ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d910160405180910390a25050565b6005545f9060ff166107095760405162461bcd60e51b8152600401610628906117b5565b6107148484846110f0565b949350505050565b335f9081526006602052604090205460ff1661074a5760405162461bcd60e51b8152600401610628906117fc565b6001600160a01b0382166107ab5760405162461bcd60e51b815260206004820152602260248201527f436f6e74726f6c6c6564546f6b656e3a20496e76616c696420726563697069656044820152611b9d60f21b6064820152608401610628565b6107b58282611113565b5050565b6107c161056a565b6001600160a01b0316336001600160a01b0316146107f15760405162461bcd60e51b81526004016106289061176e565b6127108211156108325760405162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b6044820152606401610628565b6001600160a01b039092165f908152600a6020526040902090815560010155565b61085b61056a565b6001600160a01b0316336001600160a01b03161461088b5760405162461bcd60e51b81526004016106289061176e565b6005805460ff19168215159081179091556040519081527fe1965432af4c9923f6ebb98f1721262967cfa6178008742d23041dc8ee74ee8f9060200160405180910390a150565b335f908152602081905260409020548211156109285760405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e742062616c616e63652160581b6044820152606401610628565b6109323383611147565b5f336001600160a01b038316036109c357612710600b5484610954919061185a565b61095e9190611871565b600754604051632a98027560e01b8152336004820152602481018390529192506001600160a01b031690632a980275906044015f604051808303815f87803b1580156109a8575f80fd5b505af11580156109ba573d5f803e3d5ffd5b50505050610b20565b6001600160a01b0382165f908152600a60205260408120549003610a1b5760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706f6f6c2160881b6044820152606401610628565b6001600160a01b0382165f908152600a602052604090205461271090610a41908561185a565b610a4b9190611871565b600754604051632a98027560e01b8152306004820152602481018390529192506001600160a01b031690632a980275906044015f604051808303815f87803b158015610a95575f80fd5b505af1158015610aa7573d5f803e3d5ffd5b505050506001600160a01b0382165f818152600a60205260409081902060010154905163859f267f60e01b815260048101849052336024820152604481019190915263859f267f906064015f604051808303815f87803b158015610b09575f80fd5b505af1158015610b1b573d5f803e3d5ffd5b505050505b5f610b2b8285611890565b90508015610b9757600754600854604051632a98027560e01b81526001600160a01b03918216600482015260248101849052911690632a980275906044015f604051808303815f87803b158015610b80575f80fd5b505af1158015610b92573d5f803e3d5ffd5b505050505b335f9081526009602052604081208054849290610bb59084906118a3565b909155505060408051858152602081018490526001600160a01b03851681830152905133917fa9a79b2d1efde307a879325e70b30648b41dda4d6f37af338e5f91c258b72c3f919081900360600190a250505050565b858314610c6c5760405162461bcd60e51b815260206004820152602960248201527f4d69736d61746368656420636f6e74726163747320616e64207374616b652049604482015268088e640d8cadccee8d60bb1b6064820152608401610628565b85610cb15760405162461bcd60e51b8152602060048201526015602482015274139bc818dbdb9d1c9858dd1cc81c1c9bdd9a591959605a1b6044820152606401610628565b5f5b86811015610d7357878782818110610ccd57610ccd6118b6565b9050602002016020810190610ce29190611523565b6001600160a01b031663b206c11a87878785818110610d0357610d036118b6565b9050602002810190610d1591906118ca565b6040518463ffffffff1660e01b8152600401610d3393929190611910565b5f604051808303815f87803b158015610d4a575f80fd5b505af1158015610d5c573d5f803e3d5ffd5b505050508080610d6b90611958565b915050610cb3565b50610d7e82826108d2565b50505050505050565b6060600480546104d09061171b565b335f9081526006602052604090205460ff16610dc45760405162461bcd60e51b8152600401610628906117fc565b6107b58282611147565b6005545f9060ff16610df25760405162461bcd60e51b8152600401610628906117b5565b610dfc838361117b565b9392505050565b6007546040805163040f1f6d60e11b815290515f926001600160a01b03169163081e3eda9160048083019260209291908290030181865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611970565b905060045b818110156107b557600754604051631526fe2760e01b8152600481018390525f916001600160a01b031690631526fe2790602401606060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190611987565b6001600160a01b0381165f9081526006602052604090205490935060ff169150610f2f9050576001600160a01b0381165f908152600660205260409020805460ff191660011790555b5080610f3a81611958565b915050610e73565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c34b586040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc29190611753565b600780546001600160a01b0319166001600160a01b0392909216918217905560408051630824ea6b60e31b815290516341275358916004808201926020929091908290030181865afa15801561101a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103e9190611753565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61106861056a565b6001600160a01b0316336001600160a01b0316146110985760405162461bcd60e51b81526004016106289061176e565b6127108111156110d95760405162461bcd60e51b815260206004820152600c60248201526b6d6178696d756d203130302560a01b6044820152606401610628565b600b55565b6110eb8383836001611188565b505050565b5f336110fd85828561125b565b6111088585856112d1565b506001949350505050565b6001600160a01b03821661113c5760405163ec442f0560e01b81525f6004820152602401610628565b6107b55f838361132a565b6001600160a01b03821661117057604051634b637e8f60e11b81525f6004820152602401610628565b6107b5825f8361132a565b5f3361055e8185856112d1565b6001600160a01b0384166111b15760405163e602df0560e01b81525f6004820152602401610628565b6001600160a01b0383166111da57604051634a1406b160e11b81525f6004820152602401610628565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561125557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161124c91815260200190565b60405180910390a35b50505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981101561125557818110156112c357604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610628565b61125584848484035f611188565b6001600160a01b0383166112fa57604051634b637e8f60e11b81525f6004820152602401610628565b6001600160a01b0382166113235760405163ec442f0560e01b81525f6004820152602401610628565b6110eb8383835b6001600160a01b038316611354578060025f82825461134991906118a3565b909155506113c49050565b6001600160a01b0383165f90815260208190526040902054818110156113a65760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610628565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166113e0576002805482900390556113fe565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161144391815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561147b5785810183015185820160400152820161145f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114af575f80fd5b50565b5f80604083850312156114c3575f80fd5b82356114ce8161149b565b946020939093013593505050565b803580151581146114eb575f80fd5b919050565b5f8060408385031215611501575f80fd5b823561150c8161149b565b915061151a602084016114dc565b90509250929050565b5f60208284031215611533575f80fd5b8135610dfc8161149b565b5f805f60608486031215611550575f80fd5b833561155b8161149b565b9250602084013561156b8161149b565b929592945050506040919091013590565b5f805f6060848603121561158e575f80fd5b83356115998161149b565b95602085013595506040909401359392505050565b5f602082840312156115be575f80fd5b610dfc826114dc565b5f80604083850312156115d8575f80fd5b8235915060208301356115ea8161149b565b809150509250929050565b5f8083601f840112611605575f80fd5b50813567ffffffffffffffff81111561161c575f80fd5b6020830191508360208260051b8501011115611636575f80fd5b9250929050565b5f805f805f805f60a0888a031215611653575f80fd5b873567ffffffffffffffff8082111561166a575f80fd5b6116768b838c016115f5565b909950975060208a0135915061168b8261149b565b909550604089013590808211156116a0575f80fd5b506116ad8a828b016115f5565b9095509350506060880135915060808801356116c88161149b565b8091505092959891949750929550565b5f80604083850312156116e9575f80fd5b82356116f48161149b565b915060208301356115ea8161149b565b5f60208284031215611714575f80fd5b5035919050565b600181811c9082168061172f57607f821691505b60208210810361174d57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611763575f80fd5b8151610dfc8161149b565b60208082526027908201527f436f6e74726f6c6c6564546f6b656e3a2043616c6c6572206973206e6f74206760408201526637bb32b93737b960c91b606082015260800190565b60208082526027908201527f436f6e74726f6c6c6564546f6b656e3a205472616e73666572732061726520646040820152661a5cd8589b195960ca1b606082015260800190565b6020808252602a908201527f436f6e74726f6c6c6564546f6b656e3a2043616c6c6572206973206e6f7420776040820152691a1a5d195b1a5cdd195960b21b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761056457610564611846565b5f8261188b57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561056457610564611846565b8082018082111561056457610564611846565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126118df575f80fd5b83018035915067ffffffffffffffff8211156118f9575f80fd5b6020019150600581901b3603821315611636575f80fd5b6001600160a01b038416815260406020820181905281018290525f6001600160fb1b0383111561193e575f80fd5b8260051b8085606085013791909101606001949350505050565b5f6001820161196957611969611846565b5060010190565b5f60208284031215611980575f80fd5b5051919050565b5f805f60608486031215611999575f80fd5b835192506020840151915060408401516119b28161149b565b80915050925092509256fea264697066735822122000edc89bcc96cf856edad8d93f1e3d6d21f41b2803a445381a75e03f9290e1cb64736f6c63430008140033
Deployed ByteCode
0x608060405234801561000f575f80fd5b50600436106101d1575f3560e01c806370a08231116100fe578063d084d69c1161009e578063e49c2b661161006e578063e49c2b6614610448578063ef05cf7614610470578063f0ea569a14610483578063fb1db278146104ae575f80fd5b8063d084d69c146103f7578063d4442e1f146103ff578063dd62ed3e14610408578063e26db6fc14610440575f80fd5b80639b19251a116100d95780639b19251a146103a25780639dc29fac146103c4578063a9059cbb146103d7578063bef97c87146103ea575f80fd5b806370a082311461035f57806374b876131461038757806395d89b411461039a575f80fd5b806323b872dd11610174578063624601b611610144578063624601b614610307578063646c41761461032657806368504158146103395780636c7b69cb1461034c575f80fd5b806323b872dd146102bf578063313ce567146102d257806340c10f19146102e157806341275358146102f4575f80fd5b80630d392cd9116101af5780630d392cd914610236578063102d89901461024b57806313e492d71461028657806318160ddd146102ad575f80fd5b806306fdde03146101d5578063095ea7b3146101f35780630c340a2414610216575b5f80fd5b6101dd6104c1565b6040516101ea9190611450565b60405180910390f35b6102066102013660046114b2565b610551565b60405190151581526020016101ea565b61021e61056a565b6040516001600160a01b0390911681526020016101ea565b6102496102443660046114f0565b6105f0565b005b610271610259366004611523565b600a6020525f90815260409020805460019091015482565b604080519283526020830191909152016101ea565b61021e7f0000000000000000000000003e79130ab714e97ee73f86a56a2427bb1a51989681565b6002545b6040519081526020016101ea565b6102066102cd36600461153e565b6106e5565b604051601281526020016101ea565b6102496102ef3660046114b2565b61071c565b60085461021e906001600160a01b031681565b6102b1610315366004611523565b60096020525f908152604090205481565b61024961033436600461157c565b6107b9565b6102496103473660046115ae565b610853565b61024961035a3660046115c7565b6108d2565b6102b161036d366004611523565b6001600160a01b03165f9081526020819052604090205490565b61024961039536600461163d565b610c0b565b6101dd610d87565b6102066103b0366004611523565b60066020525f908152604090205460ff1681565b6102496103d23660046114b2565b610d96565b6102066103e53660046114b2565b610dce565b6005546102069060ff1681565b610249610e03565b6102b1600b5481565b6102b16104163660046116d8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610249610f42565b6102b1610456366004611523565b6001600160a01b03165f908152600a602052604090205490565b61024961047e366004611704565b611060565b6102b1610491366004611523565b6001600160a01b03165f908152600a602052604090206001015490565b60075461021e906001600160a01b031681565b6060600380546104d09061171b565b80601f01602080910402602001604051908101604052809291908181526020018280546104fc9061171b565b80156105475780601f1061051e57610100808354040283529160200191610547565b820191905f5260205f20905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b5f3361055e8185856110de565b60019150505b92915050565b5f7f0000000000000000000000003e79130ab714e97ee73f86a56a2427bb1a5198966001600160a01b0316630c340a246040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105eb9190611753565b905090565b6105f861056a565b6001600160a01b0316336001600160a01b0316146106315760405162461bcd60e51b81526004016106289061176e565b60405180910390fd5b6001600160a01b0382166106875760405162461bcd60e51b815260206004820181905260248201527f436f6e74726f6c6c6564546f6b656e3a20496e76616c696420616464726573736044820152606401610628565b6001600160a01b0382165f81815260066020908152604091829020805460ff191685151590811790915591519182527ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d910160405180910390a25050565b6005545f9060ff166107095760405162461bcd60e51b8152600401610628906117b5565b6107148484846110f0565b949350505050565b335f9081526006602052604090205460ff1661074a5760405162461bcd60e51b8152600401610628906117fc565b6001600160a01b0382166107ab5760405162461bcd60e51b815260206004820152602260248201527f436f6e74726f6c6c6564546f6b656e3a20496e76616c696420726563697069656044820152611b9d60f21b6064820152608401610628565b6107b58282611113565b5050565b6107c161056a565b6001600160a01b0316336001600160a01b0316146107f15760405162461bcd60e51b81526004016106289061176e565b6127108211156108325760405162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b6044820152606401610628565b6001600160a01b039092165f908152600a6020526040902090815560010155565b61085b61056a565b6001600160a01b0316336001600160a01b03161461088b5760405162461bcd60e51b81526004016106289061176e565b6005805460ff19168215159081179091556040519081527fe1965432af4c9923f6ebb98f1721262967cfa6178008742d23041dc8ee74ee8f9060200160405180910390a150565b335f908152602081905260409020548211156109285760405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e742062616c616e63652160581b6044820152606401610628565b6109323383611147565b5f336001600160a01b038316036109c357612710600b5484610954919061185a565b61095e9190611871565b600754604051632a98027560e01b8152336004820152602481018390529192506001600160a01b031690632a980275906044015f604051808303815f87803b1580156109a8575f80fd5b505af11580156109ba573d5f803e3d5ffd5b50505050610b20565b6001600160a01b0382165f908152600a60205260408120549003610a1b5760405162461bcd60e51b815260206004820152600f60248201526e696e636f727265637420706f6f6c2160881b6044820152606401610628565b6001600160a01b0382165f908152600a602052604090205461271090610a41908561185a565b610a4b9190611871565b600754604051632a98027560e01b8152306004820152602481018390529192506001600160a01b031690632a980275906044015f604051808303815f87803b158015610a95575f80fd5b505af1158015610aa7573d5f803e3d5ffd5b505050506001600160a01b0382165f818152600a60205260409081902060010154905163859f267f60e01b815260048101849052336024820152604481019190915263859f267f906064015f604051808303815f87803b158015610b09575f80fd5b505af1158015610b1b573d5f803e3d5ffd5b505050505b5f610b2b8285611890565b90508015610b9757600754600854604051632a98027560e01b81526001600160a01b03918216600482015260248101849052911690632a980275906044015f604051808303815f87803b158015610b80575f80fd5b505af1158015610b92573d5f803e3d5ffd5b505050505b335f9081526009602052604081208054849290610bb59084906118a3565b909155505060408051858152602081018490526001600160a01b03851681830152905133917fa9a79b2d1efde307a879325e70b30648b41dda4d6f37af338e5f91c258b72c3f919081900360600190a250505050565b858314610c6c5760405162461bcd60e51b815260206004820152602960248201527f4d69736d61746368656420636f6e74726163747320616e64207374616b652049604482015268088e640d8cadccee8d60bb1b6064820152608401610628565b85610cb15760405162461bcd60e51b8152602060048201526015602482015274139bc818dbdb9d1c9858dd1cc81c1c9bdd9a591959605a1b6044820152606401610628565b5f5b86811015610d7357878782818110610ccd57610ccd6118b6565b9050602002016020810190610ce29190611523565b6001600160a01b031663b206c11a87878785818110610d0357610d036118b6565b9050602002810190610d1591906118ca565b6040518463ffffffff1660e01b8152600401610d3393929190611910565b5f604051808303815f87803b158015610d4a575f80fd5b505af1158015610d5c573d5f803e3d5ffd5b505050508080610d6b90611958565b915050610cb3565b50610d7e82826108d2565b50505050505050565b6060600480546104d09061171b565b335f9081526006602052604090205460ff16610dc45760405162461bcd60e51b8152600401610628906117fc565b6107b58282611147565b6005545f9060ff16610df25760405162461bcd60e51b8152600401610628906117b5565b610dfc838361117b565b9392505050565b6007546040805163040f1f6d60e11b815290515f926001600160a01b03169163081e3eda9160048083019260209291908290030181865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611970565b905060045b818110156107b557600754604051631526fe2760e01b8152600481018390525f916001600160a01b031690631526fe2790602401606060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190611987565b6001600160a01b0381165f9081526006602052604090205490935060ff169150610f2f9050576001600160a01b0381165f908152600660205260409020805460ff191660011790555b5080610f3a81611958565b915050610e73565b7f0000000000000000000000003e79130ab714e97ee73f86a56a2427bb1a5198966001600160a01b03166340c34b586040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc29190611753565b600780546001600160a01b0319166001600160a01b0392909216918217905560408051630824ea6b60e31b815290516341275358916004808201926020929091908290030181865afa15801561101a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103e9190611753565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61106861056a565b6001600160a01b0316336001600160a01b0316146110985760405162461bcd60e51b81526004016106289061176e565b6127108111156110d95760405162461bcd60e51b815260206004820152600c60248201526b6d6178696d756d203130302560a01b6044820152606401610628565b600b55565b6110eb8383836001611188565b505050565b5f336110fd85828561125b565b6111088585856112d1565b506001949350505050565b6001600160a01b03821661113c5760405163ec442f0560e01b81525f6004820152602401610628565b6107b55f838361132a565b6001600160a01b03821661117057604051634b637e8f60e11b81525f6004820152602401610628565b6107b5825f8361132a565b5f3361055e8185856112d1565b6001600160a01b0384166111b15760405163e602df0560e01b81525f6004820152602401610628565b6001600160a01b0383166111da57604051634a1406b160e11b81525f6004820152602401610628565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561125557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161124c91815260200190565b60405180910390a35b50505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981101561125557818110156112c357604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610628565b61125584848484035f611188565b6001600160a01b0383166112fa57604051634b637e8f60e11b81525f6004820152602401610628565b6001600160a01b0382166113235760405163ec442f0560e01b81525f6004820152602401610628565b6110eb8383835b6001600160a01b038316611354578060025f82825461134991906118a3565b909155506113c49050565b6001600160a01b0383165f90815260208190526040902054818110156113a65760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610628565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166113e0576002805482900390556113fe565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161144391815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561147b5785810183015185820160400152820161145f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114af575f80fd5b50565b5f80604083850312156114c3575f80fd5b82356114ce8161149b565b946020939093013593505050565b803580151581146114eb575f80fd5b919050565b5f8060408385031215611501575f80fd5b823561150c8161149b565b915061151a602084016114dc565b90509250929050565b5f60208284031215611533575f80fd5b8135610dfc8161149b565b5f805f60608486031215611550575f80fd5b833561155b8161149b565b9250602084013561156b8161149b565b929592945050506040919091013590565b5f805f6060848603121561158e575f80fd5b83356115998161149b565b95602085013595506040909401359392505050565b5f602082840312156115be575f80fd5b610dfc826114dc565b5f80604083850312156115d8575f80fd5b8235915060208301356115ea8161149b565b809150509250929050565b5f8083601f840112611605575f80fd5b50813567ffffffffffffffff81111561161c575f80fd5b6020830191508360208260051b8501011115611636575f80fd5b9250929050565b5f805f805f805f60a0888a031215611653575f80fd5b873567ffffffffffffffff8082111561166a575f80fd5b6116768b838c016115f5565b909950975060208a0135915061168b8261149b565b909550604089013590808211156116a0575f80fd5b506116ad8a828b016115f5565b9095509350506060880135915060808801356116c88161149b565b8091505092959891949750929550565b5f80604083850312156116e9575f80fd5b82356116f48161149b565b915060208301356115ea8161149b565b5f60208284031215611714575f80fd5b5035919050565b600181811c9082168061172f57607f821691505b60208210810361174d57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611763575f80fd5b8151610dfc8161149b565b60208082526027908201527f436f6e74726f6c6c6564546f6b656e3a2043616c6c6572206973206e6f74206760408201526637bb32b93737b960c91b606082015260800190565b60208082526027908201527f436f6e74726f6c6c6564546f6b656e3a205472616e73666572732061726520646040820152661a5cd8589b195960ca1b606082015260800190565b6020808252602a908201527f436f6e74726f6c6c6564546f6b656e3a2043616c6c6572206973206e6f7420776040820152691a1a5d195b1a5cdd195960b21b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761056457610564611846565b5f8261188b57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561056457610564611846565b8082018082111561056457610564611846565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126118df575f80fd5b83018035915067ffffffffffffffff8211156118f9575f80fd5b6020019150600581901b3603821315611636575f80fd5b6001600160a01b038416815260406020820181905281018290525f6001600160fb1b0383111561193e575f80fd5b8260051b8085606085013791909101606001949350505050565b5f6001820161196957611969611846565b5060010190565b5f60208284031215611980575f80fd5b5051919050565b5f805f60608486031215611999575f80fd5b835192506020840151915060408401516119b28161149b565b80915050925092509256fea264697066735822122000edc89bcc96cf856edad8d93f1e3d6d21f41b2803a445381a75e03f9290e1cb64736f6c63430008140033