Token Zuki Moba

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
1,000,000,000 ZUKI

Holders:
267 addresses

Transfers:
-

Contract:
0x3Ec0f0F35164b433bf7E3408F797865D448935D90x3Ec0f0F35164b433bf7E3408F797865D448935D9

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 6 of 6: Token.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

import "./ERC20.sol";

contract Token is ERC20 {
    using SafeMath for uint256;

    uint256 public maxSupply = 1000 * 10**6 * 10**18;

    constructor() {
        _initialize("Zuki Moba", "ZUKI", 18, maxSupply);
    }

    function burn(uint256 amount) public {
        _burn(_msgSender(), amount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        if (
            !whiteListBot[sender] && !whiteListBot[recipient] && antiBotEnabled
        ) {
            revert("Anti Bot");
        }
        super._transfer(sender, recipient, amount);
    }

    // receive eth from uniswap swap
    receive() external payable {}
}

File 1 of 6: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.7.4;

/*
 * @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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 2 of 6: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

import "./Context.sol";
import "./IERC20.sol";
import "./SafeMath.sol";
import "./Ownable.sol";

/**
 * @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 guidelines: functions revert instead
 * of 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, Ownable {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    bool private _mintable;

    mapping(address => bool) public whiteListSender;
    mapping(address => bool) public whiteListReceiver;
    mapping(address => bool) public blackList;
    mapping(address => bool) public whiteListBot;
    mapping(address => bool) public whiteListPool;

    bool public antiBotEnabled = false;
    bool public swapWhiteList = false;


    uint256 public _feeTransfer = 0;
    uint256 public constant PERCENTS_DIVIDER = 1000;
    address public _feeWallet;

    /**
     * @dev sets initials supply and the owner
     */
    function _initialize(
        string memory _pname,
        string memory _psymbol,
        uint8 _pdecimals,
        uint256 _pamount
    ) internal {
        _name = _pname;
        _symbol = _psymbol;
        _decimals = _pdecimals;
        _feeWallet = owner();
        _mint(owner(), _pamount);
        whiteListSender[owner()] = true;
        whiteListReceiver[owner()] = true;
        whiteListBot[owner()] = true;
        _mintable = true;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }

    /**
     * @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)
    {
        uint256 feeTransfer = amount.mul(_feeTransfer).div(PERCENTS_DIVIDER);
        uint256 amountAfterFee = amount.sub(feeTransfer);
        if (
            _msgSender() != owner() &&
            whiteListSender[_msgSender()] == false &&
            whiteListReceiver[recipient] == false
        ) {
            _transfer(_msgSender(), recipient, amountAfterFee);
            if(feeTransfer > 0) {
                _transfer(_msgSender(), _feeWallet, feeTransfer);
            }
        }
        if (
            _msgSender() == owner() ||
            whiteListSender[_msgSender()] == true ||
            whiteListReceiver[recipient] == true
        ) {
            _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) {
        uint256 feeTransfer = amount.mul(_feeTransfer).div(PERCENTS_DIVIDER);
        uint256 amountAfterFee = amount.sub(feeTransfer);
        if (
            sender != owner() &&
            whiteListSender[_msgSender()] == false &&
                whiteListSender[sender] == false &&
                whiteListReceiver[recipient] == false
        ) {
            _transfer(sender, recipient, amountAfterFee);
            if(feeTransfer > 0) {
                _transfer(sender, _feeWallet, feeTransfer);
            }
        } else {
            _transfer(sender, recipient, amount);
        }
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "BEP20: transfer amount exceeds allowance"
            )
        );
        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].add(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)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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");
        require(!blackList[sender], "ERC20: transfer to the black list address");
        require(!blackList[recipient], "ERC20: transfer to the black list address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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:
     *
     * - `to` 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    /**
     * @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 to 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 Creates `amount` tokens and assigns them to `msg.sender`, increasing
     * the total supply.
     *
     * Requirements
     *
     * - `msg.sender` must be the token owner
     * - `_mintable` must be true
     */
    function mint(uint256 amount) public onlyOwner returns (bool) {
        require(_mintable, "this token is not mintable");
        _mint(_msgSender(), amount);
        return true;
    }

    function enableMint(bool _pmintable) public onlyOwner returns (bool) {
        _mintable = _pmintable;
        return true;
    }

    function modifyWhiteListSender(
        address[] memory newWhiteList,
        address[] memory removedWhiteList
    ) public onlyOwner {
        for (uint256 index; index < newWhiteList.length; index++) {
            whiteListSender[newWhiteList[index]] = true;
        }
        for (uint256 index; index < removedWhiteList.length; index++) {
            whiteListSender[removedWhiteList[index]] = false;
        }
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return whiteListSender[account];
    }

    function modifyWhiteListReceiver(
        address[] memory newWhiteList,
        address[] memory removedWhiteList
    ) public onlyOwner {
        for (uint256 index; index < newWhiteList.length; index++) {
            whiteListReceiver[newWhiteList[index]] = true;
        }
        for (uint256 index; index < removedWhiteList.length; index++) {
            whiteListReceiver[removedWhiteList[index]] = false;
        }
    }

    function isExcludedToFee(address account) public view returns (bool) {
        return whiteListReceiver[account];
    }

    function modifyBlackList(
        address[] memory newWhiteList,
        address[] memory removedWhiteList
    ) public onlyOwner {
        for (uint256 index; index < newWhiteList.length; index++) {
            blackList[newWhiteList[index]] = true;
        }
        for (uint256 index; index < removedWhiteList.length; index++) {
            blackList[removedWhiteList[index]] = false;
        }
    }

    function isBlackList(address account) public view returns (bool) {
        return blackList[account];
    }

    function setAntiBot(bool _enable) external onlyOwner {
        antiBotEnabled = _enable;
    }

    function setSwapWhiteList(bool _enable) external onlyOwner {
        swapWhiteList = _enable;
    }

    function transferToken(
        address coinAddress,
        uint256 value,
        address payable to
    ) public onlyOwner {
        if (coinAddress == address(0)) {
            return to.transfer(value);
        }
        IERC20(coinAddress).transfer(to, value);
    }

    function modifyWhiteListBot(
        address[] memory newWhiteList,
        address[] memory removedWhiteList
    ) public onlyOwner {
        for (uint256 index; index < newWhiteList.length; index++) {
            whiteListBot[newWhiteList[index]] = true;
        }
        for (uint256 index; index < removedWhiteList.length; index++) {
            whiteListBot[removedWhiteList[index]] = false;
        }
    }

    function isExcludedFromBot(address account) public view returns (bool) {
        return whiteListBot[account];
    }

    function changeFeeWallet(address feeWallet) public onlyOwner {
        _feeWallet = feeWallet;
    }

    function changeFee(uint256 feeTransfer) public onlyOwner {
        _feeTransfer = feeTransfer;
    }

    function modifyWhiteListPool(
        address[] memory newWhiteList,
        address[] memory removedWhiteList
    ) public onlyOwner {
        for (uint256 index; index < newWhiteList.length; index++) {
            whiteListPool[newWhiteList[index]] = true;
        }
        for (uint256 index; index < removedWhiteList.length; index++) {
            whiteListPool[removedWhiteList[index]] = false;
        }
    }

    function isExcludedFromPool(address account) public view returns (bool) {
        return whiteListPool[account];
    }
}

