ETH Price: $3,502.00 (-0.21%)
Gas: 3 Gwei

Token

PPBOT (PP)
 

Overview

Max Total Supply

1,000,000,000 PP

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.188699754156023587 PP

Value
$0.00
0xc62E88aD4Af9361B2b251b121eC7184c3A732Ef2
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PPBOT

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-01
*/

// SPDX-License-Identifier: MIT

/**
 *Submitted for verification at Etherscan.io on 2023-07-20
*/

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}




pragma solidity ^0.8.0;



interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(address token,uint amountTokenDesired,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
} 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn,uint amountOutMin,address[] calldata path,address to,uint deadline) external;
}
interface IUniswapV2Factory {
     function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract PPBOT is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router; 
    bool private swapping;
    bool public tradeEnabled = false;
    uint256 public marketingTaxSell = 5; // marketing tax on sell
    uint256 public marketingTaxBuy = 0; // marketing tax on buy

    uint256 public maxTxAmount = 10_000_000 ether; 
    uint256 public maxWalletAmount = 20_000_000 ether; 
    uint256 public marketingTaxThreshold = 10_000 ether; 

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedFromLimits;
    mapping (address => bool) public automatedMarketMakerPairs;

    address public marketingAddress = payable(0x06Bf5d306D7d56fA84BA070D399Fb0669eF00393);
    address public uniswapV2Pair;

    event TradeEnabled();

