Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Source Code
Overview
Max Total Supply
15,000,000 ApeUSD
Holders
107
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
ApeUSD
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
interface IApeFinance {
function mint(address minter, uint256 mintAmount)
external
returns (uint256);
function redeem(
address payable redeemer,
uint256 redeemTokens,
uint256 redeemAmount
) external returns (uint256);
function exchangeRateStored() external view returns (uint);
function balanceOf(address) external view returns (uint);
}
contract ApeUSD {
string public constant name = "ApeUSD";
string public constant symbol = "ApeUSD";
uint8 public constant decimals = 18;
IApeFinance public apefi;
address public gov;
address public nextgov;
uint public commitgov;
uint public constant delay = 1 days;
uint public liquidity;
constructor() {
gov = msg.sender;
}
modifier g() {
require(msg.sender == gov);
_;
}
function setApefi(address _apefi) external g {
require(address(apefi) == address(0), 'apefi address already set');
apefi = IApeFinance(_apefi);
}
function setGov(address _gov) external g {
nextgov = _gov;
commitgov = block.timestamp + delay;
}
function acceptGov() external {
require(msg.sender == nextgov && commitgov < block.timestamp);
gov = nextgov;
}
function balanceApeFi() public view returns (uint) {
return apefi.balanceOf(address(this));
}
function balanceUnderlying() public view returns (uint) {
uint256 _b = balanceApeFi();
if (_b > 0) {
return _b * apefi.exchangeRateStored() / 1e18;
}
return 0;
}
function _redeem(uint amount) internal {
require(apefi.redeem(payable(address(this)), 0, amount) == 0, "apefi: withdraw failed");
}
function profit() external {
uint _profit = balanceUnderlying() - liquidity;
_redeem(_profit);
_transferTokens(address(this), gov, _profit);
}
function withdraw(uint amount) external g {
liquidity -= amount;
_redeem(amount);
_burn(amount);
}
function deposit() external {
uint _amount = balances[address(this)];
allowances[address(this)][address(apefi)] = _amount;
liquidity += _amount;
require(apefi.mint(address(this), _amount) == 0, "apefi: supply failed");
}
/// @notice Total number of tokens in circulation
uint public totalSupply = 0;
mapping(address => mapping (address => uint)) internal allowances;
mapping(address => uint) internal balances;
event Transfer(address indexed from, address indexed to, uint amount);
event Approval(address indexed owner, address indexed spender, uint amount);
function mint(uint amount) external g {
// mint the amount
totalSupply += amount;
// transfer the amount to the recipient
balances[address(this)] += amount;
emit Transfer(address(0), address(this), amount);
}
function burn(uint amount) external g {
_burn(amount);
}
function _burn(uint amount) internal {
// burn the amount
totalSupply -= amount;
// transfer the amount from the recipient
balances[address(this)] -= amount;
emit Transfer(address(this), address(0), amount);
}
function allowance(address account, address spender) external view returns (uint) {
return allowances[account][spender];
}
function approve(address spender, uint amount) external returns (bool) {
allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function balanceOf(address account) external view returns (uint) {
return balances[account];
}
function transfer(address dst, uint amount) external returns (bool) {
_transferTokens(msg.sender, dst, amount);
return true;
}
function transferFrom(address src, address dst, uint amount) external returns (bool) {
address spender = msg.sender;
uint spenderAllowance = allowances[src][spender];
if (spender != src && spenderAllowance != type(uint).max) {
uint newAllowance = spenderAllowance - amount;
allowances[src][spender] = newAllowance;
emit Approval(src, spender, newAllowance);
}
_transferTokens(src, dst, amount);
return true;
}
function _transferTokens(address src, address dst, uint amount) internal {
balances[src] -= amount;
balances[dst] += amount;
emit Transfer(src, dst, amount);
}
}{
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apefi","outputs":[{"internalType":"contract IApeFinance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceApeFi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"commitgov","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"nextgov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"profit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_apefi","type":"address"}],"name":"setApefi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600060055534801561001557600080fd5b50600180546001600160a01b03191633179055610d2b806100376000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806366d16cc3116100de578063a0712d6811610097578063cfad57a211610071578063cfad57a21461031e578063d0e30db014610331578063dd62ed3e14610339578063f94e4e801461037257600080fd5b8063a0712d68146102e5578063a3c33904146102f8578063a9059cbb1461030b57600080fd5b806366d16cc31461029a5780636a42b8f8146102a257806370a08231146102ac5780637bc6729b146102d55780638da876c9146102dd57806395d89b411461017857600080fd5b80632196bcd7116101305780632196bcd71461023457806323b872dd1461023d5780632e1a7d4d14610250578063313ce5671461026557806342966c681461027f5780636586a5691461029257600080fd5b806306fdde0314610178578063095ea7b3146101b357806312d43a51146101d657806314b3c1661461020157806318160ddd146102145780631a6865021461022b575b600080fd5b61019d60405180604001604052806006815260200165105c195554d160d21b81525081565b6040516101aa9190610b11565b60405180910390f35b6101c66101c1366004610b82565b610385565b60405190151581526020016101aa565b6001546101e9906001600160a01b031681565b6040516001600160a01b0390911681526020016101aa565b6000546101e9906001600160a01b031681565b61021d60055481565b6040519081526020016101aa565b61021d60045481565b61021d60035481565b6101c661024b366004610bac565b6103f1565b61026361025e366004610be8565b6104b8565b005b61026d601281565b60405160ff90911681526020016101aa565b61026361028d366004610be8565b6104fc565b61021d610513565b610263610585565b61021d6201518081565b61021d6102ba366004610c01565b6001600160a01b031660009081526007602052604090205490565b6102636105bf565b61021d610607565b6102636102f3366004610be8565b6106b1565b610263610306366004610c01565b61073f565b6101c6610319366004610b82565b6107d6565b61026361032c366004610c01565b6107ec565b610263610831565b61021d610347366004610c23565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6002546101e9906001600160a01b031681565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103e09086815260200190565b60405180910390a350600192915050565b6001600160a01b03831660008181526006602090815260408083203380855292528220549192909190821480159061042b57506000198114155b156104a157600061043c8583610c6c565b6001600160a01b038881166000818152600660209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6104ac868686610931565b50600195945050505050565b6001546001600160a01b031633146104cf57600080fd5b80600460008282546104e19190610c6c565b909155506104f09050816109df565b6104f981610aa1565b50565b6001546001600160a01b031633146104f057600080fd5b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561055c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105809190610c83565b905090565b6000600454610592610607565b61059c9190610c6c565b90506105a7816109df565b6001546104f99030906001600160a01b031683610931565b6002546001600160a01b0316331480156105da575042600354105b6105e357600080fd5b600254600180546001600160a01b0319166001600160a01b03909216919091179055565b600080610612610513565b905080156106a9576000546040805163182df0f560e01b81529051670de0b6b3a7640000926001600160a01b03169163182df0f59160048083019260209291908290030181865afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f9190610c83565b6106999083610c9c565b6106a39190610cbb565b91505090565b600091505090565b6001546001600160a01b031633146106c857600080fd5b80600560008282546106da9190610cdd565b909155505030600090815260076020526040812080548392906106fe908490610cdd565b909155505060405181815230906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350565b6001546001600160a01b0316331461075657600080fd5b6000546001600160a01b0316156107b45760405162461bcd60e51b815260206004820152601960248201527f6170656669206164647265737320616c7265616479207365740000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006107e3338484610931565b50600192915050565b6001546001600160a01b0316331461080357600080fd5b600280546001600160a01b0319166001600160a01b03831617905561082b6201518042610cdd565b60035550565b306000908152600760209081526040808320546006835281842084546001600160a01b0316855290925282208190556004805491928392610873908490610cdd565b90915550506000546040516340c10f1960e01b8152306004820152602481018390526001600160a01b03909116906340c10f19906044016020604051808303816000875af11580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190610c83565b156104f95760405162461bcd60e51b8152602060048201526014602482015273185c19599a4e881cdd5c1c1b1e4819985a5b195960621b60448201526064016107ab565b6001600160a01b03831660009081526007602052604081208054839290610959908490610c6c565b90915550506001600160a01b03821660009081526007602052604081208054839290610986908490610cdd565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109d291815260200190565b60405180910390a3505050565b60008054604051632b83cccd60e01b81523060048201526024810192909252604482018390526001600160a01b031690632b83cccd906064016020604051808303816000875af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b9190610c83565b156104f95760405162461bcd60e51b8152602060048201526016602482015275185c19599a4e881dda5d1a191c985dc819985a5b195960521b60448201526064016107ab565b8060056000828254610ab39190610c6c565b90915550503060009081526007602052604081208054839290610ad7908490610c6c565b909155505060405181815260009030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610734565b600060208083528351808285015260005b81811015610b3e57858101830151858201604001528201610b22565b81811115610b50576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610b7d57600080fd5b919050565b60008060408385031215610b9557600080fd5b610b9e83610b66565b946020939093013593505050565b600080600060608486031215610bc157600080fd5b610bca84610b66565b9250610bd860208501610b66565b9150604084013590509250925092565b600060208284031215610bfa57600080fd5b5035919050565b600060208284031215610c1357600080fd5b610c1c82610b66565b9392505050565b60008060408385031215610c3657600080fd5b610c3f83610b66565b9150610c4d60208401610b66565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015610c7e57610c7e610c56565b500390565b600060208284031215610c9557600080fd5b5051919050565b6000816000190483118215151615610cb657610cb6610c56565b500290565b600082610cd857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115610cf057610cf0610c56565b50019056fea2646970667358221220b239d2809dad9a18fbecda72c9243e200e68cda49d5c575110f93f31f1d4fa8f64736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806366d16cc3116100de578063a0712d6811610097578063cfad57a211610071578063cfad57a21461031e578063d0e30db014610331578063dd62ed3e14610339578063f94e4e801461037257600080fd5b8063a0712d68146102e5578063a3c33904146102f8578063a9059cbb1461030b57600080fd5b806366d16cc31461029a5780636a42b8f8146102a257806370a08231146102ac5780637bc6729b146102d55780638da876c9146102dd57806395d89b411461017857600080fd5b80632196bcd7116101305780632196bcd71461023457806323b872dd1461023d5780632e1a7d4d14610250578063313ce5671461026557806342966c681461027f5780636586a5691461029257600080fd5b806306fdde0314610178578063095ea7b3146101b357806312d43a51146101d657806314b3c1661461020157806318160ddd146102145780631a6865021461022b575b600080fd5b61019d60405180604001604052806006815260200165105c195554d160d21b81525081565b6040516101aa9190610b11565b60405180910390f35b6101c66101c1366004610b82565b610385565b60405190151581526020016101aa565b6001546101e9906001600160a01b031681565b6040516001600160a01b0390911681526020016101aa565b6000546101e9906001600160a01b031681565b61021d60055481565b6040519081526020016101aa565b61021d60045481565b61021d60035481565b6101c661024b366004610bac565b6103f1565b61026361025e366004610be8565b6104b8565b005b61026d601281565b60405160ff90911681526020016101aa565b61026361028d366004610be8565b6104fc565b61021d610513565b610263610585565b61021d6201518081565b61021d6102ba366004610c01565b6001600160a01b031660009081526007602052604090205490565b6102636105bf565b61021d610607565b6102636102f3366004610be8565b6106b1565b610263610306366004610c01565b61073f565b6101c6610319366004610b82565b6107d6565b61026361032c366004610c01565b6107ec565b610263610831565b61021d610347366004610c23565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6002546101e9906001600160a01b031681565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103e09086815260200190565b60405180910390a350600192915050565b6001600160a01b03831660008181526006602090815260408083203380855292528220549192909190821480159061042b57506000198114155b156104a157600061043c8583610c6c565b6001600160a01b038881166000818152600660209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6104ac868686610931565b50600195945050505050565b6001546001600160a01b031633146104cf57600080fd5b80600460008282546104e19190610c6c565b909155506104f09050816109df565b6104f981610aa1565b50565b6001546001600160a01b031633146104f057600080fd5b600080546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561055c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105809190610c83565b905090565b6000600454610592610607565b61059c9190610c6c565b90506105a7816109df565b6001546104f99030906001600160a01b031683610931565b6002546001600160a01b0316331480156105da575042600354105b6105e357600080fd5b600254600180546001600160a01b0319166001600160a01b03909216919091179055565b600080610612610513565b905080156106a9576000546040805163182df0f560e01b81529051670de0b6b3a7640000926001600160a01b03169163182df0f59160048083019260209291908290030181865afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f9190610c83565b6106999083610c9c565b6106a39190610cbb565b91505090565b600091505090565b6001546001600160a01b031633146106c857600080fd5b80600560008282546106da9190610cdd565b909155505030600090815260076020526040812080548392906106fe908490610cdd565b909155505060405181815230906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350565b6001546001600160a01b0316331461075657600080fd5b6000546001600160a01b0316156107b45760405162461bcd60e51b815260206004820152601960248201527f6170656669206164647265737320616c7265616479207365740000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006107e3338484610931565b50600192915050565b6001546001600160a01b0316331461080357600080fd5b600280546001600160a01b0319166001600160a01b03831617905561082b6201518042610cdd565b60035550565b306000908152600760209081526040808320546006835281842084546001600160a01b0316855290925282208190556004805491928392610873908490610cdd565b90915550506000546040516340c10f1960e01b8152306004820152602481018390526001600160a01b03909116906340c10f19906044016020604051808303816000875af11580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ed9190610c83565b156104f95760405162461bcd60e51b8152602060048201526014602482015273185c19599a4e881cdd5c1c1b1e4819985a5b195960621b60448201526064016107ab565b6001600160a01b03831660009081526007602052604081208054839290610959908490610c6c565b90915550506001600160a01b03821660009081526007602052604081208054839290610986908490610cdd565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109d291815260200190565b60405180910390a3505050565b60008054604051632b83cccd60e01b81523060048201526024810192909252604482018390526001600160a01b031690632b83cccd906064016020604051808303816000875af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b9190610c83565b156104f95760405162461bcd60e51b8152602060048201526016602482015275185c19599a4e881dda5d1a191c985dc819985a5b195960521b60448201526064016107ab565b8060056000828254610ab39190610c6c565b90915550503060009081526007602052604081208054839290610ad7908490610c6c565b909155505060405181815260009030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610734565b600060208083528351808285015260005b81811015610b3e57858101830151858201604001528201610b22565b81811115610b50576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610b7d57600080fd5b919050565b60008060408385031215610b9557600080fd5b610b9e83610b66565b946020939093013593505050565b600080600060608486031215610bc157600080fd5b610bca84610b66565b9250610bd860208501610b66565b9150604084013590509250925092565b600060208284031215610bfa57600080fd5b5035919050565b600060208284031215610c1357600080fd5b610c1c82610b66565b9392505050565b60008060408385031215610c3657600080fd5b610c3f83610b66565b9150610c4d60208401610b66565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015610c7e57610c7e610c56565b500390565b600060208284031215610c9557600080fd5b5051919050565b6000816000190483118215151615610cb657610cb6610c56565b500290565b600082610cd857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115610cf057610cf0610c56565b50019056fea2646970667358221220b239d2809dad9a18fbecda72c9243e200e68cda49d5c575110f93f31f1d4fa8f64736f6c634300080b0033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)