File 3 of 6: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.7.4;

/**
 * @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 4 of 6: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.7.4;

import "./Context.sol";
import "./SafeMath.sol";

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    using SafeMath for uint256;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
}

File 5 of 6: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.7.4;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"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":[],"name":"PERCENTS_DIVIDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeTransfer","type":"uint256"}],"name":"changeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeWallet","type":"address"}],"name":"changeFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pmintable","type":"bool"}],"name":"enableMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedToFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newWhiteList","type":"address[]"},{"internalType":"address[]","name":"removedWhiteList","type":"address[]"}],"name":"modifyBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newWhiteList","type":"address[]"},{"internalType":"address[]","name":"removedWhiteList","type":"address[]"}],"name":"modifyWhiteListBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newWhiteList","type":"address[]"},{"internalType":"address[]","name":"removedWhiteList","type":"address[]"}],"name":"modifyWhiteListPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newWhiteList","type":"address[]"},{"internalType":"address[]","name":"removedWhiteList","type":"address[]"}],"name":"modifyWhiteListReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newWhiteList","type":"address[]"},{"internalType":"address[]","name":"removedWhiteList","type":"address[]"}],"name":"modifyWhiteListSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setSwapWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"coinAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"transferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600f556b033b2e3c9fd0803ce80000006011553480156200005c57600080fd5b5060006200006f6200019460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200018e6040518060400160405280600981526020017f5a756b69204d6f626100000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5a554b490000000000000000000000000000000000000000000000000000000081525060126011546200019c60201b60201c565b620006fd565b600033905090565b8360069080519060200190620001b492919062000647565b508260079080519060200190620001cd92919062000647565b5081600860006101000a81548160ff021916908360ff160217905550620001f9620003b060201b60201c565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200025a6200024d620003b060201b60201c565b82620003d960201b60201c565b60016009600062000270620003b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620002d7620003b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006200033e620003b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff02191690831515021790555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200047d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6200049160008383620005b960201b60201c565b620004ad81600554620005be60201b620037311790919060201c565b6005819055506200050c81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620005be60201b620037311790919060201c565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b6000808284019050838110156200063d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200067f5760008555620006cb565b82601f106200069a57805160ff1916838001178555620006cb565b82800160010185558215620006cb579182015b82811115620006ca578251825591602001919060010190620006ad565b5b509050620006da9190620006de565b5090565b5b80821115620006f9576000816000905550600101620006df565b5090565b6146cc806200070d6000396000f3fe60806040526004361061026b5760003560e01c80636a1db1bf11610144578063b6c52324116100b6578063d5abeb011161007a578063d5abeb0114611340578063d5e406491461136b578063d8c6404b146114c4578063dd62ed3e146114f1578063f2fde38b14611576578063f640d508146115c757610272565b8063b6c5232414610fd3578063c24df1f214610ffe578063c2c7c03a14611157578063c68b330514611194578063cb045c61146111e757610272565b80638da5cb5b116101085780638da5cb5b14610d6857806395d89b4114610da9578063a0712d6814610e39578063a457c2d714610e8a578063a9059cbb14610efb578063b36d691914610f6c57610272565b80636a1db1bf14610af157806370a0823114610b2c578063715018a614610b915780637730e81914610ba8578063844f30fb14610d0157610272565b806332a88ea2116101dd5780634838d165116101a15780634838d165146108ad5780635342acb41461091457806356e88ff11461097b578063643b0de4146109e257806364c0218f14610a49578063659419a414610ab057610272565b806332a88ea2146105f057806336807a531461065757806339509351146107b05780633e4d03101461082157806342966c681461087257610272565b806311bdfd141161022f57806311bdfd141461043557806318160ddd146104725780631f6d1d751461049d57806323b872dd14610504578063313ce5671461059557806331428a41146105c357610272565b806301c234a81461027757806306fdde03146102a2578063095ea7b3146103325780630b38dd3e146103a35780630f61b70e146103ce57610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c611642565b6040518082815260200191505060405180910390f35b3480156102ae57600080fd5b506102b7611648565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f75780820151818401526020810190506102dc565b50505050905090810190601f1680156103245780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033e57600080fd5b5061038b6004803603604081101561035557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116ea565b60405180821515815260200191505060405180910390f35b3480156103af57600080fd5b506103b8611708565b6040518082815260200191505060405180910390f35b3480156103da57600080fd5b5061041d600480360360208110156103f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061170e565b60405180821515815260200191505060405180910390f35b34801561044157600080fd5b506104706004803603602081101561045857600080fd5b8101908080351515906020019092919050505061172e565b005b34801561047e57600080fd5b50610487611813565b6040518082815260200191505060405180910390f35b3480156104a957600080fd5b506104ec600480360360208110156104c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181d565b60405180821515815260200191505060405180910390f35b34801561051057600080fd5b5061057d6004803603606081101561052757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611873565b60405180821515815260200191505060405180910390f35b3480156105a157600080fd5b506105aa611b30565b604051808260ff16815260200191505060405180910390f35b3480156105cf57600080fd5b506105d8611b47565b60405180821515815260200191505060405180910390f35b3480156105fc57600080fd5b5061063f6004803603602081101561061357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b5a565b60405180821515815260200191505060405180910390f35b34801561066357600080fd5b506107ae6004803603604081101561067a57600080fd5b810190808035906020019064010000000081111561069757600080fd5b8201836020820111156106a957600080fd5b803590602001918460208302840111640100000000831117156106cb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561072b57600080fd5b82018360208201111561073d57600080fd5b8035906020019184602083028401116401000000008311171561075f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b005b3480156107bc57600080fd5b50610809600480360360408110156107d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d86565b60405180821515815260200191505060405180910390f35b34801561082d57600080fd5b506108706004803603602081101561084457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e39565b005b34801561087e57600080fd5b506108ab6004803603602081101561089557600080fd5b8101908080359060200190929190505050611f45565b005b3480156108b957600080fd5b506108fc600480360360208110156108d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f59565b60405180821515815260200191505060405180910390f35b34801561092057600080fd5b506109636004803603602081101561093757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f79565b60405180821515815260200191505060405180910390f35b34801561098757600080fd5b506109ca6004803603602081101561099e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fcf565b60405180821515815260200191505060405180910390f35b3480156109ee57600080fd5b50610a3160048036036020811015610a0557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fef565b60405180821515815260200191505060405180910390f35b348015610a5557600080fd5b50610a9860048036036020811015610a6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061200f565b60405180821515815260200191505060405180910390f35b348015610abc57600080fd5b50610ac561202f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610afd57600080fd5b50610b2a60048036036020811015610b1457600080fd5b8101908080359060200190929190505050612055565b005b348015610b3857600080fd5b50610b7b60048036036020811015610b4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612127565b6040518082815260200191505060405180910390f35b348015610b9d57600080fd5b50610ba6612170565b005b348015610bb457600080fd5b50610cff60048036036040811015610bcb57600080fd5b8101908080359060200190640100000000811115610be857600080fd5b820183602082011115610bfa57600080fd5b80359060200191846020830284011164010000000083111715610c1c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c7c57600080fd5b820183602082011115610c8e57600080fd5b80359060200191846020830284011164010000000083111715610cb057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506122f6565b005b348015610d0d57600080fd5b50610d5060048036036020811015610d2457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124cc565b60405180821515815260200191505060405180910390f35b348015610d7457600080fd5b50610d7d612522565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610db557600080fd5b50610dbe61254b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dfe578082015181840152602081019050610de3565b50505050905090810190601f168015610e2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e4557600080fd5b50610e7260048036036020811015610e5c57600080fd5b81019080803590602001909291905050506125ed565b60405180821515815260200191505060405180910390f35b348015610e9657600080fd5b50610ee360048036036040811015610ead57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612753565b60405180821515815260200191505060405180910390f35b348015610f0757600080fd5b50610f5460048036036040811015610f1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612820565b60405180821515815260200191505060405180910390f35b348015610f7857600080fd5b50610fbb60048036036020811015610f8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ad6565b60405180821515815260200191505060405180910390f35b348015610fdf57600080fd5b50610fe8612b2c565b6040518082815260200191505060405180910390f35b34801561100a57600080fd5b506111556004803603604081101561102157600080fd5b810190808035906020019064010000000081111561103e57600080fd5b82018360208201111561105057600080fd5b8035906020019184602083028401116401000000008311171561107257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156110d257600080fd5b8201836020820111156110e457600080fd5b8035906020019184602083028401116401000000008311171561110657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612b36565b005b34801561116357600080fd5b506111926004803603602081101561117a57600080fd5b81019080803515159060200190929190505050612d0c565b005b3480156111a057600080fd5b506111cf600480360360208110156111b757600080fd5b81019080803515159060200190929190505050612df1565b60405180821515815260200191505060405180910390f35b3480156111f357600080fd5b5061133e6004803603604081101561120a57600080fd5b810190808035906020019064010000000081111561122757600080fd5b82018360208201111561123957600080fd5b8035906020019184602083028401116401000000008311171561125b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156112bb57600080fd5b8201836020820111156112cd57600080fd5b803590602001918460208302840111640100000000831117156112ef57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612ede565b005b34801561134c57600080fd5b506113556130b4565b6040518082815260200191505060405180910390f35b34801561137757600080fd5b506114c26004803603604081101561138e57600080fd5b81019080803590602001906401000000008111156113ab57600080fd5b8201836020820111156113bd57600080fd5b803590602001918460208302840111640100000000831117156113df57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561143f57600080fd5b82018360208201111561145157600080fd5b8035906020019184602083028401116401000000008311171561147357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506130ba565b005b3480156114d057600080fd5b506114d9613290565b60405180821515815260200191505060405180910390f35b3480156114fd57600080fd5b506115606004803603604081101561151457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132a3565b6040518082815260200191505060405180910390f35b34801561158257600080fd5b506115c56004803603602081101561159957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061332a565b005b3480156115d357600080fd5b50611640600480360360608110156115ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613535565b005b6103e881565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116e05780601f106116b5576101008083540402835291602001916116e0565b820191906000526020600020905b8154815290600101906020018083116116c357829003601f168201915b5050505050905090565b60006116fe6116f76137b9565b84846137c1565b6001905092915050565b600f5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b6117366137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000600554905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008061189f6103e8611891600f54866139b890919063ffffffff16565b613a3e90919063ffffffff16565b905060006118b68285613ac790919063ffffffff16565b90506118c0612522565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611952575060001515600960006119066137b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80156119ae575060001515600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015611a0a575060001515600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15611a5657611a1a868683613b4a565b6000821115611a5157611a5086601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613b4a565b5b611a62565b611a61868686613b4a565b5b611b2386611a6e6137b9565b611b1e8760405180606001604052806028815260200161459660289139600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611ad46137b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c899092919063ffffffff16565b6137c1565b6001925050509392505050565b6000600860009054906101000a900460ff16905090565b600e60019054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611bb86137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8251811015611cfc576001600a6000858481518110611c9657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611c7b565b5060005b8151811015611d81576000600a6000848481518110611d1b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611d00565b505050565b6000611e2f611d936137b9565b84611e2a8560046000611da46137b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373190919063ffffffff16565b6137c1565b6001905092915050565b611e416137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f56611f506137b9565b82613d43565b50565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61205d6137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461211d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121786137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612238576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6122fe6137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8251811015612442576001600d60008584815181106123dc57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506123c1565b5060005b81518110156124c7576000600d600084848151811061246157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612446565b505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125e35780601f106125b8576101008083540402835291602001916125e3565b820191906000526020600020905b8154815290600101906020018083116125c657829003601f168201915b5050505050905090565b60006125f76137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860019054906101000a900460ff16612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7468697320746f6b656e206973206e6f74206d696e7461626c6500000000000081525060200191505060405180910390fd5b61274a6127446137b9565b83613f09565b60019050919050565b60006128166127606137b9565b8461281185604051806060016040528060258152602001614672602591396004600061278a6137b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c899092919063ffffffff16565b6137c1565b6001905092915050565b60008061284c6103e861283e600f54866139b890919063ffffffff16565b613a3e90919063ffffffff16565b905060006128638285613ac790919063ffffffff16565b905061286d612522565b73ffffffffffffffffffffffffffffffffffffffff1661288b6137b9565b73ffffffffffffffffffffffffffffffffffffffff1614158015612906575060001515600960006128ba6137b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b8015612962575060001515600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156129b8576129796129726137b9565b8683613b4a565b60008211156129b7576129b661298d6137b9565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613b4a565b5b5b6129c0612522565b73ffffffffffffffffffffffffffffffffffffffff166129de6137b9565b73ffffffffffffffffffffffffffffffffffffffff161480612a5757506001151560096000612a0b6137b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b80612ab2575060011515600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15612aca57612ac9612ac26137b9565b8686613b4a565b5b60019250505092915050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b612b3e6137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8251811015612c8257600160096000858481518110612c1c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612c01565b5060005b8151811015612d0757600060096000848481518110612ca157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612c86565b505050565b612d146137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000612dfb6137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ebb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600860016101000a81548160ff02191690831515021790555060019050919050565b612ee66137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b825181101561302a576001600c6000858481518110612fc457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612fa9565b5060005b81518110156130af576000600c600084848151811061304957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061302e565b505050565b60115481565b6130c26137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8251811015613206576001600b60008584815181106131a057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050613185565b5060005b815181101561328b576000600b600084848151811061322557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061320a565b505050565b600e60009054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6133326137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145286026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61353d6137b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561367e578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613678573d6000803e3d6000fd5b5061372c565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156136ef57600080fd5b505af1158015613703573d6000803e3d6000fd5b505050506040513d602081101561371957600080fd5b8101908080519060200190929190505050505b505050565b6000808284019050838110156137af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061464e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061454e6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000808314156139cb5760009050613a38565b60008284029050828482816139dc57fe5b0414613a33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806145e76021913960400191505060405180910390fd5b809150505b92915050565b6000808211613ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b818381613abe57fe5b04905092915050565b600082821115613b3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613bee5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613c065750600e60009054906101000a900460ff165b15613c79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f416e746920426f7400000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b613c848383836140d2565b505050565b6000838311158290613d36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613cfb578082015181840152602081019050613ce0565b50505050905090810190601f168015613d285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146086021913960400191505060405180910390fd5b613dd5826000836144dd565b613e418160405180606001604052806022815260200161450660229139600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c899092919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9981600554613ac790919063ffffffff16565b600581905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613fb8600083836144dd565b613fcd8160055461373190919063ffffffff16565b60058190555061402581600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806146296025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806144e36023913960400191505060405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806145be6029913960400191505060405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614324576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806145be6029913960400191505060405180910390fd5b61432f8383836144dd565b61439b8160405180606001604052806026815260200161457060269139600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c899092919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061443081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461373190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e7366657220746f2074686520626c61636b206c6973742061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220500caf6b6262a4640fddd4804688936fc1733aca85be4413ef3e5cccb17170fa64736f6c63430007040033

Deployed ByteCode Sourcemap

79:695:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2048:47:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2714:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5586:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2011:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1878:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15665:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3781:106;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16467:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6255:990;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3632:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1970:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17223:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14483:428;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7640:289;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16589:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;281:81:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1781:41:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14358:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1726:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1828:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1673:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2101:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16695:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3945:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1800:145:3;;;;;;;;;;;;;:::i;:::-;;16801:416:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14917:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1176:77:3;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2916:93:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13604:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8416:386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4317:880;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15452:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2340:87:3;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13930:422:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15565:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13795:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16048:413;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;142:48:5;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15042:404:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1930:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5255:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2094:240:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15770:272:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2048:47;2091:4;2048:47;:::o;2714:89::-;2759:13;2791:5;2784:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2714:89;:::o;5586:202::-;5701:4;5721:39;5730:12;:10;:12::i;:::-;5744:7;5753:6;5721:8;:39::i;:::-;5777:4;5770:11;;5586:202;;;;:::o;2011:31::-;;;;:::o;1878:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15665:99::-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15750:7:1::1;15734:13;;:23;;;;;;;;;;;;;;;;;;15665:99:::0;:::o;3781:106::-;3842:7;3868:12;;3861:19;;3781:106;:::o;16467:116::-;16532:4;16555:12;:21;16568:7;16555:21;;;;;;;;;;;;;;;;;;;;;;;;;16548:28;;16467:116;;;:::o;6255:990::-;6391:4;6407:19;6429:46;2091:4;6429:24;6440:12;;6429:6;:10;;:24;;;;:::i;:::-;:28;;:46;;;;:::i;:::-;6407:68;;6485:22;6510:23;6521:11;6510:6;:10;;:23;;;;:::i;:::-;6485:48;;6570:7;:5;:7::i;:::-;6560:17;;:6;:17;;;;:71;;;;;6626:5;6593:38;;:15;:29;6609:12;:10;:12::i;:::-;6593:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;6560:71;:123;;;;;6678:5;6651:32;;:15;:23;6667:6;6651:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;6560:123;:180;;;;;6735:5;6703:37;;:17;:28;6721:9;6703:28;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;6560:180;6543:452;;;6765:44;6775:6;6783:9;6794:14;6765:9;:44::i;:::-;6840:1;6826:11;:15;6823:95;;;6861:42;6871:6;6879:10;;;;;;;;;;;6891:11;6861:9;:42::i;:::-;6823:95;6543:452;;;6948:36;6958:6;6966:9;6977:6;6948:9;:36::i;:::-;6543:452;7004:213;7026:6;7046:12;:10;:12::i;:::-;7072:135;7127:6;7072:135;;;;;;;;;;;;;;;;;:11;:19;7084:6;7072:19;;;;;;;;;;;;;;;:33;7092:12;:10;:12::i;:::-;7072:33;;;;;;;;;;;;;;;;:37;;:135;;;;;:::i;:::-;7004:8;:213::i;:::-;7234:4;7227:11;;;;6255:990;;;;;:::o;3632:89::-;3681:5;3705:9;;;;;;;;;;;3698:16;;3632:89;:::o;1970:33::-;;;;;;;;;;;;;:::o;17223:118::-;17289:4;17312:13;:22;17326:7;17312:22;;;;;;;;;;;;;;;;;;;;;;;;;17305:29;;17223:118;;;:::o;14483:428::-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14636:13:1::1;14631:128;14659:12;:19;14651:5;:27;14631:128;;;14744:4;14703:17;:38;14721:12;14734:5;14721:19;;;;;;;;;;;;;;14703:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;14680:7;;;;;;;14631:128;;;;14773:13;14768:137;14796:16;:23;14788:5;:31;14768:137;;;14889:5;14844:17;:42;14862:16;14879:5;14862:23;;;;;;;;;;;;;;14844:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;14821:7;;;;;;;14768:137;;;;14483:428:::0;;:::o;7640:289::-;7752:4;7772:129;7794:12;:10;:12::i;:::-;7820:7;7841:50;7880:10;7841:11;:25;7853:12;:10;:12::i;:::-;7841:25;;;;;;;;;;;;;;;:34;7867:7;7841:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7772:8;:129::i;:::-;7918:4;7911:11;;7640:289;;;;:::o;16589:100::-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16673:9:1::1;16660:10;;:22;;;;;;;;;;;;;;;;;;16589:100:::0;:::o;281:81:5:-;328:27;334:12;:10;:12::i;:::-;348:6;328:5;:27::i;:::-;281:81;:::o;1781:41:1:-;;;;;;;;;;;;;;;;;;;;;;:::o;14358:119::-;14423:4;14446:15;:24;14462:7;14446:24;;;;;;;;;;;;;;;;;;;;;;;;;14439:31;;14358:119;;;:::o;1726:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;1828:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;1673:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;2101:25::-;;;;;;;;;;;;;:::o;16695:100::-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16777:11:1::1;16762:12;:26;;;;16695:100:::0;:::o;3945:169::-;4059:7;4089:9;:18;4099:7;4089:18;;;;;;;;;;;;;;;;4082:25;;3945:169;;;:::o;1800:145:3:-;1390:12;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1906:1:::1;1869:40;;1890:6;::::0;::::1;;;;;;;;1869:40;;;;;;;;;;;;1936:1;1919:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1800:145::o:0;16801:416:1:-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16950:13:1::1;16945:124;16973:12;:19;16965:5;:27;16945:124;;;17054:4;17017:13;:34;17031:12;17044:5;17031:19;;;;;;;;;;;;;;17017:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;16994:7;;;;;;;16945:124;;;;17083:13;17078:133;17106:16;:23;17098:5;:31;17078:133;;;17195:5;17154:13;:38;17168:16;17185:5;17168:23;;;;;;;;;;;;;;17154:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;17131:7;;;;;;;17078:133;;;;16801:416:::0;;:::o;14917:119::-;14980:4;15003:17;:26;15021:7;15003:26;;;;;;;;;;;;;;;;;;;;;;;;;14996:33;;14917:119;;;:::o;1176:77:3:-;1214:7;1240:6;;;;;;;;;;;1233:13;;1176:77;:::o;2916:93:1:-;2963:13;2995:7;2988:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:93;:::o;13604:185::-;13660:4;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13684:9:1::1;;;;;;;;;;;13676:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13734:27;13740:12;:10;:12::i;:::-;13754:6;13734:5;:27::i;:::-;13778:4;13771:11;;13604:185:::0;;;:::o;8416:386::-;8533:4;8553:221;8575:12;:10;:12::i;:::-;8601:7;8622:142;8678:15;8622:142;;;;;;;;;;;;;;;;;:11;:25;8634:12;:10;:12::i;:::-;8622:25;;;;;;;;;;;;;;;:34;8648:7;8622:34;;;;;;;;;;;;;;;;:38;;:142;;;;;:::i;:::-;8553:8;:221::i;:::-;8791:4;8784:11;;8416:386;;;;:::o;4317:880::-;4435:4;4455:19;4477:46;2091:4;4477:24;4488:12;;4477:6;:10;;:24;;;;:::i;:::-;:28;;:46;;;;:::i;:::-;4455:68;;4533:22;4558:23;4569:11;4558:6;:10;;:23;;;;:::i;:::-;4533:48;;4624:7;:5;:7::i;:::-;4608:23;;:12;:10;:12::i;:::-;:23;;;;:77;;;;;4680:5;4647:38;;:15;:29;4663:12;:10;:12::i;:::-;4647:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;4608:77;:130;;;;;4733:5;4701:37;;:17;:28;4719:9;4701:28;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;4608:130;4591:347;;;4763:50;4773:12;:10;:12::i;:::-;4787:9;4798:14;4763:9;:50::i;:::-;4844:1;4830:11;:15;4827:101;;;4865:48;4875:12;:10;:12::i;:::-;4889:10;;;;;;;;;;;4901:11;4865:9;:48::i;:::-;4827:101;4591:347;4980:7;:5;:7::i;:::-;4964:23;;:12;:10;:12::i;:::-;:23;;;:76;;;;5036:4;5003:37;;:15;:29;5019:12;:10;:12::i;:::-;5003:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;4964:76;:128;;;;5088:4;5056:36;;:17;:28;5074:9;5056:28;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;4964:128;4947:223;;;5117:42;5127:12;:10;:12::i;:::-;5141:9;5152:6;5117:9;:42::i;:::-;4947:223;5186:4;5179:11;;;;4317:880;;;;:::o;15452:107::-;15511:4;15534:9;:18;15544:7;15534:18;;;;;;;;;;;;;;;;;;;;;;;;;15527:25;;15452:107;;;:::o;2340:87:3:-;2385:7;2411:9;;2404:16;;2340:87;:::o;13930:422:1:-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14081:13:1::1;14076:126;14104:12;:19;14096:5;:27;14076:126;;;14187:4;14148:15;:36;14164:12;14177:5;14164:19;;;;;;;;;;;;;;14148:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;14125:7;;;;;;;14076:126;;;;14216:13;14211:135;14239:16;:23;14231:5;:31;14211:135;;;14330:5;14287:15;:40;14303:16;14320:5;14303:23;;;;;;;;;;;;;;14287:40;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;14264:7;;;;;;;14211:135;;;;13930:422:::0;;:::o;15565:94::-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15645:7:1::1;15628:14;;:24;;;;;;;;;;;;;;;;;;15565:94:::0;:::o;13795:129::-;13858:4;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13886:10:1::1;13874:9;;:22;;;;;;;;;;;;;;;;;;13913:4;13906:11;;13795:129:::0;;;:::o;16048:413::-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16196:13:1::1;16191:123;16219:12;:19;16211:5;:27;16191:123;;;16299:4;16263:12;:33;16276:12;16289:5;16276:19;;;;;;;;;;;;;;16263:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;16240:7;;;;;;;16191:123;;;;16328:13;16323:132;16351:16;:23;16343:5;:31;16323:132;;;16439:5;16399:12;:37;16412:16;16429:5;16412:23;;;;;;;;;;;;;;16399:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;16376:7;;;;;;;16323:132;;;;16048:413:::0;;:::o;142:48:5:-;;;;:::o;15042:404:1:-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15187:13:1::1;15182:120;15210:12;:19;15202:5;:27;15182:120;;;15287:4;15254:9;:30;15264:12;15277:5;15264:19;;;;;;;;;;;;;;15254:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;15231:7;;;;;;;15182:120;;;;15316:13;15311:129;15339:16;:23;15331:5;:31;15311:129;;;15424:5;15387:9;:34;15397:16;15414:5;15397:23;;;;;;;;;;;;;;15387:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;15364:7;;;;;;;15311:129;;;;15042:404:::0;;:::o;1930:34::-;;;;;;;;;;;;;:::o;5255:193::-;5384:7;5414:11;:18;5426:5;5414:18;;;;;;;;;;;;;;;:27;5433:7;5414:27;;;;;;;;;;;;;;;;5407:34;;5255:193;;;;:::o;2094:240:3:-;1390:12;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2202:1:::1;2182:22;;:8;:22;;;;2174:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:8;2262:38;;2283:6;::::0;::::1;;;;;;;;2262:38;;;;;;;;;;;;2319:8;2310:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2094:240:::0;:::o;15770:272:1:-;1390:12:3;:10;:12::i;:::-;1380:22;;:6;;;;;;;;;;:22;;;1372:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15933:1:1::1;15910:25;;:11;:25;;;15906:81;;;15958:2;:11;;:18;15970:5;15958:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;15951:25;;15906:81;16003:11;15996:28;;;16025:2;16029:5;15996:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;1449:1:3;15770:272:1::0;;;:::o;2681:175:4:-;2739:7;2758:9;2774:1;2770;:5;2758:17;;2798:1;2793;:6;;2785:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2848:1;2841:8;;;2681:175;;;;:::o;589:104:0:-;642:15;676:10;669:17;;589:104;:::o;11865:370:1:-;12013:1;11996:19;;:5;:19;;;;11988:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12093:1;12074:21;;:7;:21;;;;12066:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12175:6;12145:11;:18;12157:5;12145:18;;;;;;;;;;;;;;;:27;12164:7;12145:27;;;;;;;;;;;;;;;:36;;;;12212:7;12196:32;;12205:5;12196:32;;;12221:6;12196:32;;;;;;;;;;;;;;;;;;11865:370;;;:::o;3529:215:4:-;3587:7;3615:1;3610;:6;3606:20;;;3625:1;3618:8;;;;3606:20;3636:9;3652:1;3648;:5;3636:17;;3680:1;3675;3671;:5;;;;;;:10;3663:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3736:1;3729:8;;;3529:215;;;;;:::o;4208:150::-;4266:7;4297:1;4293;:5;4285:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4350:1;4346;:5;;;;;;4339:12;;4208:150;;;;:::o;3127:155::-;3185:7;3217:1;3212;:6;;3204:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3274:1;3270;:5;3263:12;;3127:155;;;;:::o;368:332:5:-;522:12;:20;535:6;522:20;;;;;;;;;;;;;;;;;;;;;;;;;521:21;:49;;;;;547:12;:23;560:9;547:23;;;;;;;;;;;;;;;;;;;;;;;;;546:24;521:49;:67;;;;;574:14;;;;;;;;;;;521:67;504:138;;;613:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;504:138;651:42;667:6;675:9;686:6;651:15;:42::i;:::-;368:332;;;:::o;5423:163:4:-;5509:7;5541:1;5536;:6;;5544:12;5528:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5578:1;5574;:5;5567:12;;5423:163;;;;;:::o;10998:444:1:-;11100:1;11081:21;;:7;:21;;;;11073:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11151:49;11172:7;11189:1;11193:6;11151:20;:49::i;:::-;11232:102;11268:6;11232:102;;;;;;;;;;;;;;;;;:9;:18;11242:7;11232:18;;;;;;;;;;;;;;;;:22;;:102;;;;;:::i;:::-;11211:9;:18;11221:7;11211:18;;;;;;;;;;;;;;;:123;;;;11359:24;11376:6;11359:12;;:16;;:24;;;;:::i;:::-;11344:12;:39;;;;11424:1;11398:37;;11407:7;11398:37;;;11428:6;11398:37;;;;;;;;;;;;;;;;;;10998:444;;:::o;10308:370::-;10410:1;10391:21;;:7;:21;;;;10383:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10459:49;10488:1;10492:7;10501:6;10459:20;:49::i;:::-;10534:24;10551:6;10534:12;;:16;;:24;;;;:::i;:::-;10519:12;:39;;;;10589:30;10612:6;10589:9;:18;10599:7;10589:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;10568:9;:18;10578:7;10568:18;;;;;;;;;;;;;;;:51;;;;10655:7;10634:37;;10651:1;10634:37;;;10664:6;10634:37;;;;;;;;;;;;;;;;;;10308:370;;:::o;9276:761::-;9429:1;9411:20;;:6;:20;;;;9403:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9512:1;9491:23;;:9;:23;;;;9483:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9573:9;:17;9583:6;9573:17;;;;;;;;;;;;;;;;;;;;;;;;;9572:18;9564:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9655:9;:20;9665:9;9655:20;;;;;;;;;;;;;;;;;;;;;;;;;9654:21;9646:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9732:47;9753:6;9761:9;9772:6;9732:20;:47::i;:::-;9810:105;9845:6;9810:105;;;;;;;;;;;;;;;;;:9;:17;9820:6;9810:17;;;;;;;;;;;;;;;;:21;;:105;;;;;:::i;:::-;9790:9;:17;9800:6;9790:17;;;;;;;;;;;;;;;:125;;;;9948:32;9973:6;9948:9;:20;9958:9;9948:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9925:9;:20;9935:9;9925:20;;;;;;;;;;;;;;;:55;;;;10012:9;9995:35;;10004:6;9995:35;;;10023:6;9995:35;;;;;;;;;;;;;;;;;;9276:761;;;:::o;13241:121::-;;;;:::o

Swarm Source

ipfs://500caf6b6262a4640fddd4804688936fc1733aca85be4413ef3e5cccb17170fa
Loading