    constructor() ERC20("PPBOT", "PP") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingAddress] = true;
        _isExcludedFromLimits[owner()] = true;
        _isExcludedFromLimits[0x000000000000000000000000000000000000dEaD] = true;
        _isExcludedFromLimits[marketingAddress] = true;
        _isExcludedFromLimits[address(this)] = true;
        _mint(msg.sender, 1_000_000_000 * 10**decimals());
    }
    
    receive() external payable {}

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (from != owner() && to != owner()) {
            if(!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                require(tradeEnabled, "Trading is currently disabled");
                require(amount <= maxTxAmount, "Transfer amount exceeds the maximum allowed");
                if (to != uniswapV2Pair) {
                    require(balanceOf(to) + amount < maxWalletAmount, "TOKEN: Balance exceeds wallet size!");
                }
            }
        }

        bool canSendMarketingFee = balanceOf(address(this)) >= marketingTaxThreshold;
         if( canSendMarketingFee &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) 
        {
            claimMarketingFees();
        } 

        bool takeFee = !swapping;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }   

        if (takeFee) {
            if (automatedMarketMakerPairs[to]) {
                 uint256 marketingTax = amount * marketingTaxSell / 100;
                amount = amount - marketingTax;
                super._transfer(from, address(this), marketingTax);
            }
            else if (automatedMarketMakerPairs[from]) {
                 uint256 marketingTax = amount * marketingTaxBuy / 100;
                amount = amount - marketingTax;
                super._transfer(from, address(this), marketingTax);
            }
        }
            
        super._transfer(from, to, amount);
    }


    function claimMarketingFees() public {
        uint _pendingMarketingFee = balanceOf(address(this));
        if (_pendingMarketingFee > 0) 
        {
        swapping = true;    
        swapTokensForEth(_pendingMarketingFee);
        uint amount = address(this).balance;
        (bool success, ) = address(marketingAddress).call{ value: amount }("");
        require(success, "Address: unable to extract value, tx may have reverted");
        swapping = false;         
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
    }

    function excludeMultipleAccountsFromFees(address[] memory accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
    }

    function excludeFromLimits(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromLimits[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromLimits[account] = excluded;
    }

    function excludeMultipleAccountsFromLimits(address[] memory accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromLimits[accounts[i]] = excluded;
        }
    }

    function enableTrading() external onlyOwner {
        tradeEnabled = true;
        emit TradeEnabled();
    }

    function setmarketingTaxSell(uint256 selltax) external onlyOwner {
        require(selltax <= 60, "SellMarketingTax cannot be more than 50%");
        marketingTaxSell = selltax;
    }

    function setmarketingTaxBuy(uint256 buytax) external onlyOwner {
        require(buytax <= 60, "BuyMarketingTax cannot be more than 50%");
        marketingTaxBuy = buytax;
    }

    function setMaxTxAmount(uint256 amount) external onlyOwner {
        require(amount >= 10_000 ether, "MaxTxAmount cannot be less");
        maxTxAmount = amount;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        require(amount >= 10_000 ether, "MaxWalletAmount cannot be less");
        maxWalletAmount = amount;
    }

    function setMarketingTaxThreshold(uint256 amount) external onlyOwner {
        marketingTaxThreshold = amount;
    }

    function setMarketingAddress(address payable _newaddress) external  onlyOwner {
        _isExcludedFromLimits[marketingAddress] = false;
        _isExcludedFromFees[marketingAddress] = false;
        marketingAddress = _newaddress;
        _isExcludedFromLimits[marketingAddress] = true;
        _isExcludedFromFees[marketingAddress] = true;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

}

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":[],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMarketingFees","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newaddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMarketingTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buytax","type":"uint256"}],"name":"setmarketingTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"selltax","type":"uint256"}],"name":"setmarketingTaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600660156101000a81548160ff021916908315150217905550600560075560006008556a084595161401484a0000006009556a108b2a2c28029094000000600a5569021e19e0c9bab2400000600b557306bf5d306d7d56fa84ba070d399fb0669ef00393600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b757600080fd5b506040518060400160405280600581526020017f5050424f540000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f5050000000000000000000000000000000000000000000000000000000000000815250816003908162000135919062000c77565b50806004908162000147919062000c77565b5050506200016a6200015e6200069560201b60201c565b6200069d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f7919062000dc8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000285919062000dc8565b6040518363ffffffff1660e01b8152600401620002a492919062000e0b565b6020604051808303816000875af1158015620002c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ea919062000dc8565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003818160016200076360201b60201c565b6001600c6000620003976200085360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620004d06200085360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200068d33620006626200087d60201b60201c565b600a62000670919062000fc8565b633b9aca0062000681919062001019565b6200088660201b60201c565b5050620011e8565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620007f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ef90620010eb565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ef906200115d565b60405180910390fd5b6200090c60008383620009f360201b60201c565b80600260008282546200092091906200117f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009d39190620011cb565b60405180910390a3620009ef60008383620009f860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a7f57607f821691505b60208210810362000a955762000a9462000a37565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000aff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ac0565b62000b0b868362000ac0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b5862000b5262000b4c8462000b23565b62000b2d565b62000b23565b9050919050565b6000819050919050565b62000b748362000b37565b62000b8c62000b838262000b5f565b84845462000acd565b825550505050565b600090565b62000ba362000b94565b62000bb081848462000b69565b505050565b5b8181101562000bd85762000bcc60008262000b99565b60018101905062000bb6565b5050565b601f82111562000c275762000bf18162000a9b565b62000bfc8462000ab0565b8101602085101562000c0c578190505b62000c2462000c1b8562000ab0565b83018262000bb5565b50505b505050565b600082821c905092915050565b600062000c4c6000198460080262000c2c565b1980831691505092915050565b600062000c67838362000c39565b9150826002028217905092915050565b62000c8282620009fd565b67ffffffffffffffff81111562000c9e5762000c9d62000a08565b5b62000caa825462000a66565b62000cb782828562000bdc565b600060209050601f83116001811462000cef576000841562000cda578287015190505b62000ce6858262000c59565b86555062000d56565b601f19841662000cff8662000a9b565b60005b8281101562000d295784890151825560018201915060208501945060208101905062000d02565b8683101562000d49578489015162000d45601f89168262000c39565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d908262000d63565b9050919050565b62000da28162000d83565b811462000dae57600080fd5b50565b60008151905062000dc28162000d97565b92915050565b60006020828403121562000de15762000de062000d5e565b5b600062000df18482850162000db1565b91505092915050565b62000e058162000d83565b82525050565b600060408201905062000e22600083018562000dfa565b62000e31602083018462000dfa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ec65780860481111562000e9e5762000e9d62000e38565b5b600185161562000eae5780820291505b808102905062000ebe8562000e67565b945062000e7e565b94509492505050565b60008262000ee1576001905062000fb4565b8162000ef1576000905062000fb4565b816001811462000f0a576002811462000f155762000f4b565b600191505062000fb4565b60ff84111562000f2a5762000f2962000e38565b5b8360020a91508482111562000f445762000f4362000e38565b5b5062000fb4565b5060208310610133831016604e8410600b841016171562000f855782820a90508381111562000f7f5762000f7e62000e38565b5b62000fb4565b62000f94848484600162000e74565b9250905081840481111562000fae5762000fad62000e38565b5b81810290505b9392505050565b600060ff82169050919050565b600062000fd58262000b23565b915062000fe28362000fbb565b9250620010117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ecf565b905092915050565b6000620010268262000b23565b9150620010338362000b23565b9250828202620010438162000b23565b915082820484148315176200105d576200105c62000e38565b5b5092915050565b600082825260208201905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000620010d360388362001064565b9150620010e08262001075565b604082019050919050565b600060208201905081810360008301526200110681620010c4565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001145601f8362001064565b915062001152826200110d565b602082019050919050565b60006020820190508181036000830152620011788162001136565b9050919050565b60006200118c8262000b23565b9150620011998362000b23565b9250828201905080821115620011b457620011b362000e38565b5b92915050565b620011c58162000b23565b82525050565b6000602082019050620011e26000830184620011ba565b92915050565b613fd780620011f86000396000f3fe60806040526004361061023e5760003560e01c80638c0b5e221161012e578063b62496f5116100ab578063d621e8131161006f578063d621e81314610869578063dd62ed3e14610894578063e550573d146108d1578063ec28438a1461090e578063f2fde38b1461093757610245565b8063b62496f514610788578063c0246668146107c5578063c0a904a2146107ee578063c492f04614610817578063c6e5a5ab1461084057610245565b8063a457c2d7116100f2578063a457c2d71461068d578063a5ece941146106ca578063a9059cbb146106f5578063aa4bde2814610732578063b2e208791461075d57610245565b80638c0b5e22146105ba5780638da5cb5b146105e5578063906e9dd01461061057806395d89b41146106395780639a7a23d61461066457610245565b806342d0b0bc116101bc578063715018a611610180578063715018a61461050f578063721e6233146105265780637c3a128f146105515780638753cc481461057a5780638a8c523c146105a357610245565b806342d0b0bc1461041657806349bd5a5e146104415780634fbee1931461046c57806365b8dbc0146104a957806370a08231146104d257610245565b806318160ddd1161020357806318160ddd1461031d57806323b872dd1461034857806327a14fc214610385578063313ce567146103ae57806339509351146103d957610245565b8062272d601461024a57806306fdde031461027357806307dce0f81461029e578063095ea7b3146102b55780631694505e146102f257610245565b3661024557005b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190612a38565b610960565b005b34801561027f57600080fd5b506102886109b6565b6040516102959190612af5565b60405180910390f35b3480156102aa57600080fd5b506102b3610a48565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190612b75565b610b76565b6040516102e99190612bd0565b60405180910390f35b3480156102fe57600080fd5b50610307610b99565b6040516103149190612c4a565b60405180910390f35b34801561032957600080fd5b50610332610bbf565b60405161033f9190612c74565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190612c8f565b610bc9565b60405161037c9190612bd0565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612a38565b610bf8565b005b3480156103ba57600080fd5b506103c3610c57565b6040516103d09190612cfe565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190612b75565b610c60565b60405161040d9190612bd0565b60405180910390f35b34801561042257600080fd5b5061042b610c97565b6040516104389190612c74565b60405180910390f35b34801561044d57600080fd5b50610456610c9d565b6040516104639190612d28565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612d43565b610cc3565b6040516104a09190612bd0565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612d43565b610d19565b005b3480156104de57600080fd5b506104f960048036038101906104f49190612d43565b610fd9565b6040516105069190612c74565b60405180910390f35b34801561051b57600080fd5b50610524611021565b005b34801561053257600080fd5b5061053b611035565b6040516105489190612c74565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190612a38565b61103b565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612a38565b611091565b005b3480156105af57600080fd5b506105b86110a3565b005b3480156105c657600080fd5b506105cf6110f4565b6040516105dc9190612c74565b60405180910390f35b3480156105f157600080fd5b506105fa6110fa565b6040516106079190612d28565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190612dae565b611124565b005b34801561064557600080fd5b5061064e611358565b60405161065b9190612af5565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190612e07565b6113ea565b005b34801561069957600080fd5b506106b460048036038101906106af9190612b75565b611490565b6040516106c19190612bd0565b60405180910390f35b3480156106d657600080fd5b506106df611507565b6040516106ec9190612d28565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190612b75565b61152d565b6040516107299190612bd0565b60405180910390f35b34801561073e57600080fd5b50610747611550565b6040516107549190612c74565b60405180910390f35b34801561076957600080fd5b50610772611556565b60405161077f9190612c74565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612d43565b61155c565b6040516107bc9190612bd0565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190612e07565b61157c565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612e07565b611671565b005b34801561082357600080fd5b5061083e60048036038101906108399190612f8f565b611766565b005b34801561084c57600080fd5b5061086760048036038101906108629190612f8f565b611803565b005b34801561087557600080fd5b5061087e6118a0565b60405161088b9190612bd0565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190612feb565b6118b3565b6040516108c89190612c74565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190612d43565b61193a565b6040516109059190612bd0565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190612a38565b61195a565b005b34801561094357600080fd5b5061095e60048036038101906109599190612d43565b6119b9565b005b610968611a3c565b603c8111156109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a39061309d565b60405180910390fd5b8060088190555050565b6060600380546109c5906130ec565b80601f01602080910402602001604051908101604052809291908181526020018280546109f1906130ec565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b6000610a5330610fd9565b90506000811115610b73576001600660146101000a81548160ff021916908315150217905550610a8281611aba565b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610acf9061314e565b60006040518083038185875af1925050503d8060008114610b0c576040519150601f19603f3d011682016040523d82523d6000602084013e610b11565b606091505b5050905080610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906131d5565b60405180910390fd5b6000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b81611cfd565b9050610b8e818585611d05565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610bd4611cfd565b9050610be1858285611ece565b610bec858585611f5a565b60019150509392505050565b610c00611a3c565b69021e19e0c9bab2400000811015610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613241565b60405180910390fd5b80600a8190555050565b60006012905090565b600080610c6b611cfd565b9050610c8c818585610c7d85896118b3565b610c879190613290565b611d05565b600191505092915050565b60075481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d21611a3c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890613336565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e85919061336b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f32919061336b565b6040518363ffffffff1660e01b8152600401610f4f929190613398565b6020604051808303816000875af1158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f92919061336b565b905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611029611a3c565b61103360006125bb565b565b60085481565b611043611a3c565b603c811115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613433565b60405180910390fd5b8060078190555050565b611099611a3c565b80600b8190555050565b6110ab611a3c565b6001600660156101000a81548160ff0219169083151502179055507f0270d74976d9c744a465e24d0e2675086607ed6163edf4e36cabaf9740ce2ef460405160405180910390a1565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61112c611a3c565b6000600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606060048054611367906130ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611393906130ec565b80156113e05780601f106113b5576101008083540402835291602001916113e0565b820191906000526020600020905b8154815290600101906020018083116113c357829003601f168201915b5050505050905090565b6113f2611a3c565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611479906134eb565b60405180910390fd5b61148c8282612681565b5050565b60008061149b611cfd565b905060006114a982866118b3565b9050838110156114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e59061357d565b60405180910390fd5b6114fb8286868403611d05565b60019250505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611538611cfd565b9050611545818585611f5a565b600191505092915050565b600a5481565b600b5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b611584611a3c565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d9061360f565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611679611a3c565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361170b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117029061360f565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61176e611a3c565b60005b82518110156117fe5781600c60008584815181106117925761179161362f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117f69061365e565b915050611771565b505050565b61180b611a3c565b60005b825181101561189b5781600d600085848151811061182f5761182e61362f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118939061365e565b91505061180e565b505050565b600660159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611962611a3c565b69021e19e0c9bab24000008110156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a6906136f2565b60405180910390fd5b8060098190555050565b6119c1611a3c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790613784565b60405180910390fd5b611a39816125bb565b50565b611a44611cfd565b73ffffffffffffffffffffffffffffffffffffffff16611a626110fa565b73ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf906137f0565b60405180910390fd5b565b6000600267ffffffffffffffff811115611ad757611ad6612e4c565b5b604051908082528060200260200182016040528015611b055781602001602082028036833780820191505090505b5090503081600081518110611b1d57611b1c61362f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be8919061336b565b81600181518110611bfc57611bfb61362f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611c6330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d05565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611cc7959493929190613909565b600060405180830381600087803b158015611ce157600080fd5b505af1158015611cf5573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906139d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613a67565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ec19190612c74565b60405180910390a3505050565b6000611eda84846118b3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f545781811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90613ad3565b60405180910390fd5b611f538484848403611d05565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc090613b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613bf7565b60405180910390fd5b600081036120515761204c8383600061276e565b6125b6565b6120596110fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120c757506120976110fa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122b857600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121705750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122b757600660159054906101000a900460ff166121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613c63565b60405180910390fd5b600954811115612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090613cf5565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122b657600a548161226b84610fd9565b6122759190613290565b106122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90613d87565b60405180910390fd5b5b5b5b6000600b546122c630610fd9565b101590508080156122e45750600660149054906101000a900460ff16155b801561233a5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561237957506123496110fa565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123b857506123886110fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156123c6576123c5610a48565b5b6000600660149054906101000a900460ff16159050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061247c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561248657600090505b80156125a857600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561251b5760006064600754856124f09190613da7565b6124fa9190613e18565b905080846125089190613e49565b935061251586308361276e565b506125a7565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125a657600060646008548561257f9190613da7565b6125899190613e18565b905080846125979190613e49565b93506125a486308361276e565b505b5b5b6125b385858561276e565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90613eef565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490613b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390613bf7565b60405180910390fd5b6128578383836129e4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d490613f81565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129cb9190612c74565b60405180910390a36129de8484846129e9565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612a1581612a02565b8114612a2057600080fd5b50565b600081359050612a3281612a0c565b92915050565b600060208284031215612a4e57612a4d6129f8565b5b6000612a5c84828501612a23565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a9f578082015181840152602081019050612a84565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ac782612a65565b612ad18185612a70565b9350612ae1818560208601612a81565b612aea81612aab565b840191505092915050565b60006020820190508181036000830152612b0f8184612abc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4282612b17565b9050919050565b612b5281612b37565b8114612b5d57600080fd5b50565b600081359050612b6f81612b49565b92915050565b60008060408385031215612b8c57612b8b6129f8565b5b6000612b9a85828601612b60565b9250506020612bab85828601612a23565b9150509250929050565b60008115159050919050565b612bca81612bb5565b82525050565b6000602082019050612be56000830184612bc1565b92915050565b6000819050919050565b6000612c10612c0b612c0684612b17565b612beb565b612b17565b9050919050565b6000612c2282612bf5565b9050919050565b6000612c3482612c17565b9050919050565b612c4481612c29565b82525050565b6000602082019050612c5f6000830184612c3b565b92915050565b612c6e81612a02565b82525050565b6000602082019050612c896000830184612c65565b92915050565b600080600060608486031215612ca857612ca76129f8565b5b6000612cb686828701612b60565b9350506020612cc786828701612b60565b9250506040612cd886828701612a23565b9150509250925092565b600060ff82169050919050565b612cf881612ce2565b82525050565b6000602082019050612d136000830184612cef565b92915050565b612d2281612b37565b82525050565b6000602082019050612d3d6000830184612d19565b92915050565b600060208284031215612d5957612d586129f8565b5b6000612d6784828501612b60565b91505092915050565b6000612d7b82612b17565b9050919050565b612d8b81612d70565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600060208284031215612dc457612dc36129f8565b5b6000612dd284828501612d99565b91505092915050565b612de481612bb5565b8114612def57600080fd5b50565b600081359050612e0181612ddb565b92915050565b60008060408385031215612e1e57612e1d6129f8565b5b6000612e2c85828601612b60565b9250506020612e3d85828601612df2565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e8482612aab565b810181811067ffffffffffffffff82111715612ea357612ea2612e4c565b5b80604052505050565b6000612eb66129ee565b9050612ec28282612e7b565b919050565b600067ffffffffffffffff821115612ee257612ee1612e4c565b5b602082029050602081019050919050565b600080fd5b6000612f0b612f0684612ec7565b612eac565b90508083825260208201905060208402830185811115612f2e57612f2d612ef3565b5b835b81811015612f575780612f438882612b60565b845260208401935050602081019050612f30565b5050509392505050565b600082601f830112612f7657612f75612e47565b5b8135612f86848260208601612ef8565b91505092915050565b60008060408385031215612fa657612fa56129f8565b5b600083013567ffffffffffffffff811115612fc457612fc36129fd565b5b612fd085828601612f61565b9250506020612fe185828601612df2565b9150509250929050565b60008060408385031215613002576130016129f8565b5b600061301085828601612b60565b925050602061302185828601612b60565b9150509250929050565b7f4275794d61726b6574696e675461782063616e6e6f74206265206d6f7265207460008201527f68616e2035302500000000000000000000000000000000000000000000000000602082015250565b6000613087602783612a70565b91506130928261302b565b604082019050919050565b600060208201905081810360008301526130b68161307a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061310457607f821691505b602082108103613117576131166130bd565b5b50919050565b600081905092915050565b50565b600061313860008361311d565b915061314382613128565b600082019050919050565b60006131598261312b565b9150819050919050565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b60006131bf603683612a70565b91506131ca82613163565b604082019050919050565b600060208201905081810360008301526131ee816131b2565b9050919050565b7f4d617857616c6c6574416d6f756e742063616e6e6f74206265206c6573730000600082015250565b600061322b601e83612a70565b9150613236826131f5565b602082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061329b82612a02565b91506132a683612a02565b92508282019050808211156132be576132bd613261565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613320602383612a70565b915061332b826132c4565b604082019050919050565b6000602082019050818103600083015261334f81613313565b9050919050565b60008151905061336581612b49565b92915050565b600060208284031215613381576133806129f8565b5b600061338f84828501613356565b91505092915050565b60006040820190506133ad6000830185612d19565b6133ba6020830184612d19565b9392505050565b7f53656c6c4d61726b6574696e675461782063616e6e6f74206265206d6f72652060008201527f7468616e20353025000000000000000000000000000000000000000000000000602082015250565b600061341d602883612a70565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b60006134d5604583612a70565b91506134e082613453565b606082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613567602583612a70565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006135f9602a83612a70565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061366982612a02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361369b5761369a613261565b5b600182019050919050565b7f4d61785478416d6f756e742063616e6e6f74206265206c657373000000000000600082015250565b60006136dc601a83612a70565b91506136e7826136a6565b602082019050919050565b6000602082019050818103600083015261370b816136cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061376e602683612a70565b915061377982613712565b604082019050919050565b6000602082019050818103600083015261379d81613761565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137da602083612a70565b91506137e5826137a4565b602082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b6000819050919050565b600061383561383061382b84613810565b612beb565b612a02565b9050919050565b6138458161381a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61388081612b37565b82525050565b60006138928383613877565b60208301905092915050565b6000602082019050919050565b60006138b68261384b565b6138c08185613856565b93506138cb83613867565b8060005b838110156138fc5781516138e38882613886565b97506138ee8361389e565b9250506001810190506138cf565b5085935050505092915050565b600060a08201905061391e6000830188612c65565b61392b602083018761383c565b818103604083015261393d81866138ab565b905061394c6060830185612d19565b6139596080830184612c65565b9695505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139bf602483612a70565b91506139ca82613963565b604082019050919050565b600060208201905081810360008301526139ee816139b2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a51602283612a70565b9150613a5c826139f5565b604082019050919050565b60006020820190508181036000830152613a8081613a44565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613abd601d83612a70565b9150613ac882613a87565b602082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b4f602583612a70565b9150613b5a82613af3565b604082019050919050565b60006020820190508181036000830152613b7e81613b42565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613be1602383612a70565b9150613bec82613b85565b604082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b7f54726164696e672069732063757272656e746c792064697361626c6564000000600082015250565b6000613c4d601d83612a70565b9150613c5882613c17565b602082019050919050565b60006020820190508181036000830152613c7c81613c40565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b6000613cdf602b83612a70565b9150613cea82613c83565b604082019050919050565b60006020820190508181036000830152613d0e81613cd2565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613d71602383612a70565b9150613d7c82613d15565b604082019050919050565b60006020820190508181036000830152613da081613d64565b9050919050565b6000613db282612a02565b9150613dbd83612a02565b9250828202613dcb81612a02565b91508282048414831517613de257613de1613261565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e2382612a02565b9150613e2e83612a02565b925082613e3e57613e3d613de9565b5b828204905092915050565b6000613e5482612a02565b9150613e5f83612a02565b9250828203905081811115613e7757613e76613261565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000613ed9603883612a70565b9150613ee482613e7d565b604082019050919050565b60006020820190508181036000830152613f0881613ecc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f6b602683612a70565b9150613f7682613f0f565b604082019050919050565b60006020820190508181036000830152613f9a81613f5e565b905091905056fea264697066735822122022654cb58b40e01565e9e2adadfb8274ea22f1d802d11d8cf7983cdc6cdab57564736f6c63430008120033

