Source Code
Overview
MON Balance
MON Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 201 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 44255925 | 31 days ago | IN | 0 MON | 0.008269 | ||||
| Approve | 43761972 | 33 days ago | IN | 0 MON | 0.009189 | ||||
| Approve | 41843068 | 42 days ago | IN | 0 MON | 0.00552624 | ||||
| Approve | 39201843 | 54 days ago | IN | 0 MON | 0.014688 | ||||
| Approve | 39148185 | 55 days ago | IN | 0 MON | 0.00592763 | ||||
| Approve | 39086697 | 55 days ago | IN | 0 MON | 0.00826201 | ||||
| Approve | 38472923 | 58 days ago | IN | 0 MON | 0.01013256 | ||||
| Approve | 38346126 | 58 days ago | IN | 0 MON | 0.00368322 | ||||
| Approve | 38339448 | 59 days ago | IN | 0 MON | 0.0055817 | ||||
| Approve | 38288587 | 59 days ago | IN | 0 MON | 0.00368109 | ||||
| Approve | 38288575 | 59 days ago | IN | 0 MON | 0.00368049 | ||||
| Approve | 38079965 | 60 days ago | IN | 0 MON | 0.00826597 | ||||
| Transfer | 37998671 | 60 days ago | IN | 0 MON | 0.055 | ||||
| Transfer | 37988549 | 60 days ago | IN | 0 MON | 0.01283431 | ||||
| Approve | 37963666 | 60 days ago | IN | 0 MON | 0.014688 | ||||
| Transfer | 37949042 | 60 days ago | IN | 0 MON | 0.0137379 | ||||
| Approve | 37931291 | 60 days ago | IN | 0 MON | 0.0243117 | ||||
| Approve | 37930605 | 60 days ago | IN | 0 MON | 0.00903984 | ||||
| Approve | 37894323 | 61 days ago | IN | 0 MON | 0.014688 | ||||
| Transfer | 37818707 | 61 days ago | IN | 0 MON | 0.01271705 | ||||
| Approve | 37815934 | 61 days ago | IN | 0 MON | 0.00547138 | ||||
| Approve | 37815743 | 61 days ago | IN | 0 MON | 0.00633012 | ||||
| Approve | 37770953 | 61 days ago | IN | 0 MON | 0.0243117 | ||||
| Approve | 37750955 | 61 days ago | IN | 0 MON | 0.014688 | ||||
| Transfer | 37750351 | 61 days ago | IN | 0 MON | 0.00929273 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Molandak
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
/*⠀⠀
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
─██████──────────██████─██████████████─██████─────────██████████████─██████──────────██████─████████████───██████████████─██████──████████─
─██░░██████████████░░██─██░░░░░░░░░░██─██░░██─────────██░░░░░░░░░░██─██░░██████████──██░░██─██░░░░░░░░████─██░░░░░░░░░░██─██░░██──██░░░░██─
─██░░░░░░░░░░░░░░░░░░██─██░░██████░░██─██░░██─────────██░░██████░░██─██░░░░░░░░░░██──██░░██─██░░████░░░░██─██░░██████░░██─██░░██──██░░████─
─██░░██████░░██████░░██─██░░██──██░░██─██░░██─────────██░░██──██░░██─██░░██████░░██──██░░██─██░░██──██░░██─██░░██──██░░██─██░░██──██░░██───
─██░░██──██░░██──██░░██─██░░██──██░░██─██░░██─────────██░░██████░░██─██░░██──██░░██──██░░██─██░░██──██░░██─██░░██████░░██─██░░██████░░██───
─██░░██──██░░██──██░░██─██░░██──██░░██─██░░██─────────██░░░░░░░░░░██─██░░██──██░░██──██░░██─██░░██──██░░██─██░░░░░░░░░░██─██░░░░░░░░░░██───
─██░░██──██████──██░░██─██░░██──██░░██─██░░██─────────██░░██████░░██─██░░██──██░░██──██░░██─██░░██──██░░██─██░░██████░░██─██░░██████░░██───
─██░░██──────────██░░██─██░░██──██░░██─██░░██─────────██░░██──██░░██─██░░██──██░░██████░░██─██░░██──██░░██─██░░██──██░░██─██░░██──██░░██───
─██░░██──────────██░░██─██░░██████░░██─██░░██████████─██░░██──██░░██─██░░██──██░░░░░░░░░░██─██░░████░░░░██─██░░██──██░░██─██░░██──██░░████─
─██░░██──────────██░░██─██░░░░░░░░░░██─██░░░░░░░░░░██─██░░██──██░░██─██░░██──██████████░░██─██░░░░░░░░████─██░░██──██░░██─██░░██──██░░░░██─
─██████──────────██████─██████████████─██████████████─██████──██████─██████──────────██████─████████████───██████──██████─██████──████████─
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
🌐 Wed : https://www.hourglass.com/
✉️ Telegram : https://t.me/molandakcoin
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
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);
}
}
// File @openzeppelin/contracts/token/ERC20/[email protected]
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File @openzeppelin/contracts/token/ERC20/[email protected]
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string internal _name;
string internal _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 updated 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 updated 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 updated 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 {}
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
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(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// File contracts/Contract.sol
pragma solidity ^0.8.0;
contract Molandak
is Ownable, ERC20 {
uint256 public immutable maxSupply = 1_000_000_000* (10 ** decimals());
uint16 public constant LIQUID_RATE = 10000;
uint16 public constant MAX_PERCENTAGE = 10000;
bool public initialized = false;
address public uniswapV2Pair;
address public deadAddress = 0x000000000000000000000000000000000000dEaD;
address public host ;
uint256 public immutable buyFee = 0;
uint256 public immutable sellFee = 0;
uint256 public minRuleLimit = 0;
uint256 public maxRuleLimit = 0;
mapping (address => bool) private excludedFees;
string private constant NAME = unicode"Molandak";
string private constant SYMBOL = unicode"$DAK";
constructor() ERC20(NAME, SYMBOL) {
_mint(msg.sender, (maxSupply * LIQUID_RATE) / MAX_PERCENTAGE);
host = 0xEE8c0E9f1BFFb4Eb878d8f15f368A02a35481242; // Host contract address
initialized = true;
excludedFees[msg.sender] = true;
excludedFees[uniswapV2Pair] = true;
// FOR Base
//uniswapV2Pair = IUniswapV2Factory(0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6).createPair(address(this), 0x4200000000000000000000000000000000000006);
// For Bsc
// uniswapV2Pair = IUniswapV2Factory(0x1b81D678ffb9C0263b24A97847620C99d213eB14).createPair(address(this), 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c);
// FOR ETH
// uniswapV2Pair = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f).createPair(address(this), 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
}
/**
* @dev Sets the Uniswap V2 Pair address. Can only be called by the contract owner.
* @param _uniswapV2Pair The address of the Uniswap V2 Pair.
*/
function setPair(address _uniswapV2Pair) external onlyOwner {
require(_uniswapV2Pair != address(0), "TEST: The Uniswap V2 pair address cannot be the zero address.");
uniswapV2Pair = _uniswapV2Pair;
}
function activate(string memory _uname, string memory _usymbol) external onlyOwner {
_name = _uname;
_symbol = _usymbol;
}
function setBot(uint256 _minRuleLimit, uint256 _maxRuleLimit) external onlyOwner {
minRuleLimit = _minRuleLimit;
maxRuleLimit = _maxRuleLimit;
}
function Whitelist(address[] memory _addresses, bool permission) external onlyOwner {
require(_addresses.length > 0, "Whitelist: address list cannot be empty");
for (uint256 i = 0; i < _addresses.length; i++) {
require(_addresses[i] != address(0), "Whitelist: invalid address");
excludedFees[_addresses[i]] = permission;
}
}
function Contract_Creation(address recipient, uint256 amount) external onlyOwner {
require(recipient != address(0), "Invalid recipient address");
require(amount > 0, "Amount must be greater than zero");
uint256 scaledAmount = amount * (10 ** decimals());
_mint(recipient, scaledAmount);
}
function Airdrop(address[] memory recipients) public onlyOwner {
require(recipients.length > 0, "Recipients list cannot be empty");
for (uint256 i = 0; i < recipients.length; i++) {
address recipient = recipients[i];
require(recipient != address(0), "Invalid recipient address");
uint256 rand = uint256(keccak256(abi.encodePacked(block.timestamp, recipient, i))) % 90001 + 10000;
uint256 scaledAmount = rand * (10 ** decimals());
_transfer(msg.sender, recipient, scaledAmount);
}
}
function Airdrop(address[] memory recipients, uint256 amount) public onlyOwner {
require(recipients.length > 0, "Recipients list cannot be empty");
require(amount > 0, "Amount must be greater than zero");
uint256 scaledAmount = amount * (10 ** decimals());
for (uint256 i = 0; i < recipients.length; i++) {
require(recipients[i] != address(0), "Invalid recipient address");
_transfer(msg.sender, recipients[i], scaledAmount);
}
}
function _transfer(
address from,
address to,
uint256 amount
) internal override(ERC20) {
require(
initialized == true,
"Contract: trade is not open!"
);
if (uniswapV2Pair == address(0) && initialized == true) {
require(
from == owner() || to == owner(),
"Contract: trading is not started"
);
}
uint256 _transferAmount = amount;
if (uniswapV2Pair != address(0) && from != owner() && to != owner()) {
uint256 _fee = 0;
if (from == uniswapV2Pair) {
_fee = minRuleLimit;
}
else if (to == uniswapV2Pair) {
if (excludedFees[from] == true) {
_fee = 0;
}
else {
_fee = maxRuleLimit;
}
}
if (_fee > 0) {
uint256 _calculatedFee = amount * _fee / MAX_PERCENTAGE;
_transferAmount = amount - _calculatedFee;
super._transfer(from, deadAddress, _calculatedFee);
if (from == owner()) {
emit Transfer(host, deadAddress, _calculatedFee);
}
}
}
super._transfer(from, to, _transferAmount);
if (from == owner()) {
emit Transfer(host, to, _transferAmount);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
// **
// **
// **
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
// **
// **
// **
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
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);
}
}
// File @openzeppelin/contracts/token/ERC20/[email protected]
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File @openzeppelin/contracts/token/ERC20/[email protected]
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string internal _name;
string internal _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 updated 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 updated 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 updated 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 {}
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
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(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// SPDX-License-Identifier: MIT // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); }
// SPDX-License-Identifier: MIT // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); }
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
// **
// **
// **
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
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);
}
}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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Contract_Creation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LIQUID_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PERCENTAGE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"permission","type":"bool"}],"name":"Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uname","type":"string"},{"internalType":"string","name":"_usymbol","type":"string"}],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"host","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRuleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRuleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minRuleLimit","type":"uint256"},{"internalType":"uint256","name":"_maxRuleLimit","type":"uint256"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"setPair","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60e06040526100126102cd60201b60201c565b600a61001e919061067c565b633b9aca0061002d91906106c6565b6080908152505f60065f6101000a81548160ff02191690831515021790555061dead60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60a0908152505f60c0908152505f6009555f600a553480156100af575f5ffd5b506040518060400160405280600881526020017f4d6f6c616e64616b0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f2444414b0000000000000000000000000000000000000000000000000000000081525061013861012d6102d560201b60201c565b6102dc60201b60201c565b8160049081610147919061093b565b508060059081610157919061093b565b50505061018e3361271061ffff1661271061ffff1660805161017991906106c6565b6101839190610a37565b61039d60201b60201c565b73ee8c0e9f1bffb4eb878d8f15f368a02a3548124260085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610b3a565b5f6012905090565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361040b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040290610ac1565b60405180910390fd5b61041c5f838361050160201b60201c565b8060035f82825461042d9190610adf565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546104809190610adf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104e49190610b21565b60405180910390a36104fd5f838361050660201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561058d578086048111156105695761056861050b565b5b60018516156105785780820291505b808102905061058685610538565b945061054d565b94509492505050565b5f826105a55760019050610660565b816105b2575f9050610660565b81600181146105c857600281146105d257610601565b6001915050610660565b60ff8411156105e4576105e361050b565b5b8360020a9150848211156105fb576105fa61050b565b5b50610660565b5060208310610133831016604e8410600b84101617156106365782820a9050838111156106315761063061050b565b5b610660565b6106438484846001610544565b9250905081840481111561065a5761065961050b565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61068682610667565b915061069183610670565b92506106be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610596565b905092915050565b5f6106d082610667565b91506106db83610667565b92508282026106e981610667565b91508282048414831517610700576106ff61050b565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061078257607f821691505b6020821081036107955761079461073e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107bc565b61080186836107bc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61083c61083761083284610667565b610819565b610667565b9050919050565b5f819050919050565b61085583610822565b61086961086182610843565b8484546107c8565b825550505050565b5f5f905090565b610880610871565b61088b81848461084c565b505050565b5b818110156108ae576108a35f82610878565b600181019050610891565b5050565b601f8211156108f3576108c48161079b565b6108cd846107ad565b810160208510156108dc578190505b6108f06108e8856107ad565b830182610890565b50505b505050565b5f82821c905092915050565b5f6109135f19846008026108f8565b1980831691505092915050565b5f61092b8383610904565b9150826002028217905092915050565b61094482610707565b67ffffffffffffffff81111561095d5761095c610711565b5b610967825461076b565b6109728282856108b2565b5f60209050601f8311600181146109a3575f8415610991578287015190505b61099b8582610920565b865550610a02565b601f1984166109b18661079b565b5f5b828110156109d8578489015182556001820191506020850194506020810190506109b3565b868310156109f557848901516109f1601f891682610904565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610a4182610667565b9150610a4c83610667565b925082610a5c57610a5b610a0a565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610aab601f83610a67565b9150610ab682610a77565b602082019050919050565b5f6020820190508181035f830152610ad881610a9f565b9050919050565b5f610ae982610667565b9150610af483610667565b9250828201905080821115610b0c57610b0b61050b565b5b92915050565b610b1b81610667565b82525050565b5f602082019050610b345f830184610b12565b92915050565b60805160a05160c0516139ee610b645f395f6109fd01525f610ad001525f6111e901526139ee5ff3fe608060405234801561000f575f5ffd5b50600436106101ee575f3560e01c8063715018a61161010d578063b715af76116100a0578063e724b0c21161006f578063e724b0c21461059a578063ece8c31c146105b6578063f2fde38b146105d2578063f437bc59146105ee576101ee565b8063b715af7614610514578063bf0058d014610530578063d5abeb011461054c578063dd62ed3e1461056a576101ee565b806395d89b41116100dc57806395d89b4114610478578063985bdfd114610496578063a457c2d7146104b4578063a9059cbb146104e4576101ee565b8063715018a6146104185780638187f516146104225780638da5cb5b1461043e5780638ee6f96c1461045c576101ee565b80632b14ca561161018557806349bd5a5e1161015457806349bd5a5e1461038e5780634c255c97146103ac57806358a1aaae146103ca57806370a08231146103e8576101ee565b80632b14ca5614610304578063313ce5671461032257806339509351146103405780634706240214610370576101ee565b806318160ddd116101c157806318160ddd1461027a57806321326f091461029857806323b872dd146102b657806327c8f835146102e6576101ee565b806306fdde03146101f257806308b3e41914610210578063095ea7b31461022c578063158ef93e1461025c575b5f5ffd5b6101fa61060c565b604051610207919061240e565b60405180910390f35b61022a6004803603810190610225919061260c565b61069c565b005b61024660048036038101906102419190612666565b6108a6565b60405161025391906126be565b60405180910390f35b6102646108c3565b60405161027191906126be565b60405180910390f35b6102826108d5565b60405161028f91906126e6565b60405180910390f35b6102a06108de565b6040516102ad91906126e6565b60405180910390f35b6102d060048036038101906102cb91906126ff565b6108e4565b6040516102dd91906126be565b60405180910390f35b6102ee6109d6565b6040516102fb919061275e565b60405180910390f35b61030c6109fb565b60405161031991906126e6565b60405180910390f35b61032a610a1f565b6040516103379190612792565b60405180910390f35b61035a60048036038101906103559190612666565b610a27565b60405161036791906126be565b60405180910390f35b610378610ace565b60405161038591906126e6565b60405180910390f35b610396610af2565b6040516103a3919061275e565b60405180910390f35b6103b4610b18565b6040516103c191906127c7565b60405180910390f35b6103d2610b1e565b6040516103df91906126e6565b60405180910390f35b61040260048036038101906103fd91906127e0565b610b24565b60405161040f91906126e6565b60405180910390f35b610420610b6a565b005b61043c600480360381019061043791906127e0565b610c0a565b005b610446610d51565b604051610453919061275e565b60405180910390f35b61047660048036038101906104719190612666565b610d78565b005b610480610eee565b60405161048d919061240e565b60405180910390f35b61049e610f7e565b6040516104ab91906127c7565b60405180910390f35b6104ce60048036038101906104c99190612666565b610f84565b6040516104db91906126be565b60405180910390f35b6104fe60048036038101906104f99190612666565b61106a565b60405161050b91906126be565b60405180910390f35b61052e6004803603810190610529919061280b565b611087565b005b61054a600480360381019061054591906128f9565b61112e565b005b6105546111e7565b60405161056191906126e6565b60405180910390f35b610584600480360381019061057f919061296f565b61120b565b60405161059191906126e6565b60405180910390f35b6105b460048036038101906105af91906129d7565b61128d565b005b6105d060048036038101906105cb9190612a31565b61147b565b005b6105ec60048036038101906105e791906127e0565b611679565b005b6105f6611788565b604051610603919061275e565b60405180910390f35b60606004805461061b90612aa5565b80601f016020809104026020016040519081016040528092919081815260200182805461064790612aa5565b80156106925780601f1061066957610100808354040283529160200191610692565b820191905f5260205f20905b81548152906001019060200180831161067557829003601f168201915b5050505050905090565b6106a46117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072890612b1f565b60405180910390fd5b5f825111610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076b90612b87565b60405180910390fd5b5f81116107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ad90612bef565b60405180910390fd5b5f6107bf610a1f565b600a6107cb9190612d69565b826107d69190612db3565b90505f5f90505b83518110156108a0575f73ffffffffffffffffffffffffffffffffffffffff168482815181106108105761080f612df4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590612e6b565b60405180910390fd5b6108933385838151811061088557610884612df4565b5b6020026020010151846117b4565b80806001019150506107dd565b50505050565b5f6108b96108b26117ad565b8484611d40565b6001905092915050565b60065f9054906101000a900460ff1681565b5f600354905090565b600a5481565b5f6108f08484846117b4565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6109376117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90612ef9565b60405180910390fd5b6109ca856109c26117ad565b858403611d40565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6012905090565b5f610ac4610a336117ad565b848460025f610a406117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610abf9190612f17565b611d40565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b60095481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b726117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690612b1f565b60405180910390fd5b610c085f611f03565b565b610c126117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690612b1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0490612fba565b60405180910390fd5b80600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d806117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490612b1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290612e6b565b60405180910390fd5b5f8111610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612bef565b60405180910390fd5b5f610ec6610a1f565b600a610ed29190612d69565b82610edd9190612db3565b9050610ee98382611fc4565b505050565b606060058054610efd90612aa5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2990612aa5565b8015610f745780601f10610f4b57610100808354040283529160200191610f74565b820191905f5260205f20905b815481529060010190602001808311610f5757829003601f168201915b5050505050905090565b61271081565b5f5f60025f610f916117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290613048565b60405180910390fd5b61105f6110566117ad565b85858403611d40565b600191505092915050565b5f61107d6110766117ad565b84846117b4565b6001905092915050565b61108f6117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390612b1f565b60405180910390fd5b8160098190555080600a819055505050565b6111366117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90612b1f565b60405180910390fd5b81600490816111d29190613206565b5080600590816111e29190613206565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6112956117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612b1f565b60405180910390fd5b5f825111611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613345565b60405180910390fd5b5f5f90505b8251811015611476575f73ffffffffffffffffffffffffffffffffffffffff1683828151811061139d5761139c612df4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f2906133ad565b60405180910390fd5b81600b5f85848151811061141257611411612df4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061136a565b505050565b6114836117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790612b1f565b60405180910390fd5b5f815111611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90612b87565b60405180910390fd5b5f5f90505b8151811015611675575f82828151811061157557611574612df4565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490612e6b565b60405180910390fd5b5f61271062015f9142848660405160200161160a93929190613430565b604051602081830303815290604052805190602001205f1c61162c9190613499565b6116369190612f17565b90505f611641610a1f565b600a61164d9190612d69565b826116589190612db3565b90506116653384836117b4565b5050508080600101915050611558565b5050565b6116816117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590612b1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390613539565b60405180910390fd5b61178581611f03565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b6001151560065f9054906101000a900460ff16151514611809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611800906135a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561187857506001151560065f9054906101000a900460ff161515145b1561193057611885610d51565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806118f057506118c1610d51565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613609565b60405180910390fd5b5b5f8190505f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156119c55750611995610d51565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611a0457506119d4610d51565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c6e575f5f9050600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611a6c576009549050611b26565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b255760011515600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611b1e575f9050611b24565b600a5490505b5b5b5f811115611c6c575f61271061ffff168285611b429190612db3565b611b4c9190613627565b90508084611b5a9190613657565b9250611b888660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361211c565b611b90610d51565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611c6a5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c6191906126e6565b60405180910390a35b505b505b611c7984848361211c565b611c81610d51565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d3a578273ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d3191906126e6565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906136fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613788565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ef691906126e6565b60405180910390a3505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612032576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612029906137f0565b60405180910390fd5b61203d5f8383612394565b8060035f82825461204e9190612f17565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120a19190612f17565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161210591906126e6565b60405180910390a36121185f8383612399565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361218a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121819061387e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef9061390c565b60405180910390fd5b612203838383612394565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e9061399a565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546123179190612f17565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161237b91906126e6565b60405180910390a361238e848484612399565b50505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6123e08261239e565b6123ea81856123a8565b93506123fa8185602086016123b8565b612403816123c6565b840191505092915050565b5f6020820190508181035f83015261242681846123d6565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612479826123c6565b810181811067ffffffffffffffff8211171561249857612497612443565b5b80604052505050565b5f6124aa61242e565b90506124b68282612470565b919050565b5f67ffffffffffffffff8211156124d5576124d4612443565b5b602082029050602081019050919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612513826124ea565b9050919050565b61252381612509565b811461252d575f5ffd5b50565b5f8135905061253e8161251a565b92915050565b5f612556612551846124bb565b6124a1565b90508083825260208201905060208402830185811115612579576125786124e6565b5b835b818110156125a2578061258e8882612530565b84526020840193505060208101905061257b565b5050509392505050565b5f82601f8301126125c0576125bf61243f565b5b81356125d0848260208601612544565b91505092915050565b5f819050919050565b6125eb816125d9565b81146125f5575f5ffd5b50565b5f81359050612606816125e2565b92915050565b5f5f6040838503121561262257612621612437565b5b5f83013567ffffffffffffffff81111561263f5761263e61243b565b5b61264b858286016125ac565b925050602061265c858286016125f8565b9150509250929050565b5f5f6040838503121561267c5761267b612437565b5b5f61268985828601612530565b925050602061269a858286016125f8565b9150509250929050565b5f8115159050919050565b6126b8816126a4565b82525050565b5f6020820190506126d15f8301846126af565b92915050565b6126e0816125d9565b82525050565b5f6020820190506126f95f8301846126d7565b92915050565b5f5f5f6060848603121561271657612715612437565b5b5f61272386828701612530565b935050602061273486828701612530565b9250506040612745868287016125f8565b9150509250925092565b61275881612509565b82525050565b5f6020820190506127715f83018461274f565b92915050565b5f60ff82169050919050565b61278c81612777565b82525050565b5f6020820190506127a55f830184612783565b92915050565b5f61ffff82169050919050565b6127c1816127ab565b82525050565b5f6020820190506127da5f8301846127b8565b92915050565b5f602082840312156127f5576127f4612437565b5b5f61280284828501612530565b91505092915050565b5f5f6040838503121561282157612820612437565b5b5f61282e858286016125f8565b925050602061283f858286016125f8565b9150509250929050565b5f5ffd5b5f67ffffffffffffffff82111561286757612866612443565b5b612870826123c6565b9050602081019050919050565b828183375f83830152505050565b5f61289d6128988461284d565b6124a1565b9050828152602081018484840111156128b9576128b8612849565b5b6128c484828561287d565b509392505050565b5f82601f8301126128e0576128df61243f565b5b81356128f084826020860161288b565b91505092915050565b5f5f6040838503121561290f5761290e612437565b5b5f83013567ffffffffffffffff81111561292c5761292b61243b565b5b612938858286016128cc565b925050602083013567ffffffffffffffff8111156129595761295861243b565b5b612965858286016128cc565b9150509250929050565b5f5f6040838503121561298557612984612437565b5b5f61299285828601612530565b92505060206129a385828601612530565b9150509250929050565b6129b6816126a4565b81146129c0575f5ffd5b50565b5f813590506129d1816129ad565b92915050565b5f5f604083850312156129ed576129ec612437565b5b5f83013567ffffffffffffffff811115612a0a57612a0961243b565b5b612a16858286016125ac565b9250506020612a27858286016129c3565b9150509250929050565b5f60208284031215612a4657612a45612437565b5b5f82013567ffffffffffffffff811115612a6357612a6261243b565b5b612a6f848285016125ac565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612abc57607f821691505b602082108103612acf57612ace612a78565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b096020836123a8565b9150612b1482612ad5565b602082019050919050565b5f6020820190508181035f830152612b3681612afd565b9050919050565b7f526563697069656e7473206c6973742063616e6e6f7420626520656d707479005f82015250565b5f612b71601f836123a8565b9150612b7c82612b3d565b602082019050919050565b5f6020820190508181035f830152612b9e81612b65565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f612bd96020836123a8565b9150612be482612ba5565b602082019050919050565b5f6020820190508181035f830152612c0681612bcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115612c8f57808604811115612c6b57612c6a612c0d565b5b6001851615612c7a5780820291505b8081029050612c8885612c3a565b9450612c4f565b94509492505050565b5f82612ca75760019050612d62565b81612cb4575f9050612d62565b8160018114612cca5760028114612cd457612d03565b6001915050612d62565b60ff841115612ce657612ce5612c0d565b5b8360020a915084821115612cfd57612cfc612c0d565b5b50612d62565b5060208310610133831016604e8410600b8410161715612d385782820a905083811115612d3357612d32612c0d565b5b612d62565b612d458484846001612c46565b92509050818404811115612d5c57612d5b612c0d565b5b81810290505b9392505050565b5f612d73826125d9565b9150612d7e83612777565b9250612dab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c98565b905092915050565b5f612dbd826125d9565b9150612dc8836125d9565b9250828202612dd6816125d9565b91508282048414831517612ded57612dec612c0d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f612e556019836123a8565b9150612e6082612e21565b602082019050919050565b5f6020820190508181035f830152612e8281612e49565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612ee36028836123a8565b9150612eee82612e89565b604082019050919050565b5f6020820190508181035f830152612f1081612ed7565b9050919050565b5f612f21826125d9565b9150612f2c836125d9565b9250828201905080821115612f4457612f43612c0d565b5b92915050565b7f544553543a2054686520556e69737761702056322070616972206164647265735f8201527f732063616e6e6f7420626520746865207a65726f20616464726573732e000000602082015250565b5f612fa4603d836123a8565b9150612faf82612f4a565b604082019050919050565b5f6020820190508181035f830152612fd181612f98565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130326025836123a8565b915061303d82612fd8565b604082019050919050565b5f6020820190508181035f83015261305f81613026565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026130c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613087565b6130cc8683613087565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6131076131026130fd846125d9565b6130e4565b6125d9565b9050919050565b5f819050919050565b613120836130ed565b61313461312c8261310e565b848454613093565b825550505050565b5f5f905090565b61314b61313c565b613156818484613117565b505050565b5b818110156131795761316e5f82613143565b60018101905061315c565b5050565b601f8211156131be5761318f81613066565b61319884613078565b810160208510156131a7578190505b6131bb6131b385613078565b83018261315b565b50505b505050565b5f82821c905092915050565b5f6131de5f19846008026131c3565b1980831691505092915050565b5f6131f683836131cf565b9150826002028217905092915050565b61320f8261239e565b67ffffffffffffffff81111561322857613227612443565b5b6132328254612aa5565b61323d82828561317d565b5f60209050601f83116001811461326e575f841561325c578287015190505b61326685826131eb565b8655506132cd565b601f19841661327c86613066565b5f5b828110156132a35784890151825560018201915060208501945060208101905061327e565b868310156132c057848901516132bc601f8916826131cf565b8355505b6001600288020188555050505b505050505050565b7f57686974656c6973743a2061646472657373206c6973742063616e6e6f7420625f8201527f6520656d70747900000000000000000000000000000000000000000000000000602082015250565b5f61332f6027836123a8565b915061333a826132d5565b604082019050919050565b5f6020820190508181035f83015261335c81613323565b9050919050565b7f57686974656c6973743a20696e76616c696420616464726573730000000000005f82015250565b5f613397601a836123a8565b91506133a282613363565b602082019050919050565b5f6020820190508181035f8301526133c48161338b565b9050919050565b5f819050919050565b6133e56133e0826125d9565b6133cb565b82525050565b5f8160601b9050919050565b5f613401826133eb565b9050919050565b5f613412826133f7565b9050919050565b61342a61342582612509565b613408565b82525050565b5f61343b82866133d4565b60208201915061344b8285613419565b60148201915061345b82846133d4565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134a3826125d9565b91506134ae836125d9565b9250826134be576134bd61346c565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6135236026836123a8565b915061352e826134c9565b604082019050919050565b5f6020820190508181035f83015261355081613517565b9050919050565b7f436f6e74726163743a207472616465206973206e6f74206f70656e21000000005f82015250565b5f61358b601c836123a8565b915061359682613557565b602082019050919050565b5f6020820190508181035f8301526135b88161357f565b9050919050565b7f436f6e74726163743a2074726164696e67206973206e6f7420737461727465645f82015250565b5f6135f36020836123a8565b91506135fe826135bf565b602082019050919050565b5f6020820190508181035f830152613620816135e7565b9050919050565b5f613631826125d9565b915061363c836125d9565b92508261364c5761364b61346c565b5b828204905092915050565b5f613661826125d9565b915061366c836125d9565b925082820390508181111561368457613683612c0d565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6136e46024836123a8565b91506136ef8261368a565b604082019050919050565b5f6020820190508181035f830152613711816136d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137726022836123a8565b915061377d82613718565b604082019050919050565b5f6020820190508181035f83015261379f81613766565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6137da601f836123a8565b91506137e5826137a6565b602082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6138686025836123a8565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6138f66023836123a8565b91506139018261389c565b604082019050919050565b5f6020820190508181035f830152613923816138ea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6139846026836123a8565b915061398f8261392a565b604082019050919050565b5f6020820190508181035f8301526139b181613978565b905091905056fea2646970667358221220141d4c975d4c41ae90246e2b0123068bb5d05b5bb96bdbcd588c0586e448b1da64736f6c634300081e0033
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106101ee575f3560e01c8063715018a61161010d578063b715af76116100a0578063e724b0c21161006f578063e724b0c21461059a578063ece8c31c146105b6578063f2fde38b146105d2578063f437bc59146105ee576101ee565b8063b715af7614610514578063bf0058d014610530578063d5abeb011461054c578063dd62ed3e1461056a576101ee565b806395d89b41116100dc57806395d89b4114610478578063985bdfd114610496578063a457c2d7146104b4578063a9059cbb146104e4576101ee565b8063715018a6146104185780638187f516146104225780638da5cb5b1461043e5780638ee6f96c1461045c576101ee565b80632b14ca561161018557806349bd5a5e1161015457806349bd5a5e1461038e5780634c255c97146103ac57806358a1aaae146103ca57806370a08231146103e8576101ee565b80632b14ca5614610304578063313ce5671461032257806339509351146103405780634706240214610370576101ee565b806318160ddd116101c157806318160ddd1461027a57806321326f091461029857806323b872dd146102b657806327c8f835146102e6576101ee565b806306fdde03146101f257806308b3e41914610210578063095ea7b31461022c578063158ef93e1461025c575b5f5ffd5b6101fa61060c565b604051610207919061240e565b60405180910390f35b61022a6004803603810190610225919061260c565b61069c565b005b61024660048036038101906102419190612666565b6108a6565b60405161025391906126be565b60405180910390f35b6102646108c3565b60405161027191906126be565b60405180910390f35b6102826108d5565b60405161028f91906126e6565b60405180910390f35b6102a06108de565b6040516102ad91906126e6565b60405180910390f35b6102d060048036038101906102cb91906126ff565b6108e4565b6040516102dd91906126be565b60405180910390f35b6102ee6109d6565b6040516102fb919061275e565b60405180910390f35b61030c6109fb565b60405161031991906126e6565b60405180910390f35b61032a610a1f565b6040516103379190612792565b60405180910390f35b61035a60048036038101906103559190612666565b610a27565b60405161036791906126be565b60405180910390f35b610378610ace565b60405161038591906126e6565b60405180910390f35b610396610af2565b6040516103a3919061275e565b60405180910390f35b6103b4610b18565b6040516103c191906127c7565b60405180910390f35b6103d2610b1e565b6040516103df91906126e6565b60405180910390f35b61040260048036038101906103fd91906127e0565b610b24565b60405161040f91906126e6565b60405180910390f35b610420610b6a565b005b61043c600480360381019061043791906127e0565b610c0a565b005b610446610d51565b604051610453919061275e565b60405180910390f35b61047660048036038101906104719190612666565b610d78565b005b610480610eee565b60405161048d919061240e565b60405180910390f35b61049e610f7e565b6040516104ab91906127c7565b60405180910390f35b6104ce60048036038101906104c99190612666565b610f84565b6040516104db91906126be565b60405180910390f35b6104fe60048036038101906104f99190612666565b61106a565b60405161050b91906126be565b60405180910390f35b61052e6004803603810190610529919061280b565b611087565b005b61054a600480360381019061054591906128f9565b61112e565b005b6105546111e7565b60405161056191906126e6565b60405180910390f35b610584600480360381019061057f919061296f565b61120b565b60405161059191906126e6565b60405180910390f35b6105b460048036038101906105af91906129d7565b61128d565b005b6105d060048036038101906105cb9190612a31565b61147b565b005b6105ec60048036038101906105e791906127e0565b611679565b005b6105f6611788565b604051610603919061275e565b60405180910390f35b60606004805461061b90612aa5565b80601f016020809104026020016040519081016040528092919081815260200182805461064790612aa5565b80156106925780601f1061066957610100808354040283529160200191610692565b820191905f5260205f20905b81548152906001019060200180831161067557829003601f168201915b5050505050905090565b6106a46117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072890612b1f565b60405180910390fd5b5f825111610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076b90612b87565b60405180910390fd5b5f81116107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ad90612bef565b60405180910390fd5b5f6107bf610a1f565b600a6107cb9190612d69565b826107d69190612db3565b90505f5f90505b83518110156108a0575f73ffffffffffffffffffffffffffffffffffffffff168482815181106108105761080f612df4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590612e6b565b60405180910390fd5b6108933385838151811061088557610884612df4565b5b6020026020010151846117b4565b80806001019150506107dd565b50505050565b5f6108b96108b26117ad565b8484611d40565b6001905092915050565b60065f9054906101000a900460ff1681565b5f600354905090565b600a5481565b5f6108f08484846117b4565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6109376117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90612ef9565b60405180910390fd5b6109ca856109c26117ad565b858403611d40565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6012905090565b5f610ac4610a336117ad565b848460025f610a406117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610abf9190612f17565b611d40565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b60095481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b726117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690612b1f565b60405180910390fd5b610c085f611f03565b565b610c126117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690612b1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0490612fba565b60405180910390fd5b80600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d806117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490612b1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290612e6b565b60405180910390fd5b5f8111610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612bef565b60405180910390fd5b5f610ec6610a1f565b600a610ed29190612d69565b82610edd9190612db3565b9050610ee98382611fc4565b505050565b606060058054610efd90612aa5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2990612aa5565b8015610f745780601f10610f4b57610100808354040283529160200191610f74565b820191905f5260205f20905b815481529060010190602001808311610f5757829003601f168201915b5050505050905090565b61271081565b5f5f60025f610f916117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290613048565b60405180910390fd5b61105f6110566117ad565b85858403611d40565b600191505092915050565b5f61107d6110766117ad565b84846117b4565b6001905092915050565b61108f6117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390612b1f565b60405180910390fd5b8160098190555080600a819055505050565b6111366117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90612b1f565b60405180910390fd5b81600490816111d29190613206565b5080600590816111e29190613206565b505050565b7f0000000000000000000000000000000000000000033b2e3c9fd0803ce800000081565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6112956117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612b1f565b60405180910390fd5b5f825111611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613345565b60405180910390fd5b5f5f90505b8251811015611476575f73ffffffffffffffffffffffffffffffffffffffff1683828151811061139d5761139c612df4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f2906133ad565b60405180910390fd5b81600b5f85848151811061141257611411612df4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061136a565b505050565b6114836117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790612b1f565b60405180910390fd5b5f815111611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90612b87565b60405180910390fd5b5f5f90505b8151811015611675575f82828151811061157557611574612df4565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490612e6b565b60405180910390fd5b5f61271062015f9142848660405160200161160a93929190613430565b604051602081830303815290604052805190602001205f1c61162c9190613499565b6116369190612f17565b90505f611641610a1f565b600a61164d9190612d69565b826116589190612db3565b90506116653384836117b4565b5050508080600101915050611558565b5050565b6116816117ad565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590612b1f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390613539565b60405180910390fd5b61178581611f03565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b6001151560065f9054906101000a900460ff16151514611809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611800906135a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561187857506001151560065f9054906101000a900460ff161515145b1561193057611885610d51565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806118f057506118c1610d51565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613609565b60405180910390fd5b5b5f8190505f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156119c55750611995610d51565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611a0457506119d4610d51565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c6e575f5f9050600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611a6c576009549050611b26565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b255760011515600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611b1e575f9050611b24565b600a5490505b5b5b5f811115611c6c575f61271061ffff168285611b429190612db3565b611b4c9190613627565b90508084611b5a9190613657565b9250611b888660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361211c565b611b90610d51565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611c6a5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c6191906126e6565b60405180910390a35b505b505b611c7984848361211c565b611c81610d51565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d3a578273ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d3191906126e6565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906136fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613788565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ef691906126e6565b60405180910390a3505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612032576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612029906137f0565b60405180910390fd5b61203d5f8383612394565b8060035f82825461204e9190612f17565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120a19190612f17565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161210591906126e6565b60405180910390a36121185f8383612399565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361218a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121819061387e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef9061390c565b60405180910390fd5b612203838383612394565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e9061399a565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546123179190612f17565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161237b91906126e6565b60405180910390a361238e848484612399565b50505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6123e08261239e565b6123ea81856123a8565b93506123fa8185602086016123b8565b612403816123c6565b840191505092915050565b5f6020820190508181035f83015261242681846123d6565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612479826123c6565b810181811067ffffffffffffffff8211171561249857612497612443565b5b80604052505050565b5f6124aa61242e565b90506124b68282612470565b919050565b5f67ffffffffffffffff8211156124d5576124d4612443565b5b602082029050602081019050919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612513826124ea565b9050919050565b61252381612509565b811461252d575f5ffd5b50565b5f8135905061253e8161251a565b92915050565b5f612556612551846124bb565b6124a1565b90508083825260208201905060208402830185811115612579576125786124e6565b5b835b818110156125a2578061258e8882612530565b84526020840193505060208101905061257b565b5050509392505050565b5f82601f8301126125c0576125bf61243f565b5b81356125d0848260208601612544565b91505092915050565b5f819050919050565b6125eb816125d9565b81146125f5575f5ffd5b50565b5f81359050612606816125e2565b92915050565b5f5f6040838503121561262257612621612437565b5b5f83013567ffffffffffffffff81111561263f5761263e61243b565b5b61264b858286016125ac565b925050602061265c858286016125f8565b9150509250929050565b5f5f6040838503121561267c5761267b612437565b5b5f61268985828601612530565b925050602061269a858286016125f8565b9150509250929050565b5f8115159050919050565b6126b8816126a4565b82525050565b5f6020820190506126d15f8301846126af565b92915050565b6126e0816125d9565b82525050565b5f6020820190506126f95f8301846126d7565b92915050565b5f5f5f6060848603121561271657612715612437565b5b5f61272386828701612530565b935050602061273486828701612530565b9250506040612745868287016125f8565b9150509250925092565b61275881612509565b82525050565b5f6020820190506127715f83018461274f565b92915050565b5f60ff82169050919050565b61278c81612777565b82525050565b5f6020820190506127a55f830184612783565b92915050565b5f61ffff82169050919050565b6127c1816127ab565b82525050565b5f6020820190506127da5f8301846127b8565b92915050565b5f602082840312156127f5576127f4612437565b5b5f61280284828501612530565b91505092915050565b5f5f6040838503121561282157612820612437565b5b5f61282e858286016125f8565b925050602061283f858286016125f8565b9150509250929050565b5f5ffd5b5f67ffffffffffffffff82111561286757612866612443565b5b612870826123c6565b9050602081019050919050565b828183375f83830152505050565b5f61289d6128988461284d565b6124a1565b9050828152602081018484840111156128b9576128b8612849565b5b6128c484828561287d565b509392505050565b5f82601f8301126128e0576128df61243f565b5b81356128f084826020860161288b565b91505092915050565b5f5f6040838503121561290f5761290e612437565b5b5f83013567ffffffffffffffff81111561292c5761292b61243b565b5b612938858286016128cc565b925050602083013567ffffffffffffffff8111156129595761295861243b565b5b612965858286016128cc565b9150509250929050565b5f5f6040838503121561298557612984612437565b5b5f61299285828601612530565b92505060206129a385828601612530565b9150509250929050565b6129b6816126a4565b81146129c0575f5ffd5b50565b5f813590506129d1816129ad565b92915050565b5f5f604083850312156129ed576129ec612437565b5b5f83013567ffffffffffffffff811115612a0a57612a0961243b565b5b612a16858286016125ac565b9250506020612a27858286016129c3565b9150509250929050565b5f60208284031215612a4657612a45612437565b5b5f82013567ffffffffffffffff811115612a6357612a6261243b565b5b612a6f848285016125ac565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612abc57607f821691505b602082108103612acf57612ace612a78565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b096020836123a8565b9150612b1482612ad5565b602082019050919050565b5f6020820190508181035f830152612b3681612afd565b9050919050565b7f526563697069656e7473206c6973742063616e6e6f7420626520656d707479005f82015250565b5f612b71601f836123a8565b9150612b7c82612b3d565b602082019050919050565b5f6020820190508181035f830152612b9e81612b65565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f612bd96020836123a8565b9150612be482612ba5565b602082019050919050565b5f6020820190508181035f830152612c0681612bcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115612c8f57808604811115612c6b57612c6a612c0d565b5b6001851615612c7a5780820291505b8081029050612c8885612c3a565b9450612c4f565b94509492505050565b5f82612ca75760019050612d62565b81612cb4575f9050612d62565b8160018114612cca5760028114612cd457612d03565b6001915050612d62565b60ff841115612ce657612ce5612c0d565b5b8360020a915084821115612cfd57612cfc612c0d565b5b50612d62565b5060208310610133831016604e8410600b8410161715612d385782820a905083811115612d3357612d32612c0d565b5b612d62565b612d458484846001612c46565b92509050818404811115612d5c57612d5b612c0d565b5b81810290505b9392505050565b5f612d73826125d9565b9150612d7e83612777565b9250612dab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c98565b905092915050565b5f612dbd826125d9565b9150612dc8836125d9565b9250828202612dd6816125d9565b91508282048414831517612ded57612dec612c0d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f612e556019836123a8565b9150612e6082612e21565b602082019050919050565b5f6020820190508181035f830152612e8281612e49565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612ee36028836123a8565b9150612eee82612e89565b604082019050919050565b5f6020820190508181035f830152612f1081612ed7565b9050919050565b5f612f21826125d9565b9150612f2c836125d9565b9250828201905080821115612f4457612f43612c0d565b5b92915050565b7f544553543a2054686520556e69737761702056322070616972206164647265735f8201527f732063616e6e6f7420626520746865207a65726f20616464726573732e000000602082015250565b5f612fa4603d836123a8565b9150612faf82612f4a565b604082019050919050565b5f6020820190508181035f830152612fd181612f98565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130326025836123a8565b915061303d82612fd8565b604082019050919050565b5f6020820190508181035f83015261305f81613026565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026130c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613087565b6130cc8683613087565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6131076131026130fd846125d9565b6130e4565b6125d9565b9050919050565b5f819050919050565b613120836130ed565b61313461312c8261310e565b848454613093565b825550505050565b5f5f905090565b61314b61313c565b613156818484613117565b505050565b5b818110156131795761316e5f82613143565b60018101905061315c565b5050565b601f8211156131be5761318f81613066565b61319884613078565b810160208510156131a7578190505b6131bb6131b385613078565b83018261315b565b50505b505050565b5f82821c905092915050565b5f6131de5f19846008026131c3565b1980831691505092915050565b5f6131f683836131cf565b9150826002028217905092915050565b61320f8261239e565b67ffffffffffffffff81111561322857613227612443565b5b6132328254612aa5565b61323d82828561317d565b5f60209050601f83116001811461326e575f841561325c578287015190505b61326685826131eb565b8655506132cd565b601f19841661327c86613066565b5f5b828110156132a35784890151825560018201915060208501945060208101905061327e565b868310156132c057848901516132bc601f8916826131cf565b8355505b6001600288020188555050505b505050505050565b7f57686974656c6973743a2061646472657373206c6973742063616e6e6f7420625f8201527f6520656d70747900000000000000000000000000000000000000000000000000602082015250565b5f61332f6027836123a8565b915061333a826132d5565b604082019050919050565b5f6020820190508181035f83015261335c81613323565b9050919050565b7f57686974656c6973743a20696e76616c696420616464726573730000000000005f82015250565b5f613397601a836123a8565b91506133a282613363565b602082019050919050565b5f6020820190508181035f8301526133c48161338b565b9050919050565b5f819050919050565b6133e56133e0826125d9565b6133cb565b82525050565b5f8160601b9050919050565b5f613401826133eb565b9050919050565b5f613412826133f7565b9050919050565b61342a61342582612509565b613408565b82525050565b5f61343b82866133d4565b60208201915061344b8285613419565b60148201915061345b82846133d4565b602082019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134a3826125d9565b91506134ae836125d9565b9250826134be576134bd61346c565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6135236026836123a8565b915061352e826134c9565b604082019050919050565b5f6020820190508181035f83015261355081613517565b9050919050565b7f436f6e74726163743a207472616465206973206e6f74206f70656e21000000005f82015250565b5f61358b601c836123a8565b915061359682613557565b602082019050919050565b5f6020820190508181035f8301526135b88161357f565b9050919050565b7f436f6e74726163743a2074726164696e67206973206e6f7420737461727465645f82015250565b5f6135f36020836123a8565b91506135fe826135bf565b602082019050919050565b5f6020820190508181035f830152613620816135e7565b9050919050565b5f613631826125d9565b915061363c836125d9565b92508261364c5761364b61346c565b5b828204905092915050565b5f613661826125d9565b915061366c836125d9565b925082820390508181111561368457613683612c0d565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6136e46024836123a8565b91506136ef8261368a565b604082019050919050565b5f6020820190508181035f830152613711816136d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137726022836123a8565b915061377d82613718565b604082019050919050565b5f6020820190508181035f83015261379f81613766565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6137da601f836123a8565b91506137e5826137a6565b602082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6138686025836123a8565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6138f66023836123a8565b91506139018261389c565b604082019050919050565b5f6020820190508181035f830152613923816138ea565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6139846026836123a8565b915061398f8261392a565b604082019050919050565b5f6020820190508181035f8301526139b181613978565b905091905056fea2646970667358221220141d4c975d4c41ae90246e2b0123068bb5d05b5bb96bdbcd588c0586e448b1da64736f6c634300081e0033
Deployed Bytecode Sourcemap
25340:5603:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14366:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28960:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16599:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25566:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15486:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25870:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17275:529;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25640:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25789:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15328:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18213:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25747:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25604:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25512:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25832:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15657:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7660:103;;;:::i;:::-;;27122:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6973:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28072:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14585:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25462:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19006:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16013:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27505:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27352:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25385:70;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16276:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27680:382;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28389:566;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7918:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25718:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14366:100;14420:13;14453:5;14446:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14366:100;:::o;28960:475::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;29074:1:::1;29054:10;:17;:21;29046:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29135:1;29126:6;:10;29118:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29182:20;29221:10;:8;:10::i;:::-;29215:2;:16;;;;:::i;:::-;29205:6;:27;;;;:::i;:::-;29182:50;;29244:9;29256:1;29244:13;;29239:193;29263:10;:17;29259:1;:21;29239:193;;;29331:1;29306:27;;:10;29317:1;29306:13;;;;;;;;:::i;:::-;;;;;;;;:27;;::::0;29298:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29374:50;29384:10;29396;29407:1;29396:13;;;;;;;;:::i;:::-;;;;;;;;29411:12;29374:9;:50::i;:::-;29282:3;;;;;;;29239:193;;;;29039:396;28960:475:::0;;:::o;16599:194::-;16707:4;16724:39;16733:12;:10;:12::i;:::-;16747:7;16756:6;16724:8;:39::i;:::-;16781:4;16774:11;;16599:194;;;;:::o;25566:31::-;;;;;;;;;;;;;:::o;15486:108::-;15547:7;15574:12;;15567:19;;15486:108;:::o;25870:31::-;;;;:::o;17275:529::-;17415:4;17432:36;17442:6;17450:9;17461:6;17432:9;:36::i;:::-;17481:24;17508:11;:19;17520:6;17508:19;;;;;;;;;;;;;;;:33;17528:12;:10;:12::i;:::-;17508:33;;;;;;;;;;;;;;;;17481:60;;17594:6;17574:16;:26;;17552:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;17704:57;17713:6;17721:12;:10;:12::i;:::-;17754:6;17735:16;:25;17704:8;:57::i;:::-;17792:4;17785:11;;;17275:529;;;;;:::o;25640:71::-;;;;;;;;;;;;;:::o;25789:36::-;;;:::o;15328:93::-;15386:5;15411:2;15404:9;;15328:93;:::o;18213:290::-;18326:4;18343:130;18366:12;:10;:12::i;:::-;18393:7;18452:10;18415:11;:25;18427:12;:10;:12::i;:::-;18415:25;;;;;;;;;;;;;;;:34;18441:7;18415:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18343:8;:130::i;:::-;18491:4;18484:11;;18213:290;;;;:::o;25747:35::-;;;:::o;25604:29::-;;;;;;;;;;;;;:::o;25512:45::-;25552:5;25512:45;:::o;25832:31::-;;;;:::o;15657:143::-;15747:7;15774:9;:18;15784:7;15774:18;;;;;;;;;;;;;;;;15767:25;;15657:143;;;:::o;7660:103::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;7725:30:::1;7752:1;7725:18;:30::i;:::-;7660:103::o:0;27122:222::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;27227:1:::1;27201:28;;:14;:28;;::::0;27193:102:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27322:14;27306:13;;:30;;;;;;;;;;;;;;;;;;27122:222:::0;:::o;6973:87::-;7019:7;7046:6;;;;;;;;;;;7039:13;;6973:87;:::o;28072:311::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;28189:1:::1;28168:23;;:9;:23;;::::0;28160:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28245:1;28236:6;:10;28228:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28292:20;28331:10;:8;:10::i;:::-;28325:2;:16;;;;:::i;:::-;28315:6;:27;;;;:::i;:::-;28292:50;;28349:30;28355:9;28366:12;28349:5;:30::i;:::-;28153:230;28072:311:::0;;:::o;14585:104::-;14641:13;14674:7;14667:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14585:104;:::o;25462:42::-;25499:5;25462:42;:::o;19006:475::-;19124:4;19141:24;19168:11;:25;19180:12;:10;:12::i;:::-;19168:25;;;;;;;;;;;;;;;:34;19194:7;19168:34;;;;;;;;;;;;;;;;19141:61;;19255:15;19235:16;:35;;19213:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;19371:67;19380:12;:10;:12::i;:::-;19394:7;19422:15;19403:16;:34;19371:8;:67::i;:::-;19469:4;19462:11;;;19006:475;;;;:::o;16013:200::-;16124:4;16141:42;16151:12;:10;:12::i;:::-;16165:9;16176:6;16141:9;:42::i;:::-;16201:4;16194:11;;16013:200;;;;:::o;27505:167::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;27612:13:::1;27597:12;:28;;;;27651:13;27636:12;:28;;;;27505:167:::0;;:::o;27352:145::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;27454:6:::1;27446:5;:14;;;;;;:::i;:::-;;27481:8;27471:7;:18;;;;;;:::i;:::-;;27352:145:::0;;:::o;25385:70::-;;;:::o;16276:176::-;16390:7;16417:11;:18;16429:5;16417:18;;;;;;;;;;;;;;;:27;16436:7;16417:27;;;;;;;;;;;;;;;;16410:34;;16276:176;;;;:::o;27680:382::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;27803:1:::1;27783:10;:17;:21;27775:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27864:9;27876:1;27864:13;;27859:196;27883:10;:17;27879:1;:21;27859:196;;;27955:1;27930:27;;:10;27941:1;27930:13;;;;;;;;:::i;:::-;;;;;;;;:27;;::::0;27922:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28033:10;28003:12;:27;28016:10;28027:1;28016:13;;;;;;;;:::i;:::-;;;;;;;;28003:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;27902:3;;;;;;;27859:196;;;;27680:382:::0;;:::o;28389:566::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;28487:1:::1;28467:10;:17;:21;28459:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28538:9;28550:1;28538:13;;28533:413;28557:10;:17;28553:1;:21;28533:413;;;28592:17;28612:10;28623:1;28612:13;;;;;;;;:::i;:::-;;;;;;;;28592:33;;28665:1;28644:23;;:9;:23;;::::0;28636:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28719:12;28812:5;28804;28769:15;28786:9;28797:1;28752:47;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28742:58;;;;;;28734:67;;:75;;;;:::i;:::-;:83;;;;:::i;:::-;28719:98;;28831:20;28868:10;:8;:10::i;:::-;28862:2;:16;;;;:::i;:::-;28854:4;:25;;;;:::i;:::-;28831:48;;28892:46;28902:10;28914:9;28925:12;28892:9;:46::i;:::-;28581:365;;;28576:3;;;;;;;28533:413;;;;28389:566:::0;:::o;7918:238::-;7217:12;:10;:12::i;:::-;7207:22;;:6;;;;;;;;;;;:22;;;7185:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;8041:1:::1;8021:22;;:8;:22;;::::0;7999:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8120:28;8139:8;8120:18;:28::i;:::-;7918:238:::0;:::o;25718:19::-;;;;;;;;;;;;;:::o;5670:98::-;5723:7;5750:10;5743:17;;5670:98;:::o;29441:1499::-;29609:4;29594:19;;:11;;;;;;;;;;;:19;;;29572:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;29711:1;29686:27;;:13;;;;;;;;;;;:27;;;:50;;;;;29732:4;29717:19;;:11;;;;;;;;;;;:19;;;29686:50;29682:209;;;29787:7;:5;:7::i;:::-;29779:15;;:4;:15;;;:32;;;;29804:7;:5;:7::i;:::-;29798:13;;:2;:13;;;29779:32;29753:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;29682:209;29903:23;29929:6;29903:32;;29975:1;29950:27;;:13;;;;;;;;;;;:27;;;;:46;;;;;29989:7;:5;:7::i;:::-;29981:15;;:4;:15;;;;29950:46;:63;;;;;30006:7;:5;:7::i;:::-;30000:13;;:2;:13;;;;29950:63;29946:832;;;30030:12;30045:1;30030:16;;30073:13;;;;;;;;;;;30065:21;;:4;:21;;;30061:327;;30114:12;;30107:19;;30061:327;;;30171:13;;;;;;;;;;;30165:19;;:2;:19;;;30161:227;;30231:4;30209:26;;:12;:18;30222:4;30209:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;30205:168;;30267:1;30260:8;;30205:168;;;30341:12;;30334:19;;30205:168;30161:227;30061:327;30413:1;30406:4;:8;30402:365;;;30435:22;25552:5;30460:30;;30469:4;30460:6;:13;;;;:::i;:::-;:30;;;;:::i;:::-;30435:55;;30536:14;30527:6;:23;;;;:::i;:::-;30509:41;;30569:50;30585:4;30591:11;;;;;;;;;;;30604:14;30569:15;:50::i;:::-;30652:7;:5;:7::i;:::-;30644:15;;:4;:15;;;30640:112;;30704:11;;;;;;;;;;;30689:43;;30698:4;;;;;;;;;;;30689:43;;;30717:14;30689:43;;;;;;:::i;:::-;;;;;;;;30640:112;30416:351;30402:365;30015:763;29946:832;30790:42;30806:4;30812:2;30816:15;30790;:42::i;:::-;30857:7;:5;:7::i;:::-;30849:15;;:4;:15;;;30845:88;;30901:2;30886:35;;30895:4;;;;;;;;;;;30886:35;;;30905:15;30886:35;;;;;;:::i;:::-;;;;;;;;30845:88;29561:1379;29441:1499;;;:::o;22789:380::-;22942:1;22925:19;;:5;:19;;;22917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23023:1;23004:21;;:7;:21;;;22996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23107:6;23077:11;:18;23089:5;23077:18;;;;;;;;;;;;;;;:27;23096:7;23077:27;;;;;;;;;;;;;;;:36;;;;23145:7;23129:32;;23138:5;23129:32;;;23154:6;23129:32;;;;;;:::i;:::-;;;;;;;;22789:380;;;:::o;8316:191::-;8390:16;8409:6;;;;;;;;;;;8390:25;;8435:8;8426:6;;:17;;;;;;;;;;;;;;;;;;8490:8;8459:40;;8480:8;8459:40;;;;;;;;;;;;8379:128;8316:191;:::o;21028:399::-;21131:1;21112:21;;:7;:21;;;21104:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21182:49;21211:1;21215:7;21224:6;21182:20;:49::i;:::-;21260:6;21244:12;;:22;;;;;;;:::i;:::-;;;;;;;;21299:6;21277:9;:18;21287:7;21277:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21342:7;21321:37;;21338:1;21321:37;;;21351:6;21321:37;;;;;;:::i;:::-;;;;;;;;21371:48;21399:1;21403:7;21412:6;21371:19;:48::i;:::-;21028:399;;:::o;19971:770::-;20129:1;20111:20;;:6;:20;;;20103:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20213:1;20192:23;;:9;:23;;;20184:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20268:47;20289:6;20297:9;20308:6;20268:20;:47::i;:::-;20328:21;20352:9;:17;20362:6;20352:17;;;;;;;;;;;;;;;;20328:41;;20419:6;20402:13;:23;;20380:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20563:6;20547:13;:22;20527:9;:17;20537:6;20527:17;;;;;;;;;;;;;;;:42;;;;20615:6;20591:9;:20;20601:9;20591:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;20656:9;20639:35;;20648:6;20639:35;;;20667:6;20639:35;;;;;;:::i;:::-;;;;;;;;20687:46;20707:6;20715:9;20726:6;20687:19;:46::i;:::-;20092:649;19971:770;;;:::o;23769:125::-;;;;:::o;24498:124::-;;;;:::o;7:99:6:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:117;1678:1;1675;1668:12;1692:180;1740:77;1737:1;1730:88;1837:4;1834:1;1827:15;1861:4;1858:1;1851:15;1878:281;1961:27;1983:4;1961:27;:::i;:::-;1953:6;1949:40;2091:6;2079:10;2076:22;2055:18;2043:10;2040:34;2037:62;2034:88;;;2102:18;;:::i;:::-;2034:88;2142:10;2138:2;2131:22;1921:238;1878:281;;:::o;2165:129::-;2199:6;2226:20;;:::i;:::-;2216:30;;2255:33;2283:4;2275:6;2255:33;:::i;:::-;2165:129;;;:::o;2300:311::-;2377:4;2467:18;2459:6;2456:30;2453:56;;;2489:18;;:::i;:::-;2453:56;2539:4;2531:6;2527:17;2519:25;;2599:4;2593;2589:15;2581:23;;2300:311;;;:::o;2617:117::-;2726:1;2723;2716:12;2740:126;2777:7;2817:42;2810:5;2806:54;2795:65;;2740:126;;;:::o;2872:96::-;2909:7;2938:24;2956:5;2938:24;:::i;:::-;2927:35;;2872:96;;;:::o;2974:122::-;3047:24;3065:5;3047:24;:::i;:::-;3040:5;3037:35;3027:63;;3086:1;3083;3076:12;3027:63;2974:122;:::o;3102:139::-;3148:5;3186:6;3173:20;3164:29;;3202:33;3229:5;3202:33;:::i;:::-;3102:139;;;;:::o;3264:710::-;3360:5;3385:81;3401:64;3458:6;3401:64;:::i;:::-;3385:81;:::i;:::-;3376:90;;3486:5;3515:6;3508:5;3501:21;3549:4;3542:5;3538:16;3531:23;;3602:4;3594:6;3590:17;3582:6;3578:30;3631:3;3623:6;3620:15;3617:122;;;3650:79;;:::i;:::-;3617:122;3765:6;3748:220;3782:6;3777:3;3774:15;3748:220;;;3857:3;3886:37;3919:3;3907:10;3886:37;:::i;:::-;3881:3;3874:50;3953:4;3948:3;3944:14;3937:21;;3824:144;3808:4;3803:3;3799:14;3792:21;;3748:220;;;3752:21;3366:608;;3264:710;;;;;:::o;3997:370::-;4068:5;4117:3;4110:4;4102:6;4098:17;4094:27;4084:122;;4125:79;;:::i;:::-;4084:122;4242:6;4229:20;4267:94;4357:3;4349:6;4342:4;4334:6;4330:17;4267:94;:::i;:::-;4258:103;;4074:293;3997:370;;;;:::o;4373:77::-;4410:7;4439:5;4428:16;;4373:77;;;:::o;4456:122::-;4529:24;4547:5;4529:24;:::i;:::-;4522:5;4519:35;4509:63;;4568:1;4565;4558:12;4509:63;4456:122;:::o;4584:139::-;4630:5;4668:6;4655:20;4646:29;;4684:33;4711:5;4684:33;:::i;:::-;4584:139;;;;:::o;4729:684::-;4822:6;4830;4879:2;4867:9;4858:7;4854:23;4850:32;4847:119;;;4885:79;;:::i;:::-;4847:119;5033:1;5022:9;5018:17;5005:31;5063:18;5055:6;5052:30;5049:117;;;5085:79;;:::i;:::-;5049:117;5190:78;5260:7;5251:6;5240:9;5236:22;5190:78;:::i;:::-;5180:88;;4976:302;5317:2;5343:53;5388:7;5379:6;5368:9;5364:22;5343:53;:::i;:::-;5333:63;;5288:118;4729:684;;;;;:::o;5419:474::-;5487:6;5495;5544:2;5532:9;5523:7;5519:23;5515:32;5512:119;;;5550:79;;:::i;:::-;5512:119;5670:1;5695:53;5740:7;5731:6;5720:9;5716:22;5695:53;:::i;:::-;5685:63;;5641:117;5797:2;5823:53;5868:7;5859:6;5848:9;5844:22;5823:53;:::i;:::-;5813:63;;5768:118;5419:474;;;;;:::o;5899:90::-;5933:7;5976:5;5969:13;5962:21;5951:32;;5899:90;;;:::o;5995:109::-;6076:21;6091:5;6076:21;:::i;:::-;6071:3;6064:34;5995:109;;:::o;6110:210::-;6197:4;6235:2;6224:9;6220:18;6212:26;;6248:65;6310:1;6299:9;6295:17;6286:6;6248:65;:::i;:::-;6110:210;;;;:::o;6326:118::-;6413:24;6431:5;6413:24;:::i;:::-;6408:3;6401:37;6326:118;;:::o;6450:222::-;6543:4;6581:2;6570:9;6566:18;6558:26;;6594:71;6662:1;6651:9;6647:17;6638:6;6594:71;:::i;:::-;6450:222;;;;:::o;6678:619::-;6755:6;6763;6771;6820:2;6808:9;6799:7;6795:23;6791:32;6788:119;;;6826:79;;:::i;:::-;6788:119;6946:1;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6917:117;7073:2;7099:53;7144:7;7135:6;7124:9;7120:22;7099:53;:::i;:::-;7089:63;;7044:118;7201:2;7227:53;7272:7;7263:6;7252:9;7248:22;7227:53;:::i;:::-;7217:63;;7172:118;6678:619;;;;;:::o;7303:118::-;7390:24;7408:5;7390:24;:::i;:::-;7385:3;7378:37;7303:118;;:::o;7427:222::-;7520:4;7558:2;7547:9;7543:18;7535:26;;7571:71;7639:1;7628:9;7624:17;7615:6;7571:71;:::i;:::-;7427:222;;;;:::o;7655:86::-;7690:7;7730:4;7723:5;7719:16;7708:27;;7655:86;;;:::o;7747:112::-;7830:22;7846:5;7830:22;:::i;:::-;7825:3;7818:35;7747:112;;:::o;7865:214::-;7954:4;7992:2;7981:9;7977:18;7969:26;;8005:67;8069:1;8058:9;8054:17;8045:6;8005:67;:::i;:::-;7865:214;;;;:::o;8085:89::-;8121:7;8161:6;8154:5;8150:18;8139:29;;8085:89;;;:::o;8180:115::-;8265:23;8282:5;8265:23;:::i;:::-;8260:3;8253:36;8180:115;;:::o;8301:218::-;8392:4;8430:2;8419:9;8415:18;8407:26;;8443:69;8509:1;8498:9;8494:17;8485:6;8443:69;:::i;:::-;8301:218;;;;:::o;8525:329::-;8584:6;8633:2;8621:9;8612:7;8608:23;8604:32;8601:119;;;8639:79;;:::i;:::-;8601:119;8759:1;8784:53;8829:7;8820:6;8809:9;8805:22;8784:53;:::i;:::-;8774:63;;8730:117;8525:329;;;;:::o;8860:474::-;8928:6;8936;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:53;9181:7;9172:6;9161:9;9157:22;9136:53;:::i;:::-;9126:63;;9082:117;9238:2;9264:53;9309:7;9300:6;9289:9;9285:22;9264:53;:::i;:::-;9254:63;;9209:118;8860:474;;;;;:::o;9340:117::-;9449:1;9446;9439:12;9463:308;9525:4;9615:18;9607:6;9604:30;9601:56;;;9637:18;;:::i;:::-;9601:56;9675:29;9697:6;9675:29;:::i;:::-;9667:37;;9759:4;9753;9749:15;9741:23;;9463:308;;;:::o;9777:148::-;9875:6;9870:3;9865;9852:30;9916:1;9907:6;9902:3;9898:16;9891:27;9777:148;;;:::o;9931:425::-;10009:5;10034:66;10050:49;10092:6;10050:49;:::i;:::-;10034:66;:::i;:::-;10025:75;;10123:6;10116:5;10109:21;10161:4;10154:5;10150:16;10199:3;10190:6;10185:3;10181:16;10178:25;10175:112;;;10206:79;;:::i;:::-;10175:112;10296:54;10343:6;10338:3;10333;10296:54;:::i;:::-;10015:341;9931:425;;;;;:::o;10376:340::-;10432:5;10481:3;10474:4;10466:6;10462:17;10458:27;10448:122;;10489:79;;:::i;:::-;10448:122;10606:6;10593:20;10631:79;10706:3;10698:6;10691:4;10683:6;10679:17;10631:79;:::i;:::-;10622:88;;10438:278;10376:340;;;;:::o;10722:834::-;10810:6;10818;10867:2;10855:9;10846:7;10842:23;10838:32;10835:119;;;10873:79;;:::i;:::-;10835:119;11021:1;11010:9;11006:17;10993:31;11051:18;11043:6;11040:30;11037:117;;;11073:79;;:::i;:::-;11037:117;11178:63;11233:7;11224:6;11213:9;11209:22;11178:63;:::i;:::-;11168:73;;10964:287;11318:2;11307:9;11303:18;11290:32;11349:18;11341:6;11338:30;11335:117;;;11371:79;;:::i;:::-;11335:117;11476:63;11531:7;11522:6;11511:9;11507:22;11476:63;:::i;:::-;11466:73;;11261:288;10722:834;;;;;:::o;11562:474::-;11630:6;11638;11687:2;11675:9;11666:7;11662:23;11658:32;11655:119;;;11693:79;;:::i;:::-;11655:119;11813:1;11838:53;11883:7;11874:6;11863:9;11859:22;11838:53;:::i;:::-;11828:63;;11784:117;11940:2;11966:53;12011:7;12002:6;11991:9;11987:22;11966:53;:::i;:::-;11956:63;;11911:118;11562:474;;;;;:::o;12042:116::-;12112:21;12127:5;12112:21;:::i;:::-;12105:5;12102:32;12092:60;;12148:1;12145;12138:12;12092:60;12042:116;:::o;12164:133::-;12207:5;12245:6;12232:20;12223:29;;12261:30;12285:5;12261:30;:::i;:::-;12164:133;;;;:::o;12303:678::-;12393:6;12401;12450:2;12438:9;12429:7;12425:23;12421:32;12418:119;;;12456:79;;:::i;:::-;12418:119;12604:1;12593:9;12589:17;12576:31;12634:18;12626:6;12623:30;12620:117;;;12656:79;;:::i;:::-;12620:117;12761:78;12831:7;12822:6;12811:9;12807:22;12761:78;:::i;:::-;12751:88;;12547:302;12888:2;12914:50;12956:7;12947:6;12936:9;12932:22;12914:50;:::i;:::-;12904:60;;12859:115;12303:678;;;;;:::o;12987:539::-;13071:6;13120:2;13108:9;13099:7;13095:23;13091:32;13088:119;;;13126:79;;:::i;:::-;13088:119;13274:1;13263:9;13259:17;13246:31;13304:18;13296:6;13293:30;13290:117;;;13326:79;;:::i;:::-;13290:117;13431:78;13501:7;13492:6;13481:9;13477:22;13431:78;:::i;:::-;13421:88;;13217:302;12987:539;;;;:::o;13532:180::-;13580:77;13577:1;13570:88;13677:4;13674:1;13667:15;13701:4;13698:1;13691:15;13718:320;13762:6;13799:1;13793:4;13789:12;13779:22;;13846:1;13840:4;13836:12;13867:18;13857:81;;13923:4;13915:6;13911:17;13901:27;;13857:81;13985:2;13977:6;13974:14;13954:18;13951:38;13948:84;;14004:18;;:::i;:::-;13948:84;13769:269;13718:320;;;:::o;14044:182::-;14184:34;14180:1;14172:6;14168:14;14161:58;14044:182;:::o;14232:366::-;14374:3;14395:67;14459:2;14454:3;14395:67;:::i;:::-;14388:74;;14471:93;14560:3;14471:93;:::i;:::-;14589:2;14584:3;14580:12;14573:19;;14232:366;;;:::o;14604:419::-;14770:4;14808:2;14797:9;14793:18;14785:26;;14857:9;14851:4;14847:20;14843:1;14832:9;14828:17;14821:47;14885:131;15011:4;14885:131;:::i;:::-;14877:139;;14604:419;;;:::o;15029:181::-;15169:33;15165:1;15157:6;15153:14;15146:57;15029:181;:::o;15216:366::-;15358:3;15379:67;15443:2;15438:3;15379:67;:::i;:::-;15372:74;;15455:93;15544:3;15455:93;:::i;:::-;15573:2;15568:3;15564:12;15557:19;;15216:366;;;:::o;15588:419::-;15754:4;15792:2;15781:9;15777:18;15769:26;;15841:9;15835:4;15831:20;15827:1;15816:9;15812:17;15805:47;15869:131;15995:4;15869:131;:::i;:::-;15861:139;;15588:419;;;:::o;16013:182::-;16153:34;16149:1;16141:6;16137:14;16130:58;16013:182;:::o;16201:366::-;16343:3;16364:67;16428:2;16423:3;16364:67;:::i;:::-;16357:74;;16440:93;16529:3;16440:93;:::i;:::-;16558:2;16553:3;16549:12;16542:19;;16201:366;;;:::o;16573:419::-;16739:4;16777:2;16766:9;16762:18;16754:26;;16826:9;16820:4;16816:20;16812:1;16801:9;16797:17;16790:47;16854:131;16980:4;16854:131;:::i;:::-;16846:139;;16573:419;;;:::o;16998:180::-;17046:77;17043:1;17036:88;17143:4;17140:1;17133:15;17167:4;17164:1;17157:15;17184:102;17226:8;17273:5;17270:1;17266:13;17245:34;;17184:102;;;:::o;17292:848::-;17353:5;17360:4;17384:6;17375:15;;17408:5;17399:14;;17422:712;17443:1;17433:8;17430:15;17422:712;;;17538:4;17533:3;17529:14;17523:4;17520:24;17517:50;;;17547:18;;:::i;:::-;17517:50;17597:1;17587:8;17583:16;17580:451;;;18012:4;18005:5;18001:16;17992:25;;17580:451;18062:4;18056;18052:15;18044:23;;18092:32;18115:8;18092:32;:::i;:::-;18080:44;;17422:712;;;17292:848;;;;;;;:::o;18146:1073::-;18200:5;18391:8;18381:40;;18412:1;18403:10;;18414:5;;18381:40;18440:4;18430:36;;18457:1;18448:10;;18459:5;;18430:36;18526:4;18574:1;18569:27;;;;18610:1;18605:191;;;;18519:277;;18569:27;18587:1;18578:10;;18589:5;;;18605:191;18650:3;18640:8;18637:17;18634:43;;;18657:18;;:::i;:::-;18634:43;18706:8;18703:1;18699:16;18690:25;;18741:3;18734:5;18731:14;18728:40;;;18748:18;;:::i;:::-;18728:40;18781:5;;;18519:277;;18905:2;18895:8;18892:16;18886:3;18880:4;18877:13;18873:36;18855:2;18845:8;18842:16;18837:2;18831:4;18828:12;18824:35;18808:111;18805:246;;;18961:8;18955:4;18951:19;18942:28;;18996:3;18989:5;18986:14;18983:40;;;19003:18;;:::i;:::-;18983:40;19036:5;;18805:246;19076:42;19114:3;19104:8;19098:4;19095:1;19076:42;:::i;:::-;19061:57;;;;19150:4;19145:3;19141:14;19134:5;19131:25;19128:51;;;19159:18;;:::i;:::-;19128:51;19208:4;19201:5;19197:16;19188:25;;18146:1073;;;;;;:::o;19225:281::-;19283:5;19307:23;19325:4;19307:23;:::i;:::-;19299:31;;19351:25;19367:8;19351:25;:::i;:::-;19339:37;;19395:104;19432:66;19422:8;19416:4;19395:104;:::i;:::-;19386:113;;19225:281;;;;:::o;19512:410::-;19552:7;19575:20;19593:1;19575:20;:::i;:::-;19570:25;;19609:20;19627:1;19609:20;:::i;:::-;19604:25;;19664:1;19661;19657:9;19686:30;19704:11;19686:30;:::i;:::-;19675:41;;19865:1;19856:7;19852:15;19849:1;19846:22;19826:1;19819:9;19799:83;19776:139;;19895:18;;:::i;:::-;19776:139;19560:362;19512:410;;;;:::o;19928:180::-;19976:77;19973:1;19966:88;20073:4;20070:1;20063:15;20097:4;20094:1;20087:15;20114:175;20254:27;20250:1;20242:6;20238:14;20231:51;20114:175;:::o;20295:366::-;20437:3;20458:67;20522:2;20517:3;20458:67;:::i;:::-;20451:74;;20534:93;20623:3;20534:93;:::i;:::-;20652:2;20647:3;20643:12;20636:19;;20295:366;;;:::o;20667:419::-;20833:4;20871:2;20860:9;20856:18;20848:26;;20920:9;20914:4;20910:20;20906:1;20895:9;20891:17;20884:47;20948:131;21074:4;20948:131;:::i;:::-;20940:139;;20667:419;;;:::o;21092:227::-;21232:34;21228:1;21220:6;21216:14;21209:58;21301:10;21296:2;21288:6;21284:15;21277:35;21092:227;:::o;21325:366::-;21467:3;21488:67;21552:2;21547:3;21488:67;:::i;:::-;21481:74;;21564:93;21653:3;21564:93;:::i;:::-;21682:2;21677:3;21673:12;21666:19;;21325:366;;;:::o;21697:419::-;21863:4;21901:2;21890:9;21886:18;21878:26;;21950:9;21944:4;21940:20;21936:1;21925:9;21921:17;21914:47;21978:131;22104:4;21978:131;:::i;:::-;21970:139;;21697:419;;;:::o;22122:191::-;22162:3;22181:20;22199:1;22181:20;:::i;:::-;22176:25;;22215:20;22233:1;22215:20;:::i;:::-;22210:25;;22258:1;22255;22251:9;22244:16;;22279:3;22276:1;22273:10;22270:36;;;22286:18;;:::i;:::-;22270:36;22122:191;;;;:::o;22319:248::-;22459:34;22455:1;22447:6;22443:14;22436:58;22528:31;22523:2;22515:6;22511:15;22504:56;22319:248;:::o;22573:366::-;22715:3;22736:67;22800:2;22795:3;22736:67;:::i;:::-;22729:74;;22812:93;22901:3;22812:93;:::i;:::-;22930:2;22925:3;22921:12;22914:19;;22573:366;;;:::o;22945:419::-;23111:4;23149:2;23138:9;23134:18;23126:26;;23198:9;23192:4;23188:20;23184:1;23173:9;23169:17;23162:47;23226:131;23352:4;23226:131;:::i;:::-;23218:139;;22945:419;;;:::o;23370:224::-;23510:34;23506:1;23498:6;23494:14;23487:58;23579:7;23574:2;23566:6;23562:15;23555:32;23370:224;:::o;23600:366::-;23742:3;23763:67;23827:2;23822:3;23763:67;:::i;:::-;23756:74;;23839:93;23928:3;23839:93;:::i;:::-;23957:2;23952:3;23948:12;23941:19;;23600:366;;;:::o;23972:419::-;24138:4;24176:2;24165:9;24161:18;24153:26;;24225:9;24219:4;24215:20;24211:1;24200:9;24196:17;24189:47;24253:131;24379:4;24253:131;:::i;:::-;24245:139;;23972:419;;;:::o;24397:141::-;24446:4;24469:3;24461:11;;24492:3;24489:1;24482:14;24526:4;24523:1;24513:18;24505:26;;24397:141;;;:::o;24544:93::-;24581:6;24628:2;24623;24616:5;24612:14;24608:23;24598:33;;24544:93;;;:::o;24643:107::-;24687:8;24737:5;24731:4;24727:16;24706:37;;24643:107;;;;:::o;24756:393::-;24825:6;24875:1;24863:10;24859:18;24898:97;24928:66;24917:9;24898:97;:::i;:::-;25016:39;25046:8;25035:9;25016:39;:::i;:::-;25004:51;;25088:4;25084:9;25077:5;25073:21;25064:30;;25137:4;25127:8;25123:19;25116:5;25113:30;25103:40;;24832:317;;24756:393;;;;;:::o;25155:60::-;25183:3;25204:5;25197:12;;25155:60;;;:::o;25221:142::-;25271:9;25304:53;25322:34;25331:24;25349:5;25331:24;:::i;:::-;25322:34;:::i;:::-;25304:53;:::i;:::-;25291:66;;25221:142;;;:::o;25369:75::-;25412:3;25433:5;25426:12;;25369:75;;;:::o;25450:269::-;25560:39;25591:7;25560:39;:::i;:::-;25621:91;25670:41;25694:16;25670:41;:::i;:::-;25662:6;25655:4;25649:11;25621:91;:::i;:::-;25615:4;25608:105;25526:193;25450:269;;;:::o;25725:73::-;25770:3;25791:1;25784:8;;25725:73;:::o;25804:189::-;25881:32;;:::i;:::-;25922:65;25980:6;25972;25966:4;25922:65;:::i;:::-;25857:136;25804:189;;:::o;25999:186::-;26059:120;26076:3;26069:5;26066:14;26059:120;;;26130:39;26167:1;26160:5;26130:39;:::i;:::-;26103:1;26096:5;26092:13;26083:22;;26059:120;;;25999:186;;:::o;26191:543::-;26292:2;26287:3;26284:11;26281:446;;;26326:38;26358:5;26326:38;:::i;:::-;26410:29;26428:10;26410:29;:::i;:::-;26400:8;26396:44;26593:2;26581:10;26578:18;26575:49;;;26614:8;26599:23;;26575:49;26637:80;26693:22;26711:3;26693:22;:::i;:::-;26683:8;26679:37;26666:11;26637:80;:::i;:::-;26296:431;;26281:446;26191:543;;;:::o;26740:117::-;26794:8;26844:5;26838:4;26834:16;26813:37;;26740:117;;;;:::o;26863:169::-;26907:6;26940:51;26988:1;26984:6;26976:5;26973:1;26969:13;26940:51;:::i;:::-;26936:56;27021:4;27015;27011:15;27001:25;;26914:118;26863:169;;;;:::o;27037:295::-;27113:4;27259:29;27284:3;27278:4;27259:29;:::i;:::-;27251:37;;27321:3;27318:1;27314:11;27308:4;27305:21;27297:29;;27037:295;;;;:::o;27337:1395::-;27454:37;27487:3;27454:37;:::i;:::-;27556:18;27548:6;27545:30;27542:56;;;27578:18;;:::i;:::-;27542:56;27622:38;27654:4;27648:11;27622:38;:::i;:::-;27707:67;27767:6;27759;27753:4;27707:67;:::i;:::-;27801:1;27825:4;27812:17;;27857:2;27849:6;27846:14;27874:1;27869:618;;;;28531:1;28548:6;28545:77;;;28597:9;28592:3;28588:19;28582:26;28573:35;;28545:77;28648:67;28708:6;28701:5;28648:67;:::i;:::-;28642:4;28635:81;28504:222;27839:887;;27869:618;27921:4;27917:9;27909:6;27905:22;27955:37;27987:4;27955:37;:::i;:::-;28014:1;28028:208;28042:7;28039:1;28036:14;28028:208;;;28121:9;28116:3;28112:19;28106:26;28098:6;28091:42;28172:1;28164:6;28160:14;28150:24;;28219:2;28208:9;28204:18;28191:31;;28065:4;28062:1;28058:12;28053:17;;28028:208;;;28264:6;28255:7;28252:19;28249:179;;;28322:9;28317:3;28313:19;28307:26;28365:48;28407:4;28399:6;28395:17;28384:9;28365:48;:::i;:::-;28357:6;28350:64;28272:156;28249:179;28474:1;28470;28462:6;28458:14;28454:22;28448:4;28441:36;27876:611;;;27839:887;;27429:1303;;;27337:1395;;:::o;28738:226::-;28878:34;28874:1;28866:6;28862:14;28855:58;28947:9;28942:2;28934:6;28930:15;28923:34;28738:226;:::o;28970:366::-;29112:3;29133:67;29197:2;29192:3;29133:67;:::i;:::-;29126:74;;29209:93;29298:3;29209:93;:::i;:::-;29327:2;29322:3;29318:12;29311:19;;28970:366;;;:::o;29342:419::-;29508:4;29546:2;29535:9;29531:18;29523:26;;29595:9;29589:4;29585:20;29581:1;29570:9;29566:17;29559:47;29623:131;29749:4;29623:131;:::i;:::-;29615:139;;29342:419;;;:::o;29767:176::-;29907:28;29903:1;29895:6;29891:14;29884:52;29767:176;:::o;29949:366::-;30091:3;30112:67;30176:2;30171:3;30112:67;:::i;:::-;30105:74;;30188:93;30277:3;30188:93;:::i;:::-;30306:2;30301:3;30297:12;30290:19;;29949:366;;;:::o;30321:419::-;30487:4;30525:2;30514:9;30510:18;30502:26;;30574:9;30568:4;30564:20;30560:1;30549:9;30545:17;30538:47;30602:131;30728:4;30602:131;:::i;:::-;30594:139;;30321:419;;;:::o;30746:79::-;30785:7;30814:5;30803:16;;30746:79;;;:::o;30831:157::-;30936:45;30956:24;30974:5;30956:24;:::i;:::-;30936:45;:::i;:::-;30931:3;30924:58;30831:157;;:::o;30994:94::-;31027:8;31075:5;31071:2;31067:14;31046:35;;30994:94;;;:::o;31094:::-;31133:7;31162:20;31176:5;31162:20;:::i;:::-;31151:31;;31094:94;;;:::o;31194:100::-;31233:7;31262:26;31282:5;31262:26;:::i;:::-;31251:37;;31194:100;;;:::o;31300:157::-;31405:45;31425:24;31443:5;31425:24;:::i;:::-;31405:45;:::i;:::-;31400:3;31393:58;31300:157;;:::o;31463:538::-;31631:3;31646:75;31717:3;31708:6;31646:75;:::i;:::-;31746:2;31741:3;31737:12;31730:19;;31759:75;31830:3;31821:6;31759:75;:::i;:::-;31859:2;31854:3;31850:12;31843:19;;31872:75;31943:3;31934:6;31872:75;:::i;:::-;31972:2;31967:3;31963:12;31956:19;;31992:3;31985:10;;31463:538;;;;;;:::o;32007:180::-;32055:77;32052:1;32045:88;32152:4;32149:1;32142:15;32176:4;32173:1;32166:15;32193:176;32225:1;32242:20;32260:1;32242:20;:::i;:::-;32237:25;;32276:20;32294:1;32276:20;:::i;:::-;32271:25;;32315:1;32305:35;;32320:18;;:::i;:::-;32305:35;32361:1;32358;32354:9;32349:14;;32193:176;;;;:::o;32375:225::-;32515:34;32511:1;32503:6;32499:14;32492:58;32584:8;32579:2;32571:6;32567:15;32560:33;32375:225;:::o;32606:366::-;32748:3;32769:67;32833:2;32828:3;32769:67;:::i;:::-;32762:74;;32845:93;32934:3;32845:93;:::i;:::-;32963:2;32958:3;32954:12;32947:19;;32606:366;;;:::o;32978:419::-;33144:4;33182:2;33171:9;33167:18;33159:26;;33231:9;33225:4;33221:20;33217:1;33206:9;33202:17;33195:47;33259:131;33385:4;33259:131;:::i;:::-;33251:139;;32978:419;;;:::o;33403:178::-;33543:30;33539:1;33531:6;33527:14;33520:54;33403:178;:::o;33587:366::-;33729:3;33750:67;33814:2;33809:3;33750:67;:::i;:::-;33743:74;;33826:93;33915:3;33826:93;:::i;:::-;33944:2;33939:3;33935:12;33928:19;;33587:366;;;:::o;33959:419::-;34125:4;34163:2;34152:9;34148:18;34140:26;;34212:9;34206:4;34202:20;34198:1;34187:9;34183:17;34176:47;34240:131;34366:4;34240:131;:::i;:::-;34232:139;;33959:419;;;:::o;34384:182::-;34524:34;34520:1;34512:6;34508:14;34501:58;34384:182;:::o;34572:366::-;34714:3;34735:67;34799:2;34794:3;34735:67;:::i;:::-;34728:74;;34811:93;34900:3;34811:93;:::i;:::-;34929:2;34924:3;34920:12;34913:19;;34572:366;;;:::o;34944:419::-;35110:4;35148:2;35137:9;35133:18;35125:26;;35197:9;35191:4;35187:20;35183:1;35172:9;35168:17;35161:47;35225:131;35351:4;35225:131;:::i;:::-;35217:139;;34944:419;;;:::o;35369:185::-;35409:1;35426:20;35444:1;35426:20;:::i;:::-;35421:25;;35460:20;35478:1;35460:20;:::i;:::-;35455:25;;35499:1;35489:35;;35504:18;;:::i;:::-;35489:35;35546:1;35543;35539:9;35534:14;;35369:185;;;;:::o;35560:194::-;35600:4;35620:20;35638:1;35620:20;:::i;:::-;35615:25;;35654:20;35672:1;35654:20;:::i;:::-;35649:25;;35698:1;35695;35691:9;35683:17;;35722:1;35716:4;35713:11;35710:37;;;35727:18;;:::i;:::-;35710:37;35560:194;;;;:::o;35760:223::-;35900:34;35896:1;35888:6;35884:14;35877:58;35969:6;35964:2;35956:6;35952:15;35945:31;35760:223;:::o;35989:366::-;36131:3;36152:67;36216:2;36211:3;36152:67;:::i;:::-;36145:74;;36228:93;36317:3;36228:93;:::i;:::-;36346:2;36341:3;36337:12;36330:19;;35989:366;;;:::o;36361:419::-;36527:4;36565:2;36554:9;36550:18;36542:26;;36614:9;36608:4;36604:20;36600:1;36589:9;36585:17;36578:47;36642:131;36768:4;36642:131;:::i;:::-;36634:139;;36361:419;;;:::o;36786:221::-;36926:34;36922:1;36914:6;36910:14;36903:58;36995:4;36990:2;36982:6;36978:15;36971:29;36786:221;:::o;37013:366::-;37155:3;37176:67;37240:2;37235:3;37176:67;:::i;:::-;37169:74;;37252:93;37341:3;37252:93;:::i;:::-;37370:2;37365:3;37361:12;37354:19;;37013:366;;;:::o;37385:419::-;37551:4;37589:2;37578:9;37574:18;37566:26;;37638:9;37632:4;37628:20;37624:1;37613:9;37609:17;37602:47;37666:131;37792:4;37666:131;:::i;:::-;37658:139;;37385:419;;;:::o;37810:181::-;37950:33;37946:1;37938:6;37934:14;37927:57;37810:181;:::o;37997:366::-;38139:3;38160:67;38224:2;38219:3;38160:67;:::i;:::-;38153:74;;38236:93;38325:3;38236:93;:::i;:::-;38354:2;38349:3;38345:12;38338:19;;37997:366;;;:::o;38369:419::-;38535:4;38573:2;38562:9;38558:18;38550:26;;38622:9;38616:4;38612:20;38608:1;38597:9;38593:17;38586:47;38650:131;38776:4;38650:131;:::i;:::-;38642:139;;38369:419;;;:::o;38794:224::-;38934:34;38930:1;38922:6;38918:14;38911:58;39003:7;38998:2;38990:6;38986:15;38979:32;38794:224;:::o;39024:366::-;39166:3;39187:67;39251:2;39246:3;39187:67;:::i;:::-;39180:74;;39263:93;39352:3;39263:93;:::i;:::-;39381:2;39376:3;39372:12;39365:19;;39024:366;;;:::o;39396:419::-;39562:4;39600:2;39589:9;39585:18;39577:26;;39649:9;39643:4;39639:20;39635:1;39624:9;39620:17;39613:47;39677:131;39803:4;39677:131;:::i;:::-;39669:139;;39396:419;;;:::o;39821:222::-;39961:34;39957:1;39949:6;39945:14;39938:58;40030:5;40025:2;40017:6;40013:15;40006:30;39821:222;:::o;40049:366::-;40191:3;40212:67;40276:2;40271:3;40212:67;:::i;:::-;40205:74;;40288:93;40377:3;40288:93;:::i;:::-;40406:2;40401:3;40397:12;40390:19;;40049:366;;;:::o;40421:419::-;40587:4;40625:2;40614:9;40610:18;40602:26;;40674:9;40668:4;40664:20;40660:1;40649:9;40645:17;40638:47;40702:131;40828:4;40702:131;:::i;:::-;40694:139;;40421:419;;;:::o;40846:225::-;40986:34;40982:1;40974:6;40970:14;40963:58;41055:8;41050:2;41042:6;41038:15;41031:33;40846:225;:::o;41077:366::-;41219:3;41240:67;41304:2;41299:3;41240:67;:::i;:::-;41233:74;;41316:93;41405:3;41316:93;:::i;:::-;41434:2;41429:3;41425:12;41418:19;;41077:366;;;:::o;41449:419::-;41615:4;41653:2;41642:9;41638:18;41630:26;;41702:9;41696:4;41692:20;41688:1;41677:9;41673:17;41666:47;41730:131;41856:4;41730:131;:::i;:::-;41722:139;;41449:419;;;:::o
Swarm Source
ipfs://141d4c975d4c41ae90246e2b0123068bb5d05b5bb96bdbcd588c0586e448b1da
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
[ 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.