| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| 0xc07f4925705fcbfb660fedd495cec36931a7aa3f59144c11a000209ea93cefba | Approve | (pending) | 5 days ago | IN | 0 ETH | (Pending) | |||
| Transfer | 24552175 | 8 mins ago | IN | 0 ETH | 0.0000584 | ||||
| Approve | 24552082 | 27 mins ago | IN | 0 ETH | 0.00004847 | ||||
| Approve | 24552071 | 29 mins ago | IN | 0 ETH | 0.00002522 | ||||
| Approve | 24551941 | 55 mins ago | IN | 0 ETH | 0.00000186 | ||||
| Approve | 24551925 | 1 hr ago | IN | 0 ETH | 0.00000252 | ||||
| Approve | 24551895 | 1 hr ago | IN | 0 ETH | 0.00000651 | ||||
| Approve | 24551837 | 1 hr ago | IN | 0 ETH | 0.00000348 | ||||
| Approve | 24551546 | 2 hrs ago | IN | 0 ETH | 0.00000688 | ||||
| Approve | 24551408 | 2 hrs ago | IN | 0 ETH | 0.00000788 | ||||
| Transfer | 24551352 | 2 hrs ago | IN | 0 ETH | 0.00006588 | ||||
| Transfer | 24551352 | 2 hrs ago | IN | 0 ETH | 0.00008653 | ||||
| Transfer | 24551347 | 2 hrs ago | IN | 0 ETH | 0.00006588 | ||||
| Transfer | 24551347 | 2 hrs ago | IN | 0 ETH | 0.00006588 | ||||
| Transfer | 24551143 | 3 hrs ago | IN | 0 ETH | 0.00006588 | ||||
| Approve | 24551085 | 3 hrs ago | IN | 0 ETH | 0.00000407 | ||||
| Transfer | 24551078 | 3 hrs ago | IN | 0 ETH | 0.00000589 | ||||
| Transfer | 24551044 | 3 hrs ago | IN | 0 ETH | 0.00000972 | ||||
| Approve | 24550809 | 4 hrs ago | IN | 0 ETH | 0.00000504 | ||||
| Approve | 24550767 | 4 hrs ago | IN | 0 ETH | 0.00000602 | ||||
| Approve | 24550741 | 4 hrs ago | IN | 0 ETH | 0.00004885 | ||||
| Approve | 24550715 | 5 hrs ago | IN | 0 ETH | 0.0000489 | ||||
| Approve | 24550640 | 5 hrs ago | IN | 0 ETH | 0.00000421 | ||||
| Transfer | 24550542 | 5 hrs ago | IN | 0 ETH | 0.00000376 | ||||
| Transfer | 24550540 | 5 hrs ago | IN | 0 ETH | 0.00005675 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24233915 | 44 days ago | 2.19258167 ETH | ||||
| Transfer | 24233915 | 44 days ago | 2.19258167 ETH | ||||
| Transfer | 24233914 | 44 days ago | 4.46961948 ETH | ||||
| Transfer | 24233914 | 44 days ago | 0.15364896 ETH | ||||
| Transfer | 24204507 | 48 days ago | 0.08245363 ETH | ||||
| Transfer | 23563451 | 138 days ago | 0.00024271 ETH | ||||
| Transfer | 23491400 | 148 days ago | 0.05043346 ETH | ||||
| Transfer | 22967338 | 221 days ago | 0.02615569 ETH | ||||
| Transfer | 22940482 | 225 days ago | 0.00167569 ETH | ||||
| Transfer | 22912035 | 229 days ago | 0.00467591 ETH | ||||
| Transfer | 22855552 | 237 days ago | 0.00598316 ETH | ||||
| Transfer | 22826386 | 241 days ago | 0.95432134 ETH | ||||
| Transfer | 22826386 | 241 days ago | 0.95432134 ETH | ||||
| Transfer | 22826385 | 241 days ago | 0.89282951 ETH | ||||
| Transfer | 22826385 | 241 days ago | 0.89282951 ETH | ||||
| Transfer | 22826381 | 241 days ago | 1.81226336 ETH | ||||
| Transfer | 22826381 | 241 days ago | 1.81226336 ETH | ||||
| Transfer | 22826380 | 241 days ago | 0.55388294 ETH | ||||
| Transfer | 22826380 | 241 days ago | 0.55388294 ETH | ||||
| Transfer | 22826379 | 241 days ago | 1.3145581 ETH | ||||
| Transfer | 22826379 | 241 days ago | 1.3145581 ETH | ||||
| Transfer | 22826378 | 241 days ago | 1.72699963 ETH | ||||
| Transfer | 22826378 | 241 days ago | 1.72699963 ETH | ||||
| Transfer | 22826372 | 241 days ago | 1.23842897 ETH | ||||
| Transfer | 22826372 | 241 days ago | 1.23842897 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Manyu
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-07-01
*/
/*
* SPDX-License-Identifier: MIT
* https://manyushiba.com/
* https://t.me/manyushiba
* https://x.com/ManyuShiba
*/
pragma solidity 0.8.19;
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
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);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these 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 override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override 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 value {ERC20} uses, unless this function is
* 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 override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the upd allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the upd allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the upd allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* 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.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` 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.
*/
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);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IDexFactory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract Manyu is ERC20, Ownable {
using SafeMath for uint256;
IDexRouter private immutable uniRouter;
address private immutable uniPair;
// Swapback
bool private onSwapback;
bool private contractSBEnabled = false;
uint256 private triggerSB;
uint256 private limitSB;
uint256 private lastSB;
//Anti-whale
bool private limitsEnabled = true;
uint256 private maxWalletLimit;
uint256 private maxTransactionLimit;
bool private tradingOpen = false;
// Fees
address private projectWallet;
uint256 private buyingFee;
uint256 private sellingFee;
uint256 private transferFee;
/******************/
// exclude from fees and max transaction amount
mapping(address => bool) private exemptFromFees;
mapping(address => bool) private exemptFromLimits;
mapping(address => bool) private DEXPair;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
event ExemptFromFee(address indexed account, bool isExcluded);
event ExemptFromLimit(address indexed account, bool isExcluded);
event SetPairLPool(address indexed pair, bool indexed value);
event TradingEnabled(uint256 indexed timestamp);
event LimitsRemoved(uint256 indexed timestamp);
event SwapbackSettingsUpdated(
bool enabled,
uint256 triggerSB,
uint256 limitSB
);
event MaxTxUpdated(uint256 maxTransactionLimit);
event MaxWalletUpdated(uint256 maxWalletLimit);
event MarketingWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event BuyFeeUpdated(
uint256 buyingFee,
uint256 buyMarketingTax,
uint256 buyProjectTax
);
event SellFeeUpdated(
uint256 sellingFee,
uint256 sellMarketingTax,
uint256 sellProjectTax
);
constructor() ERC20("Manyu", "MANYU") {
IDexRouter _uniRouter = IDexRouter(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
changeLimitExemptAddress(address(_uniRouter), true);
uniRouter = _uniRouter;
uniPair = IDexFactory(_uniRouter.factory()).createPair(
address(this),
_uniRouter.WETH()
);
changeLimitExemptAddress(address(uniPair), true);
_toggleDexPair(address(uniPair), true);
uint256 _totalSupply = 1_000_000_000_000_000 * 10 ** decimals();
lastSB = block.timestamp;
maxTransactionLimit = (_totalSupply * 10) / 1000;
maxWalletLimit = (_totalSupply * 10) / 1000;
triggerSB = (_totalSupply * 1) / 1000;
limitSB = (_totalSupply * 2) / 100;
buyingFee = 30;
sellingFee = 30;
transferFee = 0;
projectWallet = address(0x131Dbf30a9e3BAf253a2033Df26899e90E7F036F);
// exclude from paying fees or having max transaction amount
changeAddressFeeExempt(msg.sender, true);
changeAddressFeeExempt(address(this), true);
changeAddressFeeExempt(address(0xdead), true);
changeAddressFeeExempt(projectWallet, true);
changeLimitExemptAddress(msg.sender, true);
changeLimitExemptAddress(address(this), true);
changeLimitExemptAddress(address(0xdead), true);
changeLimitExemptAddress(projectWallet, true);
transferOwnership(msg.sender);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, _totalSupply);
}
receive() external payable {}
function decimals() public view virtual override returns (uint8) {
return 9;
}
/**
* @notice Opens public trading for the token
* @dev onlyOwner.
*/
function openTrading() external onlyOwner {
tradingOpen = true;
contractSBEnabled = true;
emit TradingEnabled(block.timestamp);
}
/**
* @notice Removes the max wallet and max transaction limits
* @dev onlyOwner.
* Emits an {LimitsRemoved} event
*/
function removeLimitsNow() external onlyOwner {
limitsEnabled = false;
transferFee = 0;
emit LimitsRemoved(block.timestamp);
}
/**
* @notice sets if swapback is enabled and sets the minimum and maximum amounts
* @dev onlyOwner.
* Emits an {SwapbackSettingsUpdated} event
* @param _caSBcEnabled If swapback is enabled
* @param _caSBcTrigger The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
* @param _caSBcLimit The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
*/
function changeValuesSwapback(
bool _caSBcEnabled,
uint256 _caSBcTrigger,
uint256 _caSBcLimit
) external onlyOwner {
require(
_caSBcTrigger >= 1,
"Swap amount cannot be lower than 0.01% total supply."
);
require(
_caSBcLimit >= _caSBcTrigger,
"maximum amount cant be higher than minimum"
);
contractSBEnabled = _caSBcEnabled;
triggerSB = (totalSupply() * _caSBcTrigger) / 10000;
limitSB = (totalSupply() * _caSBcLimit) / 10000;
emit SwapbackSettingsUpdated(_caSBcEnabled, _caSBcTrigger, _caSBcLimit);
}
/**
* @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
* @dev onlyOwner.
* Emits an {MaxTxUpdated} event
* @param _maxTransactionLimit Base 1000, so 1% = 10
*/
function maxLimitsChangeTxLimit(uint256 _maxTransactionLimit) external onlyOwner {
require(_maxTransactionLimit >= 2, "Cannot set maxTransactionLimit lower than 0.2%");
maxTransactionLimit = (_maxTransactionLimit * totalSupply()) / 1000;
emit MaxTxUpdated(maxTransactionLimit);
}
/**
* @notice Changes the maximum amount of tokens a wallet can hold
* @dev onlyOwner.
* Emits an {MaxWalletUpdated} event
* @param _maxWalletLimit Base 1000, so 1% = 10
*/
function maxLimitsChangeWalletLimit(
uint256 _maxWalletLimit
) external onlyOwner {
require(_maxWalletLimit >= 5, "Cannot set maxWalletLimit lower than 0.5%");
maxWalletLimit = (_maxWalletLimit * totalSupply()) / 1000;
emit MaxWalletUpdated(maxWalletLimit);
}
/**
* @notice Sets if a wallet is excluded from the max wallet and tx limits
* @dev onlyOwner.
* Emits an {ExemptFromLimit} event
* @param _add The wallet to update
* @param _excluded If the wallet is excluded or not
*/
function changeLimitExemptAddress(
address _add,
bool _excluded
) public onlyOwner {
exemptFromLimits[_add] = _excluded;
emit ExemptFromLimit(_add, _excluded);
}
/**
* @notice Sets the fees for buys
* @dev onlyOwner.
* Emits a {BuyFeeUpdated} event
* All fees added up must be less than 100
* @param _value The fee for the marketing wallet
*/
function changeFeeBuy(uint256 _value) external onlyOwner {
buyingFee = _value;
require(buyingFee <= 100, "Total buy fee cannot be higher than 100%");
emit BuyFeeUpdated(buyingFee, buyingFee, buyingFee);
}
/**
* @notice Sets the fees for sells
* @dev onlyOwner.
* Emits a {SellFeeUpdated} event
* All fees added up must be less than 100
* @param _value The fee for the marketing wallet
*/
function changeFeeSell(uint256 _value) external onlyOwner {
sellingFee = _value;
require(
sellingFee <= 100,
"Total sell fee cannot be higher than 100%"
);
emit SellFeeUpdated(sellingFee, sellingFee, sellingFee);
}
function changeFeeTransfer(uint256 _value) external onlyOwner {
transferFee = _value;
require(
transferFee <= 100,
"Total transfer fee cannot be higher than 100%"
);
}
/**
* @notice Sets if an address is excluded from fees
* @dev onlyOwner.
* Emits an {ExemptFromFee} event
* @param _add The wallet to update
* @param _excluded If the wallet is excluded or not
*/
function changeAddressFeeExempt(
address _add,
bool _excluded
) public onlyOwner {
exemptFromFees[_add] = _excluded;
emit ExemptFromFee(_add, _excluded);
}
function _toggleDexPair(address pair, bool value) private {
DEXPair[pair] = value;
emit SetPairLPool(pair, value);
}
/**
* @notice Sets the marketing wallet
* @dev onlyOwner.
* Emits an {MarketingWalletUpdated} event
* @param _marketing The new marketing wallet
*/
function changeMarketingReceiver(address _marketing) external onlyOwner {
emit MarketingWalletUpdated(_marketing, projectWallet);
projectWallet = _marketing;
}
/**
* @notice Information about the swapback settings
* @return _contractSBEnabled if swapback is enabled
* @return _caSBcackValueMin the minimum amount of tokens in the contract balance to trigger swapback
* @return _caSBcackValueMax the maximum amount of tokens in the contract balance to trigger swapback
*/
function readSwapbackInfo()
external
view
returns (
bool _contractSBEnabled,
uint256 _caSBcackValueMin,
uint256 _caSBcackValueMax
)
{
_contractSBEnabled = contractSBEnabled;
_caSBcackValueMin = triggerSB;
_caSBcackValueMax = limitSB;
}
/**
* @notice Information about the anti whale parameters
* @return _limitsEnabled if the wallet limits are in effect
* @return _maxWalletLimit The maximum amount of tokens that can be held by a wallet
* @return _maxTransactionLimit The maximum amount of tokens that can be bought or sold in a single transaction
*/
function readLimitInfo()
external
view
returns (bool _limitsEnabled, uint256 _maxWalletLimit, uint256 _maxTransactionLimit)
{
_limitsEnabled = limitsEnabled;
_maxWalletLimit = maxWalletLimit;
_maxTransactionLimit = maxTransactionLimit;
}
/**
* @notice The wallets that receive the collected fees
* @return _projectWallet The wallet that receives the marketing fees
*/
function readFeeReceiverAddress()
external
view
returns (address _projectWallet)
{
return (projectWallet);
}
/**
* @notice Fees for buys, sells, and transfers
* @return _buyingFee The total fee for buys
* @return _sellingFee The total fee for sells
* @return _transferFee The total fee for transfers
*/
function readFeesInfo()
external
view
returns (
uint256 _buyingFee,
uint256 _sellingFee,
uint256 _transferFee
)
{
_buyingFee = buyingFee;
_sellingFee = sellingFee;
_transferFee = transferFee;
}
/**
* @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
* @param _target The wallet to check
* @return _exemptFromFees If the wallet is excluded from fees
* @return _exemptFromLimits If the wallet is excluded from max transaction amount
* @return _DEXPair If the wallet is a automated market maker pair
*/
function readAddressInfo(
address _target
)
external
view
returns (
bool _exemptFromFees,
bool _exemptFromLimits,
bool _DEXPair
)
{
_exemptFromFees = exemptFromFees[_target];
_exemptFromLimits = exemptFromLimits[_target];
_DEXPair = DEXPair[_target];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsEnabled) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!onSwapback
) {
if (!tradingOpen) {
require(
exemptFromFees[from] || exemptFromFees[to],
"_transfer:: Trading is not active."
);
}
//when buy
if (
DEXPair[from] && !exemptFromLimits[to]
) {
require(
amount <= maxTransactionLimit,
"Buy transfer amount exceeds the maxTransactionLimit."
);
require(
amount + balanceOf(to) <= maxWalletLimit,
"Max wallet exceeded"
);
}
//when sell
else if (
DEXPair[to] && !exemptFromLimits[from]
) {
require(
amount <= maxTransactionLimit,
"Sell transfer amount exceeds the maxTransactionLimit."
);
} else if (!exemptFromLimits[to]) {
require(
amount + balanceOf(to) <= maxWalletLimit,
"Max wallet exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= triggerSB;
if (
canSwap &&
contractSBEnabled &&
!onSwapback &&
!DEXPair[from] &&
!exemptFromFees[from] &&
!exemptFromFees[to] &&
lastSB != block.timestamp
) {
onSwapback = true;
swapBack(amount);
lastSB = block.timestamp;
onSwapback = false;
}
bool takeFee = !onSwapback;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (exemptFromFees[from] || exemptFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (DEXPair[to] && sellingFee > 0) {
fees = amount.mul(sellingFee).div(100);
}
// on buy
else if (DEXPair[from] && buyingFee > 0) {
fees = amount.mul(buyingFee).div(100);
}
// on transfers
else if (
transferFee > 0 &&
!DEXPair[from] &&
!DEXPair[to]
) {
fees = amount.mul(transferFee).div(100);
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniRouter.WETH();
_approve(address(this), address(uniRouter), tokenAmount);
// make the swap
uniRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function swapBack(uint256 amount) private {
uint256 contractBalance = balanceOf(address(this));
bool success;
if (contractBalance == 0) {
return;
}
if (contractBalance > limitSB) {
contractBalance = limitSB;
}
if (contractBalance > amount * 15) {
contractBalance = amount * 15;
}
uint256 amountToSwapForETH = contractBalance;
swapTokensForEth(amountToSwapForETH);
(success, ) = address(projectWallet).call{
value: address(this).balance
}("");
}
}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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExemptFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExemptFromLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionLimit","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"MaxWalletUpdated","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":false,"internalType":"uint256","name":"sellingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPairLPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"triggerSB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"limitSB","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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":"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":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"changeAddressFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"changeFeeBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"changeFeeSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"changeFeeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"changeLimitExemptAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"name":"changeMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_caSBcEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcTrigger","type":"uint256"},{"internalType":"uint256","name":"_caSBcLimit","type":"uint256"}],"name":"changeValuesSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionLimit","type":"uint256"}],"name":"maxLimitsChangeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletLimit","type":"uint256"}],"name":"maxLimitsChangeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"readAddressInfo","outputs":[{"internalType":"bool","name":"_exemptFromFees","type":"bool"},{"internalType":"bool","name":"_exemptFromLimits","type":"bool"},{"internalType":"bool","name":"_DEXPair","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readFeeReceiverAddress","outputs":[{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readFeesInfo","outputs":[{"internalType":"uint256","name":"_buyingFee","type":"uint256"},{"internalType":"uint256","name":"_sellingFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readLimitInfo","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWalletLimit","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readSwapbackInfo","outputs":[{"internalType":"bool","name":"_contractSBEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcackValueMin","type":"uint256"},{"internalType":"uint256","name":"_caSBcackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitsNow","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526005805460ff60a81b191690556009805460ff19908116600117909155600c805490911690553480156200003757600080fd5b50604051806040016040528060058152602001644d616e797560d81b815250604051806040016040528060058152602001644d414e595560d81b81525081600390816200008591906200082a565b5060046200009482826200082a565b505050620000b1620000ab620003df60201b60201c565b620003e3565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000d381600162000435565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200011e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001449190620008f6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b89190620008f6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c9190620008f6565b6001600160a01b031660a08190526200024790600162000435565b60a05162000257906001620004e4565b6000620002676009600a62000a3d565b6200027a9066038d7ea4c6800062000a4e565b4260085590506103e86200029082600a62000a4e565b6200029c919062000a68565b600b556103e8620002af82600a62000a4e565b620002bb919062000a68565b600a556103e8620002ce82600162000a4e565b620002da919062000a68565b6006556064620002ec82600262000a4e565b620002f8919062000a68565b600755601e600d819055600e556000600f55600c8054610100600160a81b03191674131dbf30a9e3baf253a2033df26899e90e7f036f001790556200033f33600162000538565b6200034c30600162000538565b6200035b61dead600162000538565b600c54620003799061010090046001600160a01b0316600162000538565b6200038633600162000435565b6200039330600162000435565b620003a261dead600162000435565b600c54620003c09061010090046001600160a01b0316600162000435565b620003cb33620005dc565b620003d733826200069c565b505062000aa1565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004845760405162461bcd60e51b8152602060048201819052602482015260008051602062002c4283398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f3844f59dd909a5abfe5fa6d8f12dfa6424a8b2b595372782bc0ff76cf27fc52791015b60405180910390a25050565b6001600160a01b038216600081815260126020526040808220805460ff191685151590811790915590519092917fe0f0eeda3b1247853e2a825aa40eb65c3b08879740f68ff00df4745b6bb075b291a35050565b6005546001600160a01b03163314620005835760405162461bcd60e51b8152602060048201819052602482015260008051602062002c4283398151915260448201526064016200047b565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f06e9674d1df780f28d6fccac66198e06ae257bd747ef07af7ecb217f7166a2ed9101620004d8565b6005546001600160a01b03163314620006275760405162461bcd60e51b8152602060048201819052602482015260008051602062002c4283398151915260448201526064016200047b565b6001600160a01b0381166200068e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200047b565b6200069981620003e3565b50565b6001600160a01b038216620006f45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200047b565b806002600082825462000708919062000a8b565b90915550506001600160a01b038216600090815260208190526040812080548392906200073790849062000a8b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007b157607f821691505b602082108103620007d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200078157600081815260208120601f850160051c81016020861015620008015750805b601f850160051c820191505b8181101562000822578281556001016200080d565b505050505050565b81516001600160401b0381111562000846576200084662000786565b6200085e816200085784546200079c565b84620007d8565b602080601f8311600181146200089657600084156200087d5750858301515b600019600386901b1c1916600185901b17855562000822565b600085815260208120601f198616915b82811015620008c757888601518255948401946001909101908401620008a6565b5085821015620008e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090957600080fd5b81516001600160a01b03811681146200092157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200097f57816000190482111562000963576200096362000928565b808516156200097157918102915b93841c939080029062000943565b509250929050565b600082620009985750600162000a37565b81620009a75750600062000a37565b8160018114620009c05760028114620009cb57620009eb565b600191505062000a37565b60ff841115620009df57620009df62000928565b50506001821b62000a37565b5060208310610133831016604e8410600b841016171562000a10575081810a62000a37565b62000a1c83836200093e565b806000190482111562000a335762000a3362000928565b0290505b92915050565b60006200092160ff84168362000987565b808202811582820484141762000a375762000a3762000928565b60008262000a8657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a375762000a3762000928565b60805160a05161217062000ad26000396000505060008181611c0501528181611cbe0152611cfa01526121706000f3fe6080604052600436106101d05760003560e01c806377baae14116100f7578063a961217611610095578063c97b4cfb11610064578063c97b4cfb14610565578063dd62ed3e14610585578063f2fde38b146105cb578063f6f6d95d146105eb57600080fd5b8063a9612176146104f0578063b9ca7baa14610510578063bcc88aa714610530578063c9567bf91461055057600080fd5b806392057a38116100d157806392057a381461046a57806395d89b411461049b578063a457c2d7146104b0578063a9059cbb146104d057600080fd5b806377baae14146104055780637a942f8e1461042c5780638da5cb5b1461044c57600080fd5b8063313ce5671161016f578063715018a61161013e578063715018a61461036a5780637173163e1461037f57806373387d14146103945780637729629d146103ce57600080fd5b8063313ce567146102d857806339509351146102f45780635dfb6bdb1461031457806370a082311461033457600080fd5b8063095ea7b3116101ab578063095ea7b31461024957806309cf7c701461027957806318160ddd1461029957806323b872dd146102b857600080fd5b8062420c6f146101dc57806303761d75146101fe57806306fdde031461021e57600080fd5b366101d757005b600080fd5b3480156101e857600080fd5b506101fc6101f7366004611d83565b61065e565b005b34801561020a57600080fd5b506101fc610219366004611db6565b610805565b34801561022a57600080fd5b506102336108ee565b6040516102409190611dcf565b60405180910390f35b34801561025557600080fd5b50610269610264366004611e32565b610980565b6040519015158152602001610240565b34801561028557600080fd5b506101fc610294366004611db6565b610997565b3480156102a557600080fd5b506002545b604051908152602001610240565b3480156102c457600080fd5b506102696102d3366004611e5e565b610a6b565b3480156102e457600080fd5b5060405160098152602001610240565b34801561030057600080fd5b5061026961030f366004611e32565b610b15565b34801561032057600080fd5b506101fc61032f366004611e9f565b610b51565b34801561034057600080fd5b506102aa61034f366004611e9f565b6001600160a01b031660009081526020819052604090205490565b34801561037657600080fd5b506101fc610be3565b34801561038b57600080fd5b506101fc610c19565b3480156103a057600080fd5b50600954600a54600b5460ff909216915b604080519315158452602084019290925290820152606001610240565b3480156103da57600080fd5b50600c5461010090046001600160a01b03165b6040516001600160a01b039091168152602001610240565b34801561041157600080fd5b50600554600654600754600160a81b90920460ff16916103b1565b34801561043857600080fd5b506101fc610447366004611db6565b610c7e565b34801561045857600080fd5b506005546001600160a01b03166103ed565b34801561047657600080fd5b50600d54600e54600f5460408051938452602084019290925290820152606001610240565b3480156104a757600080fd5b50610233610d51565b3480156104bc57600080fd5b506102696104cb366004611e32565b610d60565b3480156104dc57600080fd5b506102696104eb366004611e32565b610df9565b3480156104fc57600080fd5b506101fc61050b366004611db6565b610e06565b34801561051c57600080fd5b506101fc61052b366004611ebc565b610e9f565b34801561053c57600080fd5b506101fc61054b366004611ebc565b610f29565b34801561055c57600080fd5b506101fc610fab565b34801561057157600080fd5b506101fc610580366004611db6565b611022565b34801561059157600080fd5b506102aa6105a0366004611ef1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105d757600080fd5b506101fc6105e6366004611e9f565b611109565b3480156105f757600080fd5b5061063f610606366004611e9f565b6001600160a01b03166000908152601060209081526040808320546011835281842054601290935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610240565b6005546001600160a01b031633146106915760405162461bcd60e51b815260040161068890611f2a565b60405180910390fd5b60018210156106ff5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610688565b818110156107625760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610688565b6005805460ff60a81b1916600160a81b8515150217905560025461271090839061078c9190611f75565b6107969190611f8c565b600655612710816107a660025490565b6107b09190611f75565b6107ba9190611f8c565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b0316331461082f5760405162461bcd60e51b815260040161068890611f2a565b60058110156108925760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f776572206044820152687468616e20302e352560b81b6064820152608401610688565b6103e861089e60025490565b6108a89083611f75565b6108b29190611f8c565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020015b60405180910390a150565b6060600380546108fd90611fae565b80601f016020809104026020016040519081016040528092919081815260200182805461092990611fae565b80156109765780601f1061094b57610100808354040283529160200191610976565b820191906000526020600020905b81548152906001019060200180831161095957829003601f168201915b5050505050905090565b600061098d3384846111a1565b5060015b92915050565b6005546001600160a01b031633146109c15760405162461bcd60e51b815260040161068890611f2a565b600e8190556064811115610a295760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610688565b600e546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060016108e3565b6000610a788484846112c5565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610afd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610688565b610b0a85338584036111a1565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161098d918590610b4c908690611fe8565b6111a1565b6005546001600160a01b03163314610b7b5760405162461bcd60e51b815260040161068890611f2a565b600c546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610c0d5760405162461bcd60e51b815260040161068890611f2a565b610c176000611940565b565b6005546001600160a01b03163314610c435760405162461bcd60e51b815260040161068890611f2a565b6009805460ff191690556000600f81905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6005546001600160a01b03163314610ca85760405162461bcd60e51b815260040161068890611f2a565b600d8190556064811115610d0f5760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610688565b600d546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e906060016108e3565b6060600480546108fd90611fae565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610688565b610def33858584036111a1565b5060019392505050565b600061098d3384846112c5565b6005546001600160a01b03163314610e305760405162461bcd60e51b815260040161068890611f2a565b600f8190556064811115610e9c5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b6064820152608401610688565b50565b6005546001600160a01b03163314610ec95760405162461bcd60e51b815260040161068890611f2a565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f3844f59dd909a5abfe5fa6d8f12dfa6424a8b2b595372782bc0ff76cf27fc52791015b60405180910390a25050565b6005546001600160a01b03163314610f535760405162461bcd60e51b815260040161068890611f2a565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f06e9674d1df780f28d6fccac66198e06ae257bd747ef07af7ecb217f7166a2ed9101610f1d565b6005546001600160a01b03163314610fd55760405162461bcd60e51b815260040161068890611f2a565b600c805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b0316331461104c5760405162461bcd60e51b815260040161068890611f2a565b60028110156110b45760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e4c696d6974206c60448201526d6f776572207468616e20302e322560901b6064820152608401610688565b6103e86110c060025490565b6110ca9083611f75565b6110d49190611f8c565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020016108e3565b6005546001600160a01b031633146111335760405162461bcd60e51b815260040161068890611f2a565b6001600160a01b0381166111985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610688565b610e9c81611940565b6001600160a01b0383166112035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610688565b6001600160a01b0382166112645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610688565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112eb5760405162461bcd60e51b815260040161068890611ffb565b6001600160a01b0382166113115760405162461bcd60e51b815260040161068890612040565b8060000361132a5761132583836000611992565b505050565b60095460ff16156116ab576005546001600160a01b0384811691161480159061136157506005546001600160a01b03838116911614155b801561137557506001600160a01b03821615155b801561138c57506001600160a01b03821661dead14155b80156113a25750600554600160a01b900460ff16155b156116ab57600c5460ff16611447576001600160a01b03831660009081526010602052604090205460ff16806113f057506001600160a01b03821660009081526010602052604090205460ff165b6114475760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610688565b6001600160a01b03831660009081526012602052604090205460ff16801561148857506001600160a01b03821660009081526011602052604090205460ff16155b1561156b57600b548111156114fc5760405162461bcd60e51b815260206004820152603460248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527336b0bc2a3930b739b0b1ba34b7b72634b6b4ba1760611b6064820152608401610688565b600a546001600160a01b0383166000908152602081905260409020546115229083611fe8565b11156115665760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610688565b6116ab565b6001600160a01b03821660009081526012602052604090205460ff1680156115ac57506001600160a01b03831660009081526011602052604090205460ff16155b1561162157600b548111156115665760405162461bcd60e51b815260206004820152603560248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152741036b0bc2a3930b739b0b1ba34b7b72634b6b4ba1760591b6064820152608401610688565b6001600160a01b03821660009081526011602052604090205460ff166116ab57600a546001600160a01b0383166000908152602081905260409020546116679083611fe8565b11156116ab5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610688565b30600090815260208190526040902054600654811080159081906116d85750600554600160a81b900460ff165b80156116ee5750600554600160a01b900460ff16155b801561171357506001600160a01b03851660009081526012602052604090205460ff16155b801561173857506001600160a01b03851660009081526010602052604090205460ff16155b801561175d57506001600160a01b03841660009081526010602052604090205460ff16155b801561176b57504260085414155b1561179e576005805460ff60a01b1916600160a01b17905561178c83611ae7565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526010602052604090205460ff600160a01b9092048216159116806117ec57506001600160a01b03851660009081526010602052604090205460ff165b156117f5575060005b6000811561192c576001600160a01b03861660009081526012602052604090205460ff16801561182757506000600e54115b156118535761184c6064611846600e5488611b8f90919063ffffffff16565b90611ba2565b905061190e565b6001600160a01b03871660009081526012602052604090205460ff16801561187d57506000600d54115b1561189c5761184c6064611846600d5488611b8f90919063ffffffff16565b6000600f541180156118c757506001600160a01b03871660009081526012602052604090205460ff16155b80156118ec57506001600160a01b03861660009081526012602052604090205460ff16155b1561190e5761190b6064611846600f5488611b8f90919063ffffffff16565b90505b801561191f5761191f873083611992565b6119298186612083565b94505b611937878787611992565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166119b85760405162461bcd60e51b815260040161068890611ffb565b6001600160a01b0382166119de5760405162461bcd60e51b815260040161068890612040565b6001600160a01b03831660009081526020819052604090205481811015611a565760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610688565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611a8d908490611fe8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ad991815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611b0457505050565b600754821115611b145760075491505b611b1f83600f611f75565b821115611b3457611b3183600f611f75565b91505b81611b3e81611bae565b600c546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611937576040519150601f19603f3d011682016040523d82523d6000602084013e611937565b6000611b9b8284611f75565b9392505050565b6000611b9b8284611f8c565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611be357611be3612096565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8591906120ac565b81600181518110611c9857611c98612096565b60200260200101906001600160a01b031690816001600160a01b031681525050611ce3307f0000000000000000000000000000000000000000000000000000000000000000846111a1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611d389085906000908690309042906004016120c9565b600060405180830381600087803b158015611d5257600080fd5b505af1158015611d66573d6000803e3d6000fd5b505050505050565b80358015158114611d7e57600080fd5b919050565b600080600060608486031215611d9857600080fd5b611da184611d6e565b95602085013595506040909401359392505050565b600060208284031215611dc857600080fd5b5035919050565b600060208083528351808285015260005b81811015611dfc57858101830151858201604001528201611de0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e9c57600080fd5b60008060408385031215611e4557600080fd5b8235611e5081611e1d565b946020939093013593505050565b600080600060608486031215611e7357600080fd5b8335611e7e81611e1d565b92506020840135611e8e81611e1d565b929592945050506040919091013590565b600060208284031215611eb157600080fd5b8135611b9b81611e1d565b60008060408385031215611ecf57600080fd5b8235611eda81611e1d565b9150611ee860208401611d6e565b90509250929050565b60008060408385031215611f0457600080fd5b8235611f0f81611e1d565b91506020830135611f1f81611e1d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761099157610991611f5f565b600082611fa957634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680611fc257607f821691505b602082108103611fe257634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561099157610991611f5f565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561099157610991611f5f565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156120be57600080fd5b8151611b9b81611e1d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121195784516001600160a01b0316835293830193918301916001016120f4565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220eaf6d46746434a612a4dbf644b2b3a07111ca1377f211913a56b685b337b028764736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106101d05760003560e01c806377baae14116100f7578063a961217611610095578063c97b4cfb11610064578063c97b4cfb14610565578063dd62ed3e14610585578063f2fde38b146105cb578063f6f6d95d146105eb57600080fd5b8063a9612176146104f0578063b9ca7baa14610510578063bcc88aa714610530578063c9567bf91461055057600080fd5b806392057a38116100d157806392057a381461046a57806395d89b411461049b578063a457c2d7146104b0578063a9059cbb146104d057600080fd5b806377baae14146104055780637a942f8e1461042c5780638da5cb5b1461044c57600080fd5b8063313ce5671161016f578063715018a61161013e578063715018a61461036a5780637173163e1461037f57806373387d14146103945780637729629d146103ce57600080fd5b8063313ce567146102d857806339509351146102f45780635dfb6bdb1461031457806370a082311461033457600080fd5b8063095ea7b3116101ab578063095ea7b31461024957806309cf7c701461027957806318160ddd1461029957806323b872dd146102b857600080fd5b8062420c6f146101dc57806303761d75146101fe57806306fdde031461021e57600080fd5b366101d757005b600080fd5b3480156101e857600080fd5b506101fc6101f7366004611d83565b61065e565b005b34801561020a57600080fd5b506101fc610219366004611db6565b610805565b34801561022a57600080fd5b506102336108ee565b6040516102409190611dcf565b60405180910390f35b34801561025557600080fd5b50610269610264366004611e32565b610980565b6040519015158152602001610240565b34801561028557600080fd5b506101fc610294366004611db6565b610997565b3480156102a557600080fd5b506002545b604051908152602001610240565b3480156102c457600080fd5b506102696102d3366004611e5e565b610a6b565b3480156102e457600080fd5b5060405160098152602001610240565b34801561030057600080fd5b5061026961030f366004611e32565b610b15565b34801561032057600080fd5b506101fc61032f366004611e9f565b610b51565b34801561034057600080fd5b506102aa61034f366004611e9f565b6001600160a01b031660009081526020819052604090205490565b34801561037657600080fd5b506101fc610be3565b34801561038b57600080fd5b506101fc610c19565b3480156103a057600080fd5b50600954600a54600b5460ff909216915b604080519315158452602084019290925290820152606001610240565b3480156103da57600080fd5b50600c5461010090046001600160a01b03165b6040516001600160a01b039091168152602001610240565b34801561041157600080fd5b50600554600654600754600160a81b90920460ff16916103b1565b34801561043857600080fd5b506101fc610447366004611db6565b610c7e565b34801561045857600080fd5b506005546001600160a01b03166103ed565b34801561047657600080fd5b50600d54600e54600f5460408051938452602084019290925290820152606001610240565b3480156104a757600080fd5b50610233610d51565b3480156104bc57600080fd5b506102696104cb366004611e32565b610d60565b3480156104dc57600080fd5b506102696104eb366004611e32565b610df9565b3480156104fc57600080fd5b506101fc61050b366004611db6565b610e06565b34801561051c57600080fd5b506101fc61052b366004611ebc565b610e9f565b34801561053c57600080fd5b506101fc61054b366004611ebc565b610f29565b34801561055c57600080fd5b506101fc610fab565b34801561057157600080fd5b506101fc610580366004611db6565b611022565b34801561059157600080fd5b506102aa6105a0366004611ef1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105d757600080fd5b506101fc6105e6366004611e9f565b611109565b3480156105f757600080fd5b5061063f610606366004611e9f565b6001600160a01b03166000908152601060209081526040808320546011835281842054601290935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610240565b6005546001600160a01b031633146106915760405162461bcd60e51b815260040161068890611f2a565b60405180910390fd5b60018210156106ff5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610688565b818110156107625760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610688565b6005805460ff60a81b1916600160a81b8515150217905560025461271090839061078c9190611f75565b6107969190611f8c565b600655612710816107a660025490565b6107b09190611f75565b6107ba9190611f8c565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b0316331461082f5760405162461bcd60e51b815260040161068890611f2a565b60058110156108925760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d617857616c6c65744c696d6974206c6f776572206044820152687468616e20302e352560b81b6064820152608401610688565b6103e861089e60025490565b6108a89083611f75565b6108b29190611f8c565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020015b60405180910390a150565b6060600380546108fd90611fae565b80601f016020809104026020016040519081016040528092919081815260200182805461092990611fae565b80156109765780601f1061094b57610100808354040283529160200191610976565b820191906000526020600020905b81548152906001019060200180831161095957829003601f168201915b5050505050905090565b600061098d3384846111a1565b5060015b92915050565b6005546001600160a01b031633146109c15760405162461bcd60e51b815260040161068890611f2a565b600e8190556064811115610a295760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610688565b600e546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060016108e3565b6000610a788484846112c5565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610afd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610688565b610b0a85338584036111a1565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161098d918590610b4c908690611fe8565b6111a1565b6005546001600160a01b03163314610b7b5760405162461bcd60e51b815260040161068890611f2a565b600c546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b03163314610c0d5760405162461bcd60e51b815260040161068890611f2a565b610c176000611940565b565b6005546001600160a01b03163314610c435760405162461bcd60e51b815260040161068890611f2a565b6009805460ff191690556000600f81905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6005546001600160a01b03163314610ca85760405162461bcd60e51b815260040161068890611f2a565b600d8190556064811115610d0f5760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610688565b600d546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e906060016108e3565b6060600480546108fd90611fae565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610688565b610def33858584036111a1565b5060019392505050565b600061098d3384846112c5565b6005546001600160a01b03163314610e305760405162461bcd60e51b815260040161068890611f2a565b600f8190556064811115610e9c5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b6064820152608401610688565b50565b6005546001600160a01b03163314610ec95760405162461bcd60e51b815260040161068890611f2a565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f3844f59dd909a5abfe5fa6d8f12dfa6424a8b2b595372782bc0ff76cf27fc52791015b60405180910390a25050565b6005546001600160a01b03163314610f535760405162461bcd60e51b815260040161068890611f2a565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f06e9674d1df780f28d6fccac66198e06ae257bd747ef07af7ecb217f7166a2ed9101610f1d565b6005546001600160a01b03163314610fd55760405162461bcd60e51b815260040161068890611f2a565b600c805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b0316331461104c5760405162461bcd60e51b815260040161068890611f2a565b60028110156110b45760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e4c696d6974206c60448201526d6f776572207468616e20302e322560901b6064820152608401610688565b6103e86110c060025490565b6110ca9083611f75565b6110d49190611f8c565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020016108e3565b6005546001600160a01b031633146111335760405162461bcd60e51b815260040161068890611f2a565b6001600160a01b0381166111985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610688565b610e9c81611940565b6001600160a01b0383166112035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610688565b6001600160a01b0382166112645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610688565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112eb5760405162461bcd60e51b815260040161068890611ffb565b6001600160a01b0382166113115760405162461bcd60e51b815260040161068890612040565b8060000361132a5761132583836000611992565b505050565b60095460ff16156116ab576005546001600160a01b0384811691161480159061136157506005546001600160a01b03838116911614155b801561137557506001600160a01b03821615155b801561138c57506001600160a01b03821661dead14155b80156113a25750600554600160a01b900460ff16155b156116ab57600c5460ff16611447576001600160a01b03831660009081526010602052604090205460ff16806113f057506001600160a01b03821660009081526010602052604090205460ff165b6114475760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610688565b6001600160a01b03831660009081526012602052604090205460ff16801561148857506001600160a01b03821660009081526011602052604090205460ff16155b1561156b57600b548111156114fc5760405162461bcd60e51b815260206004820152603460248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527336b0bc2a3930b739b0b1ba34b7b72634b6b4ba1760611b6064820152608401610688565b600a546001600160a01b0383166000908152602081905260409020546115229083611fe8565b11156115665760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610688565b6116ab565b6001600160a01b03821660009081526012602052604090205460ff1680156115ac57506001600160a01b03831660009081526011602052604090205460ff16155b1561162157600b548111156115665760405162461bcd60e51b815260206004820152603560248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152741036b0bc2a3930b739b0b1ba34b7b72634b6b4ba1760591b6064820152608401610688565b6001600160a01b03821660009081526011602052604090205460ff166116ab57600a546001600160a01b0383166000908152602081905260409020546116679083611fe8565b11156116ab5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610688565b30600090815260208190526040902054600654811080159081906116d85750600554600160a81b900460ff165b80156116ee5750600554600160a01b900460ff16155b801561171357506001600160a01b03851660009081526012602052604090205460ff16155b801561173857506001600160a01b03851660009081526010602052604090205460ff16155b801561175d57506001600160a01b03841660009081526010602052604090205460ff16155b801561176b57504260085414155b1561179e576005805460ff60a01b1916600160a01b17905561178c83611ae7565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526010602052604090205460ff600160a01b9092048216159116806117ec57506001600160a01b03851660009081526010602052604090205460ff165b156117f5575060005b6000811561192c576001600160a01b03861660009081526012602052604090205460ff16801561182757506000600e54115b156118535761184c6064611846600e5488611b8f90919063ffffffff16565b90611ba2565b905061190e565b6001600160a01b03871660009081526012602052604090205460ff16801561187d57506000600d54115b1561189c5761184c6064611846600d5488611b8f90919063ffffffff16565b6000600f541180156118c757506001600160a01b03871660009081526012602052604090205460ff16155b80156118ec57506001600160a01b03861660009081526012602052604090205460ff16155b1561190e5761190b6064611846600f5488611b8f90919063ffffffff16565b90505b801561191f5761191f873083611992565b6119298186612083565b94505b611937878787611992565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166119b85760405162461bcd60e51b815260040161068890611ffb565b6001600160a01b0382166119de5760405162461bcd60e51b815260040161068890612040565b6001600160a01b03831660009081526020819052604090205481811015611a565760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610688565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611a8d908490611fe8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ad991815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611b0457505050565b600754821115611b145760075491505b611b1f83600f611f75565b821115611b3457611b3183600f611f75565b91505b81611b3e81611bae565b600c546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611937576040519150601f19603f3d011682016040523d82523d6000602084013e611937565b6000611b9b8284611f75565b9392505050565b6000611b9b8284611f8c565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611be357611be3612096565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8591906120ac565b81600181518110611c9857611c98612096565b60200260200101906001600160a01b031690816001600160a01b031681525050611ce3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111a1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611d389085906000908690309042906004016120c9565b600060405180830381600087803b158015611d5257600080fd5b505af1158015611d66573d6000803e3d6000fd5b505050505050565b80358015158114611d7e57600080fd5b919050565b600080600060608486031215611d9857600080fd5b611da184611d6e565b95602085013595506040909401359392505050565b600060208284031215611dc857600080fd5b5035919050565b600060208083528351808285015260005b81811015611dfc57858101830151858201604001528201611de0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e9c57600080fd5b60008060408385031215611e4557600080fd5b8235611e5081611e1d565b946020939093013593505050565b600080600060608486031215611e7357600080fd5b8335611e7e81611e1d565b92506020840135611e8e81611e1d565b929592945050506040919091013590565b600060208284031215611eb157600080fd5b8135611b9b81611e1d565b60008060408385031215611ecf57600080fd5b8235611eda81611e1d565b9150611ee860208401611d6e565b90509250929050565b60008060408385031215611f0457600080fd5b8235611f0f81611e1d565b91506020830135611f1f81611e1d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761099157610991611f5f565b600082611fa957634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680611fc257607f821691505b602082108103611fe257634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561099157610991611f5f565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561099157610991611f5f565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156120be57600080fd5b8151611b9b81611e1d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121195784516001600160a01b0316835293830193918301916001016120f4565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220eaf6d46746434a612a4dbf644b2b3a07111ca1377f211913a56b685b337b028764736f6c63430008130033
Deployed Bytecode Sourcemap
25407:17202:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30342:665;;;;;;;;;;-1:-1:-1;30342:665:0;;;;;:::i;:::-;;:::i;:::-;;31784:305;;;;;;;;;;-1:-1:-1;31784:305:0;;;;;:::i;:::-;;:::i;11005:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13238:194;;;;;;;;;;-1:-1:-1;13238:194:0;;;;;:::i;:::-;;:::i;:::-;;;1859:14:1;;1852:22;1834:41;;1822:2;1807:18;13238:194:0;1694:187:1;33263:281:0;;;;;;;;;;-1:-1:-1;33263:281:0;;;;;:::i;:::-;;:::i;12125:108::-;;;;;;;;;;-1:-1:-1;12213:12:0;;12125:108;;;2032:25:1;;;2020:2;2005:18;12125:108:0;1886:177:1;13910:529:0;;;;;;;;;;-1:-1:-1;13910:529:0;;;;;:::i;:::-;;:::i;29184:92::-;;;;;;;;;;-1:-1:-1;29184:92:0;;29267:1;2671:36:1;;2659:2;2644:18;29184:92:0;2529:184:1;14844:290:0;;;;;;;;;;-1:-1:-1;14844:290:0;;;;;:::i;:::-;;:::i;34563:182::-;;;;;;;;;;-1:-1:-1;34563:182:0;;;;;:::i;:::-;;:::i;12296:143::-;;;;;;;;;;-1:-1:-1;12296:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12413:18:0;12386:7;12413:18;;;;;;;;;;;;12296:143;22344:103;;;;;;;;;;;;;:::i;29698:158::-;;;;;;;;;;;;;:::i;35821:301::-;;;;;;;;;;-1:-1:-1;36005:13:0;;36047:14;;36095:19;;36005:13;;;;;35821:301;;;;3191:14:1;;3184:22;3166:41;;3238:2;3223:18;;3216:34;;;;3266:18;;;3259:34;3154:2;3139:18;35821:301:0;2970:329:1;36283:154:0;;;;;;;;;;-1:-1:-1;36415:13:0;;;;;-1:-1:-1;;;;;36415:13:0;36283:154;;;-1:-1:-1;;;;;3468:32:1;;;3450:51;;3438:2;3423:18;36283:154:0;3304:203:1;35108:347:0;;;;;;;;;;-1:-1:-1;35352:17:0;;35400:9;;35440:7;;-1:-1:-1;;;35352:17:0;;;;;;35108:347;;32795:236;;;;;;;;;;-1:-1:-1;32795:236:0;;;;;:::i;:::-;;:::i;21693:87::-;;;;;;;;;;-1:-1:-1;21766:6:0;;-1:-1:-1;;;;;21766:6:0;21693:87;;36674:305;;;;;;;;;;-1:-1:-1;36890:9:0;;36924:10;;36960:11;;36674:305;;;3714:25:1;;;3770:2;3755:18;;3748:34;;;;3798:18;;;3791:34;3702:2;3687:18;36674:305:0;3512:319:1;11224:104:0;;;;;;;;;;;;;:::i;15633:475::-;;;;;;;;;;-1:-1:-1;15633:475:0;;;;;:::i;:::-;;:::i;12652:200::-;;;;;;;;;;-1:-1:-1;12652:200:0;;;;;:::i;:::-;;:::i;33552:225::-;;;;;;;;;;-1:-1:-1;33552:225:0;;;;;:::i;:::-;;:::i;32358:207::-;;;;;;;;;;-1:-1:-1;32358:207:0;;;;;:::i;:::-;;:::i;34022:201::-;;;;;;;;;;-1:-1:-1;34022:201:0;;;;;:::i;:::-;;:::i;29382:161::-;;;;;;;;;;;;;:::i;31257:311::-;;;;;;;;;;-1:-1:-1;31257:311:0;;;;;:::i;:::-;;:::i;12915:176::-;;;;;;;;;;-1:-1:-1;12915:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13056:18:0;;;13029:7;13056:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12915:176;22602:238;;;;;;;;;;-1:-1:-1;22602:238:0;;;;;:::i;:::-;;:::i;37415:378::-;;;;;;;;;;-1:-1:-1;37415:378:0;;;;;:::i;:::-;-1:-1:-1;;;;;37668:23:0;37537:20;37668:23;;;:14;:23;;;;;;;;;37722:16;:25;;;;;;37769:7;:16;;;;;;37668:23;;;;;37722:25;;;;37769:16;;37415:378;;;;;4758:14:1;;4751:22;4733:41;;4817:14;;4810:22;4805:2;4790:18;;4783:50;4876:14;4869:22;4849:18;;;4842:50;4721:2;4706:18;37415:378:0;4549:349:1;30342:665:0;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;;;;;;;;;30539:1:::1;30522:13;:18;;30500:120;;;::::0;-1:-1:-1;;;30500:120:0;;5466:2:1;30500:120:0::1;::::0;::::1;5448:21:1::0;5505:2;5485:18;;;5478:30;5544:34;5524:18;;;5517:62;-1:-1:-1;;;5595:18:1;;;5588:50;5655:19;;30500:120:0::1;5264:416:1::0;30500:120:0::1;30668:13;30653:11;:28;;30631:120;;;::::0;-1:-1:-1;;;30631:120:0;;5887:2:1;30631:120:0::1;::::0;::::1;5869:21:1::0;5926:2;5906:18;;;5899:30;5965:34;5945:18;;;5938:62;-1:-1:-1;;;6016:18:1;;;6009:40;6066:19;;30631:120:0::1;5685:406:1::0;30631:120:0::1;30764:17;:33:::0;;-1:-1:-1;;;;30764:33:0::1;-1:-1:-1::0;;;30764:33:0;::::1;;;;::::0;;12213:12;;30854:5:::1;::::0;30837:13;;30821:29:::1;;;;:::i;:::-;30820:39;;;;:::i;:::-;30808:9;:51:::0;30912:5:::1;30897:11:::0;30881:13:::1;12213:12:::0;;;12125:108;30881:13:::1;:27;;;;:::i;:::-;30880:37;;;;:::i;:::-;30870:7;:47:::0;30933:66:::1;::::0;;3191:14:1;;3184:22;3166:41;;3238:2;3223:18;;3216:34;;;3266:18;;;3259:34;;;30933:66:0::1;::::0;3154:2:1;3139:18;30933:66:0::1;;;;;;;30342:665:::0;;;:::o;31784:305::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;31918:1:::1;31899:15;:20;;31891:74;;;::::0;-1:-1:-1;;;31891:74:0;;6825:2:1;31891:74:0::1;::::0;::::1;6807:21:1::0;6864:2;6844:18;;;6837:30;6903:34;6883:18;;;6876:62;-1:-1:-1;;;6954:18:1;;;6947:39;7003:19;;31891:74:0::1;6623:405:1::0;31891:74:0::1;32029:4;32012:13;12213:12:::0;;;12125:108;32012:13:::1;31994:31;::::0;:15;:31:::1;:::i;:::-;31993:40;;;;:::i;:::-;31976:14;:57:::0;;;32049:32:::1;::::0;2032:25:1;;;32049:32:0::1;::::0;2020:2:1;2005:18;32049:32:0::1;;;;;;;;31784:305:::0;:::o;11005:100::-;11059:13;11092:5;11085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11005:100;:::o;13238:194::-;13346:4;13363:39;10091:10;13386:7;13395:6;13363:8;:39::i;:::-;-1:-1:-1;13420:4:0;13238:194;;;;;:::o;33263:281::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;33332:10:::1;:19:::0;;;33398:3:::1;33384:17:::0;::::1;;33362:108;;;::::0;-1:-1:-1;;;33362:108:0;;7620:2:1;33362:108:0::1;::::0;::::1;7602:21:1::0;7659:2;7639:18;;;7632:30;7698:34;7678:18;;;7671:62;-1:-1:-1;;;7749:18:1;;;7742:39;7798:19;;33362:108:0::1;7418:405:1::0;33362:108:0::1;33501:10;::::0;33486:50:::1;::::0;;3714:25:1;;;3770:2;3755:18;;3748:34;;;3798:18;;;3791:34;;;;33486:50:0::1;::::0;3702:2:1;3687:18;33486:50:0::1;3512:319:1::0;13910:529:0;14050:4;14067:36;14077:6;14085:9;14096:6;14067:9;:36::i;:::-;-1:-1:-1;;;;;14143:19:0;;14116:24;14143:19;;;:11;:19;;;;;;;;10091:10;14143:33;;;;;;;;14209:26;;;;14187:116;;;;-1:-1:-1;;;14187:116:0;;8030:2:1;14187:116:0;;;8012:21:1;8069:2;8049:18;;;8042:30;8108:34;8088:18;;;8081:62;-1:-1:-1;;;8159:18:1;;;8152:38;8207:19;;14187:116:0;7828:404:1;14187:116:0;14339:57;14348:6;10091:10;14389:6;14370:16;:25;14339:8;:57::i;:::-;-1:-1:-1;14427:4:0;;13910:529;-1:-1:-1;;;;13910:529:0:o;14844:290::-;10091:10;14957:4;15046:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15046:34:0;;;;;;;;;;14957:4;;14974:130;;15024:7;;15046:47;;15083:10;;15046:47;:::i;:::-;14974:8;:130::i;34563:182::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;34686:13:::1;::::0;34651:49:::1;::::0;-1:-1:-1;;;;;34686:13:0::1;::::0;;::::1;::::0;::::1;::::0;34651:49;::::1;::::0;::::1;::::0;;;::::1;34711:13;:26:::0;;-1:-1:-1;;;;;34711:26:0;;::::1;;;-1:-1:-1::0;;;;;;34711:26:0;;::::1;::::0;;;::::1;::::0;;34563:182::o;22344:103::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;22409:30:::1;22436:1;22409:18;:30::i;:::-;22344:103::o:0;29698:158::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;29755:13:::1;:21:::0;;-1:-1:-1;;29755:21:0::1;::::0;;29771:5:::1;29787:11;:15:::0;;;29818:30:::1;::::0;29832:15:::1;::::0;29818:30:::1;::::0;::::1;29698:158::o:0;32795:236::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;32863:9:::1;:18:::0;;;32913:3:::1;32900:16:::0;::::1;;32892:69;;;::::0;-1:-1:-1;;;32892:69:0;;8569:2:1;32892:69:0::1;::::0;::::1;8551:21:1::0;8608:2;8588:18;;;8581:30;8647:34;8627:18;;;8620:62;-1:-1:-1;;;8698:18:1;;;8691:38;8746:19;;32892:69:0::1;8367:404:1::0;32892:69:0::1;32991:9;::::0;32977:46:::1;::::0;;3714:25:1;;;3770:2;3755:18;;3748:34;;;3798:18;;;3791:34;;;;32977:46:0::1;::::0;3702:2:1;3687:18;32977:46:0::1;3512:319:1::0;11224:104:0;11280:13;11313:7;11306:14;;;;;:::i;15633:475::-;10091:10;15751:4;15795:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15795:34:0;;;;;;;;;;15862:35;;;;15840:122;;;;-1:-1:-1;;;15840:122:0;;8978:2:1;15840:122:0;;;8960:21:1;9017:2;8997:18;;;8990:30;9056:34;9036:18;;;9029:62;-1:-1:-1;;;9107:18:1;;;9100:35;9152:19;;15840:122:0;8776:401:1;15840:122:0;15998:67;10091:10;16021:7;16049:15;16030:16;:34;15998:8;:67::i;:::-;-1:-1:-1;16096:4:0;;15633:475;-1:-1:-1;;;15633:475:0:o;12652:200::-;12763:4;12780:42;10091:10;12804:9;12815:6;12780:9;:42::i;33552:225::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;33625:11:::1;:20:::0;;;33693:3:::1;33678:18:::0;::::1;;33656:113;;;::::0;-1:-1:-1;;;33656:113:0;;9384:2:1;33656:113:0::1;::::0;::::1;9366:21:1::0;9423:2;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;-1:-1:-1;;;9513:18:1;;;9506:43;9566:19;;33656:113:0::1;9182:409:1::0;33656:113:0::1;33552:225:::0;:::o;32358:207::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32475:22:0;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;;:34;;-1:-1:-1;;32475:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32525:32;;1834:41:1;;;32525:32:0::1;::::0;1807:18:1;32525:32:0::1;;;;;;;;32358:207:::0;;:::o;34022:201::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34137:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;;:32;;-1:-1:-1;;34137:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34185:30;;1834:41:1;;;34185:30:0::1;::::0;1807:18:1;34185:30:0::1;1694:187:1::0;29382:161:0;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;29435:11:::1;:18:::0;;-1:-1:-1;;29435:18:0::1;29449:4;29435:18;::::0;;29464:17:::1;:24:::0;;-1:-1:-1;;;;29464:24:0::1;-1:-1:-1::0;;;29464:24:0::1;::::0;;29504:31:::1;::::0;29519:15:::1;::::0;29504:31:::1;::::0;29435:11:::1;::::0;29504:31:::1;29382:161::o:0;31257:311::-;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;31381:1:::1;31357:20;:25;;31349:84;;;::::0;-1:-1:-1;;;31349:84:0;;9798:2:1;31349:84:0::1;::::0;::::1;9780:21:1::0;9837:2;9817:18;;;9810:30;9876:34;9856:18;;;9849:62;-1:-1:-1;;;9927:18:1;;;9920:44;9981:19;;31349:84:0::1;9596:410:1::0;31349:84:0::1;31507:4;31490:13;12213:12:::0;;;12125:108;31490:13:::1;31467:36;::::0;:20;:36:::1;:::i;:::-;31466:45;;;;:::i;:::-;31444:19;:67:::0;;;31527:33:::1;::::0;2032:25:1;;;31527:33:0::1;::::0;2020:2:1;2005:18;31527:33:0::1;1886:177:1::0;22602:238:0;21766:6;;-1:-1:-1;;;;;21766:6:0;10091:10;21913:23;21905:68;;;;-1:-1:-1;;;21905:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22705:22:0;::::1;22683:110;;;::::0;-1:-1:-1;;;22683:110:0;;10213:2:1;22683:110:0::1;::::0;::::1;10195:21:1::0;10252:2;10232:18;;;10225:30;10291:34;10271:18;;;10264:62;-1:-1:-1;;;10342:18:1;;;10335:36;10388:19;;22683:110:0::1;10011:402:1::0;22683:110:0::1;22804:28;22823:8;22804:18;:28::i;19416:380::-:0;-1:-1:-1;;;;;19552:19:0;;19544:68;;;;-1:-1:-1;;;19544:68:0;;10620:2:1;19544:68:0;;;10602:21:1;10659:2;10639:18;;;10632:30;10698:34;10678:18;;;10671:62;-1:-1:-1;;;10749:18:1;;;10742:34;10793:19;;19544:68:0;10418:400:1;19544:68:0;-1:-1:-1;;;;;19631:21:0;;19623:68;;;;-1:-1:-1;;;19623:68:0;;11025:2:1;19623:68:0;;;11007:21:1;11064:2;11044:18;;;11037:30;11103:34;11083:18;;;11076:62;-1:-1:-1;;;11154:18:1;;;11147:32;11196:19;;19623:68:0;10823:398:1;19623:68:0;-1:-1:-1;;;;;19704:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19756:32;;2032:25:1;;;19756:32:0;;2005:18:1;19756:32:0;;;;;;;19416:380;;;:::o;37801:3597::-;-1:-1:-1;;;;;37933:18:0;;37925:68;;;;-1:-1:-1;;;37925:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38012:16:0;;38004:64;;;;-1:-1:-1;;;38004:64:0;;;;;;;:::i;:::-;38085:6;38095:1;38085:11;38081:93;;38113:28;38129:4;38135:2;38139:1;38113:15;:28::i;:::-;37801:3597;;;:::o;38081:93::-;38190:13;;;;38186:1578;;;21766:6;;-1:-1:-1;;;;;38242:15:0;;;21766:6;;38242:15;;;;:49;;-1:-1:-1;21766:6:0;;-1:-1:-1;;;;;38278:13:0;;;21766:6;;38278:13;;38242:49;:86;;;;-1:-1:-1;;;;;;38312:16:0;;;;38242:86;:128;;;;-1:-1:-1;;;;;;38349:21:0;;38363:6;38349:21;;38242:128;:160;;;;-1:-1:-1;38392:10:0;;-1:-1:-1;;;38392:10:0;;;;38391:11;38242:160;38220:1533;;;38442:11;;;;38437:223;;-1:-1:-1;;;;;38512:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;38536:18:0;;;;;;:14;:18;;;;;;;;38512:42;38478:162;;;;-1:-1:-1;;;38478:162:0;;12238:2:1;38478:162:0;;;12220:21:1;12277:2;12257:18;;;12250:30;12316:34;12296:18;;;12289:62;-1:-1:-1;;;12367:18:1;;;12360:32;12409:19;;38478:162:0;12036:398:1;38478:162:0;-1:-1:-1;;;;;38734:13:0;;;;;;:7;:13;;;;;;;;:38;;;;-1:-1:-1;;;;;;38752:20:0;;;;;;:16;:20;;;;;;;;38751:21;38734:38;38708:1030;;;38859:19;;38849:6;:29;;38815:167;;;;-1:-1:-1;;;38815:167:0;;12641:2:1;38815:167:0;;;12623:21:1;12680:2;12660:18;;;12653:30;12719:34;12699:18;;;12692:62;-1:-1:-1;;;12770:18:1;;;12763:50;12830:19;;38815:167:0;12439:416:1;38815:167:0;39065:14;;-1:-1:-1;;;;;12413:18:0;;12386:7;12413:18;;;;;;;;;;;39039:22;;:6;:22;:::i;:::-;:40;;39005:145;;;;-1:-1:-1;;;39005:145:0;;13062:2:1;39005:145:0;;;13044:21:1;13101:2;13081:18;;;13074:30;-1:-1:-1;;;13120:18:1;;;13113:49;13179:18;;39005:145:0;12860:343:1;39005:145:0;38708:1030;;;-1:-1:-1;;;;;39248:11:0;;;;;;:7;:11;;;;;;;;:38;;;;-1:-1:-1;;;;;;39264:22:0;;;;;;:16;:22;;;;;;;;39263:23;39248:38;39222:516;;;39373:19;;39363:6;:29;;39329:168;;;;-1:-1:-1;;;39329:168:0;;13410:2:1;39329:168:0;;;13392:21:1;13449:2;13429:18;;;13422:30;13488:34;13468:18;;;13461:62;-1:-1:-1;;;13539:18:1;;;13532:51;13600:19;;39329:168:0;13208:417:1;39222:516:0;-1:-1:-1;;;;;39528:20:0;;;;;;:16;:20;;;;;;;;39523:215;;39633:14;;-1:-1:-1;;;;;12413:18:0;;12386:7;12413:18;;;;;;;;;;;39607:22;;:6;:22;:::i;:::-;:40;;39573:145;;;;-1:-1:-1;;;39573:145:0;;13062:2:1;39573:145:0;;;13044:21:1;13101:2;13081:18;;;13074:30;-1:-1:-1;;;13120:18:1;;;13113:49;13179:18;;39573:145:0;12860:343:1;39573:145:0;39825:4;39776:28;12413:18;;;;;;;;;;;39883:9;;39859:33;;;;;;;39923:41;;-1:-1:-1;39947:17:0;;-1:-1:-1;;;39947:17:0;;;;39923:41;:69;;;;-1:-1:-1;39982:10:0;;-1:-1:-1;;;39982:10:0;;;;39981:11;39923:69;:100;;;;-1:-1:-1;;;;;;40010:13:0;;;;;;:7;:13;;;;;;;;40009:14;39923:100;:138;;;;-1:-1:-1;;;;;;40041:20:0;;;;;;:14;:20;;;;;;;;40040:21;39923:138;:174;;;;-1:-1:-1;;;;;;40079:18:0;;;;;;:14;:18;;;;;;;;40078:19;39923:174;:216;;;;;40124:15;40114:6;;:25;;39923:216;39905:399;;;40166:10;:17;;-1:-1:-1;;;;40166:17:0;-1:-1:-1;;;40166:17:0;;;40200:16;40209:6;40200:8;:16::i;:::-;40242:15;40233:6;:24;40274:10;:18;;-1:-1:-1;;;;40274:18:0;;;39905:399;40332:10;;-1:-1:-1;;;;;40444:20:0;;40316:12;40444:20;;;:14;:20;;;;;;40332:10;-1:-1:-1;;;40332:10:0;;;;;40331:11;;40444:20;;:42;;-1:-1:-1;;;;;;40468:18:0;;;;;;:14;:18;;;;;;;;40444:42;40440:90;;;-1:-1:-1;40513:5:0;40440:90;40542:12;40647:7;40643:702;;;-1:-1:-1;;;;;40699:11:0;;;;;;:7;:11;;;;;;;;:29;;;;;40727:1;40714:10;;:14;40699:29;40695:501;;;40756:31;40783:3;40756:22;40767:10;;40756:6;:10;;:22;;;;:::i;:::-;:26;;:31::i;:::-;40749:38;;40695:501;;;-1:-1:-1;;;;;40849:13:0;;;;;;:7;:13;;;;;;;;:30;;;;;40878:1;40866:9;;:13;40849:30;40845:351;;;40907:30;40933:3;40907:21;40918:9;;40907:6;:10;;:21;;;;:::i;40845:351::-;41037:1;41023:11;;:15;:50;;;;-1:-1:-1;;;;;;41060:13:0;;;;;;:7;:13;;;;;;;;41059:14;41023:50;:83;;;;-1:-1:-1;;;;;;41095:11:0;;;;;;:7;:11;;;;;;;;41094:12;41023:83;41001:195;;;41148:32;41176:3;41148:23;41159:11;;41148:6;:10;;:23;;;;:::i;:32::-;41141:39;;41001:195;41216:8;;41212:91;;41245:42;41261:4;41275;41282;41245:15;:42::i;:::-;41319:14;41329:4;41319:14;;:::i;:::-;;;40643:702;41357:33;41373:4;41379:2;41383:6;41357:15;:33::i;:::-;37914:3484;;;;37801:3597;;;:::o;23000:191::-;23093:6;;;-1:-1:-1;;;;;23110:17:0;;;-1:-1:-1;;;;;;23110:17:0;;;;;;;23143:40;;23093:6;;;23110:17;23093:6;;23143:40;;23074:16;;23143:40;23063:128;23000:191;:::o;16598:770::-;-1:-1:-1;;;;;16738:20:0;;16730:70;;;;-1:-1:-1;;;16730:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16819:23:0;;16811:71;;;;-1:-1:-1;;;16811:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16979:17:0;;16955:21;16979:17;;;;;;;;;;;17029:23;;;;17007:111;;;;-1:-1:-1;;;17007:111:0;;13965:2:1;17007:111:0;;;13947:21:1;14004:2;13984:18;;;13977:30;14043:34;14023:18;;;14016:62;-1:-1:-1;;;14094:18:1;;;14087:36;14140:19;;17007:111:0;13763:402:1;17007:111:0;-1:-1:-1;;;;;17154:17:0;;;:9;:17;;;;;;;;;;;17174:22;;;17154:42;;17218:20;;;;;;;;:30;;17190:6;;17154:9;17218:30;;17190:6;;17218:30;:::i;:::-;;;;;;;;17283:9;-1:-1:-1;;;;;17266:35:0;17275:6;-1:-1:-1;;;;;17266:35:0;;17294:6;17266:35;;;;2032:25:1;;2020:2;2005:18;;1886:177;17266:35:0;;;;;;;;16719:649;16598:770;;;:::o;41985:621::-;42082:4;42038:23;12413:18;;;;;;;;;;;;42128:20;;;42124:59;;42165:7;;41985:621;:::o;42124:59::-;42217:7;;42199:15;:25;42195:83;;;42259:7;;42241:25;;42195:83;42312:11;:6;42321:2;42312:11;:::i;:::-;42294:15;:29;42290:91;;;42358:11;:6;42367:2;42358:11;:::i;:::-;42340:29;;42290:91;42422:15;42450:36;42422:15;42450:16;:36::i;:::-;42521:13;;42513:85;;42521:13;;;;-1:-1:-1;;;;;42521:13:0;;42562:21;;42513:85;;;;42562:21;42521:13;42513:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3370:98;3428:7;3455:5;3459:1;3455;:5;:::i;:::-;3448:12;3370:98;-1:-1:-1;;;3370:98:0:o;3769:::-;3827:7;3854:5;3858:1;3854;:5;:::i;41406:571::-;41556:16;;;41570:1;41556:16;;;;;;;;41532:21;;41556:16;;;;;;;;;;-1:-1:-1;41556:16:0;41532:40;;41601:4;41583;41588:1;41583:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;41583:23:0;;;-1:-1:-1;;;;;41583:23:0;;;;;41627:9;-1:-1:-1;;;;;41627:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41617:4;41622:1;41617:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;41617:26:0;;;-1:-1:-1;;;;;41617:26:0;;;;;41656:56;41673:4;41688:9;41700:11;41656:8;:56::i;:::-;41751:218;;-1:-1:-1;;;41751:218:0;;-1:-1:-1;;;;;41751:9:0;:60;;;;:218;;41826:11;;41852:1;;41896:4;;41923;;41943:15;;41751:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41461:516;41406:571;:::o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:316::-;253:6;261;269;322:2;310:9;301:7;297:23;293:32;290:52;;;338:1;335;328:12;290:52;361:26;377:9;361:26;:::i;:::-;351:36;434:2;419:18;;406:32;;-1:-1:-1;485:2:1;470:18;;;457:32;;179:316;-1:-1:-1;;;179:316:1:o;500:180::-;559:6;612:2;600:9;591:7;587:23;583:32;580:52;;;628:1;625;618:12;580:52;-1:-1:-1;651:23:1;;500:180;-1:-1:-1;500:180:1:o;685:548::-;797:4;826:2;855;844:9;837:21;887:6;881:13;930:6;925:2;914:9;910:18;903:34;955:1;965:140;979:6;976:1;973:13;965:140;;;1074:14;;;1070:23;;1064:30;1040:17;;;1059:2;1036:26;1029:66;994:10;;965:140;;;969:3;1154:1;1149:2;1140:6;1129:9;1125:22;1121:31;1114:42;1224:2;1217;1213:7;1208:2;1200:6;1196:15;1192:29;1181:9;1177:45;1173:54;1165:62;;;;685:548;;;;:::o;1238:131::-;-1:-1:-1;;;;;1313:31:1;;1303:42;;1293:70;;1359:1;1356;1349:12;1374:315;1442:6;1450;1503:2;1491:9;1482:7;1478:23;1474:32;1471:52;;;1519:1;1516;1509:12;1471:52;1558:9;1545:23;1577:31;1602:5;1577:31;:::i;:::-;1627:5;1679:2;1664:18;;;;1651:32;;-1:-1:-1;;;1374:315:1:o;2068:456::-;2145:6;2153;2161;2214:2;2202:9;2193:7;2189:23;2185:32;2182:52;;;2230:1;2227;2220:12;2182:52;2269:9;2256:23;2288:31;2313:5;2288:31;:::i;:::-;2338:5;-1:-1:-1;2395:2:1;2380:18;;2367:32;2408:33;2367:32;2408:33;:::i;:::-;2068:456;;2460:7;;-1:-1:-1;;;2514:2:1;2499:18;;;;2486:32;;2068:456::o;2718:247::-;2777:6;2830:2;2818:9;2809:7;2805:23;2801:32;2798:52;;;2846:1;2843;2836:12;2798:52;2885:9;2872:23;2904:31;2929:5;2904:31;:::i;3836:315::-;3901:6;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4017:9;4004:23;4036:31;4061:5;4036:31;:::i;:::-;4086:5;-1:-1:-1;4110:35:1;4141:2;4126:18;;4110:35;:::i;:::-;4100:45;;3836:315;;;;;:::o;4156:388::-;4224:6;4232;4285:2;4273:9;4264:7;4260:23;4256:32;4253:52;;;4301:1;4298;4291:12;4253:52;4340:9;4327:23;4359:31;4384:5;4359:31;:::i;:::-;4409:5;-1:-1:-1;4466:2:1;4451:18;;4438:32;4479:33;4438:32;4479:33;:::i;:::-;4531:7;4521:17;;;4156:388;;;;;:::o;4903:356::-;5105:2;5087:21;;;5124:18;;;5117:30;5183:34;5178:2;5163:18;;5156:62;5250:2;5235:18;;4903:356::o;6096:127::-;6157:10;6152:3;6148:20;6145:1;6138:31;6188:4;6185:1;6178:15;6212:4;6209:1;6202:15;6228:168;6301:9;;;6332;;6349:15;;;6343:22;;6329:37;6319:71;;6370:18;;:::i;6401:217::-;6441:1;6467;6457:132;;6511:10;6506:3;6502:20;6499:1;6492:31;6546:4;6543:1;6536:15;6574:4;6571:1;6564:15;6457:132;-1:-1:-1;6603:9:1;;6401:217::o;7033:380::-;7112:1;7108:12;;;;7155;;;7176:61;;7230:4;7222:6;7218:17;7208:27;;7176:61;7283:2;7275:6;7272:14;7252:18;7249:38;7246:161;;7329:10;7324:3;7320:20;7317:1;7310:31;7364:4;7361:1;7354:15;7392:4;7389:1;7382:15;7246:161;;7033:380;;;:::o;8237:125::-;8302:9;;;8323:10;;;8320:36;;;8336:18;;:::i;11226:401::-;11428:2;11410:21;;;11467:2;11447:18;;;11440:30;11506:34;11501:2;11486:18;;11479:62;-1:-1:-1;;;11572:2:1;11557:18;;11550:35;11617:3;11602:19;;11226:401::o;11632:399::-;11834:2;11816:21;;;11873:2;11853:18;;;11846:30;11912:34;11907:2;11892:18;;11885:62;-1:-1:-1;;;11978:2:1;11963:18;;11956:33;12021:3;12006:19;;11632:399::o;13630:128::-;13697:9;;;13718:11;;;13715:37;;;13732:18;;:::i;14512:127::-;14573:10;14568:3;14564:20;14561:1;14554:31;14604:4;14601:1;14594:15;14628:4;14625:1;14618:15;14644:251;14714:6;14767:2;14755:9;14746:7;14742:23;14738:32;14735:52;;;14783:1;14780;14773:12;14735:52;14815:9;14809:16;14834:31;14859:5;14834:31;:::i;14900:980::-;15162:4;15210:3;15199:9;15195:19;15241:6;15230:9;15223:25;15267:2;15305:6;15300:2;15289:9;15285:18;15278:34;15348:3;15343:2;15332:9;15328:18;15321:31;15372:6;15407;15401:13;15438:6;15430;15423:22;15476:3;15465:9;15461:19;15454:26;;15515:2;15507:6;15503:15;15489:29;;15536:1;15546:195;15560:6;15557:1;15554:13;15546:195;;;15625:13;;-1:-1:-1;;;;;15621:39:1;15609:52;;15716:15;;;;15681:12;;;;15657:1;15575:9;15546:195;;;-1:-1:-1;;;;;;;15797:32:1;;;;15792:2;15777:18;;15770:60;-1:-1:-1;;;15861:3:1;15846:19;15839:35;15758:3;14900:980;-1:-1:-1;;;14900:980:1:o
Swarm Source
ipfs://eaf6d46746434a612a4dbf644b2b3a07111ca1377f211913a56b685b337b0287
Loading...
Loading
Loading...
Loading
OVERVIEW
Manyu is the famous Shiba Inu on social media with a combined following of over 20M+ across multiple platforms. He is not just a Shiba, he’s a lifestyle, a flex, a walking meme.Net Worth in USD
$511.30
Net Worth in ETH
0.2653
Token Allocations
ETH
26.50%
BSC-USD
18.79%
USDC
16.81%
Others
37.90%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BSC | 18.79% | $1 | 96.0819 | $96.08 | |
| BSC | 16.03% | $612.7 | 0.1338 | $81.98 | |
| BSC | 6.22% | <$0.000001 | 50,000,000,000 | $31.82 | |
| BSC | 0.94% | $1,931.96 | 0.0025 | $4.83 | |
| ETH | 8.12% | $1 | 41.5261 | $41.53 | |
| ETH | 7.83% | $1,926.64 | 0.0208 | $40.05 | |
| ETH | 7.05% | <$0.000001 | 5,119,630,595.5671 | $36.04 | |
| ETH | 4.11% | <$0.000001 | 381,667,695.6661 | $21.04 | |
| ETH | 3.17% | $0.99998 | 16.1924 | $16.19 | |
| ETH | 1.31% | $1,926.64 | 0.00348033 | $6.71 | |
| ABSTRACT | 17.07% | $1,931.96 | 0.0452 | $87.27 | |
| BASE | 8.69% | $0.999995 | 44.4475 | $44.45 | |
| BASE | 0.65% | $1,926.62 | 0.00172799 | $3.33 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.