Deployed Bytecode

0x60806040526004361061023e5760003560e01c80638c0b5e221161012e578063b62496f5116100ab578063d621e8131161006f578063d621e81314610869578063dd62ed3e14610894578063e550573d146108d1578063ec28438a1461090e578063f2fde38b1461093757610245565b8063b62496f514610788578063c0246668146107c5578063c0a904a2146107ee578063c492f04614610817578063c6e5a5ab1461084057610245565b8063a457c2d7116100f2578063a457c2d71461068d578063a5ece941146106ca578063a9059cbb146106f5578063aa4bde2814610732578063b2e208791461075d57610245565b80638c0b5e22146105ba5780638da5cb5b146105e5578063906e9dd01461061057806395d89b41146106395780639a7a23d61461066457610245565b806342d0b0bc116101bc578063715018a611610180578063715018a61461050f578063721e6233146105265780637c3a128f146105515780638753cc481461057a5780638a8c523c146105a357610245565b806342d0b0bc1461041657806349bd5a5e146104415780634fbee1931461046c57806365b8dbc0146104a957806370a08231146104d257610245565b806318160ddd1161020357806318160ddd1461031d57806323b872dd1461034857806327a14fc214610385578063313ce567146103ae57806339509351146103d957610245565b8062272d601461024a57806306fdde031461027357806307dce0f81461029e578063095ea7b3146102b55780631694505e146102f257610245565b3661024557005b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190612a38565b610960565b005b34801561027f57600080fd5b506102886109b6565b6040516102959190612af5565b60405180910390f35b3480156102aa57600080fd5b506102b3610a48565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190612b75565b610b76565b6040516102e99190612bd0565b60405180910390f35b3480156102fe57600080fd5b50610307610b99565b6040516103149190612c4a565b60405180910390f35b34801561032957600080fd5b50610332610bbf565b60405161033f9190612c74565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190612c8f565b610bc9565b60405161037c9190612bd0565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612a38565b610bf8565b005b3480156103ba57600080fd5b506103c3610c57565b6040516103d09190612cfe565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190612b75565b610c60565b60405161040d9190612bd0565b60405180910390f35b34801561042257600080fd5b5061042b610c97565b6040516104389190612c74565b60405180910390f35b34801561044d57600080fd5b50610456610c9d565b6040516104639190612d28565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612d43565b610cc3565b6040516104a09190612bd0565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612d43565b610d19565b005b3480156104de57600080fd5b506104f960048036038101906104f49190612d43565b610fd9565b6040516105069190612c74565b60405180910390f35b34801561051b57600080fd5b50610524611021565b005b34801561053257600080fd5b5061053b611035565b6040516105489190612c74565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190612a38565b61103b565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612a38565b611091565b005b3480156105af57600080fd5b506105b86110a3565b005b3480156105c657600080fd5b506105cf6110f4565b6040516105dc9190612c74565b60405180910390f35b3480156105f157600080fd5b506105fa6110fa565b6040516106079190612d28565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190612dae565b611124565b005b34801561064557600080fd5b5061064e611358565b60405161065b9190612af5565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190612e07565b6113ea565b005b34801561069957600080fd5b506106b460048036038101906106af9190612b75565b611490565b6040516106c19190612bd0565b60405180910390f35b3480156106d657600080fd5b506106df611507565b6040516106ec9190612d28565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190612b75565b61152d565b6040516107299190612bd0565b60405180910390f35b34801561073e57600080fd5b50610747611550565b6040516107549190612c74565b60405180910390f35b34801561076957600080fd5b50610772611556565b60405161077f9190612c74565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612d43565b61155c565b6040516107bc9190612bd0565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190612e07565b61157c565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612e07565b611671565b005b34801561082357600080fd5b5061083e60048036038101906108399190612f8f565b611766565b005b34801561084c57600080fd5b5061086760048036038101906108629190612f8f565b611803565b005b34801561087557600080fd5b5061087e6118a0565b60405161088b9190612bd0565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190612feb565b6118b3565b6040516108c89190612c74565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190612d43565b61193a565b6040516109059190612bd0565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190612a38565b61195a565b005b34801561094357600080fd5b5061095e60048036038101906109599190612d43565b6119b9565b005b610968611a3c565b603c8111156109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a39061309d565b60405180910390fd5b8060088190555050565b6060600380546109c5906130ec565b80601f01602080910402602001604051908101604052809291908181526020018280546109f1906130ec565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b6000610a5330610fd9565b90506000811115610b73576001600660146101000a81548160ff021916908315150217905550610a8281611aba565b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610acf9061314e565b60006040518083038185875af1925050503d8060008114610b0c576040519150601f19603f3d011682016040523d82523d6000602084013e610b11565b606091505b5050905080610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906131d5565b60405180910390fd5b6000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b81611cfd565b9050610b8e818585611d05565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610bd4611cfd565b9050610be1858285611ece565b610bec858585611f5a565b60019150509392505050565b610c00611a3c565b69021e19e0c9bab2400000811015610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613241565b60405180910390fd5b80600a8190555050565b60006012905090565b600080610c6b611cfd565b9050610c8c818585610c7d85896118b3565b610c879190613290565b611d05565b600191505092915050565b60075481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d21611a3c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890613336565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e85919061336b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f32919061336b565b6040518363ffffffff1660e01b8152600401610f4f929190613398565b6020604051808303816000875af1158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f92919061336b565b905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611029611a3c565b61103360006125bb565b565b60085481565b611043611a3c565b603c811115611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613433565b60405180910390fd5b8060078190555050565b611099611a3c565b80600b8190555050565b6110ab611a3c565b6001600660156101000a81548160ff0219169083151502179055507f0270d74976d9c744a465e24d0e2675086607ed6163edf4e36cabaf9740ce2ef460405160405180910390a1565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61112c611a3c565b6000600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606060048054611367906130ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611393906130ec565b80156113e05780601f106113b5576101008083540402835291602001916113e0565b820191906000526020600020905b8154815290600101906020018083116113c357829003601f168201915b5050505050905090565b6113f2611a3c565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611479906134eb565b60405180910390fd5b61148c8282612681565b5050565b60008061149b611cfd565b905060006114a982866118b3565b9050838110156114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e59061357d565b60405180910390fd5b6114fb8286868403611d05565b60019250505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611538611cfd565b9050611545818585611f5a565b600191505092915050565b600a5481565b600b5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b611584611a3c565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d9061360f565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611679611a3c565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361170b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117029061360f565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61176e611a3c565b60005b82518110156117fe5781600c60008584815181106117925761179161362f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117f69061365e565b915050611771565b505050565b61180b611a3c565b60005b825181101561189b5781600d600085848151811061182f5761182e61362f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118939061365e565b91505061180e565b505050565b600660159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611962611a3c565b69021e19e0c9bab24000008110156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a6906136f2565b60405180910390fd5b8060098190555050565b6119c1611a3c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790613784565b60405180910390fd5b611a39816125bb565b50565b611a44611cfd565b73ffffffffffffffffffffffffffffffffffffffff16611a626110fa565b73ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf906137f0565b60405180910390fd5b565b6000600267ffffffffffffffff811115611ad757611ad6612e4c565b5b604051908082528060200260200182016040528015611b055781602001602082028036833780820191505090505b5090503081600081518110611b1d57611b1c61362f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be8919061336b565b81600181518110611bfc57611bfb61362f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611c6330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d05565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611cc7959493929190613909565b600060405180830381600087803b158015611ce157600080fd5b505af1158015611cf5573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906139d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613a67565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ec19190612c74565b60405180910390a3505050565b6000611eda84846118b3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f545781811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90613ad3565b60405180910390fd5b611f538484848403611d05565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc090613b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613bf7565b60405180910390fd5b600081036120515761204c8383600061276e565b6125b6565b6120596110fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120c757506120976110fa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122b857600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121705750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122b757600660159054906101000a900460ff166121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90613c63565b60405180910390fd5b600954811115612209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220090613cf5565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122b657600a548161226b84610fd9565b6122759190613290565b106122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90613d87565b60405180910390fd5b5b5b5b6000600b546122c630610fd9565b101590508080156122e45750600660149054906101000a900460ff16155b801561233a5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561237957506123496110fa565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123b857506123886110fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156123c6576123c5610a48565b5b6000600660149054906101000a900460ff16159050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061247c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561248657600090505b80156125a857600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561251b5760006064600754856124f09190613da7565b6124fa9190613e18565b905080846125089190613e49565b935061251586308361276e565b506125a7565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125a657600060646008548561257f9190613da7565b6125899190613e18565b905080846125979190613e49565b93506125a486308361276e565b505b5b5b6125b385858561276e565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90613eef565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490613b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390613bf7565b60405180910390fd5b6128578383836129e4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d490613f81565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129cb9190612c74565b60405180910390a36129de8484846129e9565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612a1581612a02565b8114612a2057600080fd5b50565b600081359050612a3281612a0c565b92915050565b600060208284031215612a4e57612a4d6129f8565b5b6000612a5c84828501612a23565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a9f578082015181840152602081019050612a84565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ac782612a65565b612ad18185612a70565b9350612ae1818560208601612a81565b612aea81612aab565b840191505092915050565b60006020820190508181036000830152612b0f8184612abc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4282612b17565b9050919050565b612b5281612b37565b8114612b5d57600080fd5b50565b600081359050612b6f81612b49565b92915050565b60008060408385031215612b8c57612b8b6129f8565b5b6000612b9a85828601612b60565b9250506020612bab85828601612a23565b9150509250929050565b60008115159050919050565b612bca81612bb5565b82525050565b6000602082019050612be56000830184612bc1565b92915050565b6000819050919050565b6000612c10612c0b612c0684612b17565b612beb565b612b17565b9050919050565b6000612c2282612bf5565b9050919050565b6000612c3482612c17565b9050919050565b612c4481612c29565b82525050565b6000602082019050612c5f6000830184612c3b565b92915050565b612c6e81612a02565b82525050565b6000602082019050612c896000830184612c65565b92915050565b600080600060608486031215612ca857612ca76129f8565b5b6000612cb686828701612b60565b9350506020612cc786828701612b60565b9250506040612cd886828701612a23565b9150509250925092565b600060ff82169050919050565b612cf881612ce2565b82525050565b6000602082019050612d136000830184612cef565b92915050565b612d2281612b37565b82525050565b6000602082019050612d3d6000830184612d19565b92915050565b600060208284031215612d5957612d586129f8565b5b6000612d6784828501612b60565b91505092915050565b6000612d7b82612b17565b9050919050565b612d8b81612d70565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600060208284031215612dc457612dc36129f8565b5b6000612dd284828501612d99565b91505092915050565b612de481612bb5565b8114612def57600080fd5b50565b600081359050612e0181612ddb565b92915050565b60008060408385031215612e1e57612e1d6129f8565b5b6000612e2c85828601612b60565b9250506020612e3d85828601612df2565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e8482612aab565b810181811067ffffffffffffffff82111715612ea357612ea2612e4c565b5b80604052505050565b6000612eb66129ee565b9050612ec28282612e7b565b919050565b600067ffffffffffffffff821115612ee257612ee1612e4c565b5b602082029050602081019050919050565b600080fd5b6000612f0b612f0684612ec7565b612eac565b90508083825260208201905060208402830185811115612f2e57612f2d612ef3565b5b835b81811015612f575780612f438882612b60565b845260208401935050602081019050612f30565b5050509392505050565b600082601f830112612f7657612f75612e47565b5b8135612f86848260208601612ef8565b91505092915050565b60008060408385031215612fa657612fa56129f8565b5b600083013567ffffffffffffffff811115612fc457612fc36129fd565b5b612fd085828601612f61565b9250506020612fe185828601612df2565b9150509250929050565b60008060408385031215613002576130016129f8565b5b600061301085828601612b60565b925050602061302185828601612b60565b9150509250929050565b7f4275794d61726b6574696e675461782063616e6e6f74206265206d6f7265207460008201527f68616e2035302500000000000000000000000000000000000000000000000000602082015250565b6000613087602783612a70565b91506130928261302b565b604082019050919050565b600060208201905081810360008301526130b68161307a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061310457607f821691505b602082108103613117576131166130bd565b5b50919050565b600081905092915050565b50565b600061313860008361311d565b915061314382613128565b600082019050919050565b60006131598261312b565b9150819050919050565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b60006131bf603683612a70565b91506131ca82613163565b604082019050919050565b600060208201905081810360008301526131ee816131b2565b9050919050565b7f4d617857616c6c6574416d6f756e742063616e6e6f74206265206c6573730000600082015250565b600061322b601e83612a70565b9150613236826131f5565b602082019050919050565b6000602082019050818103600083015261325a8161321e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061329b82612a02565b91506132a683612a02565b92508282019050808211156132be576132bd613261565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613320602383612a70565b915061332b826132c4565b604082019050919050565b6000602082019050818103600083015261334f81613313565b9050919050565b60008151905061336581612b49565b92915050565b600060208284031215613381576133806129f8565b5b600061338f84828501613356565b91505092915050565b60006040820190506133ad6000830185612d19565b6133ba6020830184612d19565b9392505050565b7f53656c6c4d61726b6574696e675461782063616e6e6f74206265206d6f72652060008201527f7468616e20353025000000000000000000000000000000000000000000000000602082015250565b600061341d602883612a70565b9150613428826133c1565b604082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b60006134d5604583612a70565b91506134e082613453565b606082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613567602583612a70565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006135f9602a83612a70565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061366982612a02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361369b5761369a613261565b5b600182019050919050565b7f4d61785478416d6f756e742063616e6e6f74206265206c657373000000000000600082015250565b60006136dc601a83612a70565b91506136e7826136a6565b602082019050919050565b6000602082019050818103600083015261370b816136cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061376e602683612a70565b915061377982613712565b604082019050919050565b6000602082019050818103600083015261379d81613761565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137da602083612a70565b91506137e5826137a4565b602082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b6000819050919050565b600061383561383061382b84613810565b612beb565b612a02565b9050919050565b6138458161381a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61388081612b37565b82525050565b60006138928383613877565b60208301905092915050565b6000602082019050919050565b60006138b68261384b565b6138c08185613856565b93506138cb83613867565b8060005b838110156138fc5781516138e38882613886565b97506138ee8361389e565b9250506001810190506138cf565b5085935050505092915050565b600060a08201905061391e6000830188612c65565b61392b602083018761383c565b818103604083015261393d81866138ab565b905061394c6060830185612d19565b6139596080830184612c65565b9695505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139bf602483612a70565b91506139ca82613963565b604082019050919050565b600060208201905081810360008301526139ee816139b2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a51602283612a70565b9150613a5c826139f5565b604082019050919050565b60006020820190508181036000830152613a8081613a44565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613abd601d83612a70565b9150613ac882613a87565b602082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b4f602583612a70565b9150613b5a82613af3565b604082019050919050565b60006020820190508181036000830152613b7e81613b42565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613be1602383612a70565b9150613bec82613b85565b604082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b7f54726164696e672069732063757272656e746c792064697361626c6564000000600082015250565b6000613c4d601d83612a70565b9150613c5882613c17565b602082019050919050565b60006020820190508181036000830152613c7c81613c40565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b6000613cdf602b83612a70565b9150613cea82613c83565b604082019050919050565b60006020820190508181036000830152613d0e81613cd2565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613d71602383612a70565b9150613d7c82613d15565b604082019050919050565b60006020820190508181036000830152613da081613d64565b9050919050565b6000613db282612a02565b9150613dbd83612a02565b9250828202613dcb81612a02565b91508282048414831517613de257613de1613261565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e2382612a02565b9150613e2e83612a02565b925082613e3e57613e3d613de9565b5b828204905092915050565b6000613e5482612a02565b9150613e5f83612a02565b9250828203905081811115613e7757613e76613261565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000613ed9603883612a70565b9150613ee482613e7d565b604082019050919050565b60006020820190508181036000830152613f0881613ecc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f6b602683612a70565b9150613f7682613f0f565b604082019050919050565b60006020820190508181036000830152613f9a81613f5e565b905091905056fea264697066735822122022654cb58b40e01565e9e2adadfb8274ea22f1d802d11d8cf7983cdc6cdab57564736f6c63430008120033

Deployed Bytecode Sourcemap

21181:8132:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27659:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9454:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25855:497;;;;;;;;;;;;;:::i;:::-;;11814:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21221:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10583:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12595:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28026:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10425:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13265:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21337:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21922:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28703:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22939:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10754:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2875:103;;;;;;;;;;;;;:::i;:::-;;21404:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27464:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28216:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27344:112;;;;;;;;;;;;;:::i;:::-;;21471:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2234:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28342:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9673:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23350:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14006:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21830:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11087:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21524:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21581:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21763:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26360:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26847:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26606:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27099:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21298:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11343:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21702:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27848:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3133:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27659:181;2120:13;:11;:13::i;:::-;27751:2:::1;27741:6;:12;;27733:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27826:6;27808:15;:24;;;;27659:181:::0;:::o;9454:100::-;9508:13;9541:5;9534:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9454:100;:::o;25855:497::-;25903:25;25931:24;25949:4;25931:9;:24::i;:::-;25903:52;;25993:1;25970:20;:24;25966:379;;;26028:4;26017:8;;:15;;;;;;;;;;;;;;;;;;26047:38;26064:20;26047:16;:38::i;:::-;26096:11;26110:21;26096:35;;26143:12;26169:16;;;;;;;;;;;26161:30;;26200:6;26161:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26142:70;;;26231:7;26223:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26319:5;26308:8;;:16;;;;;;;;;;;;;;;;;;26006:339;;25966:379;25892:460;25855:497::o;11814:201::-;11897:4;11914:13;11930:12;:10;:12::i;:::-;11914:28;;11953:32;11962:5;11969:7;11978:6;11953:8;:32::i;:::-;12003:4;11996:11;;;11814:201;;;;:::o;21221:41::-;;;;;;;;;;;;;:::o;10583:108::-;10644:7;10671:12;;10664:19;;10583:108;:::o;12595:261::-;12692:4;12709:15;12727:12;:10;:12::i;:::-;12709:30;;12750:38;12766:4;12772:7;12781:6;12750:15;:38::i;:::-;12799:27;12809:4;12815:2;12819:6;12799:9;:27::i;:::-;12844:4;12837:11;;;12595:261;;;;;:::o;28026:182::-;2120:13;:11;:13::i;:::-;28118:12:::1;28108:6;:22;;28100:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28194:6;28176:15;:24;;;;28026:182:::0;:::o;10425:93::-;10483:5;10508:2;10501:9;;10425:93;:::o;13265:238::-;13353:4;13370:13;13386:12;:10;:12::i;:::-;13370:28;;13409:64;13418:5;13425:7;13462:10;13434:25;13444:5;13451:7;13434:9;:25::i;:::-;:38;;;;:::i;:::-;13409:8;:64::i;:::-;13491:4;13484:11;;;13265:238;;;;:::o;21337:35::-;;;;:::o;21922:28::-;;;;;;;;;;;;;:::o;28703:125::-;28768:4;28792:19;:28;28812:7;28792:28;;;;;;;;;;;;;;;;;;;;;;;;;28785:35;;28703:125;;;:::o;22939:403::-;2120:13;:11;:13::i;:::-;23048:15:::1;;;;;;;;;;;23026:38;;:10;:38;;::::0;23018:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23152:10;23115:15;;:48;;;;;;;;;;;;;;;;;;23174:22;23217:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23199:55;;;23263:4;23270:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23199:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23174:119;;23320:14;23304:13;;:30;;;;;;;;;;;;;;;;;;23007:335;22939:403:::0;:::o;10754:127::-;10828:7;10855:9;:18;10865:7;10855:18;;;;;;;;;;;;;;;;10848:25;;10754:127;;;:::o;2875:103::-;2120:13;:11;:13::i;:::-;2940:30:::1;2967:1;2940:18;:30::i;:::-;2875:103::o:0;21404:34::-;;;;:::o;27464:187::-;2120:13;:11;:13::i;:::-;27559:2:::1;27548:7;:13;;27540:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27636:7;27617:16;:26;;;;27464:187:::0;:::o;28216:118::-;2120:13;:11;:13::i;:::-;28320:6:::1;28296:21;:30;;;;28216:118:::0;:::o;27344:112::-;2120:13;:11;:13::i;:::-;27414:4:::1;27399:12;;:19;;;;;;;;;;;;;;;;;;27434:14;;;;;;;;;;27344:112::o:0;21471:45::-;;;;:::o;2234:87::-;2280:7;2307:6;;;;;;;;;;;2300:13;;2234:87;:::o;28342:353::-;2120:13;:11;:13::i;:::-;28473:5:::1;28431:21;:39;28453:16;;;;;;;;;;;28431:39;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;28529:5;28489:19;:37;28509:16;;;;;;;;;;;28489:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;28564:11;28545:16;;:30;;;;;;;;;;;;;;;;;;28628:4;28586:21;:39;28608:16;;;;;;;;;;;28586:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28683:4;28643:19;:37;28663:16;;;;;;;;;;;28643:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;28342:353:::0;:::o;9673:104::-;9729:13;9762:7;9755:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9673:104;:::o;23350:254::-;2120:13;:11;:13::i;:::-;23457::::1;;;;;;;;;;;23449:21;;:4;:21;;::::0;23441:103:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23555:41;23584:4;23590:5;23555:28;:41::i;:::-;23350:254:::0;;:::o;14006:436::-;14099:4;14116:13;14132:12;:10;:12::i;:::-;14116:28;;14155:24;14182:25;14192:5;14199:7;14182:9;:25::i;:::-;14155:52;;14246:15;14226:16;:35;;14218:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14339:60;14348:5;14355:7;14383:15;14364:16;:34;14339:8;:60::i;:::-;14430:4;14423:11;;;;14006:436;;;;:::o;21830:85::-;;;;;;;;;;;;;:::o;11087:193::-;11166:4;11183:13;11199:12;:10;:12::i;:::-;11183:28;;11222;11232:5;11239:2;11243:6;11222:9;:28::i;:::-;11268:4;11261:11;;;11087:193;;;;:::o;21524:49::-;;;;:::o;21581:51::-;;;;:::o;21763:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;26360:238::-;2120:13;:11;:13::i;:::-;26485:8:::1;26453:40;;:19;:28;26473:7;26453:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;26445:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26582:8;26551:19;:28;26571:7;26551:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26360:238:::0;;:::o;26847:244::-;2120:13;:11;:13::i;:::-;26976:8:::1;26942:42;;:21;:30;26964:7;26942:30;;;;;;;;;;;;;;;;;;;;;;;;;:42;;::::0;26934:97:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27075:8;27042:21;:30;27064:7;27042:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;26847:244:::0;;:::o;26606:233::-;2120:13;:11;:13::i;:::-;26721:9:::1;26717:115;26740:8;:15;26736:1;:19;26717:115;;;26812:8;26777:19;:32;26797:8;26806:1;26797:11;;;;;;;;:::i;:::-;;;;;;;;26777:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;26757:3;;;;;:::i;:::-;;;;26717:115;;;;26606:233:::0;;:::o;27099:237::-;2120:13;:11;:13::i;:::-;27216:9:::1;27212:117;27235:8;:15;27231:1;:19;27212:117;;;27309:8;27272:21;:34;27294:8;27303:1;27294:11;;;;;;;;:::i;:::-;;;;;;;;27272:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;27252:3;;;;;:::i;:::-;;;;27212:117;;;;27099:237:::0;;:::o;21298:32::-;;;;;;;;;;;;;:::o;11343:151::-;11432:7;11459:11;:18;11471:5;11459:18;;;;;;;;;;;;;;;:27;11478:7;11459:27;;;;;;;;;;;;;;;;11452:34;;11343:151;;;;:::o;21702:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;27848:170::-;2120:13;:11;:13::i;:::-;27936:12:::1;27926:6;:22;;27918:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28004:6;27990:11;:20;;;;27848:170:::0;:::o;3133:201::-;2120:13;:11;:13::i;:::-;3242:1:::1;3222:22;;:8;:22;;::::0;3214:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3298:28;3317:8;3298:18;:28::i;:::-;3133:201:::0;:::o;2399:132::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2399:132::o;28836:472::-;28902:21;28940:1;28926:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28902:40;;28971:4;28953;28958:1;28953:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28997:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28987:4;28992:1;28987:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29030:62;29047:4;29062:15;;;;;;;;;;;29080:11;29030:8;:62::i;:::-;29103:15;;;;;;;;;;;:66;;;29184:11;29210:1;29227:4;29254;29274:15;29103:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28891:417;28836:472;:::o;785:98::-;838:7;865:10;858:17;;785:98;:::o;17999:346::-;18118:1;18101:19;;:5;:19;;;18093:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18199:1;18180:21;;:7;:21;;;18172:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18283:6;18253:11;:18;18265:5;18253:18;;;;;;;;;;;;;;;:27;18272:7;18253:27;;;;;;;;;;;;;;;:36;;;;18321:7;18305:32;;18314:5;18305:32;;;18330:6;18305:32;;;;;;:::i;:::-;;;;;;;;17999:346;;;:::o;18636:419::-;18737:24;18764:25;18774:5;18781:7;18764:9;:25::i;:::-;18737:52;;18824:17;18804:16;:37;18800:248;;18886:6;18866:16;:26;;18858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18970:51;18979:5;18986:7;19014:6;18995:16;:25;18970:8;:51::i;:::-;18800:248;18726:329;18636:419;;;:::o;23874:1971::-;24022:1;24006:18;;:4;:18;;;23998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24099:1;24085:16;;:2;:16;;;24077:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24167:1;24157:6;:11;24154:92;;24185:28;24201:4;24207:2;24211:1;24185:15;:28::i;:::-;24228:7;;24154:92;24270:7;:5;:7::i;:::-;24262:15;;:4;:15;;;;:32;;;;;24287:7;:5;:7::i;:::-;24281:13;;:2;:13;;;;24262:32;24258:486;;;24315:21;:27;24337:4;24315:27;;;;;;;;;;;;;;;;;;;;;;;;;24314:28;:58;;;;;24347:21;:25;24369:2;24347:25;;;;;;;;;;;;;;;;;;;;;;;;;24346:26;24314:58;24311:422;;;24401:12;;;;;;;;;;;24393:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24484:11;;24474:6;:21;;24466:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24572:13;;;;;;;;;;;24566:19;;:2;:19;;;24562:156;;24643:15;;24634:6;24618:13;24628:2;24618:9;:13::i;:::-;:22;;;;:::i;:::-;:40;24610:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24562:156;24311:422;24258:486;24756:24;24811:21;;24783:24;24801:4;24783:9;:24::i;:::-;:49;;24756:76;;24848:19;:45;;;;;24885:8;;;;;;;;;;;24884:9;24848:45;:94;;;;;24911:25;:31;24937:4;24911:31;;;;;;;;;;;;;;;;;;;;;;;;;24910:32;24848:94;:126;;;;;24967:7;:5;:7::i;:::-;24959:15;;:4;:15;;;;24848:126;:156;;;;;24997:7;:5;:7::i;:::-;24991:13;;:2;:13;;;;24848:156;24844:229;;;25041:20;:18;:20::i;:::-;24844:229;25086:12;25102:8;;;;;;;;;;;25101:9;25086:24;;25124:19;:25;25144:4;25124:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25153:19;:23;25173:2;25153:23;;;;;;;;;;;;;;;;;;;;;;;;;25124:52;25121:99;;;25203:5;25193:15;;25121:99;25239:7;25235:545;;;25267:25;:29;25293:2;25267:29;;;;;;;;;;;;;;;;;;;;;;;;;25263:506;;;25318:20;25369:3;25350:16;;25341:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;25318:54;;25409:12;25400:6;:21;;;;:::i;:::-;25391:30;;25440:50;25456:4;25470;25477:12;25440:15;:50::i;:::-;25298:208;25263:506;;;25529:25;:31;25555:4;25529:31;;;;;;;;;;;;;;;;;;;;;;;;;25525:244;;;25582:20;25632:3;25614:15;;25605:6;:24;;;;:::i;:::-;:30;;;;:::i;:::-;25582:53;;25672:12;25663:6;:21;;;;:::i;:::-;25654:30;;25703:50;25719:4;25733;25740:12;25703:15;:50::i;:::-;25562:207;25525:244;25263:506;25235:545;25804:33;25820:4;25826:2;25830:6;25804:15;:33::i;:::-;23987:1858;;23874:1971;;;;:::o;3494:191::-;3568:16;3587:6;;;;;;;;;;;3568:25;;3613:8;3604:6;;:17;;;;;;;;;;;;;;;;;;3668:8;3637:40;;3658:8;3637:40;;;;;;;;;;;;3557:128;3494:191;:::o;23616:250::-;23742:5;23707:40;;:25;:31;23733:4;23707:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;23699:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23853:5;23819:25;:31;23845:4;23819:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23616:250;;:::o;14912:806::-;15025:1;15009:18;;:4;:18;;;15001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15102:1;15088:16;;:2;:16;;;15080:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15157:38;15178:4;15184:2;15188:6;15157:20;:38::i;:::-;15208:19;15230:9;:15;15240:4;15230:15;;;;;;;;;;;;;;;;15208:37;;15279:6;15264:11;:21;;15256:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15396:6;15382:11;:20;15364:9;:15;15374:4;15364:15;;;;;;;;;;;;;;;:38;;;;15599:6;15582:9;:13;15592:2;15582:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15649:2;15634:26;;15643:4;15634:26;;;15653:6;15634:26;;;;;;:::i;:::-;;;;;;;;15673:37;15693:4;15699:2;15703:6;15673:19;:37::i;:::-;14990:728;14912:806;;;:::o;19655:91::-;;;;:::o;20350:90::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:152::-;4203:9;4236:37;4267:5;4236:37;:::i;:::-;4223:50;;4127:152;;;:::o;4285:183::-;4398:63;4455:5;4398:63;:::i;:::-;4393:3;4386:76;4285:183;;:::o;4474:274::-;4593:4;4631:2;4620:9;4616:18;4608:26;;4644:97;4738:1;4727:9;4723:17;4714:6;4644:97;:::i;:::-;4474:274;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:86::-;5766:7;5806:4;5799:5;5795:16;5784:27;;5731:86;;;:::o;5823:112::-;5906:22;5922:5;5906:22;:::i;:::-;5901:3;5894:35;5823:112;;:::o;5941:214::-;6030:4;6068:2;6057:9;6053:18;6045:26;;6081:67;6145:1;6134:9;6130:17;6121:6;6081:67;:::i;:::-;5941:214;;;;:::o;6161:118::-;6248:24;6266:5;6248:24;:::i;:::-;6243:3;6236:37;6161:118;;:::o;6285:222::-;6378:4;6416:2;6405:9;6401:18;6393:26;;6429:71;6497:1;6486:9;6482:17;6473:6;6429:71;:::i;:::-;6285:222;;;;:::o;6513:329::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:104::-;6893:7;6922:24;6940:5;6922:24;:::i;:::-;6911:35;;6848:104;;;:::o;6958:138::-;7039:32;7065:5;7039:32;:::i;:::-;7032:5;7029:43;7019:71;;7086:1;7083;7076:12;7019:71;6958:138;:::o;7102:155::-;7156:5;7194:6;7181:20;7172:29;;7210:41;7245:5;7210:41;:::i;:::-;7102:155;;;;:::o;7263:345::-;7330:6;7379:2;7367:9;7358:7;7354:23;7350:32;7347:119;;;7385:79;;:::i;:::-;7347:119;7505:1;7530:61;7583:7;7574:6;7563:9;7559:22;7530:61;:::i;:::-;7520:71;;7476:125;7263:345;;;;:::o;7614:116::-;7684:21;7699:5;7684:21;:::i;:::-;7677:5;7674:32;7664:60;;7720:1;7717;7710:12;7664:60;7614:116;:::o;7736:133::-;7779:5;7817:6;7804:20;7795:29;;7833:30;7857:5;7833:30;:::i;:::-;7736:133;;;;:::o;7875:468::-;7940:6;7948;7997:2;7985:9;7976:7;7972:23;7968:32;7965:119;;;8003:79;;:::i;:::-;7965:119;8123:1;8148:53;8193:7;8184:6;8173:9;8169:22;8148:53;:::i;:::-;8138:63;;8094:117;8250:2;8276:50;8318:7;8309:6;8298:9;8294:22;8276:50;:::i;:::-;8266:60;;8221:115;7875:468;;;;;:::o;8349:117::-;8458:1;8455;8448:12;8472:180;8520:77;8517:1;8510:88;8617:4;8614:1;8607:15;8641:4;8638:1;8631:15;8658:281;8741:27;8763:4;8741:27;:::i;:::-;8733:6;8729:40;8871:6;8859:10;8856:22;8835:18;8823:10;8820:34;8817:62;8814:88;;;8882:18;;:::i;:::-;8814:88;8922:10;8918:2;8911:22;8701:238;8658:281;;:::o;8945:129::-;8979:6;9006:20;;:::i;:::-;8996:30;;9035:33;9063:4;9055:6;9035:33;:::i;:::-;8945:129;;;:::o;9080:311::-;9157:4;9247:18;9239:6;9236:30;9233:56;;;9269:18;;:::i;:::-;9233:56;9319:4;9311:6;9307:17;9299:25;;9379:4;9373;9369:15;9361:23;;9080:311;;;:::o;9397:117::-;9506:1;9503;9496:12;9537:710;9633:5;9658:81;9674:64;9731:6;9674:64;:::i;:::-;9658:81;:::i;:::-;9649:90;;9759:5;9788:6;9781:5;9774:21;9822:4;9815:5;9811:16;9804:23;;9875:4;9867:6;9863:17;9855:6;9851:30;9904:3;9896:6;9893:15;9890:122;;;9923:79;;:::i;:::-;9890:122;10038:6;10021:220;10055:6;10050:3;10047:15;10021:220;;;10130:3;10159:37;10192:3;10180:10;10159:37;:::i;:::-;10154:3;10147:50;10226:4;10221:3;10217:14;10210:21;;10097:144;10081:4;10076:3;10072:14;10065:21;;10021:220;;;10025:21;9639:608;;9537:710;;;;;:::o;10270:370::-;10341:5;10390:3;10383:4;10375:6;10371:17;10367:27;10357:122;;10398:79;;:::i;:::-;10357:122;10515:6;10502:20;10540:94;10630:3;10622:6;10615:4;10607:6;10603:17;10540:94;:::i;:::-;10531:103;;10347:293;10270:370;;;;:::o;10646:678::-;10736:6;10744;10793:2;10781:9;10772:7;10768:23;10764:32;10761:119;;;10799:79;;:::i;:::-;10761:119;10947:1;10936:9;10932:17;10919:31;10977:18;10969:6;10966:30;10963:117;;;10999:79;;:::i;:::-;10963:117;11104:78;11174:7;11165:6;11154:9;11150:22;11104:78;:::i;:::-;11094:88;;10890:302;11231:2;11257:50;11299:7;11290:6;11279:9;11275:22;11257:50;:::i;:::-;11247:60;;11202:115;10646:678;;;;;:::o;11330:474::-;11398:6;11406;11455:2;11443:9;11434:7;11430:23;11426:32;11423:119;;;11461:79;;:::i;:::-;11423:119;11581:1;11606:53;11651:7;11642:6;11631:9;11627:22;11606:53;:::i;:::-;11596:63;;11552:117;11708:2;11734:53;11779:7;11770:6;11759:9;11755:22;11734:53;:::i;:::-;11724:63;;11679:118;11330:474;;;;;:::o;11810:226::-;11950:34;11946:1;11938:6;11934:14;11927:58;12019:9;12014:2;12006:6;12002:15;11995:34;11810:226;:::o;12042:366::-;12184:3;12205:67;12269:2;12264:3;12205:67;:::i;:::-;12198:74;;12281:93;12370:3;12281:93;:::i;:::-;12399:2;12394:3;12390:12;12383:19;;12042:366;;;:::o;12414:419::-;12580:4;12618:2;12607:9;12603:18;12595:26;;12667:9;12661:4;12657:20;12653:1;12642:9;12638:17;12631:47;12695:131;12821:4;12695:131;:::i;:::-;12687:139;;12414:419;;;:::o;12839:180::-;12887:77;12884:1;12877:88;12984:4;12981:1;12974:15;13008:4;13005:1;12998:15;13025:320;13069:6;13106:1;13100:4;13096:12;13086:22;;13153:1;13147:4;13143:12;13174:18;13164:81;;13230:4;13222:6;13218:17;13208:27;;13164:81;13292:2;13284:6;13281:14;13261:18;13258:38;13255:84;;13311:18;;:::i;:::-;13255:84;13076:269;13025:320;;;:::o;13351:147::-;13452:11;13489:3;13474:18;;13351:147;;;;:::o;13504:114::-;;:::o;13624:398::-;13783:3;13804:83;13885:1;13880:3;13804:83;:::i;:::-;13797:90;;13896:93;13985:3;13896:93;:::i;:::-;14014:1;14009:3;14005:11;13998:18;;13624:398;;;:::o;14028:379::-;14212:3;14234:147;14377:3;14234:147;:::i;:::-;14227:154;;14398:3;14391:10;;14028:379;;;:::o;14413:241::-;14553:34;14549:1;14541:6;14537:14;14530:58;14622:24;14617:2;14609:6;14605:15;14598:49;14413:241;:::o;14660:366::-;14802:3;14823:67;14887:2;14882:3;14823:67;:::i;:::-;14816:74;;14899:93;14988:3;14899:93;:::i;:::-;15017:2;15012:3;15008:12;15001:19;;14660:366;;;:::o;15032:419::-;15198:4;15236:2;15225:9;15221:18;15213:26;;15285:9;15279:4;15275:20;15271:1;15260:9;15256:17;15249:47;15313:131;15439:4;15313:131;:::i;:::-;15305:139;;15032:419;;;:::o;15457:180::-;15597:32;15593:1;15585:6;15581:14;15574:56;15457:180;:::o;15643:366::-;15785:3;15806:67;15870:2;15865:3;15806:67;:::i;:::-;15799:74;;15882:93;15971:3;15882:93;:::i;:::-;16000:2;15995:3;15991:12;15984:19;;15643:366;;;:::o;16015:419::-;16181:4;16219:2;16208:9;16204:18;16196:26;;16268:9;16262:4;16258:20;16254:1;16243:9;16239:17;16232:47;16296:131;16422:4;16296:131;:::i;:::-;16288:139;;16015:419;;;:::o;16440:180::-;16488:77;16485:1;16478:88;16585:4;16582:1;16575:15;16609:4;16606:1;16599:15;16626:191;16666:3;16685:20;16703:1;16685:20;:::i;:::-;16680:25;;16719:20;16737:1;16719:20;:::i;:::-;16714:25;;16762:1;16759;16755:9;16748:16;;16783:3;16780:1;16777:10;16774:36;;;16790:18;;:::i;:::-;16774:36;16626:191;;;;:::o;16823:222::-;16963:34;16959:1;16951:6;16947:14;16940:58;17032:5;17027:2;17019:6;17015:15;17008:30;16823:222;:::o;17051:366::-;17193:3;17214:67;17278:2;17273:3;17214:67;:::i;:::-;17207:74;;17290:93;17379:3;17290:93;:::i;:::-;17408:2;17403:3;17399:12;17392:19;;17051:366;;;:::o;17423:419::-;17589:4;17627:2;17616:9;17612:18;17604:26;;17676:9;17670:4;17666:20;17662:1;17651:9;17647:17;17640:47;17704:131;17830:4;17704:131;:::i;:::-;17696:139;;17423:419;;;:::o;17848:143::-;17905:5;17936:6;17930:13;17921:22;;17952:33;17979:5;17952:33;:::i;:::-;17848:143;;;;:::o;17997:351::-;18067:6;18116:2;18104:9;18095:7;18091:23;18087:32;18084:119;;;18122:79;;:::i;:::-;18084:119;18242:1;18267:64;18323:7;18314:6;18303:9;18299:22;18267:64;:::i;:::-;18257:74;;18213:128;17997:351;;;;:::o;18354:332::-;18475:4;18513:2;18502:9;18498:18;18490:26;;18526:71;18594:1;18583:9;18579:17;18570:6;18526:71;:::i;:::-;18607:72;18675:2;18664:9;18660:18;18651:6;18607:72;:::i;:::-;18354:332;;;;;:::o;18692:227::-;18832:34;18828:1;18820:6;18816:14;18809:58;18901:10;18896:2;18888:6;18884:15;18877:35;18692:227;:::o;18925:366::-;19067:3;19088:67;19152:2;19147:3;19088:67;:::i;:::-;19081:74;;19164:93;19253:3;19164:93;:::i;:::-;19282:2;19277:3;19273:12;19266:19;;18925:366;;;:::o;19297:419::-;19463:4;19501:2;19490:9;19486:18;19478:26;;19550:9;19544:4;19540:20;19536:1;19525:9;19521:17;19514:47;19578:131;19704:4;19578:131;:::i;:::-;19570:139;;19297:419;;;:::o;19722:293::-;19862:34;19858:1;19850:6;19846:14;19839:58;19931:34;19926:2;19918:6;19914:15;19907:59;20000:7;19995:2;19987:6;19983:15;19976:32;19722:293;:::o;20021:366::-;20163:3;20184:67;20248:2;20243:3;20184:67;:::i;:::-;20177:74;;20260:93;20349:3;20260:93;:::i;:::-;20378:2;20373:3;20369:12;20362:19;;20021:366;;;:::o;20393:419::-;20559:4;20597:2;20586:9;20582:18;20574:26;;20646:9;20640:4;20636:20;20632:1;20621:9;20617:17;20610:47;20674:131;20800:4;20674:131;:::i;:::-;20666:139;;20393:419;;;:::o;20818:224::-;20958:34;20954:1;20946:6;20942:14;20935:58;21027:7;21022:2;21014:6;21010:15;21003:32;20818:224;:::o;21048:366::-;21190:3;21211:67;21275:2;21270:3;21211:67;:::i;:::-;21204:74;;21287:93;21376:3;21287:93;:::i;:::-;21405:2;21400:3;21396:12;21389:19;;21048:366;;;:::o;21420:419::-;21586:4;21624:2;21613:9;21609:18;21601:26;;21673:9;21667:4;21663:20;21659:1;21648:9;21644:17;21637:47;21701:131;21827:4;21701:131;:::i;:::-;21693:139;;21420:419;;;:::o;21845:229::-;21985:34;21981:1;21973:6;21969:14;21962:58;22054:12;22049:2;22041:6;22037:15;22030:37;21845:229;:::o;22080:366::-;22222:3;22243:67;22307:2;22302:3;22243:67;:::i;:::-;22236:74;;22319:93;22408:3;22319:93;:::i;:::-;22437:2;22432:3;22428:12;22421:19;;22080:366;;;:::o;22452:419::-;22618:4;22656:2;22645:9;22641:18;22633:26;;22705:9;22699:4;22695:20;22691:1;22680:9;22676:17;22669:47;22733:131;22859:4;22733:131;:::i;:::-;22725:139;;22452:419;;;:::o;22877:180::-;22925:77;22922:1;22915:88;23022:4;23019:1;23012:15;23046:4;23043:1;23036:15;23063:233;23102:3;23125:24;23143:5;23125:24;:::i;:::-;23116:33;;23171:66;23164:5;23161:77;23158:103;;23241:18;;:::i;:::-;23158:103;23288:1;23281:5;23277:13;23270:20;;23063:233;;;:::o;23302:176::-;23442:28;23438:1;23430:6;23426:14;23419:52;23302:176;:::o;23484:366::-;23626:3;23647:67;23711:2;23706:3;23647:67;:::i;:::-;23640:74;;23723:93;23812:3;23723:93;:::i;:::-;23841:2;23836:3;23832:12;23825:19;;23484:366;;;:::o;23856:419::-;24022:4;24060:2;24049:9;24045:18;24037:26;;24109:9;24103:4;24099:20;24095:1;24084:9;24080:17;24073:47;24137:131;24263:4;24137:131;:::i;:::-;24129:139;;23856:419;;;:::o;24281:225::-;24421:34;24417:1;24409:6;24405:14;24398:58;24490:8;24485:2;24477:6;24473:15;24466:33;24281:225;:::o;24512:366::-;24654:3;24675:67;24739:2;24734:3;24675:67;:::i;:::-;24668:74;;24751:93;24840:3;24751:93;:::i;:::-;24869:2;24864:3;24860:12;24853:19;;24512:366;;;:::o;24884:419::-;25050:4;25088:2;25077:9;25073:18;25065:26;;25137:9;25131:4;25127:20;25123:1;25112:9;25108:17;25101:47;25165:131;25291:4;25165:131;:::i;:::-;25157:139;;24884:419;;;:::o;25309:182::-;25449:34;25445:1;25437:6;25433:14;25426:58;25309:182;:::o;25497:366::-;25639:3;25660:67;25724:2;25719:3;25660:67;:::i;:::-;25653:74;;25736:93;25825:3;25736:93;:::i;:::-;25854:2;25849:3;25845:12;25838:19;;25497:366;;;:::o;25869:419::-;26035:4;26073:2;26062:9;26058:18;26050:26;;26122:9;26116:4;26112:20;26108:1;26097:9;26093:17;26086:47;26150:131;26276:4;26150:131;:::i;:::-;26142:139;;25869:419;;;:::o;26294:85::-;26339:7;26368:5;26357:16;;26294:85;;;:::o;26385:158::-;26443:9;26476:61;26494:42;26503:32;26529:5;26503:32;:::i;:::-;26494:42;:::i;:::-;26476:61;:::i;:::-;26463:74;;26385:158;;;:::o;26549:147::-;26644:45;26683:5;26644:45;:::i;:::-;26639:3;26632:58;26549:147;;:::o;26702:114::-;26769:6;26803:5;26797:12;26787:22;;26702:114;;;:::o;26822:184::-;26921:11;26955:6;26950:3;26943:19;26995:4;26990:3;26986:14;26971:29;;26822:184;;;;:::o;27012:132::-;27079:4;27102:3;27094:11;;27132:4;27127:3;27123:14;27115:22;;27012:132;;;:::o;27150:108::-;27227:24;27245:5;27227:24;:::i;:::-;27222:3;27215:37;27150:108;;:::o;27264:179::-;27333:10;27354:46;27396:3;27388:6;27354:46;:::i;:::-;27432:4;27427:3;27423:14;27409:28;;27264:179;;;;:::o;27449:113::-;27519:4;27551;27546:3;27542:14;27534:22;;27449:113;;;:::o;27598:732::-;27717:3;27746:54;27794:5;27746:54;:::i;:::-;27816:86;27895:6;27890:3;27816:86;:::i;:::-;27809:93;;27926:56;27976:5;27926:56;:::i;:::-;28005:7;28036:1;28021:284;28046:6;28043:1;28040:13;28021:284;;;28122:6;28116:13;28149:63;28208:3;28193:13;28149:63;:::i;:::-;28142:70;;28235:60;28288:6;28235:60;:::i;:::-;28225:70;;28081:224;28068:1;28065;28061:9;28056:14;;28021:284;;;28025:14;28321:3;28314:10;;27722:608;;;27598:732;;;;:::o;28336:831::-;28599:4;28637:3;28626:9;28622:19;28614:27;;28651:71;28719:1;28708:9;28704:17;28695:6;28651:71;:::i;:::-;28732:80;28808:2;28797:9;28793:18;28784:6;28732:80;:::i;:::-;28859:9;28853:4;28849:20;28844:2;28833:9;28829:18;28822:48;28887:108;28990:4;28981:6;28887:108;:::i;:::-;28879:116;;29005:72;29073:2;29062:9;29058:18;29049:6;29005:72;:::i;:::-;29087:73;29155:3;29144:9;29140:19;29131:6;29087:73;:::i;:::-;28336:831;;;;;;;;:::o;29173:223::-;29313:34;29309:1;29301:6;29297:14;29290:58;29382:6;29377:2;29369:6;29365:15;29358:31;29173:223;:::o;29402:366::-;29544:3;29565:67;29629:2;29624:3;29565:67;:::i;:::-;29558:74;;29641:93;29730:3;29641:93;:::i;:::-;29759:2;29754:3;29750:12;29743:19;;29402:366;;;:::o;29774:419::-;29940:4;29978:2;29967:9;29963:18;29955:26;;30027:9;30021:4;30017:20;30013:1;30002:9;29998:17;29991:47;30055:131;30181:4;30055:131;:::i;:::-;30047:139;;29774:419;;;:::o;30199:221::-;30339:34;30335:1;30327:6;30323:14;30316:58;30408:4;30403:2;30395:6;30391:15;30384:29;30199:221;:::o;30426:366::-;30568:3;30589:67;30653:2;30648:3;30589:67;:::i;:::-;30582:74;;30665:93;30754:3;30665:93;:::i;:::-;30783:2;30778:3;30774:12;30767:19;;30426:366;;;:::o;30798:419::-;30964:4;31002:2;30991:9;30987:18;30979:26;;31051:9;31045:4;31041:20;31037:1;31026:9;31022:17;31015:47;31079:131;31205:4;31079:131;:::i;:::-;31071:139;;30798:419;;;:::o;31223:179::-;31363:31;31359:1;31351:6;31347:14;31340:55;31223:179;:::o;31408:366::-;31550:3;31571:67;31635:2;31630:3;31571:67;:::i;:::-;31564:74;;31647:93;31736:3;31647:93;:::i;:::-;31765:2;31760:3;31756:12;31749:19;;31408:366;;;:::o;31780:419::-;31946:4;31984:2;31973:9;31969:18;31961:26;;32033:9;32027:4;32023:20;32019:1;32008:9;32004:17;31997:47;32061:131;32187:4;32061:131;:::i;:::-;32053:139;;31780:419;;;:::o;32205:224::-;32345:34;32341:1;32333:6;32329:14;32322:58;32414:7;32409:2;32401:6;32397:15;32390:32;32205:224;:::o;32435:366::-;32577:3;32598:67;32662:2;32657:3;32598:67;:::i;:::-;32591:74;;32674:93;32763:3;32674:93;:::i;:::-;32792:2;32787:3;32783:12;32776:19;;32435:366;;;:::o;32807:419::-;32973:4;33011:2;33000:9;32996:18;32988:26;;33060:9;33054:4;33050:20;33046:1;33035:9;33031:17;33024:47;33088:131;33214:4;33088:131;:::i;:::-;33080:139;;32807:419;;;:::o;33232:222::-;33372:34;33368:1;33360:6;33356:14;33349:58;33441:5;33436:2;33428:6;33424:15;33417:30;33232:222;:::o;33460:366::-;33602:3;33623:67;33687:2;33682:3;33623:67;:::i;:::-;33616:74;;33699:93;33788:3;33699:93;:::i;:::-;33817:2;33812:3;33808:12;33801:19;;33460:366;;;:::o;33832:419::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:179::-;34397:31;34393:1;34385:6;34381:14;34374:55;34257:179;:::o;34442:366::-;34584:3;34605:67;34669:2;34664:3;34605:67;:::i;:::-;34598:74;;34681:93;34770:3;34681:93;:::i;:::-;34799:2;34794:3;34790:12;34783:19;;34442:366;;;:::o;34814:419::-;34980:4;35018:2;35007:9;35003:18;34995:26;;35067:9;35061:4;35057:20;35053:1;35042:9;35038:17;35031:47;35095:131;35221:4;35095:131;:::i;:::-;35087:139;;34814:419;;;:::o;35239:230::-;35379:34;35375:1;35367:6;35363:14;35356:58;35448:13;35443:2;35435:6;35431:15;35424:38;35239:230;:::o;35475:366::-;35617:3;35638:67;35702:2;35697:3;35638:67;:::i;:::-;35631:74;;35714:93;35803:3;35714:93;:::i;:::-;35832:2;35827:3;35823:12;35816:19;;35475:366;;;:::o;35847:419::-;36013:4;36051:2;36040:9;36036:18;36028:26;;36100:9;36094:4;36090:20;36086:1;36075:9;36071:17;36064:47;36128:131;36254:4;36128:131;:::i;:::-;36120:139;;35847:419;;;:::o;36272:222::-;36412:34;36408:1;36400:6;36396:14;36389:58;36481:5;36476:2;36468:6;36464:15;36457:30;36272:222;:::o;36500:366::-;36642:3;36663:67;36727:2;36722:3;36663:67;:::i;:::-;36656:74;;36739:93;36828:3;36739:93;:::i;:::-;36857:2;36852:3;36848:12;36841:19;;36500:366;;;:::o;36872:419::-;37038:4;37076:2;37065:9;37061:18;37053:26;;37125:9;37119:4;37115:20;37111:1;37100:9;37096:17;37089:47;37153:131;37279:4;37153:131;:::i;:::-;37145:139;;36872:419;;;:::o;37297:410::-;37337:7;37360:20;37378:1;37360:20;:::i;:::-;37355:25;;37394:20;37412:1;37394:20;:::i;:::-;37389:25;;37449:1;37446;37442:9;37471:30;37489:11;37471:30;:::i;:::-;37460:41;;37650:1;37641:7;37637:15;37634:1;37631:22;37611:1;37604:9;37584:83;37561:139;;37680:18;;:::i;:::-;37561:139;37345:362;37297:410;;;;:::o;37713:180::-;37761:77;37758:1;37751:88;37858:4;37855:1;37848:15;37882:4;37879:1;37872:15;37899:185;37939:1;37956:20;37974:1;37956:20;:::i;:::-;37951:25;;37990:20;38008:1;37990:20;:::i;:::-;37985:25;;38029:1;38019:35;;38034:18;;:::i;:::-;38019:35;38076:1;38073;38069:9;38064:14;;37899:185;;;;:::o;38090:194::-;38130:4;38150:20;38168:1;38150:20;:::i;:::-;38145:25;;38184:20;38202:1;38184:20;:::i;:::-;38179:25;;38228:1;38225;38221:9;38213:17;;38252:1;38246:4;38243:11;38240:37;;;38257:18;;:::i;:::-;38240:37;38090:194;;;;:::o;38290:243::-;38430:34;38426:1;38418:6;38414:14;38407:58;38499:26;38494:2;38486:6;38482:15;38475:51;38290:243;:::o;38539:366::-;38681:3;38702:67;38766:2;38761:3;38702:67;:::i;:::-;38695:74;;38778:93;38867:3;38778:93;:::i;:::-;38896:2;38891:3;38887:12;38880:19;;38539:366;;;:::o;38911:419::-;39077:4;39115:2;39104:9;39100:18;39092:26;;39164:9;39158:4;39154:20;39150:1;39139:9;39135:17;39128:47;39192:131;39318:4;39192:131;:::i;:::-;39184:139;;38911:419;;;:::o;39336:225::-;39476:34;39472:1;39464:6;39460:14;39453:58;39545:8;39540:2;39532:6;39528:15;39521:33;39336:225;:::o;39567:366::-;39709:3;39730:67;39794:2;39789:3;39730:67;:::i;:::-;39723:74;;39806:93;39895:3;39806:93;:::i;:::-;39924:2;39919:3;39915:12;39908:19;;39567:366;;;:::o;39939:419::-;40105:4;40143:2;40132:9;40128:18;40120:26;;40192:9;40186:4;40182:20;40178:1;40167:9;40163:17;40156:47;40220:131;40346:4;40220:131;:::i;:::-;40212:139;;39939:419;;;:::o

Swarm Source

ipfs://22654cb58b40e01565e9e2adadfb8274ea22f1d802d11d8cf7983cdc6cdab575
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.